@aztec/archiver 0.0.1-commit.88e6f9396 → 0.0.1-commit.8c0b8ff
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/archiver.d.ts +2 -1
- package/dest/archiver.d.ts.map +1 -1
- package/dest/archiver.js +22 -10
- package/dest/config.d.ts +3 -3
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +1 -2
- package/dest/errors.d.ts +1 -15
- package/dest/errors.d.ts.map +1 -1
- package/dest/errors.js +0 -18
- package/dest/factory.d.ts +3 -3
- package/dest/factory.d.ts.map +1 -1
- package/dest/factory.js +7 -4
- package/dest/l1/data_retrieval.d.ts +3 -6
- package/dest/l1/data_retrieval.d.ts.map +1 -1
- package/dest/l1/data_retrieval.js +6 -12
- package/dest/modules/data_source_base.d.ts +3 -3
- package/dest/modules/data_source_base.d.ts.map +1 -1
- package/dest/modules/data_source_base.js +4 -4
- package/dest/modules/data_store_updater.d.ts +1 -1
- package/dest/modules/data_store_updater.d.ts.map +1 -1
- package/dest/modules/data_store_updater.js +43 -10
- package/dest/modules/instrumentation.d.ts +1 -12
- package/dest/modules/instrumentation.d.ts.map +1 -1
- package/dest/modules/instrumentation.js +0 -10
- package/dest/modules/l1_synchronizer.d.ts +1 -1
- package/dest/modules/l1_synchronizer.d.ts.map +1 -1
- package/dest/modules/l1_synchronizer.js +13 -18
- package/dest/store/block_store.d.ts +2 -1
- package/dest/store/block_store.d.ts.map +1 -1
- package/dest/store/block_store.js +50 -5
- package/dest/store/contract_class_store.d.ts +1 -1
- package/dest/store/contract_class_store.d.ts.map +1 -1
- package/dest/store/contract_class_store.js +6 -2
- package/dest/store/contract_instance_store.d.ts +1 -1
- package/dest/store/contract_instance_store.d.ts.map +1 -1
- package/dest/store/contract_instance_store.js +6 -2
- package/dest/store/kv_archiver_store.d.ts +6 -11
- package/dest/store/kv_archiver_store.d.ts.map +1 -1
- package/dest/store/kv_archiver_store.js +7 -13
- package/dest/store/log_store.d.ts +3 -6
- package/dest/store/log_store.d.ts.map +1 -1
- package/dest/store/log_store.js +6 -45
- package/dest/store/message_store.d.ts +1 -5
- package/dest/store/message_store.d.ts.map +1 -1
- package/dest/store/message_store.js +0 -13
- package/dest/test/fake_l1_state.d.ts +8 -1
- package/dest/test/fake_l1_state.d.ts.map +1 -1
- package/dest/test/fake_l1_state.js +16 -11
- package/package.json +13 -13
- package/src/archiver.ts +25 -10
- package/src/config.ts +1 -8
- package/src/errors.ts +0 -30
- package/src/factory.ts +13 -6
- package/src/l1/data_retrieval.ts +9 -17
- package/src/modules/data_source_base.ts +3 -8
- package/src/modules/data_store_updater.ts +51 -12
- package/src/modules/instrumentation.ts +0 -20
- package/src/modules/l1_synchronizer.ts +25 -29
- package/src/store/block_store.ts +62 -5
- package/src/store/contract_class_store.ts +7 -3
- package/src/store/contract_instance_store.ts +8 -5
- package/src/store/kv_archiver_store.ts +7 -19
- package/src/store/log_store.ts +15 -60
- package/src/store/message_store.ts +0 -19
- package/src/test/fake_l1_state.ts +20 -15
|
@@ -95,12 +95,11 @@ export const MAX_FUNCTION_NAME_LEN = 256;
|
|
|
95
95
|
}
|
|
96
96
|
/**
|
|
97
97
|
* Add new contract classes from an L2 block to the store's list.
|
|
98
|
-
* @param data - List of contract classes to be added.
|
|
99
|
-
* @param bytecodeCommitments - Bytecode commitments for the contract classes.
|
|
98
|
+
* @param data - List of contract classes (with bytecode commitments) to be added.
|
|
100
99
|
* @param blockNumber - Number of the L2 block the contracts were registered in.
|
|
101
100
|
* @returns True if the operation is successful.
|
|
102
|
-
*/ async addContractClasses(data,
|
|
103
|
-
return (await Promise.all(data.map((c
|
|
101
|
+
*/ async addContractClasses(data, blockNumber) {
|
|
102
|
+
return (await Promise.all(data.map((c)=>this.#contractClassStore.addContractClass(c, c.publicBytecodeCommitment, blockNumber)))).every(Boolean);
|
|
104
103
|
}
|
|
105
104
|
async deleteContractClasses(data, blockNumber) {
|
|
106
105
|
return (await Promise.all(data.map((c)=>this.#contractClassStore.deleteContractClasses(c, blockNumber)))).every(Boolean);
|
|
@@ -313,10 +312,9 @@ export const MAX_FUNCTION_NAME_LEN = 256;
|
|
|
313
312
|
* array implies no logs match that tag.
|
|
314
313
|
* @param tags - The tags to search for.
|
|
315
314
|
* @param page - The page number (0-indexed) for pagination. Returns at most 10 logs per tag per page.
|
|
316
|
-
|
|
317
|
-
*/ getPrivateLogsByTags(tags, page, upToBlockNumber) {
|
|
315
|
+
*/ getPrivateLogsByTags(tags, page) {
|
|
318
316
|
try {
|
|
319
|
-
return this.#logStore.getPrivateLogsByTags(tags, page
|
|
317
|
+
return this.#logStore.getPrivateLogsByTags(tags, page);
|
|
320
318
|
} catch (err) {
|
|
321
319
|
return Promise.reject(err);
|
|
322
320
|
}
|
|
@@ -327,10 +325,9 @@ export const MAX_FUNCTION_NAME_LEN = 256;
|
|
|
327
325
|
* @param contractAddress - The contract address to search logs for.
|
|
328
326
|
* @param tags - The tags to search for.
|
|
329
327
|
* @param page - The page number (0-indexed) for pagination. Returns at most 10 logs per tag per page.
|
|
330
|
-
|
|
331
|
-
*/ getPublicLogsByTagsFromContract(contractAddress, tags, page, upToBlockNumber) {
|
|
328
|
+
*/ getPublicLogsByTagsFromContract(contractAddress, tags, page) {
|
|
332
329
|
try {
|
|
333
|
-
return this.#logStore.getPublicLogsByTagsFromContract(contractAddress, tags, page
|
|
330
|
+
return this.#logStore.getPublicLogsByTagsFromContract(contractAddress, tags, page);
|
|
334
331
|
} catch (err) {
|
|
335
332
|
return Promise.reject(err);
|
|
336
333
|
}
|
|
@@ -413,9 +410,6 @@ export const MAX_FUNCTION_NAME_LEN = 256;
|
|
|
413
410
|
/** Deletes all L1 to L2 messages up until (excluding) the target checkpoint number. */ rollbackL1ToL2MessagesToCheckpoint(targetCheckpointNumber) {
|
|
414
411
|
return this.#messageStore.rollbackL1ToL2MessagesToCheckpoint(targetCheckpointNumber);
|
|
415
412
|
}
|
|
416
|
-
/** Persists the inbox tree-in-progress checkpoint number from L1 state. */ setInboxTreeInProgress(value) {
|
|
417
|
-
return this.#messageStore.setInboxTreeInProgress(value);
|
|
418
|
-
}
|
|
419
413
|
/** Returns an async iterator to all L1 to L2 messages on the range. */ iterateL1ToL2Messages(range = {}) {
|
|
420
414
|
return this.#messageStore.iterateL1ToL2Messages(range);
|
|
421
415
|
}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { BlockNumber } from '@aztec/foundation/branded-types';
|
|
2
1
|
import type { AztecAsyncKVStore } from '@aztec/kv-store';
|
|
3
2
|
import type { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
4
3
|
import { L2Block } from '@aztec/stdlib/block';
|
|
@@ -25,22 +24,20 @@ export declare class LogStore {
|
|
|
25
24
|
* array implies no logs match that tag.
|
|
26
25
|
* @param tags - The tags to search for.
|
|
27
26
|
* @param page - The page number (0-indexed) for pagination.
|
|
28
|
-
* @param upToBlockNumber - If set, only return logs from blocks up to and including this block number.
|
|
29
27
|
* @returns An array of log arrays, one per tag. Returns at most MAX_LOGS_PER_TAG logs per tag per page. If
|
|
30
28
|
* MAX_LOGS_PER_TAG logs are returned for a tag, the caller should fetch the next page to check for more logs.
|
|
31
29
|
*/
|
|
32
|
-
getPrivateLogsByTags(tags: SiloedTag[], page?: number
|
|
30
|
+
getPrivateLogsByTags(tags: SiloedTag[], page?: number): Promise<TxScopedL2Log[][]>;
|
|
33
31
|
/**
|
|
34
32
|
* Gets public logs that match any of the `tags` from the specified contract. For each tag, an array of matching
|
|
35
33
|
* logs is returned. An empty array implies no logs match that tag.
|
|
36
34
|
* @param contractAddress - The contract address to search logs for.
|
|
37
35
|
* @param tags - The tags to search for.
|
|
38
36
|
* @param page - The page number (0-indexed) for pagination.
|
|
39
|
-
* @param upToBlockNumber - If set, only return logs from blocks up to and including this block number.
|
|
40
37
|
* @returns An array of log arrays, one per tag. Returns at most MAX_LOGS_PER_TAG logs per tag per page. If
|
|
41
38
|
* MAX_LOGS_PER_TAG logs are returned for a tag, the caller should fetch the next page to check for more logs.
|
|
42
39
|
*/
|
|
43
|
-
getPublicLogsByTagsFromContract(contractAddress: AztecAddress, tags: Tag[], page?: number
|
|
40
|
+
getPublicLogsByTagsFromContract(contractAddress: AztecAddress, tags: Tag[], page?: number): Promise<TxScopedL2Log[][]>;
|
|
44
41
|
/**
|
|
45
42
|
* Gets public logs based on the provided filter.
|
|
46
43
|
* @param filter - The filter to apply to the logs.
|
|
@@ -54,4 +51,4 @@ export declare class LogStore {
|
|
|
54
51
|
*/
|
|
55
52
|
getContractClassLogs(filter: LogFilter): Promise<GetContractClassLogsResponse>;
|
|
56
53
|
}
|
|
57
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
54
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nX3N0b3JlLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc3RvcmUvbG9nX3N0b3JlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU1BLE9BQU8sS0FBSyxFQUFFLGlCQUFpQixFQUFpQixNQUFNLGlCQUFpQixDQUFDO0FBQ3hFLE9BQU8sS0FBSyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ2hFLE9BQU8sRUFBYSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUV6RCxPQUFPLEtBQUssRUFBRSw0QkFBNEIsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzNHLE9BQU8sRUFJTCxLQUFLLFNBQVMsRUFHZCxLQUFLLFNBQVMsRUFDZCxHQUFHLEVBQ0gsYUFBYSxFQUNkLE1BQU0sb0JBQW9CLENBQUM7QUFHNUIsT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFbkQ7O0dBRUc7QUFDSCxxQkFBYSxRQUFROztJQWFqQixPQUFPLENBQUMsRUFBRTtJQUNWLE9BQU8sQ0FBQyxVQUFVO0lBRnBCLFlBQ1UsRUFBRSxFQUFFLGlCQUFpQixFQUNyQixVQUFVLEVBQUUsVUFBVSxFQUM5QixlQUFlLEdBQUUsTUFBYSxFQVUvQjtJQThNRDs7OztPQUlHO0lBQ0gsT0FBTyxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLENBUzNDO0lBZ0JELFVBQVUsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQTBEOUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0csb0JBQW9CLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxFQUFFLElBQUksR0FBRSxNQUFVLEdBQUcsT0FBTyxDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUMsQ0FRMUY7SUFFRDs7Ozs7Ozs7T0FRRztJQUNHLCtCQUErQixDQUNuQyxlQUFlLEVBQUUsWUFBWSxFQUM3QixJQUFJLEVBQUUsR0FBRyxFQUFFLEVBQ1gsSUFBSSxHQUFFLE1BQVUsR0FDZixPQUFPLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQyxDQWE1QjtJQUVEOzs7O09BSUc7SUFDSCxhQUFhLENBQUMsTUFBTSxFQUFFLFNBQVMsR0FBRyxPQUFPLENBQUMscUJBQXFCLENBQUMsQ0FRL0Q7SUErRkQ7Ozs7T0FJRztJQUNILG9CQUFvQixDQUFDLE1BQU0sRUFBRSxTQUFTLEdBQUcsT0FBTyxDQUFDLDRCQUE0QixDQUFDLENBUTdFO0NBNktGIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"log_store.d.ts","sourceRoot":"","sources":["../../src/store/log_store.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"log_store.d.ts","sourceRoot":"","sources":["../../src/store/log_store.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,iBAAiB,EAAiB,MAAM,iBAAiB,CAAC;AACxE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAa,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAEzD,OAAO,KAAK,EAAE,4BAA4B,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AAC3G,OAAO,EAIL,KAAK,SAAS,EAGd,KAAK,SAAS,EACd,GAAG,EACH,aAAa,EACd,MAAM,oBAAoB,CAAC;AAG5B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD;;GAEG;AACH,qBAAa,QAAQ;;IAajB,OAAO,CAAC,EAAE;IACV,OAAO,CAAC,UAAU;IAFpB,YACU,EAAE,EAAE,iBAAiB,EACrB,UAAU,EAAE,UAAU,EAC9B,eAAe,GAAE,MAAa,EAU/B;IA8MD;;;;OAIG;IACH,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAS3C;IAgBD,UAAU,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CA0D9C;IAED;;;;;;;OAOG;IACG,oBAAoB,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,IAAI,GAAE,MAAU,GAAG,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAQ1F;IAED;;;;;;;;OAQG;IACG,+BAA+B,CACnC,eAAe,EAAE,YAAY,EAC7B,IAAI,EAAE,GAAG,EAAE,EACX,IAAI,GAAE,MAAU,GACf,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAa5B;IAED;;;;OAIG;IACH,aAAa,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAQ/D;IA+FD;;;;OAIG;IACH,oBAAoB,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,4BAA4B,CAAC,CAQ7E;CA6KF"}
|
package/dest/store/log_store.js
CHANGED
|
@@ -8,7 +8,6 @@ import { BlockHash } from '@aztec/stdlib/block';
|
|
|
8
8
|
import { MAX_LOGS_PER_TAG } from '@aztec/stdlib/interfaces/api-limit';
|
|
9
9
|
import { ContractClassLog, ExtendedContractClassLog, ExtendedPublicLog, LogId, PublicLog, TxScopedL2Log } from '@aztec/stdlib/logs';
|
|
10
10
|
import { TxHash } from '@aztec/stdlib/tx';
|
|
11
|
-
import { OutOfOrderLogInsertionError } from '../errors.js';
|
|
12
11
|
/**
|
|
13
12
|
* A store for logs
|
|
14
13
|
*/ export class LogStore {
|
|
@@ -109,16 +108,7 @@ import { OutOfOrderLogInsertionError } from '../errors.js';
|
|
|
109
108
|
})));
|
|
110
109
|
for (const taggedLogBuffer of currentPrivateTaggedLogs){
|
|
111
110
|
if (taggedLogBuffer.logBuffers && taggedLogBuffer.logBuffers.length > 0) {
|
|
112
|
-
|
|
113
|
-
if (newLogs.length === 0) {
|
|
114
|
-
continue;
|
|
115
|
-
}
|
|
116
|
-
const lastExisting = TxScopedL2Log.fromBuffer(taggedLogBuffer.logBuffers.at(-1));
|
|
117
|
-
const firstNew = TxScopedL2Log.fromBuffer(newLogs[0]);
|
|
118
|
-
if (lastExisting.blockNumber > firstNew.blockNumber) {
|
|
119
|
-
throw new OutOfOrderLogInsertionError('private', taggedLogBuffer.tag, lastExisting.blockNumber, firstNew.blockNumber);
|
|
120
|
-
}
|
|
121
|
-
privateTaggedLogs.set(taggedLogBuffer.tag, taggedLogBuffer.logBuffers.concat(newLogs));
|
|
111
|
+
privateTaggedLogs.set(taggedLogBuffer.tag, taggedLogBuffer.logBuffers.concat(privateTaggedLogs.get(taggedLogBuffer.tag)));
|
|
122
112
|
}
|
|
123
113
|
}
|
|
124
114
|
for (const block of newBlocks){
|
|
@@ -140,16 +130,7 @@ import { OutOfOrderLogInsertionError } from '../errors.js';
|
|
|
140
130
|
})));
|
|
141
131
|
for (const taggedLogBuffer of currentPublicTaggedLogs){
|
|
142
132
|
if (taggedLogBuffer.logBuffers && taggedLogBuffer.logBuffers.length > 0) {
|
|
143
|
-
|
|
144
|
-
if (newLogs.length === 0) {
|
|
145
|
-
continue;
|
|
146
|
-
}
|
|
147
|
-
const lastExisting = TxScopedL2Log.fromBuffer(taggedLogBuffer.logBuffers.at(-1));
|
|
148
|
-
const firstNew = TxScopedL2Log.fromBuffer(newLogs[0]);
|
|
149
|
-
if (lastExisting.blockNumber > firstNew.blockNumber) {
|
|
150
|
-
throw new OutOfOrderLogInsertionError('public', taggedLogBuffer.tag, lastExisting.blockNumber, firstNew.blockNumber);
|
|
151
|
-
}
|
|
152
|
-
publicTaggedLogs.set(taggedLogBuffer.tag, taggedLogBuffer.logBuffers.concat(newLogs));
|
|
133
|
+
publicTaggedLogs.set(taggedLogBuffer.tag, taggedLogBuffer.logBuffers.concat(publicTaggedLogs.get(taggedLogBuffer.tag)));
|
|
153
134
|
}
|
|
154
135
|
}
|
|
155
136
|
for (const block of newBlocks){
|
|
@@ -253,23 +234,13 @@ import { OutOfOrderLogInsertionError } from '../errors.js';
|
|
|
253
234
|
* array implies no logs match that tag.
|
|
254
235
|
* @param tags - The tags to search for.
|
|
255
236
|
* @param page - The page number (0-indexed) for pagination.
|
|
256
|
-
* @param upToBlockNumber - If set, only return logs from blocks up to and including this block number.
|
|
257
237
|
* @returns An array of log arrays, one per tag. Returns at most MAX_LOGS_PER_TAG logs per tag per page. If
|
|
258
238
|
* MAX_LOGS_PER_TAG logs are returned for a tag, the caller should fetch the next page to check for more logs.
|
|
259
|
-
*/ async getPrivateLogsByTags(tags, page = 0
|
|
239
|
+
*/ async getPrivateLogsByTags(tags, page = 0) {
|
|
260
240
|
const logs = await Promise.all(tags.map((tag)=>this.#privateLogsByTag.getAsync(tag.toString())));
|
|
261
241
|
const start = page * MAX_LOGS_PER_TAG;
|
|
262
242
|
const end = start + MAX_LOGS_PER_TAG;
|
|
263
|
-
return logs.map((logBuffers)=>
|
|
264
|
-
const deserialized = logBuffers?.slice(start, end).map((buf)=>TxScopedL2Log.fromBuffer(buf)) ?? [];
|
|
265
|
-
if (upToBlockNumber !== undefined) {
|
|
266
|
-
const cutoff = deserialized.findIndex((log)=>log.blockNumber > upToBlockNumber);
|
|
267
|
-
if (cutoff !== -1) {
|
|
268
|
-
return deserialized.slice(0, cutoff);
|
|
269
|
-
}
|
|
270
|
-
}
|
|
271
|
-
return deserialized;
|
|
272
|
-
});
|
|
243
|
+
return logs.map((logBuffers)=>logBuffers?.slice(start, end).map((logBuffer)=>TxScopedL2Log.fromBuffer(logBuffer)) ?? []);
|
|
273
244
|
}
|
|
274
245
|
/**
|
|
275
246
|
* Gets public logs that match any of the `tags` from the specified contract. For each tag, an array of matching
|
|
@@ -277,26 +248,16 @@ import { OutOfOrderLogInsertionError } from '../errors.js';
|
|
|
277
248
|
* @param contractAddress - The contract address to search logs for.
|
|
278
249
|
* @param tags - The tags to search for.
|
|
279
250
|
* @param page - The page number (0-indexed) for pagination.
|
|
280
|
-
* @param upToBlockNumber - If set, only return logs from blocks up to and including this block number.
|
|
281
251
|
* @returns An array of log arrays, one per tag. Returns at most MAX_LOGS_PER_TAG logs per tag per page. If
|
|
282
252
|
* MAX_LOGS_PER_TAG logs are returned for a tag, the caller should fetch the next page to check for more logs.
|
|
283
|
-
*/ async getPublicLogsByTagsFromContract(contractAddress, tags, page = 0
|
|
253
|
+
*/ async getPublicLogsByTagsFromContract(contractAddress, tags, page = 0) {
|
|
284
254
|
const logs = await Promise.all(tags.map((tag)=>{
|
|
285
255
|
const key = `${contractAddress.toString()}_${tag.value.toString()}`;
|
|
286
256
|
return this.#publicLogsByContractAndTag.getAsync(key);
|
|
287
257
|
}));
|
|
288
258
|
const start = page * MAX_LOGS_PER_TAG;
|
|
289
259
|
const end = start + MAX_LOGS_PER_TAG;
|
|
290
|
-
return logs.map((logBuffers)=>
|
|
291
|
-
const deserialized = logBuffers?.slice(start, end).map((buf)=>TxScopedL2Log.fromBuffer(buf)) ?? [];
|
|
292
|
-
if (upToBlockNumber !== undefined) {
|
|
293
|
-
const cutoff = deserialized.findIndex((log)=>log.blockNumber > upToBlockNumber);
|
|
294
|
-
if (cutoff !== -1) {
|
|
295
|
-
return deserialized.slice(0, cutoff);
|
|
296
|
-
}
|
|
297
|
-
}
|
|
298
|
-
return deserialized;
|
|
299
|
-
});
|
|
260
|
+
return logs.map((logBuffers)=>logBuffers?.slice(start, end).map((logBuffer)=>TxScopedL2Log.fromBuffer(logBuffer)) ?? []);
|
|
300
261
|
}
|
|
301
262
|
/**
|
|
302
263
|
* Gets public logs based on the provided filter.
|
|
@@ -29,10 +29,6 @@ export declare class MessageStore {
|
|
|
29
29
|
*/
|
|
30
30
|
getL1ToL2MessageIndex(l1ToL2Message: Fr): Promise<bigint | undefined>;
|
|
31
31
|
getLastMessage(): Promise<InboxMessage | undefined>;
|
|
32
|
-
/** Returns the inbox tree-in-progress checkpoint number from L1, or undefined if not yet set. */
|
|
33
|
-
getInboxTreeInProgress(): Promise<bigint | undefined>;
|
|
34
|
-
/** Persists the inbox tree-in-progress checkpoint number from L1 state. */
|
|
35
|
-
setInboxTreeInProgress(value: bigint): Promise<void>;
|
|
36
32
|
getL1ToL2Messages(checkpointNumber: CheckpointNumber): Promise<Fr[]>;
|
|
37
33
|
iterateL1ToL2Messages(range?: CustomRange<bigint>): AsyncIterableIterator<InboxMessage>;
|
|
38
34
|
removeL1ToL2Messages(startIndex: bigint): Promise<void>;
|
|
@@ -41,4 +37,4 @@ export declare class MessageStore {
|
|
|
41
37
|
private leafToIndexKey;
|
|
42
38
|
private increaseTotalMessageCount;
|
|
43
39
|
}
|
|
44
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
40
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZV9zdG9yZS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N0b3JlL21lc3NhZ2Vfc3RvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFbkUsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBSXBELE9BQU8sRUFDTCxLQUFLLGlCQUFpQixFQUd0QixLQUFLLFdBQVcsRUFFakIsTUFBTSxpQkFBaUIsQ0FBQztBQUd6QixPQUFPLEVBQ0wsS0FBSyxZQUFZLEVBSWxCLE1BQU0sNkJBQTZCLENBQUM7QUFFckMscUJBQWEsaUJBQWtCLFNBQVEsS0FBSzthQUd4QixZQUFZLEVBQUUsWUFBWTtJQUY1QyxZQUNFLE9BQU8sRUFBRSxNQUFNLEVBQ0MsWUFBWSxFQUFFLFlBQVksRUFJM0M7Q0FDRjtBQUVELHFCQUFhLFlBQVk7O0lBWVgsT0FBTyxDQUFDLEVBQUU7SUFBdEIsWUFBb0IsRUFBRSxFQUFFLGlCQUFpQixFQUt4QztJQUVZLDBCQUEwQixJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FFekQ7SUFFRCxxQ0FBcUM7SUFDeEIsaUJBQWlCLElBQUksT0FBTyxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUMsQ0FRL0Q7SUFFRCxvQ0FBb0M7SUFDdkIsaUJBQWlCLENBQUMsT0FBTyxFQUFFLFNBQVMsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBR2hFO0lBRUQ7Ozs7T0FJRztJQUNJLGlCQUFpQixDQUFDLFFBQVEsRUFBRSxZQUFZLEVBQUUsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBNkZoRTtJQUVEOzs7O09BSUc7SUFDSSxxQkFBcUIsQ0FBQyxhQUFhLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLENBRTNFO0lBRVksY0FBYyxJQUFJLE9BQU8sQ0FBQyxZQUFZLEdBQUcsU0FBUyxDQUFDLENBRy9EO0lBRVksaUJBQWlCLENBQUMsZ0JBQWdCLEVBQUUsZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBdUJoRjtJQUVhLHFCQUFxQixDQUFDLEtBQUssR0FBRSxXQUFXLENBQUMsTUFBTSxDQUFNLEdBQUcscUJBQXFCLENBQUMsWUFBWSxDQUFDLENBS3hHO0lBRU0sb0JBQW9CLENBQUMsVUFBVSxFQUFFLE1BQU0sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBZ0I3RDtJQUVNLGtDQUFrQyxDQUFDLHNCQUFzQixFQUFFLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FJakc7SUFFRCxPQUFPLENBQUMsVUFBVTtJQUlsQixPQUFPLENBQUMsY0FBYztZQUlSLHlCQUF5QjtDQVN4QyJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"message_store.d.ts","sourceRoot":"","sources":["../../src/store/message_store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAEnE,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AAIpD,OAAO,EACL,KAAK,iBAAiB,EAGtB,KAAK,WAAW,EAEjB,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"message_store.d.ts","sourceRoot":"","sources":["../../src/store/message_store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAEnE,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AAIpD,OAAO,EACL,KAAK,iBAAiB,EAGtB,KAAK,WAAW,EAEjB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EACL,KAAK,YAAY,EAIlB,MAAM,6BAA6B,CAAC;AAErC,qBAAa,iBAAkB,SAAQ,KAAK;aAGxB,YAAY,EAAE,YAAY;IAF5C,YACE,OAAO,EAAE,MAAM,EACC,YAAY,EAAE,YAAY,EAI3C;CACF;AAED,qBAAa,YAAY;;IAYX,OAAO,CAAC,EAAE;IAAtB,YAAoB,EAAE,EAAE,iBAAiB,EAKxC;IAEY,0BAA0B,IAAI,OAAO,CAAC,MAAM,CAAC,CAEzD;IAED,qCAAqC;IACxB,iBAAiB,IAAI,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC,CAQ/D;IAED,oCAAoC;IACvB,iBAAiB,CAAC,OAAO,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAGhE;IAED;;;;OAIG;IACI,iBAAiB,CAAC,QAAQ,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA6FhE;IAED;;;;OAIG;IACI,qBAAqB,CAAC,aAAa,EAAE,EAAE,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAE3E;IAEY,cAAc,IAAI,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC,CAG/D;IAEY,iBAAiB,CAAC,gBAAgB,EAAE,gBAAgB,GAAG,OAAO,CAAC,EAAE,EAAE,CAAC,CAuBhF;IAEa,qBAAqB,CAAC,KAAK,GAAE,WAAW,CAAC,MAAM,CAAM,GAAG,qBAAqB,CAAC,YAAY,CAAC,CAKxG;IAEM,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAgB7D;IAEM,kCAAkC,CAAC,sBAAsB,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAIjG;IAED,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,cAAc;YAIR,yBAAyB;CASxC"}
|
|
@@ -5,7 +5,6 @@ import { createLogger } from '@aztec/foundation/log';
|
|
|
5
5
|
import { BufferReader, serializeToBuffer } from '@aztec/foundation/serialize';
|
|
6
6
|
import { mapRange } from '@aztec/kv-store';
|
|
7
7
|
import { InboxLeaf } from '@aztec/stdlib/messaging';
|
|
8
|
-
import { L1ToL2MessagesNotReadyError } from '../errors.js';
|
|
9
8
|
import { deserializeInboxMessage, serializeInboxMessage, updateRollingHash } from '../structs/inbox_message.js';
|
|
10
9
|
export class MessageStoreError extends Error {
|
|
11
10
|
inboxMessage;
|
|
@@ -20,7 +19,6 @@ export class MessageStore {
|
|
|
20
19
|
/** Maps from hex-stringified message leaf to its index */ #l1ToL2MessageIndices;
|
|
21
20
|
/** Stores L1 block number and hash of the L1 synchpoint */ #lastSynchedL1Block;
|
|
22
21
|
/** Stores total messages stored */ #totalMessageCount;
|
|
23
|
-
/** Stores the checkpoint number whose message tree is currently being filled on L1. */ #inboxTreeInProgress;
|
|
24
22
|
#log;
|
|
25
23
|
constructor(db){
|
|
26
24
|
this.db = db;
|
|
@@ -29,7 +27,6 @@ export class MessageStore {
|
|
|
29
27
|
this.#l1ToL2MessageIndices = db.openMap('archiver_l1_to_l2_message_indices');
|
|
30
28
|
this.#lastSynchedL1Block = db.openSingleton('archiver_last_l1_block_id');
|
|
31
29
|
this.#totalMessageCount = db.openSingleton('archiver_l1_to_l2_message_count');
|
|
32
|
-
this.#inboxTreeInProgress = db.openSingleton('archiver_inbox_tree_in_progress');
|
|
33
30
|
}
|
|
34
31
|
async getTotalL1ToL2MessageCount() {
|
|
35
32
|
return await this.#totalMessageCount.getAsync() ?? 0n;
|
|
@@ -127,17 +124,7 @@ export class MessageStore {
|
|
|
127
124
|
}));
|
|
128
125
|
return msg ? deserializeInboxMessage(msg) : undefined;
|
|
129
126
|
}
|
|
130
|
-
/** Returns the inbox tree-in-progress checkpoint number from L1, or undefined if not yet set. */ getInboxTreeInProgress() {
|
|
131
|
-
return this.#inboxTreeInProgress.getAsync();
|
|
132
|
-
}
|
|
133
|
-
/** Persists the inbox tree-in-progress checkpoint number from L1 state. */ async setInboxTreeInProgress(value) {
|
|
134
|
-
await this.#inboxTreeInProgress.set(value);
|
|
135
|
-
}
|
|
136
127
|
async getL1ToL2Messages(checkpointNumber) {
|
|
137
|
-
const treeInProgress = await this.#inboxTreeInProgress.getAsync();
|
|
138
|
-
if (treeInProgress !== undefined && BigInt(checkpointNumber) >= treeInProgress) {
|
|
139
|
-
throw new L1ToL2MessagesNotReadyError(checkpointNumber, treeInProgress);
|
|
140
|
-
}
|
|
141
128
|
const messages = [];
|
|
142
129
|
const [startIndex, endIndex] = InboxLeaf.indexRangeForCheckpoint(checkpointNumber);
|
|
143
130
|
let lastIndex = startIndex - 1n;
|
|
@@ -144,6 +144,13 @@ export declare class FakeL1State {
|
|
|
144
144
|
* Auto-updates pending status.
|
|
145
145
|
*/
|
|
146
146
|
removeCheckpoint(checkpointNumber: CheckpointNumber): void;
|
|
147
|
+
/**
|
|
148
|
+
* Moves a checkpoint to a different L1 block number (simulates L1 reorg that
|
|
149
|
+
* re-includes the same checkpoint transaction in a different block).
|
|
150
|
+
* The checkpoint content stays the same — only the L1 metadata changes.
|
|
151
|
+
* Auto-updates pending status.
|
|
152
|
+
*/
|
|
153
|
+
moveCheckpointToL1Block(checkpointNumber: CheckpointNumber, newL1BlockNumber: bigint): void;
|
|
147
154
|
/**
|
|
148
155
|
* Removes messages after a given total index (simulates L1 reorg).
|
|
149
156
|
* Auto-updates rolling hash.
|
|
@@ -199,4 +206,4 @@ export declare class FakeL1State {
|
|
|
199
206
|
private makeBlobsFromCheckpoint;
|
|
200
207
|
}
|
|
201
208
|
export {};
|
|
202
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
209
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFrZV9sMV9zdGF0ZS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Rlc3QvZmFrZV9sMV9zdGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxLQUFLLElBQUksRUFBcUQsTUFBTSxpQkFBaUIsQ0FBQztBQUMvRixPQUFPLEtBQUssRUFBeUIsYUFBYSxFQUFrQixjQUFjLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUV0SCxPQUFPLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzlELE9BQU8sRUFBb0IsZ0JBQWdCLEVBQUUsVUFBVSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFakcsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNwRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFHM0QsT0FBTyxFQUF5RCxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFTdEQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFN0QsT0FBTyxFQUFFLEtBQUssU0FBUyxFQUFRLE1BQU0sb0JBQW9CLENBQUM7QUFjMUQsMkNBQTJDO0FBQzNDLE1BQU0sTUFBTSxpQkFBaUIsR0FBRztJQUM5Qiw0QkFBNEI7SUFDNUIsa0JBQWtCLEVBQUUsRUFBRSxDQUFDO0lBQ3ZCLDZCQUE2QjtJQUM3QixZQUFZLEVBQUUsTUFBTSxDQUFDO0lBQ3JCLGtDQUFrQztJQUNsQyxhQUFhLEVBQUUsTUFBTSxDQUFDO0lBQ3RCLHlDQUF5QztJQUN6QyxvQkFBb0IsRUFBRSxNQUFNLENBQUM7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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fake_l1_state.d.ts","sourceRoot":"","sources":["../../src/test/fake_l1_state.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,EAAE,KAAK,IAAI,EAAqD,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"fake_l1_state.d.ts","sourceRoot":"","sources":["../../src/test/fake_l1_state.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { getBlobsPerL1Block, getPrefixedEthBlobCommitments } from '@aztec/blob-lib';
|
|
2
|
-
import { INITIAL_CHECKPOINT_NUMBER } from '@aztec/constants';
|
|
3
2
|
import { MULTI_CALL_3_ADDRESS } from '@aztec/ethereum/contracts';
|
|
4
3
|
import { CheckpointNumber } from '@aztec/foundation/branded-types';
|
|
5
4
|
import { Buffer16, Buffer32 } from '@aztec/foundation/buffer';
|
|
@@ -194,6 +193,19 @@ import { updateRollingHash } from '../structs/inbox_message.js';
|
|
|
194
193
|
this.updatePendingCheckpointNumber();
|
|
195
194
|
}
|
|
196
195
|
/**
|
|
196
|
+
* Moves a checkpoint to a different L1 block number (simulates L1 reorg that
|
|
197
|
+
* re-includes the same checkpoint transaction in a different block).
|
|
198
|
+
* The checkpoint content stays the same — only the L1 metadata changes.
|
|
199
|
+
* Auto-updates pending status.
|
|
200
|
+
*/ moveCheckpointToL1Block(checkpointNumber, newL1BlockNumber) {
|
|
201
|
+
for (const cpData of this.checkpoints){
|
|
202
|
+
if (cpData.checkpointNumber === checkpointNumber) {
|
|
203
|
+
cpData.l1BlockNumber = newL1BlockNumber;
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
this.updatePendingCheckpointNumber();
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
197
209
|
* Removes messages after a given total index (simulates L1 reorg).
|
|
198
210
|
* Auto-updates rolling hash.
|
|
199
211
|
*/ removeMessagesAfter(totalIndex) {
|
|
@@ -279,18 +291,11 @@ import { updateRollingHash } from '../structs/inbox_message.js';
|
|
|
279
291
|
}
|
|
280
292
|
/** Creates mock InboxContract that reads from this fake state. */ createMockInboxContract(_publicClient) {
|
|
281
293
|
const mockInbox = mock();
|
|
282
|
-
mockInbox.getState.mockImplementation(()=>{
|
|
283
|
-
// treeInProgress must be > any sealed checkpoint. On L1, a checkpoint can only be proposed
|
|
284
|
-
// after its messages are sealed, so treeInProgress > checkpointNumber for all published checkpoints.
|
|
285
|
-
const maxFromMessages = this.messages.length > 0 ? Math.max(...this.messages.map((m)=>Number(m.checkpointNumber))) + 1 : 0;
|
|
286
|
-
const maxFromCheckpoints = this.checkpoints.length > 0 ? Math.max(...this.checkpoints.filter((cp)=>!cp.pruned).map((cp)=>Number(cp.checkpointNumber))) + 1 : 0;
|
|
287
|
-
const treeInProgress = Math.max(maxFromMessages, maxFromCheckpoints, INITIAL_CHECKPOINT_NUMBER);
|
|
288
|
-
return Promise.resolve({
|
|
294
|
+
mockInbox.getState.mockImplementation(()=>Promise.resolve({
|
|
289
295
|
messagesRollingHash: this.messagesRollingHash,
|
|
290
296
|
totalMessagesInserted: BigInt(this.messages.length),
|
|
291
|
-
treeInProgress:
|
|
292
|
-
});
|
|
293
|
-
});
|
|
297
|
+
treeInProgress: 0n
|
|
298
|
+
}));
|
|
294
299
|
// Mock the wrapper methods for fetching message events
|
|
295
300
|
mockInbox.getMessageSentEvents.mockImplementation((fromBlock, toBlock)=>Promise.resolve(this.getMessageSentLogs(fromBlock, toBlock)));
|
|
296
301
|
mockInbox.getMessageSentEventByHash.mockImplementation((hash, fromBlock, toBlock)=>Promise.resolve(this.getMessageSentLogs(fromBlock, toBlock, hash)));
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/archiver",
|
|
3
|
-
"version": "0.0.1-commit.
|
|
3
|
+
"version": "0.0.1-commit.8c0b8ff",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": "./dest/index.js",
|
|
@@ -65,18 +65,18 @@
|
|
|
65
65
|
]
|
|
66
66
|
},
|
|
67
67
|
"dependencies": {
|
|
68
|
-
"@aztec/blob-client": "0.0.1-commit.
|
|
69
|
-
"@aztec/blob-lib": "0.0.1-commit.
|
|
70
|
-
"@aztec/constants": "0.0.1-commit.
|
|
71
|
-
"@aztec/epoch-cache": "0.0.1-commit.
|
|
72
|
-
"@aztec/ethereum": "0.0.1-commit.
|
|
73
|
-
"@aztec/foundation": "0.0.1-commit.
|
|
74
|
-
"@aztec/kv-store": "0.0.1-commit.
|
|
75
|
-
"@aztec/l1-artifacts": "0.0.1-commit.
|
|
76
|
-
"@aztec/noir-protocol-circuits-types": "0.0.1-commit.
|
|
77
|
-
"@aztec/protocol-contracts": "0.0.1-commit.
|
|
78
|
-
"@aztec/stdlib": "0.0.1-commit.
|
|
79
|
-
"@aztec/telemetry-client": "0.0.1-commit.
|
|
68
|
+
"@aztec/blob-client": "0.0.1-commit.8c0b8ff",
|
|
69
|
+
"@aztec/blob-lib": "0.0.1-commit.8c0b8ff",
|
|
70
|
+
"@aztec/constants": "0.0.1-commit.8c0b8ff",
|
|
71
|
+
"@aztec/epoch-cache": "0.0.1-commit.8c0b8ff",
|
|
72
|
+
"@aztec/ethereum": "0.0.1-commit.8c0b8ff",
|
|
73
|
+
"@aztec/foundation": "0.0.1-commit.8c0b8ff",
|
|
74
|
+
"@aztec/kv-store": "0.0.1-commit.8c0b8ff",
|
|
75
|
+
"@aztec/l1-artifacts": "0.0.1-commit.8c0b8ff",
|
|
76
|
+
"@aztec/noir-protocol-circuits-types": "0.0.1-commit.8c0b8ff",
|
|
77
|
+
"@aztec/protocol-contracts": "0.0.1-commit.8c0b8ff",
|
|
78
|
+
"@aztec/stdlib": "0.0.1-commit.8c0b8ff",
|
|
79
|
+
"@aztec/telemetry-client": "0.0.1-commit.8c0b8ff",
|
|
80
80
|
"lodash.groupby": "^4.6.0",
|
|
81
81
|
"lodash.omit": "^4.5.0",
|
|
82
82
|
"tslib": "^2.5.0",
|
package/src/archiver.ts
CHANGED
|
@@ -95,6 +95,7 @@ export class Archiver extends ArchiverDataSourceBase implements L2BlockSink, Tra
|
|
|
95
95
|
* @param dataStore - An archiver data store for storage & retrieval of blocks, encrypted logs & contract data.
|
|
96
96
|
* @param config - Archiver configuration options.
|
|
97
97
|
* @param blobClient - Client for retrieving blob data.
|
|
98
|
+
* @param epochCache - Cache for epoch-related data.
|
|
98
99
|
* @param dateProvider - Provider for current date/time.
|
|
99
100
|
* @param instrumentation - Instrumentation for metrics and tracing.
|
|
100
101
|
* @param l1Constants - L1 rollup constants.
|
|
@@ -341,19 +342,33 @@ export class Archiver extends ArchiverDataSourceBase implements L2BlockSink, Tra
|
|
|
341
342
|
return Promise.resolve(this.synchronizer.getL1Timestamp());
|
|
342
343
|
}
|
|
343
344
|
|
|
344
|
-
public getSyncedL2SlotNumber(): Promise<SlotNumber | undefined> {
|
|
345
|
+
public async getSyncedL2SlotNumber(): Promise<SlotNumber | undefined> {
|
|
346
|
+
// The synced L2 slot is the latest slot for which we have all L1 data,
|
|
347
|
+
// either because we have seen all L1 blocks for that slot, or because
|
|
348
|
+
// we have seen the corresponding checkpoint.
|
|
349
|
+
|
|
350
|
+
let slotFromL1Sync: SlotNumber | undefined;
|
|
345
351
|
const l1Timestamp = this.synchronizer.getL1Timestamp();
|
|
346
|
-
if (l1Timestamp
|
|
347
|
-
|
|
352
|
+
if (l1Timestamp !== undefined) {
|
|
353
|
+
const nextL1BlockSlot = getSlotAtNextL1Block(l1Timestamp, this.l1Constants);
|
|
354
|
+
if (Number(nextL1BlockSlot) > 0) {
|
|
355
|
+
slotFromL1Sync = SlotNumber.add(nextL1BlockSlot, -1);
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
let slotFromCheckpoint: SlotNumber | undefined;
|
|
360
|
+
const latestCheckpointNumber = await this.store.getSynchedCheckpointNumber();
|
|
361
|
+
if (latestCheckpointNumber > 0) {
|
|
362
|
+
const checkpointData = await this.store.getCheckpointData(latestCheckpointNumber);
|
|
363
|
+
if (checkpointData) {
|
|
364
|
+
slotFromCheckpoint = checkpointData.header.slotNumber;
|
|
365
|
+
}
|
|
348
366
|
}
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
const nextL1BlockSlot = getSlotAtNextL1Block(l1Timestamp, this.l1Constants);
|
|
353
|
-
if (Number(nextL1BlockSlot) === 0) {
|
|
354
|
-
return Promise.resolve(undefined);
|
|
367
|
+
|
|
368
|
+
if (slotFromL1Sync === undefined && slotFromCheckpoint === undefined) {
|
|
369
|
+
return undefined;
|
|
355
370
|
}
|
|
356
|
-
return
|
|
371
|
+
return SlotNumber(Math.max(slotFromL1Sync ?? 0, slotFromCheckpoint ?? 0));
|
|
357
372
|
}
|
|
358
373
|
|
|
359
374
|
public async getSyncedL2EpochNumber(): Promise<EpochNumber | undefined> {
|
package/src/config.ts
CHANGED
|
@@ -8,12 +8,7 @@ import {
|
|
|
8
8
|
getConfigFromMappings,
|
|
9
9
|
numberConfigHelper,
|
|
10
10
|
} from '@aztec/foundation/config';
|
|
11
|
-
import {
|
|
12
|
-
type ChainConfig,
|
|
13
|
-
type PipelineConfig,
|
|
14
|
-
chainConfigMappings,
|
|
15
|
-
pipelineConfigMappings,
|
|
16
|
-
} from '@aztec/stdlib/config';
|
|
11
|
+
import { type ChainConfig, chainConfigMappings } from '@aztec/stdlib/config';
|
|
17
12
|
import type { ArchiverSpecificConfig } from '@aztec/stdlib/interfaces/server';
|
|
18
13
|
|
|
19
14
|
/**
|
|
@@ -26,13 +21,11 @@ import type { ArchiverSpecificConfig } from '@aztec/stdlib/interfaces/server';
|
|
|
26
21
|
export type ArchiverConfig = ArchiverSpecificConfig &
|
|
27
22
|
L1ReaderConfig &
|
|
28
23
|
L1ContractsConfig &
|
|
29
|
-
PipelineConfig & // required to pass through to epoch cache
|
|
30
24
|
BlobClientConfig &
|
|
31
25
|
ChainConfig;
|
|
32
26
|
|
|
33
27
|
export const archiverConfigMappings: ConfigMappingsType<ArchiverConfig> = {
|
|
34
28
|
...blobClientConfigMapping,
|
|
35
|
-
...pipelineConfigMappings,
|
|
36
29
|
archiverPollingIntervalMS: {
|
|
37
30
|
env: 'ARCHIVER_POLLING_INTERVAL_MS',
|
|
38
31
|
description: 'The polling interval in ms for retrieving new L2 blocks and encrypted logs.',
|
package/src/errors.ts
CHANGED
|
@@ -74,36 +74,6 @@ export class BlockAlreadyCheckpointedError extends Error {
|
|
|
74
74
|
}
|
|
75
75
|
}
|
|
76
76
|
|
|
77
|
-
/** Thrown when logs are added for a tag whose last stored log has a higher block number than the new log. */
|
|
78
|
-
export class OutOfOrderLogInsertionError extends Error {
|
|
79
|
-
constructor(
|
|
80
|
-
public readonly logType: 'private' | 'public',
|
|
81
|
-
public readonly tag: string,
|
|
82
|
-
public readonly lastBlockNumber: number,
|
|
83
|
-
public readonly newBlockNumber: number,
|
|
84
|
-
) {
|
|
85
|
-
super(
|
|
86
|
-
`Out-of-order ${logType} log insertion for tag ${tag}: ` +
|
|
87
|
-
`last existing log is from block ${lastBlockNumber} but new log is from block ${newBlockNumber}`,
|
|
88
|
-
);
|
|
89
|
-
this.name = 'OutOfOrderLogInsertionError';
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
/** Thrown when L1 to L2 messages are requested for a checkpoint whose message tree hasn't been sealed yet. */
|
|
94
|
-
export class L1ToL2MessagesNotReadyError extends Error {
|
|
95
|
-
constructor(
|
|
96
|
-
public readonly checkpointNumber: number,
|
|
97
|
-
public readonly inboxTreeInProgress: bigint,
|
|
98
|
-
) {
|
|
99
|
-
super(
|
|
100
|
-
`Cannot get L1 to L2 messages for checkpoint ${checkpointNumber}: ` +
|
|
101
|
-
`inbox tree in progress is ${inboxTreeInProgress}, messages not yet sealed`,
|
|
102
|
-
);
|
|
103
|
-
this.name = 'L1ToL2MessagesNotReadyError';
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
|
|
107
77
|
/** Thrown when a proposed block conflicts with an already checkpointed block (different content). */
|
|
108
78
|
export class CannotOverwriteCheckpointedBlockError extends Error {
|
|
109
79
|
constructor(
|
package/src/factory.ts
CHANGED
|
@@ -8,13 +8,13 @@ import { Buffer32 } from '@aztec/foundation/buffer';
|
|
|
8
8
|
import { merge } from '@aztec/foundation/collection';
|
|
9
9
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
10
10
|
import { DateProvider } from '@aztec/foundation/timer';
|
|
11
|
+
import type { DataStoreConfig } from '@aztec/kv-store/config';
|
|
11
12
|
import { createStore } from '@aztec/kv-store/lmdb-v2';
|
|
12
13
|
import { protocolContractNames } from '@aztec/protocol-contracts';
|
|
13
14
|
import { BundledProtocolContractsProvider } from '@aztec/protocol-contracts/providers/bundle';
|
|
14
15
|
import { FunctionType, decodeFunctionSignature } from '@aztec/stdlib/abi';
|
|
15
16
|
import type { ArchiverEmitter } from '@aztec/stdlib/block';
|
|
16
|
-
import { type
|
|
17
|
-
import type { DataStoreConfig } from '@aztec/stdlib/kv-store';
|
|
17
|
+
import { type ContractClassPublicWithCommitment, computePublicBytecodeCommitment } from '@aztec/stdlib/contract';
|
|
18
18
|
import { getTelemetryClient } from '@aztec/telemetry-client';
|
|
19
19
|
|
|
20
20
|
import { EventEmitter } from 'events';
|
|
@@ -173,14 +173,22 @@ export async function createArchiver(
|
|
|
173
173
|
return archiver;
|
|
174
174
|
}
|
|
175
175
|
|
|
176
|
-
/** Registers protocol contracts in the archiver store. */
|
|
176
|
+
/** Registers protocol contracts in the archiver store. Idempotent — skips contracts that already exist (e.g. on node restart). */
|
|
177
177
|
export async function registerProtocolContracts(store: KVArchiverDataStore) {
|
|
178
178
|
const blockNumber = 0;
|
|
179
179
|
for (const name of protocolContractNames) {
|
|
180
180
|
const provider = new BundledProtocolContractsProvider();
|
|
181
181
|
const contract = await provider.getProtocolContractArtifact(name);
|
|
182
|
-
|
|
182
|
+
|
|
183
|
+
// Skip if already registered (happens on node restart with a persisted store).
|
|
184
|
+
if (await store.getContractClass(contract.contractClass.id)) {
|
|
185
|
+
continue;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
const publicBytecodeCommitment = await computePublicBytecodeCommitment(contract.contractClass.packedBytecode);
|
|
189
|
+
const contractClassPublic: ContractClassPublicWithCommitment = {
|
|
183
190
|
...contract.contractClass,
|
|
191
|
+
publicBytecodeCommitment,
|
|
184
192
|
privateFunctions: [],
|
|
185
193
|
utilityFunctions: [],
|
|
186
194
|
};
|
|
@@ -190,8 +198,7 @@ export async function registerProtocolContracts(store: KVArchiverDataStore) {
|
|
|
190
198
|
.map(fn => decodeFunctionSignature(fn.name, fn.parameters));
|
|
191
199
|
|
|
192
200
|
await store.registerContractFunctionSignatures(publicFunctionSignatures);
|
|
193
|
-
|
|
194
|
-
await store.addContractClasses([contractClassPublic], [bytecodeCommitment], BlockNumber(blockNumber));
|
|
201
|
+
await store.addContractClasses([contractClassPublic], BlockNumber(blockNumber));
|
|
195
202
|
await store.addContractInstances([contract.instance], BlockNumber(blockNumber));
|
|
196
203
|
}
|
|
197
204
|
}
|