From ee0a1bec6c3ce942e51265535961ac6a745d33eb Mon Sep 17 00:00:00 2001 From: obscuren Date: Tue, 3 Mar 2015 17:05:51 +0100 Subject: [PATCH] GasLimit check updated --- core/block_processor.go | 14 ++++++++------ state/statedb.go | 4 ++++ tests/vm/gh_test.go | 5 +++++ 3 files changed, 17 insertions(+), 6 deletions(-) diff --git a/core/block_processor.go b/core/block_processor.go index 5e943bda5f..e48660a67f 100644 --- a/core/block_processor.go +++ b/core/block_processor.go @@ -204,9 +204,6 @@ func (sm *BlockProcessor) processWithParent(block, parent *types.Block) (td *big // Tre receipt Trie's root (R = (Tr [[H1, R1], ... [Hn, R1]])) receiptSha := types.DeriveSha(receipts) if bytes.Compare(receiptSha, header.ReceiptHash) != 0 { - fmt.Println("receipts", receipts) - state.Sync() - chainlogger.Infof("%s\n", state.Dump()) err = fmt.Errorf("validating receipt root. received=%x got=%x", header.ReceiptHash, receiptSha) return } @@ -249,9 +246,14 @@ func (sm *BlockProcessor) ValidateBlock(block, parent *types.Block) error { return fmt.Errorf("Difficulty check failed for block %v, %v", block.Header().Difficulty, expd) } - expl := CalcGasLimit(parent, block) - if expl.Cmp(block.Header().GasLimit) != 0 { - return fmt.Errorf("GasLimit check failed for block %v, %v", block.Header().GasLimit, expl) + //expl := CalcGasLimit(parent, block) + //if expl.Cmp(block.Header().GasLimit) != 0 { + + // block.gasLimit - parent.gasLimit <= parent.gasLimit / 1024 + a := new(big.Int).Sub(block.Header().GasLimit, parent.Header().GasLimit) + b := new(big.Int).Div(parent.Header().GasLimit, big.NewInt(1024)) + if a.Cmp(b) > 0 { + return fmt.Errorf("GasLimit check failed for block %v", block.Header().GasLimit) } if block.Time() < parent.Time() { diff --git a/state/statedb.go b/state/statedb.go index ee37c2e68e..2ef928a9de 100644 --- a/state/statedb.go +++ b/state/statedb.go @@ -239,6 +239,10 @@ func (s *StateDB) Root() []byte { return s.trie.Root() } +func (s *StateDB) Trie() *trie.SecureTrie { + return s.trie +} + // Resets the trie and all siblings func (s *StateDB) Reset() { s.trie.Reset() diff --git a/tests/vm/gh_test.go b/tests/vm/gh_test.go index a3eb936167..e457991e5f 100644 --- a/tests/vm/gh_test.go +++ b/tests/vm/gh_test.go @@ -79,6 +79,10 @@ func RunVmTest(p string, t *testing.T) { helper.CreateFileTests(t, p, &tests) for name, test := range tests { + helper.Logger.SetLogLevel(4) + if name != "CallEcrecover0_overlappingInputOutput" { + continue + } db, _ := ethdb.NewMemDatabase() statedb := state.New(nil, db) for addr, account := range test.Pre { @@ -177,6 +181,7 @@ func RunVmTest(p string, t *testing.T) { */ } } + //statedb.Trie().PrintRoot() } logger.Flush() }