aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--block_pool.go4
-rw-r--r--ethchain/block_chain.go34
-rw-r--r--ethchain/state_transition.go9
-rw-r--r--ethchain/types.go18
-rw-r--r--ethpipe/js_pipe.go2
-rw-r--r--ethpipe/pipe.go2
-rw-r--r--ethstate/state.go14
7 files changed, 43 insertions, 40 deletions
diff --git a/block_pool.go b/block_pool.go
index 15d8ba3b9..ea1f3633a 100644
--- a/block_pool.go
+++ b/block_pool.go
@@ -86,7 +86,7 @@ func (self *BlockPool) Blocks() (blocks ethchain.Blocks) {
func (self *BlockPool) FetchHashes(peer *Peer) bool {
highestTd := self.eth.HighestTDPeer()
- if (self.peer == nil && peer.td.Cmp(highestTd) >= 0) || (self.peer != nil && peer.td.Cmp(self.peer.td) >= 0) || self.peer == peer {
+ if (self.peer == nil && peer.td.Cmp(highestTd) >= 0) || (self.peer != nil && peer.td.Cmp(self.peer.td) > 0) || self.peer == peer {
if self.peer != peer {
poollogger.Debugf("Found better suitable peer (%v vs %v)\n", self.td, peer.td)
@@ -102,7 +102,7 @@ func (self *BlockPool) FetchHashes(peer *Peer) bool {
peer.doneFetchingHashes = false
const amount = 256
- peerlogger.Debugf("Fetching hashes (%d)\n", amount)
+ peerlogger.Debugf("Fetching hashes (%d) %x...\n", amount, peer.lastReceivedHash[0:4])
peer.QueueMessage(ethwire.NewMessage(ethwire.MsgGetBlockHashesTy, []interface{}{peer.lastReceivedHash, uint32(amount)}))
}
diff --git a/ethchain/block_chain.go b/ethchain/block_chain.go
index 467c54058..113e313ac 100644
--- a/ethchain/block_chain.go
+++ b/ethchain/block_chain.go
@@ -78,6 +78,22 @@ func (bc *BlockChain) NewBlock(coinbase []byte) *Block {
return block
}
+func (bc *BlockChain) Reset() {
+ AddTestNetFunds(bc.genesisBlock)
+
+ bc.genesisBlock.state.Trie.Sync()
+ // Prepare the genesis block
+ bc.Add(bc.genesisBlock)
+ fk := append([]byte("bloom"), bc.genesisBlock.Hash()...)
+ bc.Ethereum.Db().Put(fk, make([]byte, 255))
+ bc.CurrentBlock = bc.genesisBlock
+
+ bc.SetTotalDifficulty(ethutil.Big("0"))
+
+ // Set the last know difficulty (might be 0x0 as initial value, Genesis)
+ bc.TD = ethutil.BigD(ethutil.Config.Db.LastKnownTD())
+}
+
func (bc *BlockChain) HasBlock(hash []byte) bool {
data, _ := ethutil.Config.Db.Get(hash)
return len(data) != 0
@@ -149,28 +165,22 @@ func AddTestNetFunds(block *Block) {
}
func (bc *BlockChain) setLastBlock() {
- // Prep genesis
- AddTestNetFunds(bc.genesisBlock)
-
data, _ := ethutil.Config.Db.Get([]byte("LastBlock"))
if len(data) != 0 {
+ // Prep genesis
+ AddTestNetFunds(bc.genesisBlock)
+
block := NewBlockFromBytes(data)
bc.CurrentBlock = block
bc.LastBlockHash = block.Hash()
bc.LastBlockNumber = block.Number.Uint64()
+ // Set the last know difficulty (might be 0x0 as initial value, Genesis)
+ bc.TD = ethutil.BigD(ethutil.Config.Db.LastKnownTD())
} else {
- bc.genesisBlock.state.Trie.Sync()
- // Prepare the genesis block
- bc.Add(bc.genesisBlock)
- fk := append([]byte("bloom"), bc.genesisBlock.Hash()...)
- bc.Ethereum.Db().Put(fk, make([]byte, 255))
- bc.CurrentBlock = bc.genesisBlock
+ bc.Reset()
}
- // Set the last know difficulty (might be 0x0 as initial value, Genesis)
- bc.TD = ethutil.BigD(ethutil.Config.Db.LastKnownTD())
-
chainlogger.Infof("Last block (#%d) %x\n", bc.LastBlockNumber, bc.CurrentBlock.Hash())
}
diff --git a/ethchain/state_transition.go b/ethchain/state_transition.go
index fbb729950..28cb66105 100644
--- a/ethchain/state_transition.go
+++ b/ethchain/state_transition.go
@@ -276,15 +276,6 @@ func (self *StateTransition) Eval(msg *ethstate.Message, script []byte, context
ret, _, err = callerClosure.Call(vm, self.tx.Data)
- if err == nil {
- // Execute POSTs
- for e := vm.Queue().Front(); e != nil; e = e.Next() {
- msg := e.Value.(*ethvm.Message)
-
- msg.Exec(msg.Addr(), transactor)
- }
- }
-
return
}
diff --git a/ethchain/types.go b/ethchain/types.go
index 45486b06c..ccd5b7975 100644
--- a/ethchain/types.go
+++ b/ethchain/types.go
@@ -144,11 +144,10 @@ const (
SWAP16 = 0x9f
// 0xf0 range - closures
- CREATE = 0xf0
- CALL = 0xf1
- RETURN = 0xf2
- POST = 0xf3
- CALLSTATELESS = 0xf4
+ CREATE = 0xf0
+ CALL = 0xf1
+ RETURN = 0xf2
+ CALLCODE = 0xf3
// 0x70 range - other
LOG = 0xfe // XXX Unofficial
@@ -293,11 +292,10 @@ var opCodeToString = map[OpCode]string{
SWAP16: "SWAP16",
// 0xf0 range
- CREATE: "CREATE",
- CALL: "CALL",
- RETURN: "RETURN",
- POST: "POST",
- CALLSTATELESS: "CALLSTATELESS",
+ CREATE: "CREATE",
+ CALL: "CALL",
+ RETURN: "RETURN",
+ CALLCODE: "CALLCODE",
// 0x70 range - other
LOG: "LOG",
diff --git a/ethpipe/js_pipe.go b/ethpipe/js_pipe.go
index 24a553dad..17c2261c7 100644
--- a/ethpipe/js_pipe.go
+++ b/ethpipe/js_pipe.go
@@ -3,6 +3,7 @@ package ethpipe
import (
"bytes"
"encoding/json"
+ "fmt"
"sync/atomic"
"github.com/ethereum/eth-go/ethchain"
@@ -92,6 +93,7 @@ func (self *JSPipe) NumberToHuman(balance string) string {
}
func (self *JSPipe) StorageAt(addr, storageAddr string) string {
+ fmt.Println("get", addr, storageAddr)
storage := self.World().SafeGet(ethutil.Hex2Bytes(addr)).Storage(ethutil.Hex2Bytes(storageAddr))
return ethutil.Bytes2Hex(storage.Bytes())
diff --git a/ethpipe/pipe.go b/ethpipe/pipe.go
index f57b56ea0..1e1a2b835 100644
--- a/ethpipe/pipe.go
+++ b/ethpipe/pipe.go
@@ -61,7 +61,7 @@ func (self *Pipe) ExecuteObject(object *Object, data []byte, value, gas, price *
vm := ethvm.New(NewEnv(self.Vm.State, block, value.BigInt(), initiator.Address()))
vm.Verbose = true
- msg := ethvm.NewMessage(vm, object.Address(), data, gas.BigInt(), price.BigInt(), value.BigInt())
+ msg := ethvm.NewExecution(vm, object.Address(), data, gas.BigInt(), price.BigInt(), value.BigInt())
ret, err := msg.Exec(object.Address(), initiator)
fmt.Println("returned from call", ret, err)
diff --git a/ethstate/state.go b/ethstate/state.go
index 0e87659fc..23b106e34 100644
--- a/ethstate/state.go
+++ b/ethstate/state.go
@@ -181,8 +181,6 @@ func (s *State) Reset() {
func (s *State) Sync() {
// Sync all nested states
for _, stateObject := range s.stateObjects {
- //s.UpdateStateObject(stateObject)
-
if stateObject.State == nil {
continue
}
@@ -200,9 +198,11 @@ func (self *State) Empty() {
}
func (self *State) Update() {
+ var deleted bool
for _, stateObject := range self.stateObjects {
if stateObject.remove {
self.DeleteStateObject(stateObject)
+ deleted = true
} else {
stateObject.Sync()
@@ -211,11 +211,13 @@ func (self *State) Update() {
}
// FIXME trie delete is broken
- valid, t2 := ethtrie.ParanoiaCheck(self.Trie)
- if !valid {
- statelogger.Infof("Warn: PARANOIA: Different state root during copy %x vs %x\n", self.Trie.Root, t2.Root)
+ if deleted {
+ valid, t2 := ethtrie.ParanoiaCheck(self.Trie)
+ if !valid {
+ statelogger.Infof("Warn: PARANOIA: Different state root during copy %x vs %x\n", self.Trie.Root, t2.Root)
- self.Trie = t2
+ self.Trie = t2
+ }
}
}