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.
-
High-Performance Storage with LittDB (New)
Introduces LittDB, a highly performant key/value store specifically tailored for EigenDA’s needs. LittDB replaces LevelDB as the storage engine on validator nodes, significantly improving disk-related operations by two orders of magnitude. Designed from the ground up, LittDB ensures high capacity, high throughput, low latency, and low memory/CPU utilization.
-
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. Note: We're including the changes from v0.9.0-rc.2 since v0.9.0-rc.3 is a hotfix release.
Breaking Changes
- refactor!: version contract types by @pakim249CAL in #1516
Performance Improvements
- perf: add KV cache for lookup requests in data apis by @jianoaix in #1425
- perf: apply query limit to the feed fetch by @jianoaix in #1431
- perf: make dispersal feed based on responses not requests by @jianoaix in #1486
- perf: support batch liveness check of validators by @jianoaix in #1488
Features
- feat: distributed retrieval operator socket by @hopeyen in #1403
- feat: Verifiable Deployment Calldata script by @pakim249CAL in #1415
- feat: deploy contract toml config by @pakim249CAL in #1427
- feat: support range query for per-account blobs at metadata store by @jianoaix in #1438
- feat: add API for per-account blob feed by @jianoaix in #1449
- feat: add metrics to payload disperser by @cody-littley in #1441
- feat: provider signers and nonsigners in batch api by @jianoaix in #1451
- feat: new traffic generator metrics/settings by @cody-littley in #1470
- feat: global batch timeout by @cody-littley in #1460
- feat: littDB by @cody-littley in #1280
- feat: Use SRS resource files, and remove unnecessary logic to fetch by @litt3 in #1473
- feat: network signing rate by @jianoaix in #1475
- feat: Add payload client usage examples by @litt3 in #1454
- feat: Check signing thresholds when polling blob status by @litt3 in #1479
- feat: support batch->blobs at metadata store by @jianoaix in #1481
- feat: Add socket column and csv output to quorumscan by @dmanc in #1501
- feat: littDB validator integration by @cody-littley in #1429
- feat: add constituent blobs to the batch by @jianoaix in #1499
- feat: create a calculator for eigenda requirements by @cody-littley in #1504
- feat: periodically return attestation with updated signatures by @litt3 in #1497
- feat: configuration for the validator's littDB cache size by @cody-littley in #1519
- feat: Add debug messages to better understand equivalence check failures by @litt3 in #1531
- feat: validator/disperser clock synchrony by @hopeyen in #1509
- feat: better distributed retrieval by @cody-littley in #1485
- feat: batch metrics by @cody-littley in #1525
- feat: LittDB caching by @cody-littley in #1526
- feat: calculator improvements by @cody-littley in #1546
- feat: dynamic validator cache size by @cody-littley in #1553
- feat: controller immdeiately submits new attestation if critical threshold is crossed by @cody-littley in #1550
- feat: use siphash for littDB sharding by @cody-littley in #1506
- feat: auto-calculate validator cache size by @cody-littley in #1557
Fixes
- fix: update retriever address for preprod by @cody-littley in #1430
- fix: update foundry version to unbreak codeql by @jianoaix in #1447
- fix: add per-account api path by @jianoaix in #1450
- fix: testnet contract address by @cody-littley in #1455
- fix: set the right cache control ttl for v2 APIs by @jianoaix in #1463
- fix: Make local copy of loop variable by @litt3 in #1465
- fix: test metrics by @cody-littley in #1469
- fix: controller state recovery - consider all pending blobs by @ian-shim in #1466
- fix: store failed dispersal response by @jianoaix in #1476
- fix: a nil pointer bug with test metrics by @cody-littley in #1474
- fix: littDB metrics by @cody-littley in #1503
- fix: change implementation of unsafe string. by @cody-littley in #1507
- fix: reuse random number generator in load generator by @cody-littley in #1508
- fix: use time series to derive avg throughput and total bytes by @jianoaix in #1517
- fix: Quorum threshold checking by @litt3 in #1530
- fix: audit finding 3 by @cody-littley in #1535
- fix: validator client metrics by @cody-littley in #1547
- fix: default validator cache size by @cody-littley in #1548
- fix: auditor finding 5 by @cody-littley in #1543
- fix: auditor finding 6 by @cody-littley in #1545
- fix: auditor finding 7 by @cody-littley in #1544
- fix: properly call .End() on validator client probe by @cody-littley in #1551
- fix: Use small default cache sizes by @dmanc in #1555
- fix: reduce controller health check info noise by @yujiezhu0 in #1556
- fix: littdb read metrics by @cody-littley in #1562
- fix: Update node handling of new dataapi liveness check format for v2 by @dmanc in #1561
Misc
- doc: document deployment procedure steps by @pakim249CAL in #1408
- refactor: more precise log for dynamo conditional put by @hopeyen in #1424
- docs: add mdbook-mermaid plugin by @samlaf in #1382
- Enhance the metrics summary by @jianoaix in #1398
- ci(contracts): enforce no-warnings + formatting by @samlaf in #1444
- docs(mdbook): cleanup integration section by @samlaf in #1439
- chore: Fix old 'blob certified' terminology to be 'blob complete' by @litt3 in #1462
- chore(proto): push protos to buf BSR registry by @samlaf in #1437
- chore: reformat batch code by @cody-littley in #1461
- docs: Add SRS docs by @litt3 in #1458
- fix: links to images in docs by @wesfloyd in #1480
- chore(accountant): more informative error msg by @samlaf in #1487
- chore: update forge-std by @pakim249CAL in #1482
- refactor: split verification utils library by @pakim249CAL in #1490
- refactor: cleanup not needed code by @jianoaix in #1500
- refactor: cert verifier v2 error handling by @pakim249CAL in #1491
- ci: only run buf-proto on protobuf file changes by @samlaf in #1502
- refactor: move data api types into its own file by @jianoaix in #1510
- chore: move encoder protos under api dir by @samlaf in #1505
- refactor: separate v1 v2 cert contracts by @pakim249CAL in #1492
- refactor: unnecessary cert checks by @pakim249CAL in #1493
- chore: use a standard controller configuration by @cody-littley in #1514
- chore: Update codeql-scanning.yaml by @anupsv in #1520
- refactor: decouple api types from internal types by @jianoaix in #1513
- refactor: node version code by @jianoaix in #1521
- chore: add TODO for LittDB audit finding 4 by @cody-littley in #1542
- chore: add heartbeat monitoring for controller by @yujiezhu0 in #1192
- docs(mdbook): update secure integration RBN recency validation explanation by @samlaf in #1533
Full Changelog: v0.9.0-rc.1...v0.9.0-rc.3