From 0eb026024e857f4640b373e0862e05726ff68b4a Mon Sep 17 00:00:00 2001 From: Giulio Rebuffo Date: Sun, 3 Jul 2022 16:18:52 +0200 Subject: [PATCH 1/4] experiment #1 --- turbo/stages/headerdownload/header_algos.go | 3 +++ 1 file changed, 3 insertions(+) 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 From e0009d3e54117c5db1c40df31723b14ea04b808a Mon Sep 17 00:00:00 2001 From: Giulio Rebuffo Date: Sun, 3 Jul 2022 16:50:15 +0200 Subject: [PATCH 2/4] experiment #2 --- cmd/rpcdaemon/commands/engine_api.go | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/cmd/rpcdaemon/commands/engine_api.go b/cmd/rpcdaemon/commands/engine_api.go index 5fb9c9eb059..d31b737f18c 100644 --- a/cmd/rpcdaemon/commands/engine_api.go +++ b/cmd/rpcdaemon/commands/engine_api.go @@ -128,13 +128,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 +165,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 { From 2c40eab58684fad6446406493b4d327fc2ffd376 Mon Sep 17 00:00:00 2001 From: Giulio Rebuffo Date: Sun, 3 Jul 2022 16:58:32 +0200 Subject: [PATCH 3/4] experiment #3 --- cmd/rpcdaemon/commands/engine_api.go | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/cmd/rpcdaemon/commands/engine_api.go b/cmd/rpcdaemon/commands/engine_api.go index d31b737f18c..1c0e182e71e 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 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) From 84ec32bc53e12c6a5a18479656738250618f24c0 Mon Sep 17 00:00:00 2001 From: Giulio Rebuffo Date: Sun, 3 Jul 2022 17:10:19 +0200 Subject: [PATCH 4/4] experiment 4 --- cmd/rpcdaemon/commands/engine_api.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd/rpcdaemon/commands/engine_api.go b/cmd/rpcdaemon/commands/engine_api.go index 1c0e182e71e..e6f6e149525 100644 --- a/cmd/rpcdaemon/commands/engine_api.go +++ b/cmd/rpcdaemon/commands/engine_api.go @@ -112,7 +112,7 @@ func (e *EngineImpl) ForkchoiceUpdatedV1(ctx context.Context, forkChoiceState *F } payloadStatus := convertPayloadStatus(reply.PayloadStatus) - if payloadStatus["latestValidHash"] != nil { + if reply.PayloadStatus.Status == remote.EngineStatus_INVALID && payloadStatus["latestValidHash"] != nil { tx, err := e.db.BeginRo(ctx) if err != nil { return nil, err