Releases: Layr-Labs/eigenda
[Mainnet] EigenDA v2.2.1
Release 2.2.1 contains a single commit on top of 2.2.0, which fixed an issue where the pipeline was not pushing proxy to ghcr.
Proxy 2.2.1 docker image is now available.
Operators should feel free to use 2.2.0 or 2.2.1, they are equivalent images.
Make sure to check the 2.2.0 release notes!
[Mainnet] EigenDA v2.2.0
This is an optional release, but make sure to read the summary details in the relevant section below.
Validator node
This release provides a reduction in the default memory usage by the validator software, primarily by adjusting database cache sizes. Several safety features were also added to limit maximum memory consumption during periods of bursty traffic. A variety of internal code changes that lay the foundation for incremental database snapshotting and backup (V2 database only) were added. They are not enabled in this release, but intended for full release in the near future.
- feat: LittDB snapshots by @cody-littley in #1729
- refactor: Add RelayUseSecureGRPC flag to node by @dmanc in #1768
- feat: LittDB CLI stub by @cody-littley in #1784
- feat: littDB CLI benchmark command by @cody-littley in #1797
- feat: adds an option to start pprof when running LittDB CLI. by @cody-littley in #1808
- feat: add ls command to LittDB CLI by @cody-littley in #1809
- feat: litt unlock command by @cody-littley in #1823
- perf: reduce size of LittDB cache by @cody-littley in #1839
- feat: LittDB table info command by @cody-littley in #1834
- perf: larger memory safety buffer by @cody-littley in #1840
- perf: limit chunk memory use by @cody-littley in #1848
- feat: tool for compacting LevelDB by @cody-littley in #1852
- chore: LittDB benchmark dashboard by @cody-littley in #1865
- fix: semaphore use for StoreChunks by @cody-littley in #1866
Disperser
Adds an account index to our metadata store to support a user account feed on the Data API. Also sets a max connection age so that the relays and API servers can utilize newly available instances.
Fixes a bug in the encoding logic that causes the service to panic when precomputing an SRS table beyond the loaded points.
- feat: adds account index to blobmetadatastore-v2 by @pschork in #1791
- fix: better error log when relay cannot find blob in s3 by @cody-littley in #1799
- feat: max connection age by @cody-littley in #1811
- fix: don't return internal error for data not found by @cody-littley in #1821
- fix: Check bounds before precomputing SRS table by @dmanc in #1846
- fix: downgrade logging if attestation does not exist yet by @ian-shim in #1847
Payments
We are in the process of revamping how payments works and is accounted in the client, disperser, and validators. This work will be carried out by @litt3, so expect more PRs in future releases to complete this work. Reservations are switching from a fixed window algorithm to a leaky bucket algorithm. And on-demand improvements are a WIP.
- docs: Simplify and improve payment header docs by @litt3 in #1820
- feat(payments): Implement leaky bucket algorithm by @litt3 in #1853
DataAPI
Adds support for an account feed through the account index added to the disperser’s metadata store. Adds reservation expiration tracking on the DataAPI as a metric.
- feat: Add reservations expiration tracking to DataAPI by @dmanc in #1733
- feat: adds account index to blobmetadatastore-v2 by @pschork in #1791
- fix: allow liveness checks on private IPs (ie preprod) by @pschork in #1803
Contracts
Small tooling improvements that will be slowly rolled out and added to most eigenda contracts: initializable, access control, semver.
- feat: initializable by @pakim249CAL in #1757
- feat: access control contract by @pakim249CAL in #1758
- feat: use access control enumerable by @pakim249CAL in #1819
- feat: introduce IEigenDASemVer + use it in EigenDACertVerifier by @pakim249CAL in #1816
Integrations (contracts, clients, proxy)
Many new features related to secure integration spec have been added in this release. Proxy now returns teapot status code on GET paths to communicate cert validation errors with rollup clients. Proxy also now exposes some client dispersal metrics.
Most importantly for secure integrations, we changed the meaning of an EncodedPayload to require that it is padded to a power of 2 field elements (see this spec update PR for more details). This has simplification benefits and also allows decoding to a payload to be performed inside a fpvm/zkvm so as to prove and discard invalidly encoded payloads. Proxy GET routes also expose a new query_param ?return_encoded_payload=true
to return an EncodedPayload instead of a Payload to the rollup client.
On the contract side, EigenDACertVerifier now implements a semver() function which will allow crashing proxy if it ever is trying to deal with a cert verifier version that it doesn’t support, and force operators to update to a newer release. The EigenDACertVerifierRouter also now supports being initialized with multiple CertVerifiers, allowing for rollup teams to deploy their own and migrate the state of the EigenDA deployed Router to their own, without affecting the validity of previous certs.
- fix(proxy)!:
MaxBlobSizeBytes
processing by @ethenotethan in #1762 - feat(proxy): implement new teapot statuscode scheme by @samlaf in #1736
- chore(proxy): crash on startup if certverifier != v3 by @samlaf in #1802
- chore(proxy): consolidate dotenv examples files into single one by @samlaf in #1800
- feat(proxy): new GET query param to return EncodedPayload by @samlaf in #1813
- docs: add OP Optimistic Fault Proof with Cannon by @bxue-l2 in #1825
- test: add payload-to-blob conversion test_example by @samlaf in #1833
- feat: introduce IEigenDASemVer + use it in EigenDACertVerifier by @pakim249CAL in #1816
- feat: flexible router init by @pakim249CAL in #1787
- refactor!: encoded payload meaning by @samlaf in #1841
- feat(proxy): expose payload disperser metrics probe to proxy by @iquidus in #1863
AI/Tooling
- docs: Create repo style guide by @litt3 in #1740
- feat: Improve claude log preprocessing command by @litt3 in #1786
- feat(tools): new eigenda contract addresses reading cli by @samlaf in #1804
- feat: Enable additional linter rules just for new changes by @litt3 in #1817
- feat(tooling): Create a
/nitpick
command by @litt3 in #1814 - fix: create claude-security-reviewer.yaml which uses claude to do some basic security tests. by @anupsv in #1845
Full Changelog
[Mainnet] EigenDA v2.1.0
This release is optional but highly recommended for operators because it resolves a goroutine leak. It is optional for rollups and other proxy users.
This release follows the Blazar release (0.9.2), colloquially referred to as "v2", for all monorepo services, and proxy release 1.8.2. The eigenda-proxy repo is now archived and its codebase has moved under api/proxy. Monorepo releases will include proxy code moving forward.
We opted to bump the semver to 2.1.0 to match the v2 name and remove some confusion we have observed both internally and externally.
In order to keep our releases simpler for now, we opt to release all services of the monorepo together, following a single semver. We cannot for this reason commit to strictly following semver practices, and reserve the right to push breaking changes to auxiliary services such as the dataapi.
Monorepo-wide changes
One important change is that we deployed an EigenDADirectory contract to all chains, which should be used as the main contract address locator. See our docs network pages for more information.
- chore: bump to go1.24 by @samlaf in #1669
- chore: upgrade gnark-crypto 0.16->0.18 by @samlaf in #1755
- feat: eth client address directory by @hopeyen in #1691
- feat: Implement claude log preprocessing command by @litt3 in #1692
Validator Node
Fixes a goroutine leak that leads to CPU starvation over long time periods.
This release also adds a new flag NODE_EIGENDA_DIRECTORY
which takes advantaged of the newly deployed contract directory. In a future release we will be deprecating the NODE_BLS_OPERATOR_STATE_RETRIVER
and NODE_EIGENDA_SERVICE_MANAGER
in favor of NODE_EIGENDA_DIRECTORY
.
- feat: Validator blacklisting dispersers by @anupsv in #1588
- feat(littdb): improve file utilities by @cody-littley in #1684
- fix: properly set LittDB sharding factor for validators by @cody-littley in #1616
- fix: validator blacklist with mutex by @anupsv in #1673
- fix: thread pool leak by @cody-littley in #1770
- fix: v2 thread pool leak by @cody-littley in #1773
- fix: remove blacklist wiring from nodes by @anupsv in #1788
- test: LittDB benchmark by @cody-littley in #1647
- docs: documentation for database path configuration by @cody-littley in #1622
- docs: documentation for littDB snapshotting by @cody-littley in #1689
- docs: upload LittDB audit report by @cody-littley in #1706
Disperser
Mainly adding more observability, an audit fix regarding payments, and fixes a performance issue with validator connections.
- feat(disperser): Instrument the metadata store with metrics by @dmanc in #1606
- feat(disperser): new metrics for important thresholds by @cody-littley in #1577
- feat: grpc logging interceptor in v2 apiserver by @ian-shim in #1690
- fix(payments): period index calculation by @hopeyen in #1641
- fix: Initialize connection with validator in background goroutine #1769 by @cody-littley #1769
- refactor: combine api server and relay by @yujiezhu0 in #1645
Dataapi
Adds a payment subgraph that will be used for tracking reservation information in a followup release. Rest of changes are minor fixes / additions.
- feat: dataapi add stake amount to operator stake response by @pschork in #1677
- feat: Payments subgraph #1709 by @dmanc #1709
- fix(dataapi): fix time query_param serialization/formatting bugs by @samlaf in #1672
- fix: update dataapi v2 nodeInfo to call v2 validator API by @pschork in #1708
Contracts
The EigenDADirectory contract was added and deployed to all networks, and should going forward be used as the single source of truth for all EigenDA contract addresses.
- feat(contracts): Immutable threshold registry for EigenDAV1 cert verifier by @ethenotethan in #1658
- feat: add address directory by @pakim249CAL in #1676
- feat: enumerable names and script configs for address registry by @pakim249CAL in #1697
- feat(contracts): new DeployEigenDA script (used to deploy mainnet beta) #1675 by @pakim249CAL #1675
Integrations (contracts, clients, proxy)
This release introduces the CertVerifierV3 as well as the CertVerifierRouter which allows for secure upgrades to verification logic. See our custom security docs for more information. Take a look at our updated secure integration spec page for our latest thinking.
Note that the --eigenda.v2.cert-verifier-addr
flag has been changed to --eigenda.v2.cert-verifier-router-or-immutable-verifier-addr
since it now supports being passed either a CertVerifierRouter or CertVerifierV3 address.
Release 1.8.2 was only compatible with CertVerifierV2, wherreas 2.1.0 proxy is only compatible with CertVerifierV3, so do make sure to pass in a router or CertVerifierV3 address. Most importantly, V2 certs are still verifiable by the CertVerifierV3 contract because they only differ with V3 certs in the order of their fields. The CertVerifierV3 and up contracts however have a new checkDACert function interface that is future compatible. That function now requires the cert to be abi encoded, so do not use a CertVerifierV3 contract with previous releases of the proxy.
We added a .env.exampleV2.mainnet example env file for mainnet.
The --eigenda.v2.network
flag now also supports mainnet
. Note that this is purely a convenience and doesn't do anything special other than populating other flag values (disperser-url, cert-verifier-address, etc.) with the default values (that can be found in our docs or the new EigenDADirectory contract).
We reverted the NTP clock in the client, as we felt its implementation was not ideal, and we also believe clock control should be left to the controlling environment. Please make sure that the computer you are running proxy and/or clients on has a synchronized clock.
- feat: Cert Verifier Router Support by @ethenotethan in Layr-Labs/eigenda-proxy#384
- feat(contracts): Cert Verifier Router deploy script && inabox deployment by @ethenotethan in #1540
- feat(clients): v3 cert type with new interaction patterns with onchain
Router
&&CertVerifier
interfaces by @ethenotethan in #1532 - feat: add structured errors to verifier client by @samlaf in #1617
- feat!: use u8 for cert version by @pakim249CAL in #1632
- feat(proxy): Add
mainnet
network enum #1756 by @ethenotethan #1756 - fix(contracts): separate cert verifier interface by @pakim249CAL in #1579
- fix: Update retrieval clients to take in cert sum type interface by @ethenotethan in #1607
- fix: Update disperser client to take in logger vs initializing default one for ntp clock by @ethenotethan in #1651
- fix: Verify v2 cert instead of reflexively passing by @litt3 in #1648
- fix: disperser client deadlock by @samlaf in #1688
- fix: make disperser client backwards compatible by @samlaf in #1686
- fix: disperser_client v2 should use default onDemandQuorums by @samlaf in #1700
- chore: revert ntp clock #1760 by @samlaf #1760
- chore: cherry-pick celo's PR from proxy repo #1776 by @samlaf #1776
- chore: utility for generating important payload size thresholds. by @cody-littley in #1590
Full Changelog: v0.9.2...9b2520b
[Testnet] EigenDA v2.1.0-rc.3
Important
This release candidate is only valid for testnet environments
This release is optional but highly recommended for operators because it resolves a goroutine leak. It is optional for users.
This release follows the Blazar release (0.9.2), colloquially referred to as "v2". We opted to bump the semver to 2.1.0 to match this v2 name and remove some confusion we have observed both internally and externally.
In order to keep our releases simpler for now, we opt to release all services of the monorepo together, following a single semver. We cannot for this reason commit to strictly following semver practices, and reserve the right to push breaking changes to auxiliary services such as the dataapi.
We are deprecating the [eigenda-proxy repo](https://github.com/Layr-Labs/eigenda-proxy, and have moved its codebase under api/proxy. Monorepo releases will include proxy code moving forward.
Monorepo-wide changes
One important change is that we deployed an EigenDADirectory contract to all chains, which should be used as the main contract address locator. See our docs network pages for more information.
- chore: bump to go1.24 by @samlaf in #1669
- chore: upgrade gnark-crypto 0.16->0.18 by @samlaf in #1755
- feat: eth client address directory by @hopeyen in #1691
- feat: Implement claude log preprocessing command by @litt3 in #1692
Validator Node
Fixes a goroutine leak that leads to CPU starvation over long time periods.
This release also adds a new flag NODE_EIGENDA_DIRECTORY
which takes advantaged of the newly deployed contract directory. In a future release we will be deprecating the NODE_BLS_OPERATOR_STATE_RETRIVER
and NODE_EIGENDA_SERVICE_MANAGER
in favor of NODE_EIGENDA_DIRECTORY
.
- feat: Validator blacklisting dispersers by @anupsv in #1588
- feat(littdb): improve file utilities by @cody-littley in #1684
- fix: properly set LittDB sharding factor for validators by @cody-littley in #1616
- fix: validator blacklist with mutex by @anupsv in #1673
- fix: thread pool leak by @cody-littley in #1770
- fix: v2 thread pool leak by @cody-littley in #1773
- fix: remove blacklist wiring from nodes by @anupsv in #1788
- test: LittDB benchmark by @cody-littley in #1647
- docs: documentation for database path configuration by @cody-littley in #1622
- docs: documentation for littDB snapshotting by @cody-littley in #1689
- docs: upload LittDB audit report by @cody-littley in #1706
Disperser
Mainly adding more observability, an audit fix regarding payments, and fixes a performance issue with validator connections.
- feat(disperser): Instrument the metadata store with metrics by @dmanc in #1606
- feat(disperser): new metrics for important thresholds by @cody-littley in #1577
- feat: grpc logging interceptor in v2 apiserver by @ian-shim in #1690
- fix(payments): period index calculation by @hopeyen in #1641
- fix: Initialize connection with validator in background goroutine #1769 by @cody-littley #1769
- refactor: combine api server and relay by @yujiezhu0 in #1645
Dataapi
Adds a payment subgraph that will be used for tracking reservation information in a followup release. Rest of changes are minor fixes / additions.
- feat: dataapi add stake amount to operator stake response by @pschork in #1677
- feat: Payments subgraph #1709 by @dmanc #1709
- fix(dataapi): fix time query_param serialization/formatting bugs by @samlaf in #1672
- fix: update dataapi v2 nodeInfo to call v2 validator API by @pschork in #1708
Contracts
The EigenDADirectory contract was added and deployed to all networks, and should going forward be used as the single source of truth for all EigenDA contract addresses.
- feat(contracts): Immutable threshold registry for EigenDAV1 cert verifier by @ethenotethan in #1658
- feat: add address directory by @pakim249CAL in #1676
- feat: enumerable names and script configs for address registry by @pakim249CAL in #1697
- feat(contracts): new DeployEigenDA script (used to deploy mainnet beta) #1675 by @pakim249CAL #1675
Integrations (contracts, clients, proxy)
This release introduces the CertVerifierV3 as well as the CertVerifierRouter which allows for secure upgrades to verification logic. See our custom security docs for more information. Take a look at our updated secure integration spec page for our latest thinking.
The proxy --network-id
flag now supports mainnet
, and we also added a .env.exampleV2.mainnet example env file.
We reverted the NTP clock in the client, as we felt its implementation was not ideal, and we also believe clock control should be left to the controlling environment. Please make sure that the computer you are running proxy and/or clients on has a synchronized clock.
- feat(contracts): Cert Verifier Router deploy script && inabox deployment by @ethenotethan in #1540
- feat(clients): v3 cert type with new interaction patterns with onchain
Router
&&CertVerifier
interfaces by @ethenotethan in #1532 - feat: add structured errors to verifier client by @samlaf in #1617
- feat!: use u8 for cert version by @pakim249CAL in #1632
- feat(proxy): Add
mainnet
network enum #1756 by @ethenotethan #1756 - fix(contracts): separate cert verifier interface by @pakim249CAL in #1579
- fix: Update retrieval clients to take in cert sum type interface by @ethenotethan in #1607
- fix: Update disperser client to take in logger vs initializing default one for ntp clock by @ethenotethan in #1651
- fix: Verify v2 cert instead of reflexively passing by @litt3 in #1648
- fix: disperser client deadlock by @samlaf in #1688
- fix: make disperser client backwards compatible by @samlaf in #1686
- fix: disperser_client v2 should use default onDemandQuorums by @samlaf in #1700
- chore: revert ntp clock #1760 by @samlaf #1760
- chore: cherry-pick celo's PR from proxy repo #1776 by @samlaf #1776
- chore: utility for generating important payload size thresholds. by @cody-littley in #1590
Full Changelog: v0.9.2...9b2520b
EigenDA Blazar (v0.9.1)
Summary
This is an optional patch release limited to the validator node which enables support for internal/ephemeral V2 port configs.
Full Changelog: v0.9.0...v0.9.1
EigenDA Blazar (v0.9.0)
Summary
This release is required for users and operators to upgrade.
We are excited to release EigenDA v0.9.0, code name "Blazar" (aka. EigenDA V2), a major protocol and architecture upgrade for the entire system.
System Requirements for Validators
https://docs.eigenda.xyz/operator-guides/requirements/system-requirements
Key Features and Enhancements
-
Control Plane & Data Plane Separation
Separates the flow of blob data from its metadata/control as they move through disperser, encoders and validators. This improves end-to-end data movement efficiency and boosts validator node performance and robustness by increasing network utilization through concurrent download connections.
-
High-Performance Storage with LittDB
Introduces LittDB, a highly performant key/value store specifically tailored for EigenDA’s needs. LittDB replaces LevelDB as the storage engine on validator nodes, significantly improving disk-related operations by two orders of magnitude. Designed from the ground up, LittDB ensures high capacity, high throughput, low latency, and low memory/CPU utilization.
-
Payments Support
EigenDA now supports on-demand payments and reservations, enabling applications to access the network permissionlessly with flexible payment options.
-
Faster and Cheaper Dispersal with DA Certificate
Reduces end-to-end dispersal latency and cost by eliminating on-chain confirmation and returning a DA certificate representing DA nodes' attestations.
-
New Chunk Allocation Model
Introduces a fixed-chunk model, making encoding a stateless operation and reducing system complexity.
-
Revamped Blob State Management
Enhances robustness by enforcing immutable records and introducing constraints into the data model.
-
Improved Blob Addressing
Introduces Blobkey, a universally unique string identifier for each blob, replacing the previous composite key (batch header hash + blob index). This simplifies interactions and improves UX when working with blobs.
Further Details
Breaking Changes
- Type
accountID
as Address instead of string by @ian-shim in #1335 - reservation period index by @hopeyen in #1350
- Fix how relay/validators compute hashes. by @cody-littley in #1351
- Adds domain to hashing functions. by @cody-littley in #1358
- Replay protection by @cody-littley in #1365
- fix: ondemand scheme by @hopeyen in #1386
- [Breaking Changes] Add signature replay protection for AuthenticatePaymentStateRequest by @yujiezhu0 in #1411
- refactor!: version contract types by @pakim249CAL in #1516
- feat!: LittDB multi-drive support by @cody-littley in #1564
- feat!: implement deterministic assignment by @mooselumph in #1587
Performance Improvements
- GPU accelerated encoder by @dmanc in #895
- Compress relay auth signature by @ian-shim in #1068
- Comapct relay chunks by @cody-littley in #1197
- Reduce relay memory usage by @cody-littley in #1293
- Cache verifier callers by @litt3 in #1331
- Improve perf of blob retrieval within bucket by @jianoaix in #1329
- Introduce feed cache by @jianoaix in #1355
- Make feed cache update async by @jianoaix in #1363
- Integrate feed cache with batch feed and operators signinginfo by @jianoaix in #1364
- Disable seek compaction by @dmanc in #1342
- Feed cache: Use circular queue for zero-alloc of memory by @jianoaix in #1384
- perf: add KV cache for lookup requests in data apis by @jianoaix in #1425
- perf: apply query limit to the feed fetch by @jianoaix in #1431
- perf: make dispersal feed based on responses not requests by @jianoaix in #1486
- perf: support batch liveness check of validators by @jianoaix in #1488
Features
- Add latency metric for dispersal/retrieval with blob size breakdown by @jianoaix in #939
- [v2][node] Construct relay client from relay address from chain by @ian-shim in #931
- [v2] disperser server payments api by @hopeyen in #902
- Adds grpcurl/reflection support for v1 apis via disperser-v2 reflection service by @pschork in #954
- Add a new dataapi server by @jianoaix in #955
- Add timeout to download chunks from node by @ian-shim in #941
- Relay metrics by @cody-littley in #938
- [v2] disperser client payments api by @hopeyen in #928
- v2 Retrieval Client by @ian-shim in #953
- Added metrics for the encoding manager. by @cody-littley in #967
- Add metrics to the dispatcher by @cody-littley in #968
- Support blob and batch fetch APIs by @jianoaix in #966
- [payment] transactor ping payment vault contract by @hopeyen in #827
- Add metrics to v2 api server. by @cody-littley in #969
- V2 Blob Verification by @0x0aa0 in #781
- [v2] Offchain integrations with v2 contracts by @ian-shim in #960
- payment struct and names ReservationPeriod and Salt by @hopeyen in #965
- Pull out the operator handling logic that's shareable by @jianoaix in #981
- Payments storage packing by @0x0aa0 in #942
- [v2] Update blob header hasher by @ian-shim in #962
- payments - global reservation uses interval config by @hopeyen in #980
- update blob verifier by @0x0aa0 in #992
- reservation timestamp check by @hopeyen in #990
- Support operator APIs by @jianoaix in #987
- Node metrics by @cody-littley in #948
- Separate out client v2 package by @ian-shim in #986
- [v2] integrate with new payments contract by @hopeyen in #995
- Disperser Registry by @0x0aa0 in #1019
- Add
AlreadyExists
error from disperser by @ian-shim in #1026 - init once accountant by @hopeyen in #1015
- [v2] Add quorum results to attestation by @ian-shim in #1018
- Sign get chunks by @cody-littley in #1022
- Fail v2 blobs for no attestations by @ian-shim in #1043
- symbols charged and payment metadata check by @hopeyen in #1034
- Add support for metrics APIs by @jianoaix in #1044
- Add support for blob certification and verification info lookup APIs by @jianoaix in #1056
- [v2] Retriever server by @ian-shim in #1048
- feat: add basic logging in disperser meterer by @hopeyen in #1069
- Enable relay authentication for GetChunks() requests in inabox. by @cody-littley in #1072
- Add support for operator responses APIs by @jianoaix in #1075
- Disperser auth by @cody-littley in #984
- start on-chain refresh by @hopeyen in #1083
- Enable disperser-v2 prometheus metrics registry by @pschork in #1079
- Add metrics to encoder v2 by @dmanc in #1080
- Add a new relay metric to more accurately describe cache behavior. by @cody-littley in #1092
- Add e2e latency metrics in controller by @ian-shim in #1095
- Add throughput metrics to controller by @dmanc in https://github...
[Testnet] Blazar (v0.9.0-rc.5)
Summary
This release is required for users and operators to upgrade.
We are excited to release EigenDA v0.9.0, code name "Blazar" (aka. EigenDA V2), a major protocol and architecture upgrade for the entire system.
Key Features and Enhancements
-
Control Plane & Data Plane Separation
Separates the flow of blob data from its metadata/control as they move through disperser, encoders and validators. This improves end-to-end data movement efficiency and boosts validator node performance and robustness by increasing network utilization through concurrent download connections.
-
High-Performance Storage with LittDB
Introduces LittDB, a highly performant key/value store specifically tailored for EigenDA’s needs. LittDB replaces LevelDB as the storage engine on validator nodes, significantly improving disk-related operations by two orders of magnitude. Designed from the ground up, LittDB ensures high capacity, high throughput, low latency, and low memory/CPU utilization.
-
Payments Support
EigenDA now supports on-demand payments and reservations, enabling applications to access the network permissionlessly with flexible payment options.
-
Faster and Cheaper Dispersal with DA Certificate
Reduces end-to-end dispersal latency and cost by eliminating on-chain confirmation and returning a DA certificate representing DA nodes' attestations.
-
New Chunk Allocation Model
Introduces a fixed-chunk model, making encoding a stateless operation and reducing system complexity.
-
Revamped Blob State Management
Enhances robustness by enforcing immutable records and introducing constraints into the data model.
-
Improved Blob Addressing
Introduces Blobkey, a universally unique string identifier for each blob, replacing the previous composite key (batch header hash + blob index). This simplifies interactions and improves UX when working with blobs.
Further Details
What's Changed
Changes between the previous release candidate and the current release candidate. The main change between rc.4 and rc.5 is #1634.
Breaking Changes
- feat!: LittDB multi-drive support by @cody-littley in #1564
- feat!: implement deterministic assignment by @mooselumph in #1587
Features
- feat: only do debug computations if equivalence check fails by @litt3 in #1563
- feat: validator node authenticate and validate blob headers by @hopeyen in #1529
- feat: reserved-only disperser apiserver by @hopeyen in #1536
- feat: configurable traffic generator pool by @cody-littley in #1569
- feat: cert verifier v3 + router by @pakim249CAL in #1518
- feat: Create interface for offchain metering store by @dmanc in #1581
Fixes
- fix: replaces hard coded quorum IDs on dataapi handlers by @pschork in #1566
- fix: littDB consistent keyfiles by @cody-littley in #1573
- fix: flaky validator client test by @cody-littley in #1582
- fix(contracts): Update V2 cert verifier deploy script to use latest verifier by @ethenotethan in #1585
- fix: Make LittDBStoragePathsFlag not required by @dmanc in #1596
- fix: properly set LittDB sharding factor for validators by @cody-littley in #1616
- fix(assignment): nil pointer dereference (#1634)
Misc
- chore: delete unused code by @cody-littley in #1558
- chore: Remove MockRollup and test usage in favor of
EigenDACertVerifierV1
by @ethenotethan in #1565 - refactor: ntp init logs but not panic by @hopeyen in #1568
- docs(mdbook): recency window check should use <= not < by @samlaf in #1567
- chore: one second batches by @cody-littley in #1583
- docs: paymentHeader update by @hopeyen in #1570
- docs: update op secure integration overview by @bxue-l2 in #1592
- ci: add env and update readme to include the correct mdBook by @bxue-l2 in #1595
Full Changelog: v0.9.0-rc.4...v0.9.0-rc.5
[Testnet] Blazar (v0.9.0-rc.4)
Summary
This release is required for users and operators to upgrade.
We are excited to release EigenDA v0.9.0, code name "Blazar" (aka. EigenDA V2), a major protocol and architecture upgrade for the entire system.
Key Features and Enhancements
-
Control Plane & Data Plane Separation
Separates the flow of blob data from its metadata/control as they move through disperser, encoders and validators. This improves end-to-end data movement efficiency and boosts validator node performance and robustness by increasing network utilization through concurrent download connections.
-
High-Performance Storage with LittDB
Introduces LittDB, a highly performant key/value store specifically tailored for EigenDA’s needs. LittDB replaces LevelDB as the storage engine on validator nodes, significantly improving disk-related operations by two orders of magnitude. Designed from the ground up, LittDB ensures high capacity, high throughput, low latency, and low memory/CPU utilization.
-
Payments Support
EigenDA now supports on-demand payments and reservations, enabling applications to access the network permissionlessly with flexible payment options.
-
Faster and Cheaper Dispersal with DA Certificate
Reduces end-to-end dispersal latency and cost by eliminating on-chain confirmation and returning a DA certificate representing DA nodes' attestations.
-
New Chunk Allocation Model
Introduces a fixed-chunk model, making encoding a stateless operation and reducing system complexity.
-
Revamped Blob State Management
Enhances robustness by enforcing immutable records and introducing constraints into the data model.
-
Improved Blob Addressing
Introduces Blobkey, a universally unique string identifier for each blob, replacing the previous composite key (batch header hash + blob index). This simplifies interactions and improves UX when working with blobs.
Further Details
What's Changed
Changes between the previous release candidate and the current release candidate.
Breaking Changes
- feat!: LittDB multi-drive support by @cody-littley in #1564
- feat!: implement deterministic assignment by @mooselumph in #1587
Features
- feat: only do debug computations if equivalence check fails by @litt3 in #1563
- feat: validator node authenticate and validate blob headers by @hopeyen in #1529
- feat: reserved-only disperser apiserver by @hopeyen in #1536
- feat: configurable traffic generator pool by @cody-littley in #1569
- feat: cert verifier v3 + router by @pakim249CAL in #1518
- feat: Create interface for offchain metering store by @dmanc in #1581
Fixes
- fix: replaces hard coded quorum IDs on dataapi handlers by @pschork in #1566
- fix: littDB consistent keyfiles by @cody-littley in #1573
- fix: flaky validator client test by @cody-littley in #1582
- fix(contracts): Update V2 cert verifier deploy script to use latest verifier by @ethenotethan in #1585
- fix: Make LittDBStoragePathsFlag not required by @dmanc in #1596
- fix: properly set LittDB sharding factor for validators by @cody-littley in #1616
Misc
- chore: delete unused code by @cody-littley in #1558
- chore: Remove MockRollup and test usage in favor of
EigenDACertVerifierV1
by @ethenotethan in #1565 - refactor: ntp init logs but not panic by @hopeyen in #1568
- docs(mdbook): recency window check should use <= not < by @samlaf in #1567
- chore: one second batches by @cody-littley in #1583
- docs: paymentHeader update by @hopeyen in #1570
- docs: update op secure integration overview by @bxue-l2 in #1592
- ci: add env and update readme to include the correct mdBook by @bxue-l2 in #1595
Full Changelog: v0.9.0-rc.3...v0.9.0-rc.4
[Testnet] Blazar (v0.9.0-rc.3)
Summary
This release is required for users and operators to upgrade.
We are excited to release EigenDA v0.9.0, code name "Blazar" (aka. EigenDA V2), a major protocol and architecture upgrade for the entire system.
Key Features and Enhancements
-
Control Plane & Data Plane Separation
Separates the flow of blob data from its metadata/control as they move through disperser, encoders and validators. This improves end-to-end data movement efficiency and boosts validator node performance and robustness by increasing network utilization through concurrent download connections.
-
High-Performance Storage with LittDB (New)
Introduces LittDB, a highly performant key/value store specifically tailored for EigenDA’s needs. LittDB replaces LevelDB as the storage engine on validator nodes, significantly improving disk-related operations by two orders of magnitude. Designed from the ground up, LittDB ensures high capacity, high throughput, low latency, and low memory/CPU utilization.
-
Payments Support
EigenDA now supports on-demand payments and reservations, enabling applications to access the network permissionlessly with flexible payment options.
-
Faster and Cheaper Dispersal with DA Certificate
Reduces end-to-end dispersal latency and cost by eliminating on-chain confirmation and returning a DA certificate representing DA nodes' attestations.
-
New Chunk Allocation Model
Introduces a fixed-chunk model, making encoding a stateless operation and reducing system complexity.
-
Revamped Blob State Management
Enhances robustness by enforcing immutable records and introducing constraints into the data model.
-
Improved Blob Addressing
Introduces Blobkey, a universally unique string identifier for each blob, replacing the previous composite key (batch header hash + blob index). This simplifies interactions and improves UX when working with blobs.
Further Details
What's Changed
Changes between the previous release candidate and the current release candidate. Note: We're including the changes from v0.9.0-rc.2 since v0.9.0-rc.3 is a hotfix release.
Breaking Changes
- refactor!: version contract types by @pakim249CAL in #1516
Performance Improvements
- perf: add KV cache for lookup requests in data apis by @jianoaix in #1425
- perf: apply query limit to the feed fetch by @jianoaix in #1431
- perf: make dispersal feed based on responses not requests by @jianoaix in #1486
- perf: support batch liveness check of validators by @jianoaix in #1488
Features
- feat: distributed retrieval operator socket by @hopeyen in #1403
- feat: Verifiable Deployment Calldata script by @pakim249CAL in #1415
- feat: deploy contract toml config by @pakim249CAL in #1427
- feat: support range query for per-account blobs at metadata store by @jianoaix in #1438
- feat: add API for per-account blob feed by @jianoaix in #1449
- feat: add metrics to payload disperser by @cody-littley in #1441
- feat: provider signers and nonsigners in batch api by @jianoaix in #1451
- feat: new traffic generator metrics/settings by @cody-littley in #1470
- feat: global batch timeout by @cody-littley in #1460
- feat: littDB by @cody-littley in #1280
- feat: Use SRS resource files, and remove unnecessary logic to fetch by @litt3 in #1473
- feat: network signing rate by @jianoaix in #1475
- feat: Add payload client usage examples by @litt3 in #1454
- feat: Check signing thresholds when polling blob status by @litt3 in #1479
- feat: support batch->blobs at metadata store by @jianoaix in #1481
- feat: Add socket column and csv output to quorumscan by @dmanc in #1501
- feat: littDB validator integration by @cody-littley in #1429
- feat: add constituent blobs to the batch by @jianoaix in #1499
- feat: create a calculator for eigenda requirements by @cody-littley in #1504
- feat: periodically return attestation with updated signatures by @litt3 in #1497
- feat: configuration for the validator's littDB cache size by @cody-littley in #1519
- feat: Add debug messages to better understand equivalence check failures by @litt3 in #1531
- feat: validator/disperser clock synchrony by @hopeyen in #1509
- feat: better distributed retrieval by @cody-littley in #1485
- feat: batch metrics by @cody-littley in #1525
- feat: LittDB caching by @cody-littley in #1526
- feat: calculator improvements by @cody-littley in #1546
- feat: dynamic validator cache size by @cody-littley in #1553
- feat: controller immdeiately submits new attestation if critical threshold is crossed by @cody-littley in #1550
- feat: use siphash for littDB sharding by @cody-littley in #1506
- feat: auto-calculate validator cache size by @cody-littley in #1557
Fixes
- fix: update retriever address for preprod by @cody-littley in #1430
- fix: update foundry version to unbreak codeql by @jianoaix in #1447
- fix: add per-account api path by @jianoaix in #1450
- fix: testnet contract address by @cody-littley in #1455
- fix: set the right cache control ttl for v2 APIs by @jianoaix in #1463
- fix: Make local copy of loop variable by @litt3 in #1465
- fix: test metrics by @cody-littley in #1469
- fix: controller state recovery - consider all pending blobs by @ian-shim in #1466
- fix: store failed dispersal response by @jianoaix in #1476
- fix: a nil pointer bug with test metrics by @cody-littley in #1474
- fix: littDB metrics by @cody-littley in #1503
- fix: change implementation of unsafe string. by @cody-littley in #1507
- fix: reuse random number generator in load generator by @cody-littley in #1508
- fix: use time series to derive avg throughput and total bytes by @jianoaix in #1517
- fix: Quorum threshold checking by @litt3 in #1530
- fix: audit finding 3 by @cody-littley in #1535
- fix: validator client metrics by @cody-littley in #1547
- fix: default validator cache size by @cody-littley in #1548
- fix: auditor finding 5 by @cody-littley in #1543
- fix: auditor finding 6 by @cody-littley in #1545
- fix: auditor finding 7 by @cody-littley in #1544
- fix: properly call .End() on validator client probe by @cody-littley in #1551
- fix: Use small default cache sizes by @dmanc in #1555
- fix: reduce controller health check info noise by @yujiezhu0 in #1556
- fix: littdb read metrics by @cody-littley in #1562
- fix: Update node handling of new dataapi liveness check format for v2 by @dmanc in #1561
Misc
- doc: document deployment procedure steps by @pakim249CAL in #1408
- refactor: more precise log for dynamo conditional put by @hopeyen in #1424
- docs: add mdbook-mermaid plugin by @samlaf in #1382
- Enhance the metrics summary by @jianoaix in #1398
- ci(contracts): enforce no-warnings + formatting by @samlaf in https://github.com/Layr-...
[Testnet] Blazar (v0.9.0-rc.2)
Summary
This release is required for users and operators to upgrade.
We are excited to release EigenDA v0.9.0, code name "Blazar" (aka. EigenDA V2), a major protocol and architecture upgrade for the entire system.
Key Features and Enhancements
-
Control Plane & Data Plane Separation
Separates the flow of blob data from its metadata/control as they move through disperser, encoders and validators. This improves end-to-end data movement efficiency and boosts validator node performance and robustness by increasing network utilization through concurrent download connections.
-
High-Performance Storage with LittDB (New)
Introduces LittDB, a highly performant key/value store specifically tailored for EigenDA’s needs. LittDB replaces LevelDB as the storage engine on validator nodes, significantly improving disk-related operations by two orders of magnitude. Designed from the ground up, LittDB ensures high capacity, high throughput, low latency, and low memory/CPU utilization.
-
Payments Support
EigenDA now supports on-demand payments and reservations, enabling applications to access the network permissionlessly with flexible payment options.
-
Faster and Cheaper Dispersal with DA Certificate
Reduces end-to-end dispersal latency and cost by eliminating on-chain confirmation and returning a DA certificate representing DA nodes' attestations.
-
New Chunk Allocation Model
Introduces a fixed-chunk model, making encoding a stateless operation and reducing system complexity.
-
Revamped Blob State Management
Enhances robustness by enforcing immutable records and introducing constraints into the data model.
-
Improved Blob Addressing
Introduces Blobkey, a universally unique string identifier for each blob, replacing the previous composite key (batch header hash + blob index). This simplifies interactions and improves UX when working with blobs.
Further Details
What's Changed
Changes between the previous release candidate and the current release candidate.
Breaking Changes
- refactor!: version contract types by @pakim249CAL in #1516
Performance Improvements
- perf: add KV cache for lookup requests in data apis by @jianoaix in #1425
- perf: apply query limit to the feed fetch by @jianoaix in #1431
- perf: make dispersal feed based on responses not requests by @jianoaix in #1486
- perf: support batch liveness check of validators by @jianoaix in #1488
Features
- feat: distributed retrieval operator socket by @hopeyen in #1403
- feat: Verifiable Deployment Calldata script by @pakim249CAL in #1415
- feat: deploy contract toml config by @pakim249CAL in #1427
- feat: support range query for per-account blobs at metadata store by @jianoaix in #1438
- feat: add API for per-account blob feed by @jianoaix in #1449
- feat: add metrics to payload disperser by @cody-littley in #1441
- feat: provider signers and nonsigners in batch api by @jianoaix in #1451
- feat: new traffic generator metrics/settings by @cody-littley in #1470
- feat: global batch timeout by @cody-littley in #1460
- feat: littDB by @cody-littley in #1280
- feat: Use SRS resource files, and remove unnecessary logic to fetch by @litt3 in #1473
- feat: network signing rate by @jianoaix in #1475
- feat: Add payload client usage examples by @litt3 in #1454
- feat: Check signing thresholds when polling blob status by @litt3 in #1479
- feat: support batch->blobs at metadata store by @jianoaix in #1481
- feat: Add socket column and csv output to quorumscan by @dmanc in #1501
- feat: littDB validator integration by @cody-littley in #1429
- feat: add constituent blobs to the batch by @jianoaix in #1499
- feat: create a calculator for eigenda requirements by @cody-littley in #1504
- feat: periodically return attestation with updated signatures by @litt3 in #1497
- feat: configuration for the validator's littDB cache size by @cody-littley in #1519
- feat: Add debug messages to better understand equivalence check failures by @litt3 in #1531
- feat: validator/disperser clock synchrony by @hopeyen in #1509
- feat: better distributed retrieval by @cody-littley in #1485
- feat: batch metrics by @cody-littley in #1525
- feat: LittDB caching by @cody-littley in #1526
- feat: calculator improvements by @cody-littley in #1546
- feat: dynamic validator cache size by @cody-littley in #1553
- feat: controller immdeiately submits new attestation if critical threshold is crossed by @cody-littley in #1550
- feat: use siphash for littDB sharding by @cody-littley in #1506
Fixes
- fix: update retriever address for preprod by @cody-littley in #1430
- fix: update foundry version to unbreak codeql by @jianoaix in #1447
- fix: add per-account api path by @jianoaix in #1450
- fix: testnet contract address by @cody-littley in #1455
- fix: set the right cache control ttl for v2 APIs by @jianoaix in #1463
- fix: Make local copy of loop variable by @litt3 in #1465
- fix: test metrics by @cody-littley in #1469
- fix: controller state recovery - consider all pending blobs by @ian-shim in #1466
- fix: store failed dispersal response by @jianoaix in #1476
- fix: a nil pointer bug with test metrics by @cody-littley in #1474
- fix: littDB metrics by @cody-littley in #1503
- fix: change implementation of unsafe string. by @cody-littley in #1507
- fix: reuse random number generator in load generator by @cody-littley in #1508
- fix: use time series to derive avg throughput and total bytes by @jianoaix in #1517
- fix: Quorum threshold checking by @litt3 in #1530
- fix: audit finding 3 by @cody-littley in #1535
- fix: validator client metrics by @cody-littley in #1547
- fix: default validator cache size by @cody-littley in #1548
- fix: auditor finding 5 by @cody-littley in #1543
- fix: auditor finding 6 by @cody-littley in #1545
- fix: auditor finding 7 by @cody-littley in #1544
- fix: properly call .End() on validator client probe by @cody-littley in #1551
- fix: Use small default cache sizes by @dmanc in #1555
Misc
- doc: document deployment procedure steps by @pakim249CAL in #1408
- refactor: more precise log for dynamo conditional put by @hopeyen in #1424
- docs: add mdbook-mermaid plugin by @samlaf in #1382
- Enhance the metrics summary by @jianoaix in #1398
- ci(contracts): enforce no-warnings + formatting by @samlaf in #1444
- docs(mdbook): cleanup integration section by @samlaf in #1439
- chore: Fix old 'blob certified' terminology to be 'blob complete' by @litt3 in #1462
- chore(proto): push protos to buf BSR registry by @samlaf in #1437
- chore: reformat batch code by @cody-littley in #1461
- docs: Add SRS docs by @litt3 in #1458
-...