Skip to content

Optimize sequencer payload process event trigger #130

@sieniven

Description

@sieniven

Issue

  • Currently, the op-sequencer after building the unsafe payload (on engine_getPayload on buildSealedEvent) will process the new unsafe payload by calling engine_newPayload on processPayloadEvent
  • However, the payload re-executes on the EL, causing significant delays in setting the new EL blockchain head to the new block
  • The PR - using block playlod cache op-geth#46 optimises this by caching the already executed payload state
  • However, when we migrate to reth in the near future and adopt flashblocks architecture, caching on the default EL will no longer work as the payload is no longer built on the default EL (on op-rbuilder instead)

Case study

Block re-execution can take up to 7seconds on very large blocks:
INFO [10-27|13:27:36.610] Block<8594801>, Txs<2293> GasUsed<80355472>, BlockTime<6.552s> { Propose[0s] { Prepare[0s], execute[0s], Prague[0s], assemble[0s] , State { accRead[0s], storRead[0s], accUpdate[0s], storUpdate[0s], accHash[0s] } }, Insert[6.552s] { execute[5.730s], validate[10.920ms], crossValidate[84ns], evmExecPure[4.799s], validatePure[10.920ms] , Write { writeBlock[821.783ms] }, State { accRead[507.858ms], storRead[254.324ms], accUpdate[88.915ms], storUpdate[41.948ms], accHash[27.615ms], trieUpdate[130.863ms] }, Commits { accCommit[114.703ms], storCommit[163.467ms], snapCommit[2.769ms], trieDBCommit[145.553ms] } }

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions