mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-03-12 14:19:04 +00:00
eth/catalyst: allow getPayloadV2 for pre-shanghai payloads (#33932)
I observed failing tests in Hive `engine-withdrawals`: - https://hive.ethpandaops.io/#/test/generic/1772351960-ad3e3e460605c670efe1b4f4178eb422?testnumber=146 - https://hive.ethpandaops.io/#/test/generic/1772351960-ad3e3e460605c670efe1b4f4178eb422?testnumber=147 ```shell DEBUG (Withdrawals Fork on Block 2): NextPayloadID before getPayloadV2: id=0x01487547e54e8abe version=1 >> engine_getPayloadV2("0x01487547e54e8abe") << error: {"code":-38005,"message":"Unsupported fork"} FAIL: Expected no error on EngineGetPayloadV2: error=Unsupported fork ``` The same failure pattern occurred for Block 3. Per Shanghai engine_getPayloadV2 spec, pre-Shanghai payloads should be accepted via V2 and returned as ExecutionPayloadV1: - executionPayload: ExecutionPayloadV1 | ExecutionPayloadV2 - ExecutionPayloadV1 MUST be returned if payload timestamp < Shanghai timestamp - ExecutionPayloadV2 MUST be returned if payload timestamp >= Shanghai timestamp Reference: - https://github.com/ethereum/execution-apis/blob/main/src/engine/shanghai.md#engine_getpayloadv2 Current implementation only allows GetPayloadV2 on the Shanghai fork window (`[]forks.Fork{forks.Shanghai}`), so pre-Shanghai payloads are rejected with Unsupported fork. If my interpretation of the spec is incorrect, please let me know and I can adjust accordingly. --------- Co-authored-by: muzry.li <muzry.li1@ambergroup.io>
This commit is contained in:
parent
00540f9469
commit
b08aac1dbc
2 changed files with 6 additions and 1 deletions
|
|
@ -435,7 +435,7 @@ func (api *ConsensusAPI) GetPayloadV2(payloadID engine.PayloadID) (*engine.Execu
|
|||
payloadID,
|
||||
false,
|
||||
[]engine.PayloadVersion{engine.PayloadV1, engine.PayloadV2},
|
||||
[]forks.Fork{forks.Shanghai},
|
||||
[]forks.Fork{forks.Paris, forks.Shanghai},
|
||||
)
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1219,6 +1219,11 @@ func TestNilWithdrawals(t *testing.T) {
|
|||
Random: test.blockParams.Random,
|
||||
Version: payloadVersion,
|
||||
}).Id()
|
||||
if !shanghai {
|
||||
if _, err := api.GetPayloadV2(payloadID); err != nil {
|
||||
t.Fatalf("GetPayloadV2 rejected pre-shanghai payload: %v", err)
|
||||
}
|
||||
}
|
||||
execData, err := api.getPayload(payloadID, false, nil, nil)
|
||||
if err != nil {
|
||||
t.Fatalf("error getting payload, err=%v", err)
|
||||
|
|
|
|||
Loading…
Reference in a new issue