debugging code

This commit is contained in:
obscuren 2014-11-11 12:16:36 +01:00
parent 9509322ecd
commit 75ee3b3f08
7 changed files with 111 additions and 66 deletions

View File

@ -316,9 +316,9 @@ out:
if len(blocks) > 0 { if len(blocks) > 0 {
chainManager := self.eth.ChainManager() chainManager := self.eth.ChainManager()
// Test and import // Test and import
chain := chain.NewChain(blocks) bchain := chain.NewChain(blocks)
_, err := chainManager.TestChain(chain) _, err := chainManager.TestChain(bchain)
if err != nil { if err != nil && !chain.IsTDError(err) {
poollogger.Debugln(err) poollogger.Debugln(err)
self.Reset() self.Reset()
@ -330,7 +330,7 @@ out:
self.td = ethutil.Big0 self.td = ethutil.Big0
self.peer = nil self.peer = nil
} else { } else {
chainManager.InsertChain(chain) chainManager.InsertChain(bchain)
for _, block := range blocks { for _, block := range blocks {
self.Remove(block.Hash()) self.Remove(block.Hash())
} }

View File

@ -159,7 +159,9 @@ done:
txGas.Sub(txGas, st.gas) txGas.Sub(txGas, st.gas)
cumulative := new(big.Int).Set(totalUsedGas.Add(totalUsedGas, txGas)) cumulative := new(big.Int).Set(totalUsedGas.Add(totalUsedGas, txGas))
receipt := &Receipt{ethutil.CopyBytes(state.Root().([]byte)), cumulative, LogsBloom(state.Logs()).Bytes(), state.Logs()} bloom := ethutil.LeftPadBytes(LogsBloom(state.Logs()).Bytes(), 64)
receipt := &Receipt{ethutil.CopyBytes(state.Root()), cumulative, bloom, state.Logs()}
//fmt.Println(receipt)
// Notify all subscribers // Notify all subscribers
go self.eth.EventMux().Post(TxPostEvent{tx}) go self.eth.EventMux().Post(TxPostEvent{tx})
@ -213,13 +215,15 @@ func (sm *BlockManager) ProcessWithParent(block, parent *Block) (td *big.Int, me
if err != nil { if err != nil {
return return
} }
block.SetReceipts(receipts) //block.SetReceipts(receipts)
txSha := DeriveSha(block.transactions) /*
if bytes.Compare(txSha, block.TxSha) != 0 { txSha := DeriveSha(block.transactions)
err = fmt.Errorf("Error validating transaction sha. Received %x, got %x", block.TxSha, txSha) if bytes.Compare(txSha, block.TxSha) != 0 {
return err = fmt.Errorf("Error validating transaction sha. Received %x, got %x", block.TxSha, txSha)
} return
}
*/
receiptSha := DeriveSha(receipts) receiptSha := DeriveSha(receipts)
if bytes.Compare(receiptSha, block.ReceiptSha) != 0 { if bytes.Compare(receiptSha, block.ReceiptSha) != 0 {
@ -255,13 +259,18 @@ func (sm *BlockManager) ProcessWithParent(block, parent *Block) (td *big.Int, me
// Sync the current block's state to the database and cancelling out the deferred Undo // Sync the current block's state to the database and cancelling out the deferred Undo
state.Sync() state.Sync()
// TODO at this point we should also insert LOGS in to a database
sm.transState = state.Copy()
messages := state.Manifest().Messages messages := state.Manifest().Messages
state.Manifest().Reset() state.Manifest().Reset()
/*
sm.eth.ChainManager().SetTotalDifficulty(td)
sm.eth.ChainManager().add(block)
sm.eth.EventMux().Post(NewBlockEvent{block})
sm.eth.EventMux().Post(messages)
*/
sm.transState = state.Copy()
sm.eth.TxPool().RemoveSet(block.Transactions()) sm.eth.TxPool().RemoveSet(block.Transactions())
return td, messages, nil return td, messages, nil

View File

@ -337,6 +337,7 @@ func (self *ChainManager) InsertChain(chain *BlockChain) {
func (self *ChainManager) TestChain(chain *BlockChain) (td *big.Int, err error) { func (self *ChainManager) TestChain(chain *BlockChain) (td *big.Int, err error) {
self.workingChain = chain self.workingChain = chain
defer func() { self.workingChain = nil }()
for e := chain.Front(); e != nil; e = e.Next() { for e := chain.Front(); e != nil; e = e.Next() {
var ( var (

65
chain/receipt.go Normal file
View File

@ -0,0 +1,65 @@
package chain
import (
"bytes"
"fmt"
"math/big"
"github.com/ethereum/go-ethereum/ethutil"
"github.com/ethereum/go-ethereum/state"
)
type Receipt struct {
PostState []byte
CumulativeGasUsed *big.Int
Bloom []byte
logs state.Logs
}
func NewRecieptFromValue(val *ethutil.Value) *Receipt {
r := &Receipt{}
r.RlpValueDecode(val)
return r
}
func (self *Receipt) RlpValueDecode(decoder *ethutil.Value) {
self.PostState = decoder.Get(0).Bytes()
self.CumulativeGasUsed = decoder.Get(1).BigInt()
self.Bloom = decoder.Get(2).Bytes()
it := decoder.Get(3).NewIterator()
for it.Next() {
self.logs = append(self.logs, state.NewLogFromValue(it.Value()))
}
}
func (self *Receipt) RlpData() interface{} {
fmt.Println(self.logs.RlpData())
return []interface{}{self.PostState, self.CumulativeGasUsed, self.Bloom, self.logs.RlpData()}
}
func (self *Receipt) RlpEncode() []byte {
return ethutil.Encode(self.RlpData())
}
func (self *Receipt) Cmp(other *Receipt) bool {
if bytes.Compare(self.PostState, other.PostState) != 0 {
return false
}
return true
}
func (self *Receipt) String() string {
return fmt.Sprintf(`Receipt: %x
cumulative gas: %v
bloom: %x
logs: %v
rlp: %x`, self.PostState, self.CumulativeGasUsed, self.Bloom, self.logs, self.RlpEncode())
}
type Receipts []*Receipt
func (self Receipts) Len() int { return len(self) }
func (self Receipts) GetRlp(i int) []byte { return ethutil.Rlp(self[i]) }

View File

@ -1,7 +1,6 @@
package chain package chain
import ( import (
"bytes"
"fmt" "fmt"
"math/big" "math/big"
@ -201,52 +200,6 @@ func (tx *Transaction) String() string {
tx.s) tx.s)
} }
type Receipt struct {
PostState []byte
CumulativeGasUsed *big.Int
Bloom []byte
logs state.Logs
}
func NewRecieptFromValue(val *ethutil.Value) *Receipt {
r := &Receipt{}
r.RlpValueDecode(val)
return r
}
func (self *Receipt) RlpValueDecode(decoder *ethutil.Value) {
self.PostState = decoder.Get(0).Bytes()
self.CumulativeGasUsed = decoder.Get(1).BigInt()
self.Bloom = decoder.Get(2).Bytes()
it := decoder.Get(3).NewIterator()
for it.Next() {
self.logs = append(self.logs, state.NewLogFromValue(it.Value()))
}
}
func (self *Receipt) RlpData() interface{} {
return []interface{}{self.PostState, self.CumulativeGasUsed, self.Bloom, self.logs.RlpData()}
}
func (self *Receipt) RlpEncode() []byte {
return ethutil.Encode(self.RlpData())
}
func (self *Receipt) Cmp(other *Receipt) bool {
if bytes.Compare(self.PostState, other.PostState) != 0 {
return false
}
return true
}
type Receipts []*Receipt
func (self Receipts) Len() int { return len(self) }
func (self Receipts) GetRlp(i int) []byte { return ethutil.Rlp(self[i]) }
// Transaction slice type for basic sorting // Transaction slice type for basic sorting
type Transactions []*Transaction type Transactions []*Transaction

View File

@ -1,6 +1,11 @@
package state package state
import "github.com/ethereum/go-ethereum/ethutil" import (
"fmt"
"strings"
"github.com/ethereum/go-ethereum/ethutil"
)
type Log struct { type Log struct {
Address []byte Address []byte
@ -26,6 +31,10 @@ func (self Log) RlpData() interface{} {
return []interface{}{self.Address, ethutil.ByteSliceToInterface(self.Topics), self.Data} return []interface{}{self.Address, ethutil.ByteSliceToInterface(self.Topics), self.Data}
} }
func (self Log) String() string {
return fmt.Sprintf(`log: %x %x %x`, self.Address, self.Topics, self.Data)
}
type Logs []Log type Logs []Log
func (self Logs) RlpData() interface{} { func (self Logs) RlpData() interface{} {
@ -36,3 +45,11 @@ func (self Logs) RlpData() interface{} {
return data return data
} }
func (self Logs) String() string {
var logs []string
for _, log := range self {
logs = append(logs, log.String())
}
return "[ " + strings.Join(logs, ", ") + " ]"
}

View File

@ -62,7 +62,7 @@ func (self *State) Refund(addr []byte, gas, price *big.Int) {
self.refund[string(addr)] = new(big.Int) self.refund[string(addr)] = new(big.Int)
} }
self.refund[string(addr)] = new(big.Int).Add(self.refund[string(addr)], amount) self.refund[string(addr)].Add(self.refund[string(addr)], amount)
} }
func (self *State) AddBalance(addr []byte, amount *big.Int) { func (self *State) AddBalance(addr []byte, amount *big.Int) {
@ -237,8 +237,8 @@ func (self *State) Set(state *State) {
self.logs = state.logs self.logs = state.logs
} }
func (s *State) Root() interface{} { func (s *State) Root() []byte {
return s.Trie.Root return s.Trie.GetRoot()
} }
// Resets the trie and all siblings // Resets the trie and all siblings