The EigenDA V2 documentation describes the architectural changes that allow for important network performance increases. From the point of view of rollup integrations, there are three important new features:
CERTIFIED
(i.e, signed over by operator set). This operation takes 10-20 seconds - providing lower confirmation latency and higher throughput for the rollup. Verification of the blobs now needs to be done by the rollup stack.We will refer to the below diagrams throughout the text.
sequenceDiagram
box Rollup Sequencer
participant B as Batcher
participant SP as Proxy
end
box EigenDA Network
participant D as Disperser
participant R as Relay
participant DA as DA Nodes
end
box Ethereum
participant BI as Batcher Inbox
participant BV as EigenDABlobVerifier
end
box Rollup Validator
participant VP as Proxy
participant V as Validator
end
%% Blob Creation and Dispersal Flow
B->>SP: Send payload
Note over SP: Encode payload into blob
alt
SP->>D: GetBlobCommitment(blob)
D-->>SP: blob_commitment
else
SP->>SP: Compute commitment locally
end
Note over SP: Create blob_header including payment_header
SP->>D: DisperseBlob(blob, blob_header)
D-->>SP: QUEUED status + blob_header_hash
%% Parallel dispersal to Relay and DA nodes
par Dispersal to Storage
R->>D: Pull blob
and Dispersal to DA nodes
D->>DA: Send Headers
DA->>R: Pull Chunks
DA->>D: Signature
end
loop Until CERTIFIED status
SP->>D: GetBlobStatus
D-->>SP: status + signed_batch + blob_verification_info
end
SP->>BV: getNonSignerStakesAndSignature(signed_batch)
SP->>BV: verifyBlobV2(batch_header, blob_verification_info, nonSignerStakesAndSignature)
SP->>BI: Submit cert = (batch_header, blob_verification_info, nonSignerStakesAndSignature)
%% Validation Flow
V->>BI: Read cert
V->>VP: GET /get/{cert} → cert
activate V
Note over VP: Extract relay_key + blob_header_hash from cert
VP->>R: GetBlob(blob_header_hash)
R-->>VP: Return blob
VP->>BV: verifyBlobV2
VP-->>V: Return validated blob
deactivate V
Below we give a summary of the APIs relevant to understanding the high-level diagram above.
See our gorilla/mux routes for full detail, but the gist is that proxy presents a REST endpoint based off of the op da-server spec to rollup batchers:
# OP
POST /put body: <preimage_bytes> → <hex_encoded_commitment>
GET /get/{hex_encoded_commitment} → <preimage_bytes>
# NITRO
Same as OP but add a `?commitment_mode=standard` query param
to both POST and GET methods.