From b98028078521cc5335e4fb15641058f44c9e5973 Mon Sep 17 00:00:00 2001 From: Giulio rebuffo Date: Sun, 3 Jul 2022 17:36:39 +0200 Subject: [PATCH] Fixed hive test on invalid transition payload (#4618) * experiment #1 * experiment #2 * experiment #3 * experiment 4 --- cmd/rpcdaemon/commands/engine_api.go | 32 +++++++++++++++------ turbo/stages/headerdownload/header_algos.go | 3 ++ 2 files changed, 27 insertions(+), 8 deletions(-) diff --git a/cmd/rpcdaemon/commands/engine_api.go b/cmd/rpcdaemon/commands/engine_api.go index 5fb9c9eb059..e6f6e149525 100644 --- a/cmd/rpcdaemon/commands/engine_api.go +++ b/cmd/rpcdaemon/commands/engine_api.go @@ -111,8 +111,25 @@ func (e *EngineImpl) ForkchoiceUpdatedV1(ctx context.Context, forkChoiceState *F return nil, err } + payloadStatus := convertPayloadStatus(reply.PayloadStatus) + if reply.PayloadStatus.Status == remote.EngineStatus_INVALID && payloadStatus["latestValidHash"] != nil { + tx, err := e.db.BeginRo(ctx) + if err != nil { + return nil, err + } + + defer tx.Rollback() + latestValidHash := payloadStatus["latestValidHash"].(common.Hash) + isValidHashPos, err := rawdb.IsPosBlock(tx, latestValidHash) + if err != nil { + return nil, err + } + if !isValidHashPos { + payloadStatus["latestValidHash"] = common.Hash{} + } + } json := map[string]interface{}{ - "payloadStatus": convertPayloadStatus(reply.PayloadStatus), + "payloadStatus": payloadStatus, } if reply.PayloadId != 0 { encodedPayloadId := make([]byte, 8) @@ -128,13 +145,6 @@ func (e *EngineImpl) ForkchoiceUpdatedV1(ctx context.Context, forkChoiceState *F func (e *EngineImpl) NewPayloadV1(ctx context.Context, payload *ExecutionPayload) (map[string]interface{}, error) { log.Trace("Received NewPayload", "height", uint64(payload.BlockNumber), "hash", payload.BlockHash) - tx, err := e.db.BeginRo(ctx) - if err != nil { - return nil, err - } - - defer tx.Rollback() - var baseFee *uint256.Int if payload.BaseFeePerGas != nil { var overflow bool @@ -172,6 +182,12 @@ func (e *EngineImpl) NewPayloadV1(ctx context.Context, payload *ExecutionPayload } payloadStatus := convertPayloadStatus(res) if payloadStatus["latestValidHash"] != nil { + tx, err := e.db.BeginRo(ctx) + if err != nil { + return nil, err + } + + defer tx.Rollback() latestValidHash := payloadStatus["latestValidHash"].(common.Hash) isValidHashPos, err := rawdb.IsPosBlock(tx, latestValidHash) if err != nil { diff --git a/turbo/stages/headerdownload/header_algos.go b/turbo/stages/headerdownload/header_algos.go index c0ed7df24c5..c250f5b2cc7 100644 --- a/turbo/stages/headerdownload/header_algos.go +++ b/turbo/stages/headerdownload/header_algos.go @@ -898,6 +898,9 @@ func (hi *HeaderInserter) FeedHeaderPoS(db kv.GetPut, header *types.Header, hash return fmt.Errorf("[%s] failed to WriteTd: %w", hi.logPrefix, err) } rawdb.WriteHeader(db, header) + if err = rawdb.WriteHeaderNumber(db, hash, blockHeight); err != nil { + return err + } hi.highest = blockHeight hi.highestHash = hash