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.
-
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
- 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
Performance Improvements
- Disable seek compaction by @dmanc in #1342
- Improve perf of blob retrieval within bucket by @jianoaix in #1329
- Make feed cache update async by @jianoaix in #1363
- Feed cache: Use circular queue for zero-alloc of memory by @jianoaix in #1384
Features
- Support both backward and forward iteration at blob store by @jianoaix in #1306
- Support backward iteration for blob feed by @jianoaix in #1314
- Implement relay url provider by @litt3 in #1328
- Introduce feed cache by @jianoaix in #1355
- Implement cert verifier address provider by @litt3 in #1368
- Operator batch feed support at blobstore by @jianoaix in #1378
- Support two-way traversal in batch feed API by @jianoaix in #1366
- feat(contracts): v0.1.0 release by @ethenotethan in #1387
- Add API for per-operator batch feed by @jianoaix in #1392
- add trailing option to read g2 file by @bxue-l2 in #1401
Fixes
- Recover state at controller initialization by @ian-shim in #1312
- fix: addOnDemandPayment after validatePayment by @hopeyen in #1320
- fix: strict exclusive end timestamp by @hopeyen in #1321
- fix: addition for bigInt by @hopeyen in #1322
- Do not panic if the wrong number of chunks are returned by @cody-littley in #1325
- fix: Use Protobuf Getters in Hasher by @ian-shim in #1339
- Check chunk length before deserialization by @ian-shim in #1340
- Reset dispatcher cursor when all encoded blobs are enumerated by @ian-shim in #1352
- Make sure no operator can reply to same batch multiple times by @ian-shim in #1356
- Calculate Charge at the payment by @yujiezhu0 in #1346
- Make sure each relay
GetChunks
request is either by index or by range by @ian-shim in #1338 - feat: check blob key exist before payments by @hopeyen in #1370
- Check multiplication overflow in
ValidateEncodingParams
by @ian-shim in #1341 - fix: log the file path upon error in nodeplugin by @jianoaix in #1379
- fix: use consistent query params across pages by @jianoaix in #1375
- Fix per-operator api's missing operator_id param by @jianoaix in #1410
- Protect against accidental nil dereference in EncodeBlob() by @cody-littley in #1404
- Don't block forever in EncodeBlob() if the context is cancelled by @cody-littley in #1405
- Fix eda2-22 by @cody-littley in #1406
- Properly round up blob size to next power of 2 when checking length by @cody-littley in #1407
- Fix deadlock in the encoder by @cody-littley in #1418
- Remove failed blobs from blobset in dispatcher by @ian-shim in #1402
- enable sync writes for levelDB by @cody-littley in #1413
Misc
- CertVerifier updates by @0x0aa0 in #1207
- Query cert verifier for required quorums by @litt3 in #1301
- Update codeql-scanning.yaml by @anupsv in #1279
- Allow bytes from relay to be of 0 length by @litt3 in #1295
- Update contract addresses, and fix disabled tests by @litt3 in #1310
- docs: refactor docs/spec to use mdbook by @samlaf in #1161
- Add environment variable to hold eth RPC urls by @cody-littley in #1311
- Implement required quorums cache by @litt3 in #1317
- Use payload and blob structs by @litt3 in #1305
- Various small tweaks to the load generator by @cody-littley in #1316
- Add additional edge case correctness tests by @litt3 in #1318
- Enable pprof for traffic generator by @cody-littley in #1319
- Disable client tests against holesky by @ian-shim in #1330
- Cache verifier callers by @litt3 in #1331
- Fix flaky encoded payload test by @litt3 in #1333
- refactor: use block number for all payment vault param calls by @hopeyen in #1323
- avoid unnecessary casting by @hopeyen in #1327
- test: make reservation test less flaky (due to time) by @hopeyen in #1243
- Simplify payload disperser config and construction by @litt3 in #1343
- Simplify blazar client config and construction by @litt3 in #1345
- Update codeql-scanning.yaml by @anupsv in #1315
- Enable correctness tests on testnet by @cody-littley in #1353
- chore: move autogenerated api protobuf mdfiles to mdbook by @samlaf in #1348
- chore: address general comments by @hopeyen in #1324
- Add leveldb metrics by @dmanc in #1313
- docs(proto-v1): add explanation as to how the request_id is computed by @samlaf in #1360
- docs(mdbook): add v2 integration spec to mdbook by @samlaf in #1354
- ci(docker-publish): fix workflow by updating cache action v2->v4 by @samlaf in #1362
- Integrate feed cache with batch feed and operators signinginfo by @jianoaix in #1364
- CI: disable test-contracts binding diff by @jianoaix in #1376
- CertVerifier Deployer by @0x0aa0 in #1302
- refactor: better check for existing payments by @hopeyen in #1377
- assignment tests by @hopeyen in #1385
- docs: Add core client readme by @litt3 in #1388
- Reenable client tests on holesky by @ian-shim in #1369
- refactor: use metadata store to check for blob existence by @hopeyen in #1380
- docs(mdbook): add basic documentation for rollup stacks by @samlaf in #1383
- docs: add documentation for disperser v2 grpc api and related functions/structs by @samlaf in #1104
- Add getter for relay registry address by @litt3 in #1393
- CI: upgrade test-contracts ubuntu to 24.04 by @jianoaix in #1399
- Add metrics to feed cache by @jianoaix in #1394
- Verifiable Contract Deployment Script by @pakim249CAL in #1396
- refactor: dispersal client 1 request at a time by @hopeyen in #1389
- chore: update eigenlayer-middleware commit by @hopeyen in #1416
- ci: Add job to check if PR title is using conventional commits by @dmanc in #1419
- chore: Update dependabot.yml for dockerfiles by @anupsv in #1297
- chore: updating subgraphs deps by @anupsv in #1412
- Refactor the data APIs by @jianoaix in #1417
New Contributors
- @pakim249CAL made their first contribution in #1396
Full Changelog: v0.9.0-rc.0...v0.9.0-rc.1