From e93b62880d9d7b85713dab4d22395e3df58d85cf Mon Sep 17 00:00:00 2001 From: bnoieh <135800952+bnoieh@users.noreply.github.com> Date: Tue, 22 Oct 2024 16:38:46 +0800 Subject: [PATCH] update --- core/blockchain.go | 20 ++++++-------------- eth/catalyst/api.go | 5 +++++ 2 files changed, 11 insertions(+), 14 deletions(-) diff --git a/core/blockchain.go b/core/blockchain.go index 4e1d0bd9e..94b93d23f 100644 --- a/core/blockchain.go +++ b/core/blockchain.go @@ -1719,6 +1719,7 @@ func (bc *BlockChain) insertChain(chain types.Blocks, setHead bool) (int, error) var err error if minerMode { block = chain[0] + it.index = 0 } else { block, err = it.next() } @@ -1878,15 +1879,6 @@ func (bc *BlockChain) insertChain(chain types.Blocks, setHead bool) (int, error) continue } - // Async verify header if minerMode - asyncItNextCh := make(chan error) - if minerMode { - go func() { - _, err := it.next() - asyncItNextCh <- err - }() - } - var ( receipts, receiptExist = bc.miningReceiptsCache.Get(block.Hash()) logs, logExist = bc.miningTxLogsCache.Get(block.Hash()) @@ -1948,12 +1940,15 @@ func (bc *BlockChain) insertChain(chain types.Blocks, setHead bool) (int, error) vstart := time.Now() // Async validate if minerMode - asyncValidateStateCh := make(chan error) + asyncValidateStateCh := make(chan error, 1) if minerMode { header := block.Header() // Can not validate root concurrently if root := statedb.IntermediateRoot(bc.chainConfig.IsEIP158(header.Number)); header.Root != root { - panic(fmt.Errorf("self mined block(hash: %x number %v) verify root err(mined: %x expected: %x) dberr: %w", block.Hash(), block.NumberU64(), header.Root, root, statedb.Error())) + err := fmt.Errorf("self mined block(hash: %x number %v) verify root err(mined: %x expected: %x) dberr: %w", block.Hash(), block.NumberU64(), header.Root, root, statedb.Error()) + bc.reportBlock(block, receipts, err) + followupInterrupt.Store(true) + return it.index, err } go func() { asyncValidateStateCh <- bc.validator.ValidateState(block, statedb, receipts, usedGas, true) @@ -2004,9 +1999,6 @@ func (bc *BlockChain) insertChain(chain types.Blocks, setHead bool) (int, error) return it.index, err } if minerMode { - if err := <-asyncItNextCh; err != nil { - panic(fmt.Errorf("self mined block(hash: %x number %v) async verify header err: %w", block.Hash(), block.NumberU64(), err)) - } if err := <-asyncValidateStateCh; err != nil { panic(fmt.Errorf("self mined block(hash: %x number %v) async verify state err: %w", block.Hash(), block.NumberU64(), err)) } diff --git a/eth/catalyst/api.go b/eth/catalyst/api.go index 20898a2b2..74395bfdd 100644 --- a/eth/catalyst/api.go +++ b/eth/catalyst/api.go @@ -45,6 +45,7 @@ var ( forkchoiceUpdateHeadsTimer = metrics.NewRegisteredTimer("api/engine/forkchoiceUpdate/heads", nil) getPayloadTimer = metrics.NewRegisteredTimer("api/engine/get/payload", nil) newPayloadTimer = metrics.NewRegisteredTimer("api/engine/new/payload", nil) + sealPayloadTimer = metrics.NewRegisteredTimer("api/engine/seal/payload", nil) ) // Register adds the engine API to the full node. @@ -721,6 +722,10 @@ func (api *ConsensusAPI) OpSealPayloadV3(payloadID engine.PayloadID, update engi func (api *ConsensusAPI) opSealPayload(payloadID engine.PayloadID, update engine.ForkchoiceStateV1, needPayload bool, version string) (engine.OpSealPayloadResponse, error) { start := time.Now() + defer func() { + sealPayloadTimer.UpdateSince(start) + log.Debug("sealPayloadTimer", "duration", common.PrettyDuration(time.Since(start)), "payloadID", payloadID) + }() var payloadEnvelope *engine.ExecutionPayloadEnvelope var err error if version == "V2" {