@aztec/archiver 4.0.0-nightly.20260118 → 4.0.0-nightly.20260120
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/dest/l1/data_retrieval.d.ts +1 -1
- package/dest/l1/data_retrieval.d.ts.map +1 -1
- package/dest/l1/data_retrieval.js +2 -2
- package/dest/modules/data_source_base.d.ts +10 -9
- package/dest/modules/data_source_base.d.ts.map +1 -1
- package/dest/modules/data_source_base.js +22 -35
- package/dest/modules/validation.d.ts +1 -1
- package/dest/modules/validation.d.ts.map +1 -1
- package/dest/modules/validation.js +6 -0
- package/dest/store/block_store.d.ts +1 -1
- package/dest/store/block_store.d.ts.map +1 -1
- package/dest/store/block_store.js +2 -2
- package/dest/test/mock_archiver.d.ts +2 -2
- package/dest/test/mock_archiver.d.ts.map +1 -1
- package/dest/test/mock_archiver.js +1 -2
- package/dest/test/mock_l2_block_source.d.ts +14 -12
- package/dest/test/mock_l2_block_source.d.ts.map +1 -1
- package/dest/test/mock_l2_block_source.js +85 -28
- package/dest/test/mock_structs.d.ts +1 -1
- package/dest/test/mock_structs.d.ts.map +1 -1
- package/dest/test/mock_structs.js +2 -2
- package/package.json +13 -13
- package/src/l1/data_retrieval.ts +2 -2
- package/src/modules/data_source_base.ts +31 -60
- package/src/modules/validation.ts +5 -0
- package/src/store/block_store.ts +2 -2
- package/src/test/mock_archiver.ts +2 -2
- package/src/test/mock_l2_block_source.ts +92 -39
- package/src/test/mock_structs.ts +2 -2
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { GENESIS_ARCHIVE_ROOT } from '@aztec/constants';
|
|
2
2
|
import { DefaultL1ContractsConfig } from '@aztec/ethereum/config';
|
|
3
|
-
import { BlockNumber, CheckpointNumber } from '@aztec/foundation/branded-types';
|
|
3
|
+
import { BlockNumber, CheckpointNumber, SlotNumber } from '@aztec/foundation/branded-types';
|
|
4
4
|
import { Buffer32 } from '@aztec/foundation/buffer';
|
|
5
5
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
6
6
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
7
7
|
import { createLogger } from '@aztec/foundation/log';
|
|
8
|
-
import { CheckpointedL2Block,
|
|
9
|
-
import { L1PublishedData } from '@aztec/stdlib/checkpoint';
|
|
8
|
+
import { CheckpointedL2Block, L2BlockHash, L2BlockNew } from '@aztec/stdlib/block';
|
|
9
|
+
import { Checkpoint, L1PublishedData, PublishedCheckpoint } from '@aztec/stdlib/checkpoint';
|
|
10
10
|
import { EmptyL1RollupConstants, getSlotRangeForEpoch } from '@aztec/stdlib/epoch-helpers';
|
|
11
11
|
import { TxReceipt, TxStatus } from '@aztec/stdlib/tx';
|
|
12
12
|
/**
|
|
@@ -20,7 +20,9 @@ import { TxReceipt, TxStatus } from '@aztec/stdlib/tx';
|
|
|
20
20
|
async createBlocks(numBlocks) {
|
|
21
21
|
for(let i = 0; i < numBlocks; i++){
|
|
22
22
|
const blockNum = this.l2Blocks.length + 1;
|
|
23
|
-
const block = await
|
|
23
|
+
const block = await L2BlockNew.random(BlockNumber(blockNum), {
|
|
24
|
+
slotNumber: SlotNumber(blockNum)
|
|
25
|
+
});
|
|
24
26
|
this.l2Blocks.push(block);
|
|
25
27
|
}
|
|
26
28
|
this.log.verbose(`Created ${numBlocks} blocks in the mock L2 block source`);
|
|
@@ -74,7 +76,7 @@ import { TxReceipt, TxStatus } from '@aztec/stdlib/tx';
|
|
|
74
76
|
if (!block) {
|
|
75
77
|
return Promise.resolve(undefined);
|
|
76
78
|
}
|
|
77
|
-
const checkpointedBlock = new CheckpointedL2Block(CheckpointNumber(number), block
|
|
79
|
+
const checkpointedBlock = new CheckpointedL2Block(CheckpointNumber(number), block, new L1PublishedData(BigInt(number), BigInt(number), `0x${number.toString(16).padStart(64, '0')}`), []);
|
|
78
80
|
return Promise.resolve(checkpointedBlock);
|
|
79
81
|
}
|
|
80
82
|
async getCheckpointedBlocks(from, limit, _proven) {
|
|
@@ -96,7 +98,8 @@ import { TxReceipt, TxStatus } from '@aztec/stdlib/tx';
|
|
|
96
98
|
* @param number - The block number to return (inclusive).
|
|
97
99
|
* @returns The requested L2 block.
|
|
98
100
|
*/ getBlock(number) {
|
|
99
|
-
|
|
101
|
+
const block = this.l2Blocks[number - 1];
|
|
102
|
+
return Promise.resolve(block);
|
|
100
103
|
}
|
|
101
104
|
/**
|
|
102
105
|
* Gets an L2 block (new format).
|
|
@@ -104,7 +107,7 @@ import { TxReceipt, TxStatus } from '@aztec/stdlib/tx';
|
|
|
104
107
|
* @returns The requested L2 block.
|
|
105
108
|
*/ getL2BlockNew(number) {
|
|
106
109
|
const block = this.l2Blocks[number - 1];
|
|
107
|
-
return Promise.resolve(block
|
|
110
|
+
return Promise.resolve(block);
|
|
108
111
|
}
|
|
109
112
|
/**
|
|
110
113
|
* Gets up to `limit` amount of L2 blocks starting from `from`.
|
|
@@ -114,31 +117,54 @@ import { TxReceipt, TxStatus } from '@aztec/stdlib/tx';
|
|
|
114
117
|
*/ getBlocks(from, limit, proven) {
|
|
115
118
|
return Promise.resolve(this.l2Blocks.slice(from - 1, from - 1 + limit).filter((b)=>!proven || this.provenBlockNumber === undefined || b.number <= this.provenBlockNumber));
|
|
116
119
|
}
|
|
117
|
-
|
|
118
|
-
// TODO: Implement this properly. This only works when we have one block per checkpoint.
|
|
119
|
-
|
|
120
|
+
getPublishedCheckpoints(from, limit) {
|
|
121
|
+
// TODO(mbps): Implement this properly. This only works when we have one block per checkpoint.
|
|
122
|
+
const blocks = this.l2Blocks.slice(from - 1, from - 1 + limit);
|
|
123
|
+
return Promise.all(blocks.map(async (block)=>{
|
|
124
|
+
// Create a checkpoint from the block - manually construct since L2BlockNew doesn't have toCheckpoint()
|
|
125
|
+
const checkpoint = await Checkpoint.random(block.checkpointNumber, {
|
|
126
|
+
numBlocks: 1
|
|
127
|
+
});
|
|
128
|
+
checkpoint.blocks = [
|
|
129
|
+
block
|
|
130
|
+
];
|
|
131
|
+
return new PublishedCheckpoint(checkpoint, new L1PublishedData(BigInt(block.number), BigInt(block.number), Buffer32.random().toString()), []);
|
|
132
|
+
}));
|
|
120
133
|
}
|
|
121
134
|
async getCheckpointByArchive(archive) {
|
|
122
|
-
// TODO: Implement this properly. This only works when we have one block per checkpoint.
|
|
123
|
-
|
|
135
|
+
// TODO(mbps): Implement this properly. This only works when we have one block per checkpoint.
|
|
136
|
+
const block = this.l2Blocks.find((b)=>b.archive.root.equals(archive));
|
|
137
|
+
if (!block) {
|
|
138
|
+
return undefined;
|
|
139
|
+
}
|
|
140
|
+
// Create a checkpoint from the block - manually construct since L2BlockNew doesn't have toCheckpoint()
|
|
141
|
+
const checkpoint = await Checkpoint.random(block.checkpointNumber, {
|
|
142
|
+
numBlocks: 1
|
|
143
|
+
});
|
|
144
|
+
checkpoint.blocks = [
|
|
145
|
+
block
|
|
146
|
+
];
|
|
147
|
+
return checkpoint;
|
|
124
148
|
}
|
|
125
|
-
|
|
126
|
-
const blocks =
|
|
127
|
-
return blocks.map((block)=>
|
|
149
|
+
getPublishedBlocks(from, limit, proven) {
|
|
150
|
+
const blocks = this.l2Blocks.slice(from - 1, from - 1 + limit).filter((b)=>!proven || this.provenBlockNumber === undefined || b.number <= this.provenBlockNumber);
|
|
151
|
+
return Promise.resolve(blocks.map((block)=>CheckpointedL2Block.fromFields({
|
|
152
|
+
checkpointNumber: CheckpointNumber(block.number),
|
|
128
153
|
block,
|
|
129
154
|
l1: new L1PublishedData(BigInt(block.number), BigInt(block.number), Buffer32.random().toString()),
|
|
130
155
|
attestations: []
|
|
131
|
-
}));
|
|
156
|
+
})));
|
|
132
157
|
}
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
return
|
|
158
|
+
getL2BlocksNew(from, limit, proven) {
|
|
159
|
+
// getBlocks already returns L2BlockNew[], so just return directly
|
|
160
|
+
return this.getBlocks(from, limit, proven);
|
|
136
161
|
}
|
|
137
162
|
async getPublishedBlockByHash(blockHash) {
|
|
138
163
|
for (const block of this.l2Blocks){
|
|
139
164
|
const hash = await block.hash();
|
|
140
165
|
if (hash.equals(blockHash)) {
|
|
141
|
-
return
|
|
166
|
+
return CheckpointedL2Block.fromFields({
|
|
167
|
+
checkpointNumber: CheckpointNumber(block.number),
|
|
142
168
|
block,
|
|
143
169
|
l1: new L1PublishedData(BigInt(block.number), BigInt(block.number), Buffer32.random().toString()),
|
|
144
170
|
attestations: []
|
|
@@ -152,31 +178,62 @@ import { TxReceipt, TxStatus } from '@aztec/stdlib/tx';
|
|
|
152
178
|
if (!block) {
|
|
153
179
|
return Promise.resolve(undefined);
|
|
154
180
|
}
|
|
155
|
-
return Promise.resolve(
|
|
181
|
+
return Promise.resolve(CheckpointedL2Block.fromFields({
|
|
182
|
+
checkpointNumber: CheckpointNumber(block.number),
|
|
156
183
|
block,
|
|
157
184
|
l1: new L1PublishedData(BigInt(block.number), BigInt(block.number), Buffer32.random().toString()),
|
|
158
185
|
attestations: []
|
|
159
186
|
}));
|
|
160
187
|
}
|
|
188
|
+
async getL2BlockNewByHash(blockHash) {
|
|
189
|
+
for (const block of this.l2Blocks){
|
|
190
|
+
const hash = await block.hash();
|
|
191
|
+
if (hash.equals(blockHash)) {
|
|
192
|
+
return block;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
return undefined;
|
|
196
|
+
}
|
|
197
|
+
getL2BlockNewByArchive(archive) {
|
|
198
|
+
const block = this.l2Blocks.find((b)=>b.archive.root.equals(archive));
|
|
199
|
+
return Promise.resolve(block);
|
|
200
|
+
}
|
|
161
201
|
async getBlockHeaderByHash(blockHash) {
|
|
162
202
|
for (const block of this.l2Blocks){
|
|
163
203
|
const hash = await block.hash();
|
|
164
204
|
if (hash.equals(blockHash)) {
|
|
165
|
-
return block.
|
|
205
|
+
return block.header;
|
|
166
206
|
}
|
|
167
207
|
}
|
|
168
208
|
return undefined;
|
|
169
209
|
}
|
|
170
210
|
getBlockHeaderByArchive(archive) {
|
|
171
211
|
const block = this.l2Blocks.find((b)=>b.archive.root.equals(archive));
|
|
172
|
-
return Promise.resolve(block?.
|
|
212
|
+
return Promise.resolve(block?.header);
|
|
173
213
|
}
|
|
174
214
|
getBlockHeader(number) {
|
|
175
|
-
return Promise.resolve(this.l2Blocks.at(typeof number === 'number' ? number - 1 : -1)?.
|
|
215
|
+
return Promise.resolve(this.l2Blocks.at(typeof number === 'number' ? number - 1 : -1)?.header);
|
|
176
216
|
}
|
|
177
217
|
getCheckpointsForEpoch(epochNumber) {
|
|
178
|
-
// TODO: Implement this properly. This only works when we have one block per checkpoint.
|
|
179
|
-
|
|
218
|
+
// TODO(mbps): Implement this properly. This only works when we have one block per checkpoint.
|
|
219
|
+
const epochDuration = DefaultL1ContractsConfig.aztecEpochDuration;
|
|
220
|
+
const [start, end] = getSlotRangeForEpoch(epochNumber, {
|
|
221
|
+
epochDuration
|
|
222
|
+
});
|
|
223
|
+
const blocks = this.l2Blocks.filter((b)=>{
|
|
224
|
+
const slot = b.header.globalVariables.slotNumber;
|
|
225
|
+
return slot >= start && slot <= end;
|
|
226
|
+
});
|
|
227
|
+
// Create checkpoints from blocks - manually construct since L2BlockNew doesn't have toCheckpoint()
|
|
228
|
+
return Promise.all(blocks.map(async (block)=>{
|
|
229
|
+
const checkpoint = await Checkpoint.random(block.checkpointNumber, {
|
|
230
|
+
numBlocks: 1
|
|
231
|
+
});
|
|
232
|
+
checkpoint.blocks = [
|
|
233
|
+
block
|
|
234
|
+
];
|
|
235
|
+
return checkpoint;
|
|
236
|
+
}));
|
|
180
237
|
}
|
|
181
238
|
getBlocksForEpoch(epochNumber) {
|
|
182
239
|
const epochDuration = DefaultL1ContractsConfig.aztecEpochDuration;
|
|
@@ -191,11 +248,11 @@ import { TxReceipt, TxStatus } from '@aztec/stdlib/tx';
|
|
|
191
248
|
}
|
|
192
249
|
getBlocksForSlot(slotNumber) {
|
|
193
250
|
const blocks = this.l2Blocks.filter((b)=>b.header.globalVariables.slotNumber === slotNumber);
|
|
194
|
-
return Promise.resolve(blocks
|
|
251
|
+
return Promise.resolve(blocks);
|
|
195
252
|
}
|
|
196
253
|
async getBlockHeadersForEpoch(epochNumber) {
|
|
197
254
|
const blocks = await this.getBlocksForEpoch(epochNumber);
|
|
198
|
-
return blocks.map((b)=>b.
|
|
255
|
+
return blocks.map((b)=>b.header);
|
|
199
256
|
}
|
|
200
257
|
/**
|
|
201
258
|
* Gets a tx effect.
|
|
@@ -81,4 +81,4 @@ export interface MockCheckpointWithLogsOptions {
|
|
|
81
81
|
}
|
|
82
82
|
/** Creates a checkpoint with specified logs on each tx effect. */
|
|
83
83
|
export declare function makeCheckpointWithLogs(blockNumber: number, options?: MockCheckpointWithLogsOptions): Promise<PublishedCheckpoint>;
|
|
84
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
84
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ja19zdHJ1Y3RzLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVzdC9tb2NrX3N0cnVjdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBTUEsT0FBTyxFQUFlLGdCQUFnQixFQUF5QixNQUFNLGlDQUFpQyxDQUFDO0FBQ3ZHLE9BQU8sRUFBRSxRQUFRLEVBQVksTUFBTSwwQkFBMEIsQ0FBQztBQUc5RCxPQUFPLEtBQUssRUFBRSxlQUFlLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUVqRixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRTNELE9BQU8sRUFBRSxVQUFVLEVBQUUsZUFBZSxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDNUYsT0FBTyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBSzNFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzdELE9BQU8sRUFBeUIsY0FBYyxFQUFZLE1BQU0sa0JBQWtCLENBQUM7QUFFbkYsT0FBTyxFQUFFLEtBQUssWUFBWSxFQUFxQixNQUFNLDZCQUE2QixDQUFDO0FBRW5GLHdCQUFnQixnQkFBZ0IsQ0FDOUIsbUJBQW1CLFdBQWdCLEVBQ25DLFNBQVMsR0FBRSxPQUFPLENBQUMsWUFBWSxDQUFNLEdBQ3BDLFlBQVksQ0FnQmQ7QUFFRCx3QkFBZ0IsaUJBQWlCLENBQy9CLEtBQUssRUFBRSxNQUFNLEVBQ2IsSUFBSSxHQUFFO0lBQ0osV0FBVyxDQUFDLEVBQUUsUUFBUSxDQUFDO0lBQ3ZCLHVCQUF1QixDQUFDLEVBQUUsZ0JBQWdCLENBQUM7SUFDM0MsVUFBVSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEtBQUss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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mock_structs.d.ts","sourceRoot":"","sources":["../../src/test/mock_structs.ts"],"names":[],"mappings":"AAMA,OAAO,EAAe,gBAAgB,
|
|
1
|
+
{"version":3,"file":"mock_structs.d.ts","sourceRoot":"","sources":["../../src/test/mock_structs.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { MAX_NOTE_HASHES_PER_TX, NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP, PRIVATE_LOG_SIZE_IN_FIELDS } from '@aztec/constants';
|
|
2
2
|
import { makeTuple } from '@aztec/foundation/array';
|
|
3
|
-
import { BlockNumber, CheckpointNumber } from '@aztec/foundation/branded-types';
|
|
3
|
+
import { BlockNumber, CheckpointNumber, IndexWithinCheckpoint } from '@aztec/foundation/branded-types';
|
|
4
4
|
import { Buffer16, Buffer32 } from '@aztec/foundation/buffer';
|
|
5
5
|
import { times, timesParallel } from '@aztec/foundation/collection';
|
|
6
6
|
import { randomBigInt, randomInt } from '@aztec/foundation/crypto/random';
|
|
@@ -149,7 +149,7 @@ export function makeInboxMessages(count, opts = {}) {
|
|
|
149
149
|
const { previousArchive, numTxsPerBlock = 4, privateLogs, publicLogs } = options;
|
|
150
150
|
const block = await L2BlockNew.random(BlockNumber(blockNumber), {
|
|
151
151
|
checkpointNumber: CheckpointNumber(blockNumber),
|
|
152
|
-
indexWithinCheckpoint: 0,
|
|
152
|
+
indexWithinCheckpoint: IndexWithinCheckpoint(0),
|
|
153
153
|
state: makeStateForBlock(blockNumber, numTxsPerBlock),
|
|
154
154
|
...previousArchive ? {
|
|
155
155
|
lastArchive: previousArchive
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/archiver",
|
|
3
|
-
"version": "4.0.0-nightly.
|
|
3
|
+
"version": "4.0.0-nightly.20260120",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": "./dest/index.js",
|
|
@@ -64,18 +64,18 @@
|
|
|
64
64
|
]
|
|
65
65
|
},
|
|
66
66
|
"dependencies": {
|
|
67
|
-
"@aztec/blob-client": "4.0.0-nightly.
|
|
68
|
-
"@aztec/blob-lib": "4.0.0-nightly.
|
|
69
|
-
"@aztec/constants": "4.0.0-nightly.
|
|
70
|
-
"@aztec/epoch-cache": "4.0.0-nightly.
|
|
71
|
-
"@aztec/ethereum": "4.0.0-nightly.
|
|
72
|
-
"@aztec/foundation": "4.0.0-nightly.
|
|
73
|
-
"@aztec/kv-store": "4.0.0-nightly.
|
|
74
|
-
"@aztec/l1-artifacts": "4.0.0-nightly.
|
|
75
|
-
"@aztec/noir-protocol-circuits-types": "4.0.0-nightly.
|
|
76
|
-
"@aztec/protocol-contracts": "4.0.0-nightly.
|
|
77
|
-
"@aztec/stdlib": "4.0.0-nightly.
|
|
78
|
-
"@aztec/telemetry-client": "4.0.0-nightly.
|
|
67
|
+
"@aztec/blob-client": "4.0.0-nightly.20260120",
|
|
68
|
+
"@aztec/blob-lib": "4.0.0-nightly.20260120",
|
|
69
|
+
"@aztec/constants": "4.0.0-nightly.20260120",
|
|
70
|
+
"@aztec/epoch-cache": "4.0.0-nightly.20260120",
|
|
71
|
+
"@aztec/ethereum": "4.0.0-nightly.20260120",
|
|
72
|
+
"@aztec/foundation": "4.0.0-nightly.20260120",
|
|
73
|
+
"@aztec/kv-store": "4.0.0-nightly.20260120",
|
|
74
|
+
"@aztec/l1-artifacts": "4.0.0-nightly.20260120",
|
|
75
|
+
"@aztec/noir-protocol-circuits-types": "4.0.0-nightly.20260120",
|
|
76
|
+
"@aztec/protocol-contracts": "4.0.0-nightly.20260120",
|
|
77
|
+
"@aztec/stdlib": "4.0.0-nightly.20260120",
|
|
78
|
+
"@aztec/telemetry-client": "4.0.0-nightly.20260120",
|
|
79
79
|
"lodash.groupby": "^4.6.0",
|
|
80
80
|
"lodash.omit": "^4.5.0",
|
|
81
81
|
"tslib": "^2.5.0",
|
package/src/l1/data_retrieval.ts
CHANGED
|
@@ -15,7 +15,7 @@ import type {
|
|
|
15
15
|
} from '@aztec/ethereum/contracts';
|
|
16
16
|
import type { ViemPublicClient, ViemPublicDebugClient } from '@aztec/ethereum/types';
|
|
17
17
|
import { asyncPool } from '@aztec/foundation/async-pool';
|
|
18
|
-
import { CheckpointNumber } from '@aztec/foundation/branded-types';
|
|
18
|
+
import { CheckpointNumber, IndexWithinCheckpoint } from '@aztec/foundation/branded-types';
|
|
19
19
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
20
20
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
21
21
|
import { type Logger, createLogger } from '@aztec/foundation/log';
|
|
@@ -119,7 +119,7 @@ export async function retrievedToPublishedCheckpoint({
|
|
|
119
119
|
|
|
120
120
|
const newArchive = new AppendOnlyTreeSnapshot(newArchiveRoots[i], l2BlockNumber + 1);
|
|
121
121
|
|
|
122
|
-
l2Blocks.push(new L2BlockNew(newArchive, header, body, checkpointNumber, i));
|
|
122
|
+
l2Blocks.push(new L2BlockNew(newArchive, header, body, checkpointNumber, IndexWithinCheckpoint(i)));
|
|
123
123
|
}
|
|
124
124
|
|
|
125
125
|
const lastBlock = l2Blocks.at(-1)!;
|
|
@@ -4,14 +4,7 @@ import type { EthAddress } from '@aztec/foundation/eth-address';
|
|
|
4
4
|
import { isDefined } from '@aztec/foundation/types';
|
|
5
5
|
import type { FunctionSelector } from '@aztec/stdlib/abi';
|
|
6
6
|
import type { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
7
|
-
import {
|
|
8
|
-
type CheckpointedL2Block,
|
|
9
|
-
CommitteeAttestation,
|
|
10
|
-
L2Block,
|
|
11
|
-
type L2BlockNew,
|
|
12
|
-
type L2Tips,
|
|
13
|
-
PublishedL2Block,
|
|
14
|
-
} from '@aztec/stdlib/block';
|
|
7
|
+
import { CheckpointedL2Block, CommitteeAttestation, L2BlockNew, type L2Tips } from '@aztec/stdlib/block';
|
|
15
8
|
import { Checkpoint, PublishedCheckpoint } from '@aztec/stdlib/checkpoint';
|
|
16
9
|
import type { ContractClassPublic, ContractDataSource, ContractInstanceWithAddress } from '@aztec/stdlib/contract';
|
|
17
10
|
import { type L1RollupConstants, getSlotRangeForEpoch } from '@aztec/stdlib/epoch-helpers';
|
|
@@ -273,13 +266,13 @@ export abstract class ArchiverDataSourceBase
|
|
|
273
266
|
return this.store.getBlocksForSlot(slotNumber);
|
|
274
267
|
}
|
|
275
268
|
|
|
276
|
-
public async getBlocksForEpoch(epochNumber: EpochNumber): Promise<
|
|
269
|
+
public async getBlocksForEpoch(epochNumber: EpochNumber): Promise<L2BlockNew[]> {
|
|
277
270
|
if (!this.l1Constants) {
|
|
278
271
|
throw new Error('L1 constants not set');
|
|
279
272
|
}
|
|
280
273
|
|
|
281
274
|
const [start, end] = getSlotRangeForEpoch(epochNumber, this.l1Constants);
|
|
282
|
-
const blocks:
|
|
275
|
+
const blocks: L2BlockNew[] = [];
|
|
283
276
|
|
|
284
277
|
// Walk the list of checkpoints backwards and filter by slots matching the requested epoch.
|
|
285
278
|
// We'll typically ask for checkpoints for a very recent epoch, so we shouldn't need an index here.
|
|
@@ -354,39 +347,33 @@ export abstract class ArchiverDataSourceBase
|
|
|
354
347
|
return checkpoints.reverse();
|
|
355
348
|
}
|
|
356
349
|
|
|
357
|
-
public async getPublishedBlocks(from: BlockNumber, limit: number, proven?: boolean): Promise<
|
|
350
|
+
public async getPublishedBlocks(from: BlockNumber, limit: number, proven?: boolean): Promise<CheckpointedL2Block[]> {
|
|
358
351
|
const checkpoints = await this.store.getRangeOfCheckpoints(CheckpointNumber(from), limit);
|
|
359
352
|
const provenCheckpointNumber = await this.store.getProvenCheckpointNumber();
|
|
360
353
|
const blocks = (
|
|
361
354
|
await Promise.all(checkpoints.map(ch => this.store.getBlocksForCheckpoint(ch.checkpointNumber)))
|
|
362
355
|
).filter(isDefined);
|
|
363
356
|
|
|
364
|
-
const
|
|
357
|
+
const publishedBlocks: CheckpointedL2Block[] = [];
|
|
365
358
|
for (let i = 0; i < checkpoints.length; i++) {
|
|
366
359
|
const blockForCheckpoint = blocks[i][0];
|
|
367
360
|
const checkpoint = checkpoints[i];
|
|
368
361
|
if (checkpoint.checkpointNumber > provenCheckpointNumber && proven === true) {
|
|
369
|
-
// this
|
|
362
|
+
// this checkpoint isn't proven and we only want proven
|
|
370
363
|
continue;
|
|
371
364
|
}
|
|
372
|
-
const
|
|
373
|
-
blockForCheckpoint.archive,
|
|
374
|
-
checkpoint.header,
|
|
375
|
-
[blockForCheckpoint],
|
|
365
|
+
const publishedBlock = new CheckpointedL2Block(
|
|
376
366
|
checkpoint.checkpointNumber,
|
|
377
|
-
|
|
378
|
-
const oldBlock = L2Block.fromCheckpoint(oldCheckpoint);
|
|
379
|
-
const publishedBlock = new PublishedL2Block(
|
|
380
|
-
oldBlock,
|
|
367
|
+
blockForCheckpoint,
|
|
381
368
|
checkpoint.l1,
|
|
382
369
|
checkpoint.attestations.map(x => CommitteeAttestation.fromBuffer(x)),
|
|
383
370
|
);
|
|
384
|
-
|
|
371
|
+
publishedBlocks.push(publishedBlock);
|
|
385
372
|
}
|
|
386
|
-
return
|
|
373
|
+
return publishedBlocks;
|
|
387
374
|
}
|
|
388
375
|
|
|
389
|
-
public async getBlock(number: BlockNumber): Promise<
|
|
376
|
+
public async getBlock(number: BlockNumber): Promise<L2BlockNew | undefined> {
|
|
390
377
|
// If the number provided is -ve, then return the latest block.
|
|
391
378
|
if (number < 0) {
|
|
392
379
|
number = await this.store.getLatestBlockNumber();
|
|
@@ -394,50 +381,34 @@ export abstract class ArchiverDataSourceBase
|
|
|
394
381
|
if (number === 0) {
|
|
395
382
|
return undefined;
|
|
396
383
|
}
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
384
|
+
return this.store.getBlock(number);
|
|
385
|
+
}
|
|
386
|
+
|
|
387
|
+
public async getBlocks(from: BlockNumber, limit: number, proven?: boolean): Promise<L2BlockNew[]> {
|
|
388
|
+
const blocks = await this.store.getBlocks(from, limit);
|
|
389
|
+
|
|
390
|
+
if (proven === true) {
|
|
391
|
+
const provenBlockNumber = await this.store.getProvenBlockNumber();
|
|
392
|
+
return blocks.filter(b => b.number <= provenBlockNumber);
|
|
400
393
|
}
|
|
401
|
-
return
|
|
394
|
+
return blocks;
|
|
402
395
|
}
|
|
403
396
|
|
|
404
|
-
public
|
|
405
|
-
|
|
406
|
-
return publishedBlocks.map(x => x.block);
|
|
397
|
+
public getPublishedBlockByHash(blockHash: Fr): Promise<CheckpointedL2Block | undefined> {
|
|
398
|
+
return this.store.getCheckpointedBlockByHash(blockHash);
|
|
407
399
|
}
|
|
408
400
|
|
|
409
|
-
public
|
|
410
|
-
|
|
411
|
-
return this.buildOldBlockFromCheckpointedBlock(checkpointedBlock);
|
|
401
|
+
public getPublishedBlockByArchive(archive: Fr): Promise<CheckpointedL2Block | undefined> {
|
|
402
|
+
return this.store.getCheckpointedBlockByArchive(archive);
|
|
412
403
|
}
|
|
413
404
|
|
|
414
|
-
public async
|
|
415
|
-
const checkpointedBlock = await this.store.
|
|
416
|
-
return
|
|
405
|
+
public async getL2BlockNewByHash(blockHash: Fr): Promise<L2BlockNew | undefined> {
|
|
406
|
+
const checkpointedBlock = await this.store.getCheckpointedBlockByHash(blockHash);
|
|
407
|
+
return checkpointedBlock?.block;
|
|
417
408
|
}
|
|
418
409
|
|
|
419
|
-
|
|
420
|
-
checkpointedBlock
|
|
421
|
-
|
|
422
|
-
if (!checkpointedBlock) {
|
|
423
|
-
return undefined;
|
|
424
|
-
}
|
|
425
|
-
const checkpoint = await this.store.getCheckpointData(checkpointedBlock.checkpointNumber);
|
|
426
|
-
if (!checkpoint) {
|
|
427
|
-
return checkpoint;
|
|
428
|
-
}
|
|
429
|
-
const fullCheckpoint = new Checkpoint(
|
|
430
|
-
checkpointedBlock?.block.archive,
|
|
431
|
-
checkpoint?.header,
|
|
432
|
-
[checkpointedBlock.block],
|
|
433
|
-
checkpoint.checkpointNumber,
|
|
434
|
-
);
|
|
435
|
-
const oldBlock = L2Block.fromCheckpoint(fullCheckpoint);
|
|
436
|
-
const published = new PublishedL2Block(
|
|
437
|
-
oldBlock,
|
|
438
|
-
checkpoint.l1,
|
|
439
|
-
checkpoint.attestations.map(x => CommitteeAttestation.fromBuffer(x)),
|
|
440
|
-
);
|
|
441
|
-
return published;
|
|
410
|
+
public async getL2BlockNewByArchive(archive: Fr): Promise<L2BlockNew | undefined> {
|
|
411
|
+
const checkpointedBlock = await this.store.getCheckpointedBlockByArchive(archive);
|
|
412
|
+
return checkpointedBlock?.block;
|
|
442
413
|
}
|
|
443
414
|
}
|
|
@@ -61,6 +61,11 @@ export async function validateCheckpointAttestations(
|
|
|
61
61
|
return { valid: true };
|
|
62
62
|
}
|
|
63
63
|
|
|
64
|
+
if (await epochCache.isEscapeHatchOpen(epoch)) {
|
|
65
|
+
logger?.warn(`Escape hatch open for epoch ${epoch} at slot ${slot}, skipping checkpoint validation`);
|
|
66
|
+
return { valid: true };
|
|
67
|
+
}
|
|
68
|
+
|
|
64
69
|
const requiredAttestationCount = Math.floor((committee.length * 2) / 3) + 1;
|
|
65
70
|
|
|
66
71
|
const failedValidationResult = <TReason extends ValidateCheckpointNegativeResult['reason']>(reason: TReason) => ({
|
package/src/store/block_store.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { INITIAL_CHECKPOINT_NUMBER, INITIAL_L2_BLOCK_NUM } from '@aztec/constants';
|
|
2
|
-
import { BlockNumber, CheckpointNumber, SlotNumber } from '@aztec/foundation/branded-types';
|
|
2
|
+
import { BlockNumber, CheckpointNumber, IndexWithinCheckpoint, SlotNumber } from '@aztec/foundation/branded-types';
|
|
3
3
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
4
4
|
import { toArray } from '@aztec/foundation/iterable';
|
|
5
5
|
import { createLogger } from '@aztec/foundation/log';
|
|
@@ -765,7 +765,7 @@ export class BlockStore {
|
|
|
765
765
|
header,
|
|
766
766
|
body,
|
|
767
767
|
CheckpointNumber(blockStorage.checkpointNumber!),
|
|
768
|
-
blockStorage.indexWithinCheckpoint,
|
|
768
|
+
IndexWithinCheckpoint(blockStorage.indexWithinCheckpoint),
|
|
769
769
|
);
|
|
770
770
|
|
|
771
771
|
if (block.number !== blockNumber) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { CheckpointNumber } from '@aztec/foundation/branded-types';
|
|
2
2
|
import type { Fr } from '@aztec/foundation/curves/bn254';
|
|
3
|
-
import {
|
|
3
|
+
import type { L2BlockSource } from '@aztec/stdlib/block';
|
|
4
4
|
import type { Checkpoint } from '@aztec/stdlib/checkpoint';
|
|
5
5
|
import type { L1ToL2MessageSource } from '@aztec/stdlib/messaging';
|
|
6
6
|
|
|
@@ -57,7 +57,7 @@ export class MockPrefilledArchiver extends MockArchiver {
|
|
|
57
57
|
|
|
58
58
|
const fromBlock = this.l2Blocks.length;
|
|
59
59
|
// TODO: Add L2 blocks and checkpoints separately once archiver has the apis for that.
|
|
60
|
-
this.addBlocks(this.prefilled.slice(fromBlock, fromBlock + numBlocks).
|
|
60
|
+
this.addBlocks(this.prefilled.slice(fromBlock, fromBlock + numBlocks).flatMap(c => c.blocks));
|
|
61
61
|
return Promise.resolve();
|
|
62
62
|
}
|
|
63
63
|
}
|