Secure Integration Overview
This document aims to outline what a secure EigenDA integration looks like, to provide rollup engineers with a strong understanding of how an EigenDA integration would impact their tech stack and security model. For full details, see the EigenDA V2 integration spec.
Note: Each rollup stack uses slightly different terminology to refer to the same ideas. We try to use the most general language possible but might sometimes use stack-specific language for clarity.
For any given rollup there are five main concerns inherent to an integration with external DA:
- Dispersal. The rollup batcher must write transaction batches to the DA layer, wait for confirmation, and write the resulting DA certificate to the rollup inbox.
- Certificate Verification. Either the rollup inbox contract
or the rollup OS must verify that DA certificate is valid, i.e. that enough
operators have certified the blob available, before reading the DA cert's data
from the DA layer. This ensures that a transaction batch referenced by an
invalid certificate is not executed.
- Certificate Punctuality (Timing) Verification. The certificate must be posted to the batcher inbox within some punctuality window. EigenDA blobs are only available to download for 2 weeks, so this check is necessary to prevent malicious sequencers from posting certificates right before the blob gets deleted.
- Retrieval. Rollup full nodes must retrieve EigenDA blobs as part of the L2 derivation/challenge process. Otherwise they cannot keep up with the state of the L2.
- Blob Commitment Verification. The rollup's fraud arbitration protocol must be capable of verifying that every EigenDA blob used to generate a state root matches the KZG commitment provided in the EigenDA cert posted to the rollup inbox. In doing this verification, the chain ensures that the transaction data used to generate the rollup's state root was not manipulated by the sequencer/proposer.
A fully secure integration requires doing the 3 verification checks.
| Dispersal | Retrieval | Cert Verification | Blob Verification | Timing Verification | |
|---|---|---|---|---|---|
| Trusted | x | x | |||
| Fully Secured | x | x | x | x | x |
There are different strategies for implementing each of these checks, with different rollup stacks employing different strategies. We outline the different approaches in this document.
Trusted Integration (Dispersal+Retrieval)

The trusted integration trusts that the sequencer is verifying certs and posting them to the rollup inbox in a timely fashion. This integration focuses on dispersal and retrieval for the sake of simplicity, but at the cost of security. Let's walk through the lifecycle of an L2 batch:
- The batcher component of the rollup sequencer prepares an L2 batch, and calls the DisperseBlob() rpc on the EigenDA disperser, sending the batch data.
- The disperser erasure-encodes the blob into chunks, calculates the KZG commitment, and calculates the KZG proof for each chunk. It then distributes the chunks to the EigenDA operator set, where each operator receives a subset of the chunks in proportion to its stake. Each operator then stores the chunks its received, verifying that each chunk matches its KZG proof and KZG commitment. If so, it signs a message certifying that the chunk has been stored and returns it to the disperser.
- The disperser aggregates the signatures from step 3 into a single BLS signature and sends it and some blob metadata to to the EigenDA Manager contract on Ethereum. The EigenDA Manager contract on Ethereum is responsible for verifying EigenDA certificates, and if they verify, recording that verification in storage. Verification consists of ensuring the aggregated signature is valid and is based on the current EigenDA operator set. This blob verification status is not used in this implementation strategy.
- If the sequencer is using the EigenDA disperser, then it shouldn't just trust the disperser when it says that the blob has successfully been dispersed, it should verify by checking onchain. This is important in this integration strategy because the rollup inbox does not perform this check. Without this check the EigenDA disperser is trusted (in addition to the sequencer).
- The batcher then sends a transaction to the rollup inbox contract on Ethereum with the EigenDA blob id as calldata, which accepts the EigenDA blob id.
On the derivation side, there is a similar flow in reverse. When an L2 full node encounters an EigenDA certificate in the rollup inbox, it knows to retrieve the underlying blob from the EigenDA operator set using the EigenDA client, and then interpret the transactions inside.
Please keep in mind that this integration model is insecure. The rollup sequencer is completely trusted in this scenario, because the fraud proof system is disabled, and state roots cannot be challenged. This means the sequencer can post whatever state roots they want to the bridge contract and potentially steal funds.
Cert Punctuality Verification
EigenDA blobs are only available to download for 2 weeks, so it is important to ensure that the batcher is not posting EigenDA certs to the rollup inbox after the blob has been deleted. Each securely integrated rollup stack should have a cert-punctuality-window defined by its derivation pipeline.
Cert Verification
Cert validity rules are encoded in the EigenDACertVerifier contract. Cert validity can thus be checked offchain by making an eth-call, or onchain by calling the respective method. It can also be zk proven via a storage proof. See our V2 integration spec. Ultimately though, the L1 chain must be convinced that the cert is valid, which can either be done:
- Pessimistically
- verify in the rollup-inbox contract for every blob (optimistic rollups)
- create a zk proof which is aggregated and submitted along with the state transition correctness proof (zk rollups)
- Optimistically: only verify during one step proving if/when a fraud happens (optimistic rollups)
Although the pessimistic implementation is simpler, the optimistic approach is often desirable since verification only incurs on-chain costs when the sequencer is dishonest.