Browse Source

debugging code

obscuren 11 năm trước cách đây
mục cha
commit
75ee3b3f08
7 tập tin đã thay đổi với 111 bổ sung66 xóa
  1. 4 4
      block_pool.go
  2. 20 11
      chain/block_manager.go
  3. 1 0
      chain/chain_manager.go
  4. 65 0
      chain/receipt.go
  5. 0 47
      chain/transaction.go
  6. 18 1
      state/log.go
  7. 3 3
      state/state.go

+ 4 - 4
block_pool.go

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

+ 20 - 11
chain/block_manager.go

@@ -159,7 +159,9 @@ done:
 
 		txGas.Sub(txGas, st.gas)
 		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
 		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 {
 		return
 	}
-	block.SetReceipts(receipts)
+	//block.SetReceipts(receipts)
 
-	txSha := DeriveSha(block.transactions)
-	if bytes.Compare(txSha, block.TxSha) != 0 {
-		err = fmt.Errorf("Error validating transaction sha. Received %x, got %x", block.TxSha, txSha)
-		return
-	}
+	/*
+		txSha := DeriveSha(block.transactions)
+		if bytes.Compare(txSha, block.TxSha) != 0 {
+			err = fmt.Errorf("Error validating transaction sha. Received %x, got %x", block.TxSha, txSha)
+			return
+		}
+	*/
 
 	receiptSha := DeriveSha(receipts)
 	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
 		state.Sync()
 
-		// TODO at this point we should also insert LOGS in to a database
-
-		sm.transState = state.Copy()
-
 		messages := state.Manifest().Messages
 		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())
 
 		return td, messages, nil

+ 1 - 0
chain/chain_manager.go

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

+ 65 - 0
chain/receipt.go

@@ -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]) }

+ 0 - 47
chain/transaction.go

@@ -1,7 +1,6 @@
 package chain
 
 import (
-	"bytes"
 	"fmt"
 	"math/big"
 
@@ -201,52 +200,6 @@ func (tx *Transaction) String() string {
 		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
 type Transactions []*Transaction
 

+ 18 - 1
state/log.go

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

+ 3 - 3
state/state.go

@@ -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).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) {
@@ -237,8 +237,8 @@ func (self *State) Set(state *State) {
 	self.logs = state.logs
 }
 
-func (s *State) Root() interface{} {
-	return s.Trie.Root
+func (s *State) Root() []byte {
+	return s.Trie.GetRoot()
 }
 
 // Resets the trie and all siblings