Expired
Milestone
Apr 12, 2023–Jun 30, 2023
Protocol-agnostic Smart Rollup node
Goal
To achieve this milestone, the rollup node should run in a single binary and support protocol upgrades seamlessly. This includes being able to play refutation games that span over multiple protocols.
Design
Plan
This first tentative plan is laid out to allow to move components iteratively out of proto_*.
Preliminary tasks
-
Lock file (!8447 (merged)) -
Add query parameter for monitor block RPC to allow to filter based on current protocol (instead of next protocol) (!8448 (merged)) -
Replace Layer1.head by full block header (!8482 (merged)) -
Node_context.init does multiple RPCs, needs to be stored (optional): -
genesis_info -
kind
-
-
Reorgs with block headers (!8482 (merged)) -
Defunctorize components wrt. PVM (!8504 (merged)) -
Keep protocol (number or hash) in L2 block headers or somewhere else. For each block one should know from which protocol data is stored. #5560 (closed) (!8648 (merged)) -
Version store and context #5554 (closed) (!8676 (merged), !8715 (merged), !8723 (merged))
V0: Rollup node dispatcher
-
move Configuration module outside of proto_* (!8498 (merged)) -
move Metrics module outside of proto_* (!8530 (merged)) -
Rollup node module outside of proto_* which does head monitoring, reorg computation, and dispatch to Daemon.process_head of correct protocol rollup node module (!8516 (closed))
On protocol change (in reorg handling, i.e. before process_head)- Close node context, store, context, injector, batcher, various workers (refutation, commitments), RPC server of old proto specific rollup node
- Initialize new node context for new proto specific rollup node
- Keep current node context (only swapped on procotol change) and give as parameter to process_head
V1: Rollup node with common/compatible on disk data
-
injector (easy) (!8830 (merged)) -
context (easy, needs split before Proof module) (!8979 (merged)) -
store (harder, needs abstraction over data types) (!8876 (merged)) -
Node context (hard, lots of coupling) (!8948 (merged)) -
Protocol agnostic node with single binary (!9105 (merged)) -
Remove (and symlink) protocol specific binaries
Vn (n > 1)
Iteratively move various components outside of proto_*
-
RPC server (not too hard if store and context are outside proto_*) (!9233 (merged)) -
PVM plugin (!9263 (merged)) -
simulation (easy with PVM plugin) (!9264 (merged)) -
batcher (easy) (!9265 (merged)) -
Commitment publishin/cementation (easy) (!9266 (merged)) -
Interpreter module (medium, needs parametrization wrt PVM) (!9339 (merged)) -
Inbox reconstruction -
refutation workers (harder, need to keep workers alive) (!9337 (merged)) -
refutation logic (hard, needs clean interface for protocol specific parts) (!9337 (merged))
Testing
-
Standalone injector binary/daemon (#5589) (!9194 (merged)) -
Test protocol migration (#2901 (closed), related to #3703 and !8273 (merged))
Merge Requests Order
-
!8876 (merged): moving the store outside of protocol directories. (merged) -
!9128 (merged): splitting the Layer1 module in the protocol specific part (fetching full tezos blocks) and the rest (monitoring the chain, fetching headers, ...) (easy to review). (merged) -
!9129 (merged): moving errors and events modules (very easy to review). (merged) -
!8948 (merged): moving Node_context. This module is central and has a lot of coupling. (probably the most tedious to review). -
!9105 (merged): define protocol plugin for rollup node and moves the daemon (thus yields the first version of the proto agnotic node) (review of protocol changing logic in new daemon). -
!9233 (merged): Move RPC server and use dynamic directories for proto specific RPCs -
!9263 (merged): Definition of PVM plugins (used to move things that depend on the PVM like the simulation, interpreter, etc.) -
!9264 (merged): move simulation modules (easy to review, uses PVM plugin) -
!9265 (merged): move batcher -
!9266 (merged): move commitments publisher (straightforward, easy to review) -
!9337 (merged): move refutation logic -
!9339 (merged): move interpreter -
!9379 (merged): use correct constants depending on context
Loading
Loading
Loading
Loading