Releases: Layr-Labs/eigenda
EigenDA v0.5.0
Summary
This major upgrade includes several new features, security improvements, and an API breaking change that simplifies the blob dispersal endpoint.
Notable features that directly affect users are:
- Rollups - Disperser API breaking change: The API for DisperseBlob request has been simplified, and
security_params
field is no longer supported. Default quorums are enforced by the protocol and additional quorums can be specified incustom_quorum_numbers
field. - Rollups - Disperser API error codes: The disperser API returns structured error codes along with the error messages.
- Rollups - Retrieval rate limits: We’ve added rate limits for RetrieveBlob endpoint.
- Operators - Operator CLI is revamped:
update-quorums
command is no longer supported, andopt-out
command takes specific quorums to be opted out (instead of opting out of all quorums)
Other improvements:
- This upgrade spans changes in contracts, disperser, and DA nodes to enable blob dispersals across multiple quorums
- Revamped logic for operator nonsigning accounting across multiple quorums
- Fireblocks MPC wallet support for disperser
- Automatic failover among multiple RPC endpoints
- More robust selection of reference block
- Other security patches and bug fixes
What's Changed
- [DataApi] Add Service Availability Handler by @siddimore in #276
- Upgrade
eigensdk-go
andgo-ethereum
by @ian-shim in #323 - Add missing methods in EthClient interface by @ian-shim in #332
- Create a json/text logger based on specified flag by @ian-shim in #331
- [DockerBuild] Update docker job to build for Pull Request by @siddimore in #329
- [Finalizer] Add check before processing ConfirmationInfo by @siddimore in #341
- [5/N][multi quorum ejection] Compute num batches per quorum and block range by @jianoaix in #327
- Fix doc typos in spec overview by @igorline in #334
- Fix: division by zero panic in assignment by @ian-shim in #340
- [dataapi] Return total stakes by quorum by @ian-shim in #330
- [6/N][multi quorum ejection] Create handler and put them all together by @jianoaix in #328
- [7/N][multi quorum ejection] Cleanup by @jianoaix in #351
- Add preprod-holesky to networks.json by @dmanc in #355
- Blob verification changes by @0x0aa0 in #321
- Minor fixes by @ian-shim in #358
- Check unexpected error and return when decoding chunks by @ian-shim in #359
- Holesky testnet deployment by @0x0aa0 in #360
- Revamp metrics to account the status code by @jianoaix in #320
- Validate gRPC requests earlier by @ian-shim in #356
- Update quorumConfirmationThresholdPercentages by @0x0aa0 in #364
- Handle uint8 overflow by @ian-shim in #363
- Upgrade lock for delete encoding request by @ian-shim in #357
- Multiple quorums support for traffic generator by @ian-shim in #339
- [Subgraph] Updates for Holesky by @siddimore in #367
- Fix: Construct a new map for security params by @ian-shim in #366
- Remove traffic generator threshold flags by @pschork in #368
- Make sure the operator quorum events are all fetched by @jianoaix in #361
- Remove the update-quorums command support by @jianoaix in #362
- Integrate EigenSDK wallet in batcher by @ian-shim in #348
- Use finalized reference block by @mooselumph in #350
- Crypto audix fix by @bxue-l2 in #371
- Return transact opts for non-pk EthClient by @ian-shim in #373
- Sort quorum IDs before aggregation by @ian-shim in #375
- Timeout disperser grpc streams by @mooselumph in #376
- Add store chunks validation at node by @jianoaix in #378
- failover that retries rpc by @bxue-l2 in #346
- Fix: make operators able to join all specified quorums by @ian-shim in #268
- Misc node code fixes by @jianoaix in #369
- Use latest available block for getting indexedOperatorState by @mooselumph in #365
- fix defer with closure by @bxue-l2 in #382
- Misc remove duplicate assignment in subgraph batch handle by @bxue-l2 in #384
- Atomically pass or fail rate limit check by @mooselumph in #374
- [Node] update DA UI map by @siddimore in #385
- Handle txn failure when retrieving txn receipt by @ian-shim in #383
- optimize encoder interpolation latency by @bxue-l2 in #309
- Update eigensdk version by @ian-shim in #387
- Fireblock with aws secret manager by @bxue-l2 in #377
- Revamp the operator CLI for opt-out by @jianoaix in #381
- refactor: make the security param validation a shared function by @jianoaix in #388
- Handle bitmap lookup for nonexistent operators by @jianoaix in #370
- Remove flaky targetNumChunks lower bound check by @mooselumph in #391
- Clarify error message when a required quorum is specified as a custom quorum by @ian-shim in #386
- Update semver for new release by @ian-shim in #393
- Add retrieval ratelimit by @mooselumph in #380
- Add context on few error logs + early return on encoding streamer by @ian-shim in #372
- Flag guard the dual quorum in disperser by @jianoaix in #389
- Fix the quorumID diffing for registartion from node start by @jianoaix in #395
- Update API documentation by @jianoaix in #396
New Contributors
Full Changelog: v0.4.0...v0.5.0
EigenDA v0.4.0
Summary
This release includes several bug fixes for operator nodes and the disperser. Most notably, this version is mandatory for operators to support multiple quorums.
- Fixes a bug on operator nodes for validating batches across multiple quorums
- Refactors encoding module to be more readable
- Fixes multiquorum handling on the disperser and the churner
- Few fixes to prevent panics
What's Changed
- goerliv2 testnet deploy by @0x0aa0 in #249
- [finalizer] Go through all confirmed blobs by @ian-shim in #217
- [TxnManager] Check if replaced txns are confirmed by @ian-shim in #228
- fix: update txn manager failure log by @ian-shim in #254
- fix: length check by @0x0aa0 in #257
- fix: Don't mark blob as confirmed if already confirmed by @ian-shim in #262
- Stop duplicating subgraph npm installation by @mooselumph in #263
- Add a defensive check on blob status by @jianoaix in #258
- [Batcher] Add Readiness and Liveness Health Probe by @siddimore in #203
- [DataApi] Rename tests by @siddimore in #265
- Refactor encoding (1 of N) by @mooselumph in #266
- Fix: Check nil blob commitment by @ian-shim in #274
- Refactor encoder (2 of N) by @mooselumph in #269
- Fix: Synchronize inmem store to fix finalizer test by @ian-shim in #277
- Fix error msg by @jianoaix in #259
- Deflake dataapi server test by @jianoaix in #267
- Separate apiserver validation by @mooselumph in #279
- rm custom bn254 under kzg and cleanup by @bxue-l2 in #280
- Cleanup spec by @mooselumph in #283
- Update the code org documentation by @jianoaix in #285
- Fix the operator nonsigning rate by @jianoaix in #271
- Fix: Include all batch quorums in batch metadata by @ian-shim in #273
- [DataApi] Update endpts to spinal-case by @siddimore in #261
- [Dockerfiles] Update pkg dir to encoding dir by @siddimore in #287
- [DataApi] Handle Deregisterd operator errors by @siddimore in #260
- [Batcher] Additional check in updateBlob method before dereferencing by @siddimore in #289
- [DataApi] Minor Logging and Test fixes by @siddimore in #291
- Make churner produce params for all specified quorums by @ian-shim in #288
- Create an
operators
folder for churner and ejector by @jianoaix in #296 - [Finalizer] Minor fixes by @siddimore in #295
- Add more blob metadata mretrics by @dmanc in #256
- [Batcher] fix race in Test by @siddimore in #300
- [Dockerfile ]Fix churner path by @siddimore in #303
- [DockerFile] Fix Churner Dockerbuild by @siddimore in #307
- Fix: Send only blobs relevant to operators by @ian-shim in #301
- Fix: Allow multiple quorums in allowlist by @ian-shim in #314
- [Docker Publish] Fix path by @siddimore in #311
- rm panic by @bxue-l2 in #316
- improve: use errors.New to replace fmt.Errorf with no parameters by @0x2d3c in #297
- [1/N][multi quorum ejection] Fetch batch nonsigning info by @jianoaix in #292
- Fix: Match wrapped errors by @ian-shim in #315
- [3/N][multi quorum ejection] Add batch quorum lookup and id conversion by @jianoaix in #299
- [2/N][multi quorum ejection] Fetch operator quorum opt-in/out info by @jianoaix in #293
- Validate batch merkle root by @mooselumph in #312
- Standardize the error codes from API endpoints by @jianoaix in #317
- Misc fixes related to operator management by @jianoaix in #318
- Log the context of Churner's decisions by @jianoaix in #319
- Cleanup kzg tests by @mooselumph in #313
- [4/N][multi quorum ejection] Create operator quorum intervals by @jianoaix in #304
- Revert "Add more blob metadata mretrics" by @dmanc in #324
- Bump node semver by @ian-shim in #326
New Contributors
Full Changelog: v0.3.0...v0.4.0
EigenDA v0.3.0
Summary
This release includes a major update with few breaking changes for operator nodes and rollup users.
- Smart contracts upgrades: Since EigenDA v0.1.0, there have been significant changes to EigenLayer middleware contracts as well as EigenDA contracts. With this release, all EigenDA offchain components will point to the new set of contracts.
- SRS points: Structured Reference String (SRS) points are used to generate and validate proofs. We have replaced the existing points to a larger set of MPC generated points. This means that the generated proofs are more secure and EigenDA can support bigger blobs (~2 MiB).
- API Enhancements (breaking change): We received feedback from rollups (participating in the EigenDA testnet) on how commitments are represented in the API. Rather than encoding them in a format not universally supported across languages, each commitment member is now expressed in raw byte representation. Refer to the latest APIs for disperser and node.
Here is a summary of downstream effects operators and rollup users can experience:
- Operators - New SRS points: When operators opt in after upgrading the node software, it will download a ~8GB file consisting of the new SRS points. This file is downloaded once at the very first time they opt in.
- Operators - Stake update: With the latest smart contracts, operator stakes will be updated periodically (at most once a week) instead of in real time in order to reduce gas costs for operators. Consequently, any updates to the operators’ stake following their initial opt in (any additional delegations or deposits) can take up to 1 week to be reflected in the system.
- Rollups - Previous blobs: Blobs that have been dispersed prior to this upgrade won’t be accessible.
- Rollups - API breaking changes: Please find the updated gRPC APIs here: disperser & operator nodes.
What's Changed
- Update response for nonsigners endpoint by @dmanc in #219
- [inabox] Update stake distribution for quorum 1 by @ian-shim in #216
- Validate the time intervals and fix the mix uses of timestamp units by @jianoaix in #209
- Add blob store failure monitoring by @jianoaix in #211
- Use logfmt instead of terminal format by @dmanc in #226
- Check if txn is mined before speedup by @ian-shim in #210
- Fix: Check total stake before calculating chunk length by @ian-shim in #225
- Pin foundry version by @ian-shim in #233
- m2-mainnet Contracts Update by @0x0aa0 in #158
- [subgraphs] Update preprod contract addresses by @ian-shim in #236
- add correct semvar for new release by @shrimalmadhur in #239
- Adapt low degree proof on G2 for compatibility with perpetual power of tau by @bxue-l2 in #222
- Warn log if cannot connect to operator by @dmanc in #232
- Use raw bytes for SRS points to save half storage by @jianoaix in #238
- Add partial point loading by @bxue-l2 in #240
- [disperser] Return commitment as a struct by @ian-shim in #223
- Cap the max quorumID to 254 by @jianoaix in #242
- API cleanup by @jianoaix in #243
- name parameter 'expeced' to 'expected' in function 'TestHeaderService… by @keienWang in #230
- Allocate reader buffer more precisely by @jianoaix in #245
- Update the API documentation by @jianoaix in #244
- Load only 28 g2point for opr node by @bxue-l2 in #246
- rm wrong validationa and expose log by @bxue-l2 in #250
- Remove logging from G1 partial load by @ian-shim in #248
- remove g2 point section logs by @shrimalmadhur in #251
- [Subgraph] Update Goerli Contract Address by @siddimore in #252
- [DataApi][Stage1] Deregistered operators endpt for LameDuck Operators by @siddimore in #152
- Sync with latest contracts by @ian-shim in #253
New Contributors
- @keienWang made their first contribution in #230
Full Changelog: v0.2.3...v0.3.0
EigenDA v0.2.3
Summary
This release includes improvements to monitoring/logging along with improvements around our authentication / rate-limiting functionality on the disperser. This release also includes minor bug fixes.
- Updates to how we tokenize the IP address in the disperser allowlist so that we can support IPv6 addresses.
- Add support for eth accounts in the disperser rate limiter.
- Adding a metric to track the # of blobs in the
PROCESSING
status allowing us to track when our system is under load. - On the EigenDA node we enabled an API that tracks the version running.
- Add more metrics around operator non signings (# of unsigned batches, total batches, percentage of signed batches).
What's Changed
- Add api for the percentage of unsigned batches monitoring by @wmb-software-consulting in #137
- Add eth accounts to allowlist by @mooselumph in #175
- fix typos by @buldazer23 in #184
- add utility to update socket by @shrimalmadhur in #188
- Make node api work and add node version by @shrimalmadhur in #197
- [node] Add more info on error logs by @ian-shim in #187
- Create a dynamodb collector by @dmanc in #190
- Fix: typo
Stoping
->Stopping
by @ian-shim in #206 - Compute the operator's time intervals during which the operator is live by @jianoaix in #198
- IP allowlist split token by @ian-shim in #205
- Handle the concurrency in the accounting of batch storing and validation by @jianoaix in #189
- Disperser server error logs by @ian-shim in #208
- Enable Multi-Quorum by @ian-shim in #204
New Contributors
- @buldazer23 made their first contribution in #184
Full Changelog: v0.2.2...v0.2.3
EigenDA v0.2.2
Summary
This release includes robustness and performance improvements on the disperser. Minor bug fixes and metrics are updated as well.
- The batching loop is no longer single-threaded. The onchain transaction are handled and monitored in a separate goroutine with speed ups if transactions aren't confirmed for an extended amount of time. This allows the existing timeout to be removed, prevents blobs from encoded/dispersed twice, and more time to be allocated for attestation.
- The encoding job throttles the number of blobs to be handled for each iteration. An encoding job, which runs periodically every 2s, retrieves request metadata and sends encoding requests to a set of encoders. Previously, it retrieved up to 1 MB of request metadata which routinely jammed the encoding throughput. Now it limits the number of request metadata to retrieve so that encoders can handle the load more gracefully.
- Several typo fixes
What's Changed
- Use
TxnManager
for onchain transactions by @ian-shim in #164 - Fix some typos by @vuittont60 in #163
- Add basic authentication classes by @mooselumph in #166
- Log quorum results by @ian-shim in #172
- [encodingstreamer] Consider blobs pending confirmation by @ian-shim in #169
- Add
TxnManager
metrics by @ian-shim in #170 - [Encoding ]Request with pagination by @siddimore in #157
- Fix: Properly handle gas fee bumps by @ian-shim in #173
- Add authenticated dispersal interface, client+server implementations by @mooselumph in #167
- [DynamodB] Fix Flaky Pagination UT by @siddimore in #174
- [TxnManager] Halt when speed up fails by @ian-shim in #179
- I corrected the typo (Update metrics.go) by @bolatfurkan in #182
- Transaction manager logging update by @ian-shim in #177
- Read MaxBlobsToFetchFromStoreFlag by @ian-shim in #181
- fix: repair outdated links in both code and docs by @krauspt in #185
- Cleanup: remove confirmer by @ian-shim in #183
- Fix: add disperser as a dependency to retriever by @ian-shim in #180
- Fix disperser client by @ian-shim in #186
New Contributors
- @vuittont60 made their first contribution in #163
- @bolatfurkan made their first contribution in #182
- @krauspt made their first contribution in #185
Full Changelog: v0.2.1...v0.2.2
EigenDA v0.2.1
What's Changed
- Handle unconfirmed blobs in blob feed fetch by @jianoaix in #142
- Update health check to use default implementation by @dmanc in #149
- Raise blob size limit by @jianoaix in #148
- chore(core): typo fix by @GakiBash in #135
- CHORE:fix http link jump by @bodhi-crypo in #153
- [encodingstreamer] Validate quorums by @ian-shim in #109
- Memoize and log operator addresses by @ian-shim in #154
- [2/N] Batch transactor: Transaction manager to monitor/update pending transactions by @ian-shim in #107
- Allowlist with specified rate limits by @ian-shim in #156
- [DynamodB] Add Pagination and limit by @siddimore in #155
- Stop indexer in inabox test cleanup to suppress logs by @mooselumph in #165
- nit: fix spelling by @shrimalmadhur in #168
- Use
TxnManager
for onchain transactions by @ian-shim in #164 - Fix some typos by @vuittont60 in #163
New Contributors
- @GakiBash made their first contribution in #135
- @bodhi-crypo made their first contribution in #153
- @vuittont60 made their first contribution in #163
Full Changelog: v0.2.0...v0.2.1
EigenDA v0.2.0
Summary
The main theme of this release is to accommodate solo operators, with notable changes including node validation performance, chunk assignment upgrade and rollup blob rate limiting.
NOTE: This is an incompatible release, meaning this will not work with previous node software versions. Operators will have to upgrade the node to v0.2.0 in order to continue to validate. See the node upgrade guide.
- Upgraded the EigenDA chunk assignment protocol: it drops the quantization factor and instead uses max num of chunks as the parameter to adjust the chunk length. The adjustment of num chunks and chunk length is to make sure chunks produced and assigned to operators are commensurate with their stake share, which is important for solo stakers.
- Significantly improved the the DA node validation performance: the cryptographic validation efficiency substantially improved via use of Universal Verification Equation, opening the door to future reductions in node hardware requirements.
- Added rollup blob rate limiting feature at disperser: the disperser can now rate limit the total blob rate and per-rollup blob rate (in blobs/sec).
- Added CLI command to support quorum update: operators can now run "update-quorums" with CLI to update the quorums they participate in.
- UX fixes to improve operator experiences, including: more readable error message from churner, more accurate metrics at node, auto correction of IP when registering with incorrect IP etc.
As part of v0.2.0, we also released the hardware recommendation for small and medium operators, see EigenDA node classes.
What's Changed
- Add a new metric so total batches and removed batches are aligned by @jianoaix in #120
- Don't memoize eth client TransactOpts by @ian-shim in #105
- [1/N] Batch transactor: wait for n confirmations for a transaction by @ian-shim in #99
- Add IP allowlist for testing throughput by @ian-shim in #122
- set default number of confirmations to 0 by @ian-shim in #126
- Node batch verification by @bxue-l2 in #94
- Add CLI flag for setting churner connection secure status by @mooselumph in #125
- Add graph indexer to retriever by @mooselumph in #124
- Log confirmBatch calldata by @ian-shim in #128
- Log parameters for call to GetCheckSignaturesIndices by @ian-shim in #129
- Log signature aggregation and non signer pubkeys by @ian-shim in #130
- Fix G1 point hashing by padding G1 point before hashing by @ian-shim in #132
- Add lowest/total stake in error message by @jianoaix in #133
- Add update quorums operation to node plugin by @wmb-software-consulting in #93
- Get a list of operators which exited the system (either due to opt-out, churn, or booting) within the last 14 days. by @wmb-software-consulting in #131
- Fix node plugin integration tests by @wmb-software-consulting in #138
- Add blob ratelimit by @mooselumph in #121
- chore: update log message to avoid confusion by @shrimalmadhur in #139
- Auto correct the IP if the operator set their IP to localhost when opt-in by @wmb-software-consulting in #136
- Updated assignments by @mooselumph in #127
- Update spec to reflect new assignments by @mooselumph in #134
New Contributors
- @tudorpintea999 made their first contribution in #98
- @joaolago1113 made their first contribution in #111
- @shrimalmadhur made their first contribution in #139
Full Changelog: v0.1.2...v0.2.0
EigenDA v0.1.3
What's Changed
- fix: several typos in the documentation by @tudorpintea999 in #98
- Validate chunks in retrieval client by @ian-shim in #82
- add ack by @bxue-l2 in #106
- [metrics] Export batch failure reasons by @ian-shim in #108
- Proofreading the Project's Documentation by @joaolago1113 in #111
- Fix issues with throughput negative value by @wmb-software-consulting in #96
- Add ConfirmationTxnHash to feed blobs response by @wmb-software-consulting in #72
- Improve documentation and error msg of the churner by @jianoaix in #114
- Track num deleted batches with counter rather than num active batches by @jianoaix in #115
- Make built-in indexer work for retrieval client by @wmb-software-consulting in #110
New Contributors
- @tudorpintea999 made their first contribution in #98
- @joaolago1113 made their first contribution in #111
Full Changelog: v0.1.2...v0.1.3
EigenDA v0.1.2
What's Changed
- Fix dockerfile compilation by @dmanc in #69
- Fix typos in docs by @pandabadger in #54
- Create README.md for api docs root folder by @wesfloyd in #60
- Update numProxies to 2 on the disperser by @dmanc in #73
- Update dockerfile location for node plugin by @dmanc in #75
- Log message improvements by @jianoaix in #70
- Fix encoding queue limit test by @ian-shim in #74
- Clean up error logs by @ian-shim in #84
- Fix the bytes accounting at DA Node by @jianoaix in #85
- include deploy resources flag by @bxue-l2 in #86
- Use int64 for size in bytes accounting by @jianoaix in #90
- Fix the accounting for batch size by @jianoaix in #88
- Fix CI failure by @jianoaix in #91
- [metrics] Add metrics for encoded blobs by @ian-shim in #76
- Update encoded blob store size properly by @ian-shim in #71
- [finalizer] Handle forked transactions by @ian-shim in #89
- Refactor transaction builder by @ian-shim in #92
- [Synthetic Client] Add retrieval client by @siddimore in #95
New Contributors
- @pandabadger made their first contribution in #54
- @wesfloyd made their first contribution in #60
- @bxue-l2 made their first contribution in #86
Full Changelog: v0.1.1...v0.1.2
EigenDA v0.1.1
Summary
This is a patch release, which includes
- The data access API server enhancement: it now returns the total stake in the operator network, the gas cost per byte, and makes sure the blob feed is ordered by <batchID, blobIndex>
- Improved the Client IP detection so it works when there are multi proxies
- Improved the encoder to remove confirmed blobs
- Fixed misc log message, metrics, unit tests
Changelog
- Use existing context when submitting transaction by @ian-shim in #33
- Update metrics by @ian-shim in #32
- Fix the blob metrics fetch in data api by @jianoaix in #40
- Sort blobs feed by batchID/BlobIndex and return Cost in Gas instead of WEI by @wmb-software-consulting in #35
- Client IP detection (#30) by @mooselumph in #34
- [node] Churner TLS by @ian-shim in #46
- Disable stake calculation by @jianoaix in #48
- Remove encoded blob if confirmed by @ian-shim in #41
- Compute the stake by quorums by @jianoaix in #37
- Efficient-unit-tests by @mooselumph in #50
- Update eigenlayer-middleware by @0x0aa0 in #52
- Uncapitalize error strings by @estensen in #44
- [GithubAction] Push Operator Node Images by @siddimore in #51
- Run test coverage report on master only by @jianoaix in #65
- Update preprod test contracts to latest deployment by @dmanc in #66
- Improve the log message in node by @jianoaix in #64
- Separate api/ into its own module to avoid dep hell by @teddyknox in #62
- Reconcile project structure by @mooselumph in #53
New Contributors
- @0x0aa0 made their first contribution in #52
- @estensen made their first contribution in #44
- @siddimore made their first contribution in #51
- @teddyknox made their first contribution in #62
Full Changelog: https://github.com/Layr-Labs/eigenda/commits/v0.1.1