Component | rollup integration |
Stakeholders | Jeb Bearer, Keyao Shen, Sneh Koul, Verity Coltman |
should not change over time as the rollup runs.
Assumption: The rollup sequencer is correct, online, and honest. It produces a valid sequence of rollup blocks every few seconds or faster, and it never reorgs.
Acceptance: Run the rollup and subscribe to the sequencer feed, a feed which derives from Espresso, and a feed which derives the finalized block sequence from L1. All of these should yield the same blocks in the same order (but at different times).
Acceptance: Consider rollup-specific adversarial behavior which could break
sequencer confirmations, such as an adversary sending non-sequencer blocks
directly to Espresso. Such attacks should not cause Espresso to finalize
something different than the sequencer feed.
Assumption: Espresso is fully functional or degraded, meaning it is fully functional except for periods lasting no more than 24 hours where one or more of the following apply:
The builder is unreachable or unable to drive confirmation of transactions
The query service is unreachable or returning bad data
HotShot consensus is not producing new blocks or confirming transactions submitted to it by the builder
Acceptance: Run the rollup as described above, checking for the same
properties, but occasionally restart the Espresso builder and subsets of Espresso
nodes.
Acceptance: There is a version of the rollup node, called Caff node, which
derives from Espresso. Run a rollup and run this node. It should be possible to
query this node’s RPC for updated states every 2-4 seconds. Once a state is
finalized on L1, it should match the state that was earlier reported
by the Espresso-deriving node for the same block. Repeat this test
while manually sending some “invalid” transactions to Espresso (e.g.
transactions that look valid but are sent from outside the batcher) and to
L1 (e.g. transactions that were not previously posted to Espresso).
Note that this requirement may not be required for the first version of every rollup integration, but we must achieve it eventually. If it’s future work for a rollup integration, we should note that in the specific page.
Acceptance: Run a rollup. Run two separate instances of the batcher on
separate nodes. Let the rollup run for some time and check all the properties
outlined above. Stop one of the batchers, let the rollup run longer, and check all
the properties again. Restart that batcher, then stop the other batcher, and
check again.