From 7a796c1d54789e01ece0e77db0915c88c7c5c232 Mon Sep 17 00:00:00 2001 From: maskpp Date: Wed, 6 Nov 2024 15:43:21 +0800 Subject: [PATCH] fix consensus test --- consensus/taiko/consensus.go | 20 ++++---- consensus/taiko/consensus_test.go | 79 ++++++++++++++++--------------- 2 files changed, 51 insertions(+), 48 deletions(-) diff --git a/consensus/taiko/consensus.go b/consensus/taiko/consensus.go index 166c20361374..b2a38faef85e 100644 --- a/consensus/taiko/consensus.go +++ b/consensus/taiko/consensus.go @@ -126,16 +126,6 @@ func (t *Taiko) VerifyHeaders(chain consensus.ChainHeaderReader, headers []*type } func (t *Taiko) verifyHeader(header, parent *types.Header, unixNow int64) error { - l1Origin, err := rawdb.ReadL1Origin(t.chainDB, header.Number) - if err != nil { - return err - } - - // If the current block is not a soft block, then check the timestamp. - if !l1Origin.IsSoftblock() && header.Time > uint64(unixNow) { - return consensus.ErrFutureBlock - } - // Ensure that the header's extra-data section is of a reasonable size (<= 32 bytes) if uint64(len(header.Extra)) > params.MaximumExtraDataSize { return fmt.Errorf("extra-data too long: %d > %d", len(header.Extra), params.MaximumExtraDataSize) @@ -181,6 +171,16 @@ func (t *Taiko) verifyHeader(header, parent *types.Header, unixNow int64) error return ErrEmptyWithdrawalsHash } + l1Origin, err := rawdb.ReadL1Origin(t.chainDB, header.Number) + if err != nil { + return err + } + + // If the current block is not a soft block, then check the timestamp. + if l1Origin != nil && !l1Origin.IsSoftblock() && header.Time > uint64(unixNow) { + return consensus.ErrFutureBlock + } + return nil } diff --git a/consensus/taiko/consensus_test.go b/consensus/taiko/consensus_test.go index ba4785ff1d42..c9d92953a090 100644 --- a/consensus/taiko/consensus_test.go +++ b/consensus/taiko/consensus_test.go @@ -93,70 +93,73 @@ func init() { } } -func newTestBackend(t *testing.T) (*eth.Ethereum, []*types.Block) { - // Generate test chain. - blocks := generateTestChain() +func generateTestChain(t *testing.T) ([]*types.Block, *eth.Ethereum) { + generate := func(i int, g *core.BlockGen) { + g.OffsetTime(5) + + g.SetExtra([]byte("test_taiko")) + g.SetDifficulty(common.Big0) + + for i, tx := range txs { + if i == 0 { + if err := tx.MarkAsAnchor(); err != nil { + panic(err) + } + } + g.AddTx(tx) + } + } // Create node - n, err := node.New(&node.Config{}) + n, err := node.New(&node.Config{ + DataDir: t.TempDir(), + }) if err != nil { t.Fatalf("can't create new node: %v", err) } // Create Ethereum Service - config := ðconfig.Config{ + ethService, err := eth.New(n, ðconfig.Config{ Genesis: genesis, - } - - ethservice, err := eth.New(n, config) + }) if err != nil { t.Fatalf("can't create new ethereum service: %v", err) } + db := ethService.ChainDb() + + gblock := genesis.MustCommit(db, triedb.NewDatabase(db, triedb.HashDefaults)) + blocks, _ := core.GenerateChain(genesis.Config, gblock, testEngine, db, 1, generate) + blocks = append([]*types.Block{gblock}, blocks...) + + // Insert L1Origins. + for _, block := range blocks { + rawdb.WriteL1Origin(db, block.Number(), &rawdb.L1Origin{ + BlockID: block.Number(), + L1BlockHeight: block.Number(), + L1BlockHash: block.Hash(), + }) + } + // Import the test chain. if err := n.Start(); err != nil { t.Fatalf("can't start test node: %v", err) } - if _, err := ethservice.BlockChain().InsertChain(blocks[1:]); err != nil { + if _, err := ethService.BlockChain().InsertChain(blocks[1:]); err != nil { t.Fatalf("can't import test blocks: %v", err) } - if _, ok := ethservice.Engine().(*taiko.Taiko); !ok { + if _, ok := ethService.Engine().(*taiko.Taiko); !ok { t.Fatalf("not use taiko engine") } - return ethservice, blocks -} - -func generateTestChain() []*types.Block { - db := rawdb.NewMemoryDatabase() - generate := func(i int, g *core.BlockGen) { - g.OffsetTime(5) - - g.SetExtra([]byte("test_taiko")) - g.SetDifficulty(common.Big0) - - for i, tx := range txs { - if i == 0 { - if err := tx.MarkAsAnchor(); err != nil { - panic(err) - } - } - g.AddTx(tx) - } - } - - gblock := genesis.MustCommit(db, triedb.NewDatabase(db, triedb.HashDefaults)) - - blocks, _ := core.GenerateChain(genesis.Config, gblock, testEngine, db, 1, generate) - - blocks = append([]*types.Block{gblock}, blocks...) - return blocks + return blocks, ethService } func TestVerifyHeader(t *testing.T) { - ethService, blocks := newTestBackend(t) + // Generate test chain. + blocks, ethService := generateTestChain(t) for _, b := range blocks { err := testEngine.VerifyHeader(ethService.BlockChain(), b.Header())