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.
- chore: create new math package by @samlaf in #1990
- refactor: cleanup refactoring/serialization by @samlaf in #2040
- fix: maxQuorumID=191, not 254 by @samlaf in #2108
- feat: simple config framework by @cody-littley in #2104
- feat: bootstrap CLI utility by @cody-littley in #2136
- feat: config docs by @cody-littley in #2128
- feat: SCREAMING_SNAKE_CASE env vars by @cody-littley in #2142
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.
- chore: make the new ejection contracts optional by @cody-littley in #2031
- feat(payments): Implement validator payment validation by @litt3 in #2063
- fix: version number by @cody-littley in #2064
- refactor(validator): Refactor validator server code to allow precreated listeners by @dmanc in #2109
- feat: ejection manager by @cody-littley in #2143
- fix(node): ejection defense was not properly loading ecdsa key when enabled by @pschork in #2175
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.
- feat: config registry by @pakim249CAL in #2002
- feat: cert verifier configs by @pakim249CAL in #2067
- feat: replace churning by @pakim249CAL in #1963
- feat: add holesky testnet cert verifier cfg by @pakim249CAL in #2088
- feat(contracts): use address directory in registry coordinator by @pakim249CAL in #2089
- feat(contracts): checkpointed configRegistry by @pakim249CAL in #2129
- feat: hoodi deployment by @pakim249CAL in #1908
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
- @shyam-patel-kira made their first contribution in #2098
Full Changelog: v2.3.1...v2.4.0