Protocol
The op-alloy-protocol
crate contains types, constants, and methods
specific to Optimism derivation and batch-submission.
op-alloy-protocol
supports no_std
.
Background
Protocol types are primarily used for L2 chain derivation. This section will
break down L2 chain derivation as it relates to types defined in
op-alloy-protocol
- that is, from the raw L2 chain data posted to L1, to the
Batch
type. And since the Batch
type naively breaks up
into the payload attributes, once executed, it becomes the canonical L2 block!
Note though, this provides an incredibly simplified introduction. It is advised
to reference the specs for the most up-to-date information regarding
derivation.
The L2 chain is derived from data posted to the L1 chain - either as calldata
or blob data. Data is iteratively pulled from each L1 block and translated
into the first type defined by op-alloy-protocol
: the Frame
type.
Frame
s are parsed from the raw data. Each Frame
is a part of a Channel
, the next type one level up in deriving
L2 blocks. Channel
s have IDs that frames reference. Frame
s
are added iteratively to the Channel
. Once a
Channel
is ready, it can be used to read a Batch
.
Since a Channel
stitches together frames, it contains the raw frame
data. In order to turn this Channel
data into a Batch
,
it needs to be decompressed using the respective (de)compression algorithm
(see the channel specs for more detail on this). Once
decompressed, the raw data can be decoded into the Batch
type.