@aztec/archiver 4.0.0-nightly.20260113 → 4.0.0-nightly.20260115
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +139 -22
- package/dest/archiver.d.ts +134 -0
- package/dest/archiver.d.ts.map +1 -0
- package/dest/archiver.js +767 -0
- package/dest/{archiver/config.d.ts → config.d.ts} +9 -1
- package/dest/config.d.ts.map +1 -0
- package/dest/{archiver/config.js → config.js} +9 -0
- package/dest/{archiver/errors.d.ts → errors.d.ts} +1 -1
- package/dest/errors.d.ts.map +1 -0
- package/dest/factory.d.ts +5 -6
- package/dest/factory.d.ts.map +1 -1
- package/dest/factory.js +82 -5
- package/dest/index.d.ts +10 -4
- package/dest/index.d.ts.map +1 -1
- package/dest/index.js +8 -3
- package/dest/interfaces.d.ts +9 -0
- package/dest/interfaces.d.ts.map +1 -0
- package/dest/interfaces.js +3 -0
- package/dest/{archiver/l1 → l1}/bin/retrieve-calldata.d.ts +1 -1
- package/dest/l1/bin/retrieve-calldata.d.ts.map +1 -0
- package/dest/{archiver/l1 → l1}/calldata_retriever.d.ts +2 -2
- package/dest/l1/calldata_retriever.d.ts.map +1 -0
- package/dest/l1/data_retrieval.d.ts +88 -0
- package/dest/l1/data_retrieval.d.ts.map +1 -0
- package/dest/{archiver/l1 → l1}/data_retrieval.js +32 -51
- package/dest/{archiver/l1 → l1}/debug_tx.d.ts +1 -1
- package/dest/l1/debug_tx.d.ts.map +1 -0
- package/dest/{archiver/l1 → l1}/spire_proposer.d.ts +1 -1
- package/dest/l1/spire_proposer.d.ts.map +1 -0
- package/dest/{archiver/l1 → l1}/trace_tx.d.ts +1 -1
- package/dest/l1/trace_tx.d.ts.map +1 -0
- package/dest/l1/types.d.ts +12 -0
- package/dest/l1/types.d.ts.map +1 -0
- package/dest/{archiver/l1 → l1}/validate_trace.d.ts +1 -1
- package/dest/l1/validate_trace.d.ts.map +1 -0
- package/dest/modules/data_source_base.d.ts +83 -0
- package/dest/modules/data_source_base.d.ts.map +1 -0
- package/dest/modules/data_source_base.js +301 -0
- package/dest/modules/data_store_updater.d.ts +46 -0
- package/dest/modules/data_store_updater.d.ts.map +1 -0
- package/dest/modules/data_store_updater.js +216 -0
- package/dest/modules/instrumentation.d.ts +37 -0
- package/dest/modules/instrumentation.d.ts.map +1 -0
- package/dest/modules/l1_synchronizer.d.ts +67 -0
- package/dest/modules/l1_synchronizer.d.ts.map +1 -0
- package/dest/modules/l1_synchronizer.js +1064 -0
- package/dest/{archiver → modules}/validation.d.ts +1 -1
- package/dest/modules/validation.d.ts.map +1 -0
- package/dest/{archiver/kv_archiver_store → store}/block_store.d.ts +2 -2
- package/dest/store/block_store.d.ts.map +1 -0
- package/dest/{archiver/kv_archiver_store → store}/block_store.js +1 -1
- package/dest/store/contract_class_store.d.ts +18 -0
- package/dest/store/contract_class_store.d.ts.map +1 -0
- package/dest/{archiver/kv_archiver_store → store}/contract_class_store.js +1 -1
- package/dest/store/contract_instance_store.d.ts +24 -0
- package/dest/store/contract_instance_store.d.ts.map +1 -0
- package/dest/{archiver/kv_archiver_store → store}/contract_instance_store.js +1 -1
- package/dest/{archiver/archiver_store.d.ts → store/kv_archiver_store.d.ts} +143 -139
- package/dest/store/kv_archiver_store.d.ts.map +1 -0
- package/dest/{archiver/kv_archiver_store → store}/kv_archiver_store.js +157 -49
- package/dest/{archiver/kv_archiver_store → store}/log_store.d.ts +1 -1
- package/dest/store/log_store.d.ts.map +1 -0
- package/dest/{archiver/kv_archiver_store → store}/message_store.d.ts +1 -1
- package/dest/store/message_store.d.ts.map +1 -0
- package/dest/{archiver/structs → structs}/data_retrieval.d.ts +1 -1
- package/dest/structs/data_retrieval.d.ts.map +1 -0
- package/dest/structs/inbox_message.d.ts +15 -0
- package/dest/structs/inbox_message.d.ts.map +1 -0
- package/dest/{archiver/structs → structs}/published.d.ts +1 -1
- package/dest/structs/published.d.ts.map +1 -0
- package/dest/test/fake_l1_state.d.ts +173 -0
- package/dest/test/fake_l1_state.d.ts.map +1 -0
- package/dest/test/fake_l1_state.js +364 -0
- package/dest/test/index.d.ts +2 -1
- package/dest/test/index.d.ts.map +1 -1
- package/dest/test/index.js +1 -0
- package/dest/test/mock_structs.d.ts +76 -2
- package/dest/test/mock_structs.d.ts.map +1 -1
- package/dest/test/mock_structs.js +133 -2
- package/package.json +15 -17
- package/src/archiver.ts +522 -0
- package/src/{archiver/config.ts → config.ts} +11 -0
- package/src/factory.ts +118 -6
- package/src/index.ts +10 -3
- package/src/interfaces.ts +9 -0
- package/src/{archiver/l1 → l1}/calldata_retriever.ts +1 -1
- package/src/{archiver/l1 → l1}/data_retrieval.ts +52 -69
- package/src/modules/data_source_base.ts +439 -0
- package/src/modules/data_store_updater.ts +318 -0
- package/src/modules/l1_synchronizer.ts +870 -0
- package/src/{archiver/kv_archiver_store → store}/block_store.ts +1 -1
- package/src/{archiver/kv_archiver_store → store}/contract_class_store.ts +1 -1
- package/src/{archiver/kv_archiver_store → store}/contract_instance_store.ts +1 -1
- package/src/{archiver/kv_archiver_store → store}/kv_archiver_store.ts +170 -8
- package/src/test/fake_l1_state.ts +561 -0
- package/src/test/index.ts +1 -0
- package/src/test/mock_structs.ts +247 -2
- package/dest/archiver/archiver.d.ts +0 -307
- package/dest/archiver/archiver.d.ts.map +0 -1
- package/dest/archiver/archiver.js +0 -2102
- package/dest/archiver/archiver_store.d.ts.map +0 -1
- package/dest/archiver/archiver_store.js +0 -4
- package/dest/archiver/archiver_store_test_suite.d.ts +0 -8
- package/dest/archiver/archiver_store_test_suite.d.ts.map +0 -1
- package/dest/archiver/archiver_store_test_suite.js +0 -2770
- package/dest/archiver/config.d.ts.map +0 -1
- package/dest/archiver/errors.d.ts.map +0 -1
- package/dest/archiver/index.d.ts +0 -7
- package/dest/archiver/index.d.ts.map +0 -1
- package/dest/archiver/index.js +0 -4
- package/dest/archiver/instrumentation.d.ts +0 -37
- package/dest/archiver/instrumentation.d.ts.map +0 -1
- package/dest/archiver/kv_archiver_store/block_store.d.ts.map +0 -1
- package/dest/archiver/kv_archiver_store/contract_class_store.d.ts +0 -18
- package/dest/archiver/kv_archiver_store/contract_class_store.d.ts.map +0 -1
- package/dest/archiver/kv_archiver_store/contract_instance_store.d.ts +0 -24
- package/dest/archiver/kv_archiver_store/contract_instance_store.d.ts.map +0 -1
- package/dest/archiver/kv_archiver_store/kv_archiver_store.d.ts +0 -159
- package/dest/archiver/kv_archiver_store/kv_archiver_store.d.ts.map +0 -1
- package/dest/archiver/kv_archiver_store/log_store.d.ts.map +0 -1
- package/dest/archiver/kv_archiver_store/message_store.d.ts.map +0 -1
- package/dest/archiver/l1/bin/retrieve-calldata.d.ts.map +0 -1
- package/dest/archiver/l1/calldata_retriever.d.ts.map +0 -1
- package/dest/archiver/l1/data_retrieval.d.ts +0 -90
- package/dest/archiver/l1/data_retrieval.d.ts.map +0 -1
- package/dest/archiver/l1/debug_tx.d.ts.map +0 -1
- package/dest/archiver/l1/spire_proposer.d.ts.map +0 -1
- package/dest/archiver/l1/trace_tx.d.ts.map +0 -1
- package/dest/archiver/l1/types.d.ts +0 -12
- package/dest/archiver/l1/types.d.ts.map +0 -1
- package/dest/archiver/l1/validate_trace.d.ts.map +0 -1
- package/dest/archiver/structs/data_retrieval.d.ts.map +0 -1
- package/dest/archiver/structs/inbox_message.d.ts +0 -15
- package/dest/archiver/structs/inbox_message.d.ts.map +0 -1
- package/dest/archiver/structs/published.d.ts.map +0 -1
- package/dest/archiver/validation.d.ts.map +0 -1
- package/dest/rpc/index.d.ts +0 -9
- package/dest/rpc/index.d.ts.map +0 -1
- package/dest/rpc/index.js +0 -15
- package/src/archiver/archiver.ts +0 -2265
- package/src/archiver/archiver_store.ts +0 -380
- package/src/archiver/archiver_store_test_suite.ts +0 -2842
- package/src/archiver/index.ts +0 -6
- package/src/rpc/index.ts +0 -16
- /package/dest/{archiver/errors.js → errors.js} +0 -0
- /package/dest/{archiver/l1 → l1}/bin/retrieve-calldata.js +0 -0
- /package/dest/{archiver/l1 → l1}/calldata_retriever.js +0 -0
- /package/dest/{archiver/l1 → l1}/debug_tx.js +0 -0
- /package/dest/{archiver/l1 → l1}/spire_proposer.js +0 -0
- /package/dest/{archiver/l1 → l1}/trace_tx.js +0 -0
- /package/dest/{archiver/l1 → l1}/types.js +0 -0
- /package/dest/{archiver/l1 → l1}/validate_trace.js +0 -0
- /package/dest/{archiver → modules}/instrumentation.js +0 -0
- /package/dest/{archiver → modules}/validation.js +0 -0
- /package/dest/{archiver/kv_archiver_store → store}/log_store.js +0 -0
- /package/dest/{archiver/kv_archiver_store → store}/message_store.js +0 -0
- /package/dest/{archiver/structs → structs}/data_retrieval.js +0 -0
- /package/dest/{archiver/structs → structs}/inbox_message.js +0 -0
- /package/dest/{archiver/structs → structs}/published.js +0 -0
- /package/src/{archiver/errors.ts → errors.ts} +0 -0
- /package/src/{archiver/l1 → l1}/README.md +0 -0
- /package/src/{archiver/l1 → l1}/bin/retrieve-calldata.ts +0 -0
- /package/src/{archiver/l1 → l1}/debug_tx.ts +0 -0
- /package/src/{archiver/l1 → l1}/spire_proposer.ts +0 -0
- /package/src/{archiver/l1 → l1}/trace_tx.ts +0 -0
- /package/src/{archiver/l1 → l1}/types.ts +0 -0
- /package/src/{archiver/l1 → l1}/validate_trace.ts +0 -0
- /package/src/{archiver → modules}/instrumentation.ts +0 -0
- /package/src/{archiver → modules}/validation.ts +0 -0
- /package/src/{archiver/kv_archiver_store → store}/log_store.ts +0 -0
- /package/src/{archiver/kv_archiver_store → store}/message_store.ts +0 -0
- /package/src/{archiver/structs → structs}/data_retrieval.ts +0 -0
- /package/src/{archiver/structs → structs}/inbox_message.ts +0 -0
- /package/src/{archiver/structs → structs}/published.ts +0 -0
package/README.md
CHANGED
|
@@ -1,37 +1,154 @@
|
|
|
1
1
|
# Archiver
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
The archiver fetches onchain data from L1 and stores it locally in a queryable form. It pulls:
|
|
4
|
+
- **Checkpoints** (containing L2 blocks) from `CheckpointProposed` events on the Rollup contract
|
|
5
|
+
- **L1-to-L2 messages** from `MessageSent` events on the Inbox contract
|
|
4
6
|
|
|
5
|
-
The
|
|
7
|
+
The interfaces `L2BlockSource`, `L2LogsSource`, and `ContractDataSource` define how consumers access this data. Interface `L2BlockSink` allows other subsystems, such as the validator client, to push not-yet-checkpointed blocks into the archiver.
|
|
6
8
|
|
|
7
|
-
|
|
8
|
-
2. `MessageAdded` event emitted on Inbox contract,
|
|
9
|
+
## Events
|
|
9
10
|
|
|
10
|
-
The
|
|
11
|
+
The archiver emits events for other subsystems to react to state changes:
|
|
11
12
|
|
|
12
|
-
|
|
13
|
+
- **`L2PruneDetected`**: Emitted before unwinding checkpoints due to epoch prune. Contains the epoch number and affected blocks. Subscribers (e.g., world-state) use this to prepare for the unwind.
|
|
14
|
+
- **`L2BlockProven`**: Emitted when the proven checkpoint advances. Contains the block number, slot, and epoch.
|
|
15
|
+
- **`InvalidAttestationsCheckpointDetected`**: Emitted when a checkpoint with invalid attestations is encountered during sync.
|
|
13
16
|
|
|
14
|
-
|
|
17
|
+
Note that most subsystems handle these events not by subscribing but by polling the archiver using an `L2BlockStream`. This means that, if the node stops while a subsystem has not yet processed an event, the block stream will detect it and have the subsystem reprocess it.
|
|
15
18
|
|
|
16
|
-
|
|
19
|
+
## Sync Process
|
|
17
20
|
|
|
18
|
-
|
|
21
|
+
The archiver runs a periodic sync loop with two phases:
|
|
19
22
|
|
|
20
|
-
|
|
23
|
+
1. **Process queued blocks**: External subsystems (e.g., sequencer) can push blocks directly via `addBlock()`
|
|
24
|
+
2. **Sync from L1**: Pull checkpoints and messages from L1 contracts
|
|
21
25
|
|
|
22
|
-
|
|
23
|
-
|
|
26
|
+
```
|
|
27
|
+
sync()
|
|
28
|
+
├── processQueuedBlocks() # Handle blocks pushed via addBlock()
|
|
29
|
+
└── syncFromL1()
|
|
30
|
+
├── handleL1ToL2Messages() # Sync messages from Inbox contract
|
|
31
|
+
├── handleCheckpoints() # Sync checkpoints from Rollup contract
|
|
32
|
+
├── handleEpochPrune() # Proactive unwind before proof window expires
|
|
33
|
+
└── checkForNewCheckpointsBeforeL1SyncPoint() # Handle L1 reorg edge case
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
Each sync iteration pins the current L1 block number at the start and uses it as an upper bound for all queries. This ensures consistent data retrieval even if L1 advances during the iteration.
|
|
37
|
+
|
|
38
|
+
Two independent syncpoints track progress on L1:
|
|
39
|
+
- `blocksSynchedTo`: L1 block number for checkpoint events
|
|
40
|
+
- `messagesSynchedTo`: L1 block ID (number + hash) for messages
|
|
41
|
+
|
|
42
|
+
### L1-to-L2 Messages
|
|
43
|
+
|
|
44
|
+
Messages are synced from the Inbox contract via `handleL1ToL2Messages()`:
|
|
45
|
+
|
|
46
|
+
1. Query Inbox state at the current L1 block (message count + rolling hash)
|
|
47
|
+
2. Compare local vs remote state
|
|
48
|
+
3. If they match, nothing to do
|
|
49
|
+
4. If mismatch, validate the local last message still exists on L1 with the same rolling hash
|
|
50
|
+
- If not found or hash differs, an L1 reorg occurred: find the last common message, delete everything after, and rollback the syncpoint
|
|
51
|
+
5. Fetch `MessageSent` events in batches and store
|
|
52
|
+
|
|
53
|
+
### Checkpoints
|
|
54
|
+
|
|
55
|
+
Checkpoints are synced from the Rollup contract via `handleCheckpoints()`:
|
|
56
|
+
|
|
57
|
+
1. Query rollup status (proven/pending checkpoint numbers, archive roots)
|
|
58
|
+
2. Update local proven checkpoint if it matches L1 (called early to update as soon as possible)
|
|
59
|
+
3. **Reorg detection**: Compare the local pending checkpoint's archive root against L1
|
|
60
|
+
- If not in L1 chain, unwind checkpoints until a common ancestor is found
|
|
61
|
+
4. Retrieve `CheckpointProposed` events in batches
|
|
62
|
+
5. For each checkpoint:
|
|
63
|
+
- Verify archive matches (checkpoint still in chain)
|
|
64
|
+
- Validate attestations (2/3 + 1 committee signatures required)
|
|
65
|
+
- Skip invalid checkpoints (see "Invalid Checkpoints" in Edge Cases)
|
|
66
|
+
- Verify `inHash` matches expected value (see below)
|
|
67
|
+
- Store valid checkpoints with their blocks
|
|
68
|
+
6. Update proven checkpoint again (may have advanced after storing new checkpoints)
|
|
69
|
+
7. Handle epoch prune if applicable
|
|
70
|
+
8. Check for checkpoints behind syncpoint (L1 reorg case)
|
|
71
|
+
|
|
72
|
+
The `inHash` is a hash of all L1-to-L2 messages consumed by a checkpoint. The archiver computes the expected `inHash` from locally stored messages and compares it against the checkpoint header. A mismatch indicates a bug (messages out of sync with checkpoints) and causes a fatal error.
|
|
73
|
+
|
|
74
|
+
The `blocksSynchedTo` syncpoint is updated:
|
|
75
|
+
- When checkpoints are stored: set to the L1 block of the last stored checkpoint
|
|
76
|
+
- When an invalid checkpoint is processed: advanced past it to avoid re-downloading on every iteration
|
|
77
|
+
- When the L2 chain is empty and there are still no checkpoints on L1: set to current L1 block
|
|
78
|
+
- When rolling back due to L1 reorg or missing checkpoints: set to the target L1 block to re-fetch from
|
|
79
|
+
|
|
80
|
+
Note that the `blocksSynchedTo` pointer is NOT updated during normal sync when there are no new checkpoints. This protects against small L1 reorgs that could add a checkpoint on an L1 block we have flagged as already synced.
|
|
81
|
+
|
|
82
|
+
### Block Queue
|
|
83
|
+
|
|
84
|
+
The archiver implements `L2BlockSink`, allowing other subsystems to push blocks before they appear on L1:
|
|
85
|
+
|
|
86
|
+
```typescript
|
|
87
|
+
archiver.addBlock(block); // Queues block for processing
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
Queued blocks are processed at the start of each sync iteration. This allows the sequencer to make blocks available locally before checkpoint publication. This is used to make the `proposed` chain (ie blocks that have been broadcasted via p2p but not checkpointed on L1) available to consumers.
|
|
91
|
+
|
|
92
|
+
### Edge Cases
|
|
93
|
+
|
|
94
|
+
#### L1 Reorgs
|
|
24
95
|
|
|
25
|
-
|
|
96
|
+
Both message and checkpoint sync detect L1 reorgs by comparing local state against L1. When detected, they find the last common ancestor and rollback.
|
|
97
|
+
|
|
98
|
+
**Messages**: Each stored message includes its rolling hash. During sync, if the local last message's rolling hash doesn't match L1, the archiver walks backwards through local messages, querying L1 for each one, until it finds a message with a matching rolling hash. Everything after that message is deleted, and the syncpoint is rolled back.
|
|
99
|
+
|
|
100
|
+
**Checkpoints**: When the archiver queries the Rollup contract for the archive root at the local pending checkpoint number, and it doesn't match the local archive root, the local checkpoint is no longer in L1's chain. The archiver walks backwards through local checkpoints, querying `archiveAt()` for each, until it finds one that matches. All checkpoints after that are unwound.
|
|
101
|
+
|
|
102
|
+
**Example**: The archiver has synced up to checkpoint 15. An L1 reorg replaces checkpoint 14 and 15 with different content. On the next sync:
|
|
103
|
+
1. Archiver queries `archiveAt(15)` and gets a different archive root than stored locally
|
|
104
|
+
2. Archiver queries `archiveAt(14)` — still different
|
|
105
|
+
3. Archiver queries `archiveAt(13)` — matches
|
|
106
|
+
4. Archiver unwinds checkpoints 14 and 15
|
|
107
|
+
5. Next sync iteration re-fetches the new checkpoints 14 and 15
|
|
108
|
+
|
|
109
|
+
#### Epoch Prune
|
|
110
|
+
|
|
111
|
+
If a prune would occur on the next checkpoint submission (checked via `canPruneAtTime`), the archiver preemptively unwinds to the proven checkpoint.
|
|
112
|
+
|
|
113
|
+
This handles the case where an epoch's proof submission window has passed without a valid proof being submitted. The Rollup contract will prune all unproven checkpoints on the next submission. Rather than wait for that to happen and then react, the archiver detects this condition and unwinds proactively. This keeps the local state consistent with what L1 will look like after the next checkpoint. It also means that the sequencer or validator client will build the next block with the unwind having already taken place.
|
|
114
|
+
|
|
115
|
+
**Example**: The proven checkpoint is 10, and pending checkpoints 11-15 exist locally. The proof submission window for the epoch containing checkpoint 11 will expire. On sync:
|
|
116
|
+
1. Archiver calls `canPruneAtTime()` with the next L1 block's timestamp — returns true
|
|
117
|
+
2. Archiver unwinds checkpoints 11-15
|
|
118
|
+
3. Emits `L2PruneDetected` event so subscribed subsystems can react
|
|
119
|
+
4. Local state now shows checkpoint 10 as latest
|
|
120
|
+
|
|
121
|
+
#### Checkpoints Behind Syncpoint
|
|
122
|
+
|
|
123
|
+
If after processing all logs the local checkpoint count is less than L1's pending checkpoint count, an L1 reorg may have added checkpoints _behind_ the syncpoint. The archiver rolls back the syncpoint to re-fetch.
|
|
124
|
+
|
|
125
|
+
This handles a subtle L1 reorg scenario: an L1 reorg doesn't replace existing checkpoints but adds new ones in blocks the archiver already processed. Since the archiver only queries events starting from `blocksSynchedTo`, it would miss these new checkpoints.
|
|
126
|
+
|
|
127
|
+
> [!NOTE]
|
|
128
|
+
> This scenario only occurs when `blocksSynchedTo` was advanced _without_ storing a checkpoint — specifically when the chain is empty or when an invalid checkpoint was processed (and skipped). In normal operation, `blocksSynchedTo` is set to the L1 block of the last stored checkpoint, so any L1 reorg that adds checkpoints would also change the archive root and be caught by the L1 Reorgs check (step 3 in checkpoint sync).
|
|
129
|
+
|
|
130
|
+
**Example**: The archiver has synced to L1 block 1000 with checkpoint 10. An L1 reorg at block 950 adds a new checkpoint 11 in block 960 (which was previously empty). On sync:
|
|
131
|
+
1. Archiver queries events from block 1001 onwards — finds nothing
|
|
132
|
+
2. Archiver queries Rollup contract — pending checkpoint is 11
|
|
133
|
+
3. Local checkpoint count (10) < L1 pending (11)
|
|
134
|
+
4. Archiver rolls back `blocksSynchedTo` to the L1 block of checkpoint 10
|
|
135
|
+
5. Next sync iteration re-queries from that point and finds checkpoint 11
|
|
136
|
+
|
|
137
|
+
#### Invalid Checkpoints
|
|
138
|
+
|
|
139
|
+
When the archiver encounters a checkpoint with invalid attestations, it skips it and continues processing subsequent checkpoints. It also advances `blocksSynchedTo` past the invalid checkpoint to avoid re-downloading it on every iteration.
|
|
140
|
+
|
|
141
|
+
This handles [delayed attestation verification](https://github.com/AztecProtocol/engineering-designs/pull/69): the Rollup contract no longer validates committee attestations on L1. Instead, attestations are posted in calldata and L2 nodes verify them during sync. Checkpoints with invalid attestations (insufficient signatures, wrong signers, or invalid signatures) are skipped. An honest proposer will eventually call `invalidate` on the Rollup contract to remove these checkpoints.
|
|
142
|
+
|
|
143
|
+
The archiver exposes `pendingChainValidationStatus` for the sequencer to know if there's an invalid checkpoint that needs purging before posting a new one. If invalid, this status contains the data needed for the `invalidate` call. When multiple consecutive invalid checkpoints exist, the status references the earliest one (invalidating it automatically purges descendants).
|
|
144
|
+
|
|
145
|
+
> [!WARNING]
|
|
146
|
+
> If a malicious committee attests to a descendant of an invalid checkpoint, nodes should ignore these descendants unless proven. This is not yet implemented — nodes assume honest committee majority.
|
|
26
147
|
|
|
27
|
-
|
|
28
|
-
|
|
148
|
+
**Example**: Chain has progressed to checkpoint 10. Then:
|
|
149
|
+
1. Checkpoint 11 posted with invalid attestations → archiver reports 10 as latest, `pendingChainValidationStatus` points to 11
|
|
150
|
+
2. Checkpoint 11 purged, new invalid checkpoint 11 posted → status updates to new checkpoint 11
|
|
151
|
+
3. Checkpoint 12 with invalid attestations posted → no change (status still points to 11)
|
|
152
|
+
4. Checkpoint 11 purged and reposted with valid attestations → archiver syncs checkpoint 11, status becomes valid
|
|
29
153
|
|
|
30
|
-
As an example, let's say the chain has been progressing normally up until checkpoint 10, and then:
|
|
31
|
-
1. Checkpoint 11 is posted with invalid attestations. The archiver will report 10 as the latest checkpoint, but the `pendingChainValidationStatus` will point to checkpoint 11.
|
|
32
|
-
2. Checkpoint 11 is purged, but another checkpoint 11 with invalid attestations is posted in its place. The archiver will still report 10 as latest, and the `pendingChainValidationStatus` will point to the new checkpoint 11 that needs to be purged.
|
|
33
|
-
3. Checkpoint 12 with invalid attestations is posted. No changes in the archiver.
|
|
34
|
-
4. Checkpoint 13 is posted with valid attestations, due to a malicious committee. The archiver will try to sync it and fail, since 13 does not follow 10. This scenario is not gracefully handled yet.
|
|
35
|
-
5. Checkpoints 11 to 13 are purged. The archiver status will not yet be changed: 10 will still be the latest checkpoint, and the `pendingChainValidationStatus` will point to 11. This is because the archiver does **not** follow `CheckpointInvalidated` events.
|
|
36
|
-
6. Checkpoint 11 with valid attestations is posted. The archiver pending chain now reports 11 as latest, and its status is valid.
|
|
37
154
|
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import type { BlobClientInterface } from '@aztec/blob-client/client';
|
|
2
|
+
import { EpochCache } from '@aztec/epoch-cache';
|
|
3
|
+
import { RollupContract } from '@aztec/ethereum/contracts';
|
|
4
|
+
import type { L1ContractAddresses } from '@aztec/ethereum/l1-contract-addresses';
|
|
5
|
+
import type { ViemPublicClient, ViemPublicDebugClient } from '@aztec/ethereum/types';
|
|
6
|
+
import { BlockNumber, CheckpointNumber, EpochNumber, SlotNumber } from '@aztec/foundation/branded-types';
|
|
7
|
+
import { Buffer32 } from '@aztec/foundation/buffer';
|
|
8
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
9
|
+
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
10
|
+
import { type Logger } from '@aztec/foundation/log';
|
|
11
|
+
import { DateProvider } from '@aztec/foundation/timer';
|
|
12
|
+
import { type ArchiverEmitter, L2BlockNew, type L2BlockSink, type L2Tips, type ValidateCheckpointResult } from '@aztec/stdlib/block';
|
|
13
|
+
import { PublishedCheckpoint } from '@aztec/stdlib/checkpoint';
|
|
14
|
+
import { type L1RollupConstants } from '@aztec/stdlib/epoch-helpers';
|
|
15
|
+
import { type TelemetryClient, type Traceable, type Tracer } from '@aztec/telemetry-client';
|
|
16
|
+
import { type ArchiverConfig } from './config.js';
|
|
17
|
+
import { ArchiverDataSourceBase } from './modules/data_source_base.js';
|
|
18
|
+
import type { ArchiverInstrumentation } from './modules/instrumentation.js';
|
|
19
|
+
import type { ArchiverL1Synchronizer } from './modules/l1_synchronizer.js';
|
|
20
|
+
import type { KVArchiverDataStore } from './store/kv_archiver_store.js';
|
|
21
|
+
/** Export ArchiverEmitter for use in factory and tests. */
|
|
22
|
+
export type { ArchiverEmitter };
|
|
23
|
+
export type ArchiverDeps = {
|
|
24
|
+
telemetry?: TelemetryClient;
|
|
25
|
+
blobClient: BlobClientInterface;
|
|
26
|
+
epochCache?: EpochCache;
|
|
27
|
+
dateProvider?: DateProvider;
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* Pulls checkpoints in a non-blocking manner and provides interface for their retrieval.
|
|
31
|
+
* Responsible for handling robust L1 polling so that other components do not need to
|
|
32
|
+
* concern themselves with it.
|
|
33
|
+
*/
|
|
34
|
+
export declare class Archiver extends ArchiverDataSourceBase implements L2BlockSink, Traceable {
|
|
35
|
+
private readonly publicClient;
|
|
36
|
+
private readonly debugClient;
|
|
37
|
+
private readonly rollup;
|
|
38
|
+
private readonly l1Addresses;
|
|
39
|
+
readonly dataStore: KVArchiverDataStore;
|
|
40
|
+
private config;
|
|
41
|
+
private readonly blobClient;
|
|
42
|
+
protected readonly l1Constants: L1RollupConstants & {
|
|
43
|
+
l1StartBlockHash: Buffer32;
|
|
44
|
+
genesisArchiveRoot: Fr;
|
|
45
|
+
};
|
|
46
|
+
private readonly log;
|
|
47
|
+
/** Event emitter for archiver events (L2BlockProven, L2PruneDetected, etc). */
|
|
48
|
+
readonly events: ArchiverEmitter;
|
|
49
|
+
/** A loop in which we will be continually fetching new checkpoints. */
|
|
50
|
+
private runningPromise;
|
|
51
|
+
/** L1 synchronizer that handles fetching checkpoints and messages from L1. */
|
|
52
|
+
private readonly synchronizer;
|
|
53
|
+
private initialSyncComplete;
|
|
54
|
+
private initialSyncPromise;
|
|
55
|
+
/** Queue of blocks to be added to the store, processed by the sync loop. */
|
|
56
|
+
private blockQueue;
|
|
57
|
+
/** Helper to handle updates to the store */
|
|
58
|
+
private readonly updater;
|
|
59
|
+
readonly tracer: Tracer;
|
|
60
|
+
/**
|
|
61
|
+
* Creates a new instance of the Archiver.
|
|
62
|
+
* @param publicClient - A client for interacting with the Ethereum node.
|
|
63
|
+
* @param debugClient - A client for interacting with the Ethereum node for debug/trace methods.
|
|
64
|
+
* @param rollup - Rollup contract instance.
|
|
65
|
+
* @param inbox - Inbox contract instance.
|
|
66
|
+
* @param l1Addresses - L1 contract addresses (registry, governance proposer, slash factory, slashing proposer).
|
|
67
|
+
* @param dataStore - An archiver data store for storage & retrieval of blocks, encrypted logs & contract data.
|
|
68
|
+
* @param config - Archiver configuration options.
|
|
69
|
+
* @param blobClient - Client for retrieving blob data.
|
|
70
|
+
* @param epochCache - Cache for epoch-related data.
|
|
71
|
+
* @param dateProvider - Provider for current date/time.
|
|
72
|
+
* @param instrumentation - Instrumentation for metrics and tracing.
|
|
73
|
+
* @param l1Constants - L1 rollup constants.
|
|
74
|
+
* @param log - A logger.
|
|
75
|
+
*/
|
|
76
|
+
constructor(publicClient: ViemPublicClient, debugClient: ViemPublicDebugClient, rollup: RollupContract, l1Addresses: Pick<L1ContractAddresses, 'registryAddress' | 'governanceProposerAddress' | 'slashFactoryAddress'> & {
|
|
77
|
+
slashingProposerAddress: EthAddress;
|
|
78
|
+
}, dataStore: KVArchiverDataStore, config: {
|
|
79
|
+
pollingIntervalMs: number;
|
|
80
|
+
batchSize: number;
|
|
81
|
+
skipValidateCheckpointAttestations?: boolean;
|
|
82
|
+
maxAllowedEthClientDriftSeconds: number;
|
|
83
|
+
ethereumAllowNoDebugHosts?: boolean;
|
|
84
|
+
}, blobClient: BlobClientInterface, instrumentation: ArchiverInstrumentation, l1Constants: L1RollupConstants & {
|
|
85
|
+
l1StartBlockHash: Buffer32;
|
|
86
|
+
genesisArchiveRoot: Fr;
|
|
87
|
+
}, synchronizer: ArchiverL1Synchronizer, events: ArchiverEmitter, log?: Logger);
|
|
88
|
+
/** Updates archiver config */
|
|
89
|
+
updateConfig(newConfig: Partial<ArchiverConfig>): void;
|
|
90
|
+
/**
|
|
91
|
+
* Starts sync process.
|
|
92
|
+
* @param blockUntilSynced - If true, blocks until the archiver has fully synced.
|
|
93
|
+
*/
|
|
94
|
+
start(blockUntilSynced: boolean): Promise<void>;
|
|
95
|
+
syncImmediate(): Promise<void>;
|
|
96
|
+
/**
|
|
97
|
+
* Queues a block to be added to the archiver store and triggers processing.
|
|
98
|
+
* The block will be processed by the sync loop.
|
|
99
|
+
* Implements the L2BlockSink interface.
|
|
100
|
+
* @param block - The L2 block to add.
|
|
101
|
+
* @returns A promise that resolves when the block has been added to the store, or rejects on error.
|
|
102
|
+
*/
|
|
103
|
+
addBlock(block: L2BlockNew): Promise<void>;
|
|
104
|
+
private processQueuedBlocks;
|
|
105
|
+
waitForInitialSync(): Promise<void>;
|
|
106
|
+
private sync;
|
|
107
|
+
private syncFromL1;
|
|
108
|
+
/** Resumes the archiver after a stop. */
|
|
109
|
+
resume(): void;
|
|
110
|
+
/**
|
|
111
|
+
* Stops the archiver.
|
|
112
|
+
* @returns A promise signalling completion of the stop process.
|
|
113
|
+
*/
|
|
114
|
+
stop(): Promise<void>;
|
|
115
|
+
backupTo(destPath: string): Promise<string>;
|
|
116
|
+
getL1Constants(): Promise<L1RollupConstants>;
|
|
117
|
+
getGenesisValues(): Promise<{
|
|
118
|
+
genesisArchiveRoot: Fr;
|
|
119
|
+
}>;
|
|
120
|
+
getRollupAddress(): Promise<EthAddress>;
|
|
121
|
+
getRegistryAddress(): Promise<EthAddress>;
|
|
122
|
+
getL1BlockNumber(): bigint | undefined;
|
|
123
|
+
getL1Timestamp(): Promise<bigint | undefined>;
|
|
124
|
+
getL2SlotNumber(): Promise<SlotNumber | undefined>;
|
|
125
|
+
getL2EpochNumber(): Promise<EpochNumber | undefined>;
|
|
126
|
+
isEpochComplete(epochNumber: EpochNumber): Promise<boolean>;
|
|
127
|
+
/** Returns whether the archiver has completed an initial sync run successfully. */
|
|
128
|
+
isInitialSyncComplete(): boolean;
|
|
129
|
+
unwindCheckpoints(from: CheckpointNumber, checkpointsToUnwind: number): Promise<boolean>;
|
|
130
|
+
addCheckpoints(checkpoints: PublishedCheckpoint[], pendingChainValidationStatus?: ValidateCheckpointResult): Promise<boolean>;
|
|
131
|
+
getL2Tips(): Promise<L2Tips>;
|
|
132
|
+
rollbackTo(targetL2BlockNumber: BlockNumber): Promise<void>;
|
|
133
|
+
}
|
|
134
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJjaGl2ZXIuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9hcmNoaXZlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRXJFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNoRCxPQUFPLEVBQXVCLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2hGLE9BQU8sS0FBSyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDakYsT0FBTyxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNyRixPQUFPLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN6RyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFcEQsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3BELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUMzRCxPQUFPLEVBQUUsS0FBSyxNQUFNLEVBQWdCLE1BQU0sdUJBQXVCLENBQUM7QUFHbEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3ZELE9BQU8sRUFDTCxLQUFLLGVBQWUsRUFHcEIsVUFBVSxFQUNWLEtBQUssV0FBVyxFQUNoQixLQUFLLE1BQU0sRUFDWCxLQUFLLHdCQUF3QixFQUM5QixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQy9ELE9BQU8sRUFDTCxLQUFLLGlCQUFpQixFQUt2QixNQUFNLDZCQUE2QixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxLQUFLLGVBQWUsRUFBRSxLQUFLLFNBQVMsRUFB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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"archiver.d.ts","sourceRoot":"","sources":["../src/archiver.ts"],"names":[],"mappings":"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"}
|