Submitting a block to Ethereum
Rollup blocks are submitted to the host chain by calling the Zenith submitBlock function, attaching transaction data in a 4844 blob.
Code Flows
These examples assume one has already chosen a set of transactions and bundles, and gotten a co-signature from the Sequencer API.
Creating the blob transaction
Transform the
SignResponseinto aZenith::BlockHeader.
let header = Zenith::BlockHeader {
hostBlockNumber: resp.req.host_block_number,
rollupChainId: U256::from(self.config.ru_chain_id),
gasLimit: resp.req.gas_limit,
rewardAddress: resp.req.ru_reward_address,
blockDataHash: in_progress.contents_hash(),
};Encode the
submitBlocktransaction data from theBlockHeader& the Sequencer'sSignaturefrom theSignResponse
let data = Zenith::submitBlockCall { header, v, r, s, _4: Default::default() }.abi_encode();Encode the transactions into a 4844 blob sidecar containing the rlp-encoded transactions.
pub fn encode_blob(&self) -> SidecarBuilder<SimpleCoder> {
let mut coder = SidecarBuilder::default();
coder.ingest(self.encode_raw());
coder
}Attach the blob sidecar to a
TransactionRequest.
let tx = TransactionRequest::default().with_blob_sidecar(sidecar).with_input(data);Fill in remaining transaction details (including the calldata, which must contain the encoded
submitBlockCallabove).
Submit the constructed transaction to Ethereum.
Note: It is CRITICALLY IMPORTANT to use a private transaction relay to submit blocks coupled with fills. Leaking fill transactions or signed permit2 fills may result in loss of building privileges.
Last updated