Minor tweaks for poc7

pull/150/head
obscuren 10 years ago
parent 0015ce1e35
commit b417766b36
  1. 4
      block_pool.go
  2. 32
      ethchain/block_chain.go
  3. 9
      ethchain/state_transition.go
  4. 6
      ethchain/types.go
  5. 2
      ethpipe/js_pipe.go
  6. 2
      ethpipe/pipe.go
  7. 6
      ethstate/state.go

@ -86,7 +86,7 @@ func (self *BlockPool) Blocks() (blocks ethchain.Blocks) {
func (self *BlockPool) FetchHashes(peer *Peer) bool { func (self *BlockPool) FetchHashes(peer *Peer) bool {
highestTd := self.eth.HighestTDPeer() 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 { if self.peer != peer {
poollogger.Debugf("Found better suitable peer (%v vs %v)\n", self.td, peer.td) 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 peer.doneFetchingHashes = false
const amount = 256 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)})) peer.QueueMessage(ethwire.NewMessage(ethwire.MsgGetBlockHashesTy, []interface{}{peer.lastReceivedHash, uint32(amount)}))
} }

@ -78,6 +78,22 @@ func (bc *BlockChain) NewBlock(coinbase []byte) *Block {
return 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 { func (bc *BlockChain) HasBlock(hash []byte) bool {
data, _ := ethutil.Config.Db.Get(hash) data, _ := ethutil.Config.Db.Get(hash)
return len(data) != 0 return len(data) != 0
@ -149,27 +165,21 @@ func AddTestNetFunds(block *Block) {
} }
func (bc *BlockChain) setLastBlock() { func (bc *BlockChain) setLastBlock() {
data, _ := ethutil.Config.Db.Get([]byte("LastBlock"))
if len(data) != 0 {
// Prep genesis // Prep genesis
AddTestNetFunds(bc.genesisBlock) AddTestNetFunds(bc.genesisBlock)
data, _ := ethutil.Config.Db.Get([]byte("LastBlock"))
if len(data) != 0 {
block := NewBlockFromBytes(data) block := NewBlockFromBytes(data)
bc.CurrentBlock = block bc.CurrentBlock = block
bc.LastBlockHash = block.Hash() bc.LastBlockHash = block.Hash()
bc.LastBlockNumber = block.Number.Uint64() bc.LastBlockNumber = block.Number.Uint64()
} 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
}
// Set the last know difficulty (might be 0x0 as initial value, Genesis) // Set the last know difficulty (might be 0x0 as initial value, Genesis)
bc.TD = ethutil.BigD(ethutil.Config.Db.LastKnownTD()) bc.TD = ethutil.BigD(ethutil.Config.Db.LastKnownTD())
} else {
bc.Reset()
}
chainlogger.Infof("Last block (#%d) %x\n", bc.LastBlockNumber, bc.CurrentBlock.Hash()) chainlogger.Infof("Last block (#%d) %x\n", bc.LastBlockNumber, bc.CurrentBlock.Hash())
} }

@ -276,15 +276,6 @@ func (self *StateTransition) Eval(msg *ethstate.Message, script []byte, context
ret, _, err = callerClosure.Call(vm, self.tx.Data) 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 return
} }

@ -147,8 +147,7 @@ const (
CREATE = 0xf0 CREATE = 0xf0
CALL = 0xf1 CALL = 0xf1
RETURN = 0xf2 RETURN = 0xf2
POST = 0xf3 CALLCODE = 0xf3
CALLSTATELESS = 0xf4
// 0x70 range - other // 0x70 range - other
LOG = 0xfe // XXX Unofficial LOG = 0xfe // XXX Unofficial
@ -296,8 +295,7 @@ var opCodeToString = map[OpCode]string{
CREATE: "CREATE", CREATE: "CREATE",
CALL: "CALL", CALL: "CALL",
RETURN: "RETURN", RETURN: "RETURN",
POST: "POST", CALLCODE: "CALLCODE",
CALLSTATELESS: "CALLSTATELESS",
// 0x70 range - other // 0x70 range - other
LOG: "LOG", LOG: "LOG",

@ -3,6 +3,7 @@ package ethpipe
import ( import (
"bytes" "bytes"
"encoding/json" "encoding/json"
"fmt"
"sync/atomic" "sync/atomic"
"github.com/ethereum/eth-go/ethchain" "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 { func (self *JSPipe) StorageAt(addr, storageAddr string) string {
fmt.Println("get", addr, storageAddr)
storage := self.World().SafeGet(ethutil.Hex2Bytes(addr)).Storage(ethutil.Hex2Bytes(storageAddr)) storage := self.World().SafeGet(ethutil.Hex2Bytes(addr)).Storage(ethutil.Hex2Bytes(storageAddr))
return ethutil.Bytes2Hex(storage.Bytes()) return ethutil.Bytes2Hex(storage.Bytes())

@ -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 := ethvm.New(NewEnv(self.Vm.State, block, value.BigInt(), initiator.Address()))
vm.Verbose = true 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) ret, err := msg.Exec(object.Address(), initiator)
fmt.Println("returned from call", ret, err) fmt.Println("returned from call", ret, err)

@ -181,8 +181,6 @@ func (s *State) Reset() {
func (s *State) Sync() { func (s *State) Sync() {
// Sync all nested states // Sync all nested states
for _, stateObject := range s.stateObjects { for _, stateObject := range s.stateObjects {
//s.UpdateStateObject(stateObject)
if stateObject.State == nil { if stateObject.State == nil {
continue continue
} }
@ -200,9 +198,11 @@ func (self *State) Empty() {
} }
func (self *State) Update() { func (self *State) Update() {
var deleted bool
for _, stateObject := range self.stateObjects { for _, stateObject := range self.stateObjects {
if stateObject.remove { if stateObject.remove {
self.DeleteStateObject(stateObject) self.DeleteStateObject(stateObject)
deleted = true
} else { } else {
stateObject.Sync() stateObject.Sync()
@ -211,12 +211,14 @@ func (self *State) Update() {
} }
// FIXME trie delete is broken // FIXME trie delete is broken
if deleted {
valid, t2 := ethtrie.ParanoiaCheck(self.Trie) valid, t2 := ethtrie.ParanoiaCheck(self.Trie)
if !valid { if !valid {
statelogger.Infof("Warn: PARANOIA: Different state root during copy %x vs %x\n", self.Trie.Root, t2.Root) statelogger.Infof("Warn: PARANOIA: Different state root during copy %x vs %x\n", self.Trie.Root, t2.Root)
self.Trie = t2 self.Trie = t2
} }
}
} }
func (self *State) Manifest() *Manifest { func (self *State) Manifest() *Manifest {

Loading…
Cancel
Save