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
https://github.com/Layr-Labs/eigenda/compare/574b7dea5f0d504f67af5d6eac5411f27702dd5e...v2.2.0