github Layr-Labs/eigenda v2.4.0
[Mainnet] EigenDA v2.4.0

18 hours ago

v2.4.0 Release Notes

  • Commit: 1eeb100544fd8d0077ec22afd5c19e9049516f4c
  • Prior Release: 2.3.1
  • Prior Commit: 94c76821e104ae46229084e85f074d7c215878b7

Mainnet Release of v2.4.0
Validators - Mandatory
Rollups - Recommended

This is a mandatory release for validators that fixes an issue with the ejection defense mechanism. Make sure to read the summary details in the relevant section below.

Core

Introduces a new config framework in order to improve maintainability.

Validator node

Fixes an issue with the ejection defense feature where it assumed the ECDSA key was always loaded. Also implements validator payment validation which is currently disabled by default.

See eigenda-operator-setup v2.4.0 release notes for information on enabling ejection defense.

Disperser

Refactors around encoding to improve readability and maintainability.

  • refactor(prover): create prover v2 (currently just copy of v1) by @samlaf in #2035
  • feat(encoding-v2): simplify bunch of srs/kzgconfig stuff by @samlaf in #2036
  • fix(bloblength): use uint32 instead of uint by @samlaf in #2053
  • refactor(prover-v2): cleanup unused fcts by @samlaf in #2057
  • perf(fft): pre-allocate roots of unity slice by @samlaf in #2082
  • refactor(encoding): cleanup package by @samlaf in #2081
  • feat: reuse operator state during signature aggregation by @cody-littley in #2093
  • chore: generalize the leaky bucket so it can be used elsewhere in the codebase by @cody-littley in #2073
  • fix(relay): Pass chainReader into the relay server struct by @dmanc in #2100
  • refactor(prover-v2): split off kzg committer into separate struct by @samlaf in #2097
  • refactor: benchmark and simplify committer by @samlaf in #2101
  • refactor(relay): Add listener to relay server struct by @dmanc in #2107
  • refactor(verifier-v2): move blob length verification to committer package by @samlaf in #2110
  • refactor(toeplitz): remove unused functions by @samlaf in #2121
  • fix(committer): make G2TrailingSRSPath optional by @samlaf in #2150
  • refactor: decouple verifier-v2 and encoder by @samlaf in #2147
  • refactor(controller): Refactor disperser request signer to use new config framework by @dmanc in #2138
  • refactor(controller): Add configuration validation for heartbeat monitor by @dmanc in #2139
  • fix(committer): remove G2TrailingSRSPath!="" check by @samlaf in #2152
  • refactor(controller): Add configuration validation for encoding manager and dispatcher by @dmanc in #2140
  • chore: cleanup prover-v2 srs config by @samlaf in #2156
  • perf: parallel g1-ecfft by @samlaf in #2159
  • chore: bump icicle 3.4.0->3.9.0 by @samlaf in #2153
  • fix(apiserver): validation for committer config was wrong by @samlaf in #2178

DataAPI

  • feat: utility for looking up signing rate using DataAPI by @cody-littley in #2118
  • fix(dataapi): reduce metrics/summary endpoint start timestamp by prometheus rate interval size by @pschork in #2170

Contracts

A configuration registry is added to the EigenDA Directory, which is essentially a lookup table for configurations.

The previous churning design is replaced with a permissionless churning design where the lowest stake operator is ejected from the operator set if an operator tries to register when the operator set is full.

As part of the churning change, the registry coordinator from eigenlayer-middleware is copied over from the submodule into the repository and modified to support these new churning changes.

A Hoodi deployment configuration set is added.

Integrations (contracts, clients, proxy)

Key Updates:

  • Read-only Mode - Proxy can now be started without a signer private key in V2 mode, enabling GET routes only.
  • Arbitrum AltDA Support (Experimental)- Incorporated Arbitrum's new altda server routes.
  • Secondary Storage Error Handling - Added error-on-secondary-insert-failure flag to return HTTP 500 errors if writing to a secondary storage fails.
  • Route Configuration - Proxy routes (OP, standard, ARB) are now disabled by default and must be explicitly enabled.
  • Audit Fixes - Addressed low & informational findings from recent security audit
  • feat(proxy): Incorporate ARB server into E2E framework by @ethenotethan in #2013
  • feat(mdbook): Add non-revertable updates to integrations spec by @ethenotethan in #2047
  • docs: relax encoded payload header by @bxue-l2 in #2071
  • docs: Fix broken links in the proxy readme by @mmurrs in #2105
  • fix(sigmap-EDA-01): Incorrect HTTP header key in JSON response by @iquidus in #2125
  • fix(sigmap-EDA-04): Nil pointer dereference in gRPC connection cleanup by @iquidus in #2131
  • fix(proxy): remove op-e2e references by @ethenotethan in #2135
  • feat(proxy): add default max request size limit to arb custom da by @ethenotethan in #2134
  • feat(proxy): read-only mode when no privateKey provided (v2 only) by @samlaf in #2106
  • docs: update readme to remove holesky, and update env verifier address by @bxue-l2 in #2132
  • feat(proxy): Add error-on-secondary-insert-failure flag for strict secondary storage error handling by @shyam-patel-kira in #2098
  • fix(proxy): update OP enablement enums by @ethenotethan in #2163
  • fix(sigmap-EDA-03): Connection resource leak by @iquidus in #2127

Payments

This release includes a large number of payments-related changes, due to an ongoing rework of the payments system. The payments code is now code-complete and undergoing audits. All new payments logic will be turned off by default, and users should NOT modify default values for the new payments related fields until the feature is officially shipped. See the documentation here for additional information about the upcoming changes to the payment system.

  • docs(payments): Document new payment system by @litt3 in #1983
  • feat(payments): Implement basic e2e payments tests by @litt3 in #2017
  • feat(payments): Add controller payment metrics by @litt3 in #2044
  • feat(payments): Add client ledger to example by @litt3 in #2042
  • fix(payments): Rely on test context cancelation, instead of doing it manually by @litt3 in #2052
  • feat(payments): Reorganize payment packages by @litt3 in #2054
  • fix(payments): Fix on-demand insufficient funds behavior by @litt3 in #2055
  • fix(payments): Properly synchronize vault monitor tests by @litt3 in #2056
  • feat(payments): Implement validator payment validation by @litt3 in #2063
  • feat(payments): Add inabox test coverage for payments system by @litt3 in #2065
  • fix(payments): Actually fix the vault monitor tests by @litt3 in #2068
  • fix(payments): Copy cumulative payment before returning from Accountant by @litt3 in #2079
  • fix(payments): Use proper ReservationLedger constructor by @litt3 in #2095
  • fix(payments): Choose correct default payment method by @litt3 in #2111
  • feat(inabox): Support manual client construction by @litt3 in #2113
  • feat(payments): Add on-demand only inabox tests by @litt3 in #2133
  • feat(payments): Add hybrid payments inabox test by @litt3 in #2145
  • feat(payments): Remove cli flags for bucket size by @litt3 in #2149
  • feat(payments): Write expiring reservation test by @litt3 in #2151
  • fix(payments): Fix broken doc link by @litt3 in #2165
  • feat(payments): Document proxy payment flag by @litt3 in #2166
  • chore(payments): Change default controller port to match devops repo by @litt3 in #2176
  • fix(payments): Fix outdated TOC in integration doc by @litt3 in #2180

Testing/Tooling/CI

Inabox revamp in progress to make it more user-friendly. In addition many tests added for the payments feature.

  • chore: Deprecate ginko by @dmanc in #2037
  • ci: Add codecov to unit-test.yml by @dmanc in #2033
  • ci: Parallelize integration tests jobs by @dmanc in #2038
  • fix: Client live test by @ethenotethan in #2039
  • fix: icicle build by @samlaf in #2046
  • ci: Add encoder-icicle to docker build pipeline by @dmanc in #2045
  • chore: Remove inabox dependency from plugin_test.go by @dmanc in #2041
  • feat: Add graph node to testbed by @dmanc in #1987
  • fix: several test flakes by @cody-littley in #2051
  • fix: bug in live test panel by @cody-littley in #2062
  • fix(inabox): network issues by @samlaf in #2069
  • ci(inabox): Add churner deployment to testbed package by @dmanc in #2058
  • feat(srs): Add srs table download utility by @dmanc in #2059
  • refactor(inabox): cleanup inabox deployer + makefile by @samlaf in #2070
  • chore: refactor makefile build/clean commands by @samlaf in #2076
  • fix: use the router for live tests and traffic generator by @cody-littley in #2077
  • refactor(inabox): Create a test harness for inabox tests by @dmanc in #2074
  • chore(inabox): makefile new start-inabox command by @samlaf in #2080
  • test(inabox): deploy proxy instance by @samlaf in #2091
  • feat(testbed): Add support for block interval in anvil testbed by @dmanc in #2092
  • feat(inabox): Spin up operator nodes as goroutines in inabox by @dmanc in #2083
  • feat(inabox): Deploy relays as goroutines inside inabox integration tests by @dmanc in #2096
  • fix(ci): Fix linter action for release branch merges by @litt3 in #2099
  • chore(gitignore): path should have been **/testdata/fuzz by @samlaf in #2117
  • fix: Update claude-security-reviewer.yaml by @anupsv in #2116
  • chore(inabox): Remove docker compose file generation by @dmanc in #2123
  • chore(inabox): Remove InMemoryBlobStore option by @dmanc in #2122
  • fix(linter): Remove De Morgan linting rule by @litt3 in #2144
  • chore(encoder): Start updating benchmark file to use v2 prover and verifier by @dmanc in #2060
  • perf: introduce crypto/encoding benchmark suite by @samlaf in #2154
  • perf(inabox): Change the blob version configuration for inabox by @dmanc in #2169
  • test: commit encoding/bench results for readability by @samlaf in #2161
  • ci: Move encoder-icicle build into its own workflow by @dmanc in #2172
  • chore: convert traffic generator to new config framework by @cody-littley in #2148

New Contributors

Full Changelog: v2.3.1...v2.4.0

Don't miss a new eigenda release

NewReleases is sending notifications on new releases.