Skip to content

Implement endpoints to be able to run engine-api hive tests. #344

@mpaulucci

Description

@mpaulucci

This is a placeholder ticker, Im not entirely sure we want to implement this since we have to support new RPC methods. It shouldn't be too much work though.

These are Hive the tests for a post-merge network.

See amount of tests and support by other clients: https://hivetests2.ethdevops.io/#suite=engine-api

Here are the tests: https://github.com/ethereum/hive/tree/master/simulators/ethereum/engine/suites/engine

Doing a grep on the output of the tests, I see that the following endpoints need to be supported:

engine_forkchoiceUpdatedV1
engine_getPayloadV1
engine_newPayloadV1
eth_blockNumber
eth_getBalance
eth_getBlockByHash
eth_getBlockByNumber
eth_getStorageAt
eth_getTransactionCount
eth_getTransactionReceipt
eth_sendRawTransaction

This is the list of tests:

Bad Hash on NewPayload (Syncing=false, Sidechain=false) (Paris)
Bad Hash on NewPayload (Syncing=false, Sidechain=true) (Paris)
Bad Hash on NewPayload (Syncing=true, Sidechain=false) (Paris)
Bad Hash on NewPayload (Syncing=true, Sidechain=true) (Paris)
ParentHash equals BlockHash on NewPayload, Syncing=False (Paris)
ParentHash equals BlockHash on NewPayload, Syncing=True (Paris)
RPC: Latest Block on NewPayload (Paris)
RPC: Latest Block on HeadBlockHash Update (Paris)
RPC: Safe Block on SafeBlockHash Update (Paris)
RPC: Finalized Block on FinalizedBlockHash Update (Paris)
Inconsistent Head in ForkchoiceState (Paris)
Unknown HeadBlockHash (Paris)
Inconsistent Safe in ForkchoiceState (Paris)
Unknown SafeBlockHash (Paris)
Inconsistent Finalized in ForkchoiceState (Paris)
Unknown FinalizedBlockHash (Paris)
Invalid PayloadAttributes, Zero timestamp, Syncing=False (Paris)
Invalid PayloadAttributes, Zero timestamp, Syncing=True (Paris)
Invalid PayloadAttributes, Parent timestamp, Syncing=False (Paris)
Invalid PayloadAttributes, Parent timestamp, Syncing=True (Paris)
Unique Payload ID, Increase Timestamp (Paris)
Unique Payload ID, Modify Random (Paris)
Unique Payload ID, Modify SuggestedFeeRecipient (Paris)
Re-Execute Payload (Paris)
In-Order Consecutive Payload Execution (Paris)
Multiple New Payloads Extending Canonical Chain, Set Head to First Payload Received (Paris)
Multiple New Payloads Extending Canonical Chain, Wait for Canonical Payload (Paris)
Valid NewPayload->ForkchoiceUpdated on Syncing Client (Paris)
NewPayload with Missing ForkchoiceUpdated (Paris)
Invalid NewPayload, ParentHash, Syncing=False, EmptyTxs=False, DynFeeTxs=False (Paris)
Invalid NewPayload, ParentHash, Syncing=True, EmptyTxs=False, DynFeeTxs=False (Paris)
Invalid NewPayload, StateRoot, Syncing=False, EmptyTxs=True, DynFeeTxs=False (Paris)
Invalid NewPayload, StateRoot, Syncing=False, EmptyTxs=False, DynFeeTxs=False (Paris)
Invalid NewPayload, StateRoot, Syncing=True, EmptyTxs=True, DynFeeTxs=False (Paris)
Invalid NewPayload, StateRoot, Syncing=True, EmptyTxs=False, DynFeeTxs=False (Paris)
Invalid NewPayload, ReceiptsRoot, Syncing=False, EmptyTxs=False, DynFeeTxs=False (Paris)
Invalid NewPayload, ReceiptsRoot, Syncing=True, EmptyTxs=False, DynFeeTxs=False (Paris)
Invalid NewPayload, Number, Syncing=False, EmptyTxs=False, DynFeeTxs=False (Paris)
Invalid NewPayload, Number, Syncing=True, EmptyTxs=False, DynFeeTxs=False (Paris)
Invalid NewPayload, GasLimit, Syncing=False, EmptyTxs=False, DynFeeTxs=False (Paris)
Invalid NewPayload, GasLimit, Syncing=True, EmptyTxs=False, DynFeeTxs=False (Paris)
Invalid NewPayload, GasUsed, Syncing=False, EmptyTxs=False, DynFeeTxs=False (Paris)
Invalid NewPayload, GasUsed, Syncing=True, EmptyTxs=False, DynFeeTxs=False (Paris)
Invalid NewPayload, Timestamp, Syncing=False, EmptyTxs=False, DynFeeTxs=False (Paris)
Invalid NewPayload, Timestamp, Syncing=True, EmptyTxs=False, DynFeeTxs=False (Paris)
Invalid NewPayload, PrevRandao, Syncing=False, EmptyTxs=False, DynFeeTxs=False (Paris)
Invalid NewPayload, PrevRandao, Syncing=True, EmptyTxs=False, DynFeeTxs=False (Paris)
Invalid NewPayload, Incomplete Transactions, Syncing=False, EmptyTxs=False, DynFeeTxs=False (Paris)
Invalid NewPayload, Incomplete Transactions, Syncing=True, EmptyTxs=False, DynFeeTxs=False (Paris)
Payload Build after New Invalid Payload: Invalid StateRoot (Paris)
Invalid NewPayload, Transaction Signature, Syncing=False, EmptyTxs=False, DynFeeTxs=False (Paris)
Invalid NewPayload, Transaction Signature, Syncing=False, EmptyTxs=False, DynFeeTxs=True (Paris)
Invalid NewPayload, Transaction Signature, Syncing=True, EmptyTxs=False, DynFeeTxs=False (Paris)
Invalid NewPayload, Transaction Signature, Syncing=True, EmptyTxs=False, DynFeeTxs=True (Paris)
Invalid NewPayload, Transaction Nonce, Syncing=False, EmptyTxs=False, DynFeeTxs=False (Paris)
Invalid NewPayload, Transaction Nonce, Syncing=False, EmptyTxs=False, DynFeeTxs=True (Paris)
Invalid NewPayload, Transaction Nonce, Syncing=True, EmptyTxs=False, DynFeeTxs=False (Paris)
Invalid NewPayload, Transaction Nonce, Syncing=True, EmptyTxs=False, DynFeeTxs=True (Paris)
Invalid NewPayload, Transaction GasPrice, Syncing=False, EmptyTxs=False, DynFeeTxs=False (Paris)
Invalid NewPayload, Transaction GasPrice, Syncing=False, EmptyTxs=False, DynFeeTxs=True (Paris)
Invalid NewPayload, Transaction GasPrice, Syncing=True, EmptyTxs=False, DynFeeTxs=False (Paris)
Invalid NewPayload, Transaction GasPrice, Syncing=True, EmptyTxs=False, DynFeeTxs=True (Paris)
Invalid NewPayload, Transaction GasTipCapPrice, Syncing=False, EmptyTxs=False, DynFeeTxs=True (Paris)
Invalid NewPayload, Transaction GasTipCapPrice, Syncing=True, EmptyTxs=False, DynFeeTxs=True (Paris)
Invalid NewPayload, Transaction Gas, Syncing=False, EmptyTxs=False, DynFeeTxs=False (Paris)
Invalid NewPayload, Transaction Gas, Syncing=False, EmptyTxs=False, DynFeeTxs=True (Paris)
Invalid NewPayload, Transaction Gas, Syncing=True, EmptyTxs=False, DynFeeTxs=False (Paris)
Invalid NewPayload, Transaction Gas, Syncing=True, EmptyTxs=False, DynFeeTxs=True (Paris)
Invalid NewPayload, Transaction Value, Syncing=False, EmptyTxs=False, DynFeeTxs=False (Paris)
Invalid NewPayload, Transaction Value, Syncing=False, EmptyTxs=False, DynFeeTxs=True (Paris)
Invalid NewPayload, Transaction Value, Syncing=True, EmptyTxs=False, DynFeeTxs=False (Paris)
Invalid NewPayload, Transaction Value, Syncing=True, EmptyTxs=False, DynFeeTxs=True (Paris)
Invalid NewPayload, Transaction ChainID, Syncing=False, EmptyTxs=False, DynFeeTxs=False (Paris)
Invalid NewPayload, Transaction ChainID, Syncing=False, EmptyTxs=False, DynFeeTxs=True (Paris)
Invalid NewPayload, Transaction ChainID, Syncing=True, EmptyTxs=False, DynFeeTxs=False (Paris)
Invalid NewPayload, Transaction ChainID, Syncing=True, EmptyTxs=False, DynFeeTxs=True (Paris)
Build Payload with Invalid ChainID Transaction, LegacyTransactions (Paris)
Build Payload with Invalid ChainID Transaction, DynamicFeeTransactions (Paris)
Invalid Missing Ancestor ReOrg, StateRoot, EmptyTxs=False, Invalid P1 (Paris)
Invalid Missing Ancestor ReOrg, StateRoot, EmptyTxs=True, Invalid P1 (Paris)
Invalid Missing Ancestor ReOrg, StateRoot, EmptyTxs=False, Invalid P9 (Paris)
Invalid Missing Ancestor ReOrg, StateRoot, EmptyTxs=True, Invalid P9 (Paris)
Invalid Missing Ancestor ReOrg, StateRoot, EmptyTxs=False, Invalid P10 (Paris)
Invalid Missing Ancestor ReOrg, StateRoot, EmptyTxs=True, Invalid P10 (Paris)
Invalid Missing Ancestor Syncing ReOrg, StateRoot, EmptyTxs=True, CanonicalReOrg=False, Invalid P9 (Paris)
Invalid Missing Ancestor Syncing ReOrg, StateRoot, EmptyTxs=False, CanonicalReOrg=False, Invalid P9 (Paris)
Invalid Missing Ancestor Syncing ReOrg, StateRoot, EmptyTxs=True, CanonicalReOrg=True, Invalid P9 (Paris)
Invalid Missing Ancestor Syncing ReOrg, StateRoot, EmptyTxs=False, CanonicalReOrg=True, Invalid P9 (Paris)
Invalid Missing Ancestor Syncing ReOrg, ReceiptsRoot, EmptyTxs=False, CanonicalReOrg=False, Invalid P8 (Paris)
Invalid Missing Ancestor Syncing ReOrg, ReceiptsRoot, EmptyTxs=False, CanonicalReOrg=True, Invalid P8 (Paris)
Invalid Missing Ancestor Syncing ReOrg, GasLimit, EmptyTxs=False, CanonicalReOrg=False, Invalid P8 (Paris)
Invalid Missing Ancestor Syncing ReOrg, GasLimit, EmptyTxs=False, CanonicalReOrg=True, Invalid P8 (Paris)
Invalid Missing Ancestor Syncing ReOrg, GasUsed, EmptyTxs=False, CanonicalReOrg=False, Invalid P8 (Paris)
Invalid Missing Ancestor Syncing ReOrg, GasUsed, EmptyTxs=False, CanonicalReOrg=True, Invalid P8 (Paris)
Invalid Missing Ancestor Syncing ReOrg, Timestamp, EmptyTxs=False, CanonicalReOrg=False, Invalid P8 (Paris)
Invalid Missing Ancestor Syncing ReOrg, Timestamp, EmptyTxs=False, CanonicalReOrg=True, Invalid P8 (Paris)
Invalid Missing Ancestor Syncing ReOrg, Incomplete Transactions, EmptyTxs=False, CanonicalReOrg=False, Invalid P9 (Paris)
Invalid Missing Ancestor Syncing ReOrg, Incomplete Transactions, EmptyTxs=False, CanonicalReOrg=True, Invalid P9 (Paris)
Invalid Missing Ancestor Syncing ReOrg, Transaction Signature, EmptyTxs=False, CanonicalReOrg=False, Invalid P9 (Paris)
Invalid Missing Ancestor Syncing ReOrg, Transaction Signature, EmptyTxs=False, CanonicalReOrg=True, Invalid P9 (Paris)
Invalid Missing Ancestor Syncing ReOrg, Transaction Nonce, EmptyTxs=False, CanonicalReOrg=False, Invalid P9 (Paris)
Invalid Missing Ancestor Syncing ReOrg, Transaction Nonce, EmptyTxs=False, CanonicalReOrg=True, Invalid P9 (Paris)
Invalid Missing Ancestor Syncing ReOrg, Transaction Gas, EmptyTxs=False, CanonicalReOrg=False, Invalid P9 (Paris)
Invalid Missing Ancestor Syncing ReOrg, Transaction Gas, EmptyTxs=False, CanonicalReOrg=True, Invalid P9 (Paris)
Invalid Missing Ancestor Syncing ReOrg, Transaction GasPrice, EmptyTxs=False, CanonicalReOrg=False, Invalid P9 (Paris)
Invalid Missing Ancestor Syncing ReOrg, Transaction GasPrice, EmptyTxs=False, CanonicalReOrg=True, Invalid P9 (Paris)
Invalid Missing Ancestor Syncing ReOrg, Transaction Value, EmptyTxs=False, CanonicalReOrg=False, Invalid P9 (Paris)
Invalid Missing Ancestor Syncing ReOrg, Transaction Value, EmptyTxs=False, CanonicalReOrg=True, Invalid P9 (Paris)
Sidechain Reorg (Paris)
Re-Org Back to Canonical Chain From Syncing Chain (Paris)
Re-org to Previously Validated Sidechain Payload (Paris)
Safe Re-Org to Side Chain (Paris)
Transaction Re-Org, Re-Org Out (Paris)
Transaction Re-Org, Re-Org to Different Block (Paris)
Transaction Re-Org, New Payload on Revert Back (Paris)
Transaction Re-Org, Re-Org Back In (Paris)
Re-Org Back into Canonical Chain, Depth=5 (Paris)
Re-Org Back into Canonical Chain, Depth=10, Execute Side Payload on Re-Org (Paris)
Suggested Fee Recipient Test, LegacyTransactions (Paris)
Suggested Fee Recipient Test, DynamicFeeTransactions (Paris)
PrevRandao Opcode Transactions Test, LegacyTransactions (Paris)
PrevRandao Opcode Transactions Test, DynamicFeeTransactions (Paris)
Fork ID: Genesis=0, Paris=0 (Paris)
Fork ID: Genesis=0, Paris=0, BlocksBeforePeering=1 (Paris)
Fork ID: Genesis=1, Paris=0 (Paris)
Fork ID: Genesis=1, Paris=0, BlocksBeforePeering=1 (Paris)
Fork ID: Genesis=1, Paris=1 (Paris)
Fork ID: Genesis=1, Paris=1, BlocksBeforePeering=1 (Paris)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    Status
    Done

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions