From aea01392d364187b9667826bd0d89637dd4fe971 Mon Sep 17 00:00:00 2001 From: Mario Vega Date: Wed, 27 Sep 2023 10:44:29 -0600 Subject: [PATCH] simulators/ethereum/engine: Engine API Test Fixes (#891) * simulators/ethereum/engine: fix non-zero pre-merge fork test * simulators/ethereum/engine: fix invalid versioned hashes tests --- .../ethereum/engine/suites/cancun/tests.go | 10 +++++++++- .../engine/suites/engine/invalid_payload.go | 19 ++++++++++++++++--- .../ethereum/engine/suites/engine/misc.go | 7 +++++++ 3 files changed, 32 insertions(+), 4 deletions(-) diff --git a/simulators/ethereum/engine/suites/cancun/tests.go b/simulators/ethereum/engine/suites/cancun/tests.go index 681b93b605..71c42a82a3 100644 --- a/simulators/ethereum/engine/suites/cancun/tests.go +++ b/simulators/ethereum/engine/suites/cancun/tests.go @@ -1844,13 +1844,21 @@ func init() { invalidDetectedOnSync := (invalidField == helper.InvalidBlobGasUsed || invalidField == helper.InvalidBlobCountGasUsed || invalidField == helper.InvalidVersionedHashes || - invalidField == helper.InvalidVersionedHashesVersion) + invalidField == helper.InvalidVersionedHashesVersion || + invalidField == helper.IncompleteVersionedHashes || + invalidField == helper.ExtraVersionedHashes) + + nilLatestValidHash := (invalidField == helper.InvalidVersionedHashes || + invalidField == helper.InvalidVersionedHashesVersion || + invalidField == helper.IncompleteVersionedHashes || + invalidField == helper.ExtraVersionedHashes) Tests = append(Tests, suite_engine.InvalidPayloadTestCase{ BaseSpec: onlyBlobTxsSpec, InvalidField: invalidField, Syncing: syncing, InvalidDetectedOnSync: invalidDetectedOnSync, + NilLatestValidHash: nilLatestValidHash, }) } } diff --git a/simulators/ethereum/engine/suites/engine/invalid_payload.go b/simulators/ethereum/engine/suites/engine/invalid_payload.go index 781c4134d4..a30418d7c3 100644 --- a/simulators/ethereum/engine/suites/engine/invalid_payload.go +++ b/simulators/ethereum/engine/suites/engine/invalid_payload.go @@ -30,6 +30,8 @@ type InvalidPayloadTestCase struct { EmptyTransactions bool // If true, the payload can be detected to be invalid even when syncing InvalidDetectedOnSync bool + // If true, latest valid hash can be nil for this test. + NilLatestValidHash bool } func (s InvalidPayloadTestCase) WithMainFork(fork config.Fork) test.Spec { @@ -155,7 +157,9 @@ func (tc InvalidPayloadTestCase) Execute(t *test.Env) { } } else { r.ExpectStatus(test.Invalid) - r.ExpectLatestValidHash(&alteredPayload.ParentHash) + if !(tc.NilLatestValidHash && r.Status.LatestValidHash == nil) { + r.ExpectLatestValidHash(&alteredPayload.ParentHash) + } } // Send the forkchoiceUpdated with a reference to the invalid payload. @@ -218,7 +222,9 @@ func (tc InvalidPayloadTestCase) Execute(t *test.Env) { } else { // Otherwise the response should be INVALID. q.ExpectStatus(test.Invalid) - q.ExpectLatestValidHash(&t.CLMock.LatestExecutedPayload.BlockHash) + if !(tc.NilLatestValidHash && r.Status.LatestValidHash == nil) { + q.ExpectLatestValidHash(&t.CLMock.LatestExecutedPayload.BlockHash) + } } // Try sending the fcU again, this time we should get the proper invalid response. @@ -254,6 +260,11 @@ func (tc InvalidPayloadTestCase) Execute(t *test.Env) { t.CLMock.ProduceSingleBlock(clmock.BlockProcessCallbacks{ // Run test after the new payload has been obtained OnGetPayload: func() { + if t.CLMock.LatestPayloadBuilt.ParentHash == alteredPayload.BlockHash { + // In some instances the payload is indiscernible from the altered one because the + // difference lies in the new payload parameters, in this case skip this check. + return + } followUpAlteredPayload, err := (&helper.CustomPayloadData{ ParentHash: &alteredPayload.BlockHash, }).CustomizePayload(&t.CLMock.LatestPayloadBuilt) @@ -271,7 +282,9 @@ func (tc InvalidPayloadTestCase) Execute(t *test.Env) { if r.Status.Status == test.Accepted || r.Status.Status == test.Syncing { r.ExpectLatestValidHash(nil) } else if r.Status.Status == test.Invalid { - r.ExpectLatestValidHash(&alteredPayload.ParentHash) + if !(tc.NilLatestValidHash && r.Status.LatestValidHash == nil) { + r.ExpectLatestValidHash(&alteredPayload.ParentHash) + } } }, }) diff --git a/simulators/ethereum/engine/suites/engine/misc.go b/simulators/ethereum/engine/suites/engine/misc.go index bc3a4ceefa..a98c6cb124 100644 --- a/simulators/ethereum/engine/suites/engine/misc.go +++ b/simulators/ethereum/engine/suites/engine/misc.go @@ -1,6 +1,8 @@ package suite_engine import ( + "math/big" + "github.com/ethereum/go-ethereum/common" "github.com/ethereum/hive/simulators/ethereum/engine/clmock" "github.com/ethereum/hive/simulators/ethereum/engine/config" @@ -28,6 +30,11 @@ func (s NonZeroPreMergeFork) GetForkConfig() *config.ForkConfig { return nil } forkConfig.LondonNumber = common.Big1 + // All post merge forks must happen at the same time as the latest fork + mainFork := s.GetMainFork() + if mainFork == config.Cancun { + forkConfig.ShanghaiTimestamp = new(big.Int).Set(forkConfig.CancunTimestamp) + } return forkConfig }