From b417766b36f46316cbae6fa42815f1a519e5f733 Mon Sep 17 00:00:00 2001 From: obscuren Date: Wed, 8 Oct 2014 11:59:44 +0200 Subject: [PATCH] Minor tweaks for poc7 --- block_pool.go | 4 ++-- ethchain/block_chain.go | 34 ++++++++++++++++++++++------------ ethchain/state_transition.go | 9 --------- ethchain/types.go | 18 ++++++++---------- ethpipe/js_pipe.go | 2 ++ ethpipe/pipe.go | 2 +- ethstate/state.go | 14 ++++++++------ 7 files changed, 43 insertions(+), 40 deletions(-) diff --git a/block_pool.go b/block_pool.go index 15d8ba3b9b..ea1f3633a1 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 467c540583..113e313ac2 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 fbb729950b..28cb66105e 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 45486b06c8..ccd5b79753 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 24a553dad2..17c2261c72 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 f57b56ea0b..1e1a2b835d 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 0e87659fc7..23b106e346 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 + } } }