@aztec/archiver 0.1.0-alpha23 → 0.1.0-alpha40
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/.tsbuildinfo +1 -1
- package/dest/archiver/archiver.d.ts +27 -21
- package/dest/archiver/archiver.d.ts.map +1 -1
- package/dest/archiver/archiver.js +50 -35
- package/dest/archiver/archiver.test.js +9 -10
- package/dest/archiver/archiver_store.d.ts +41 -37
- package/dest/archiver/archiver_store.d.ts.map +1 -1
- package/dest/archiver/archiver_store.js +48 -42
- package/dest/archiver/archiver_store.test.d.ts +2 -0
- package/dest/archiver/archiver_store.test.d.ts.map +1 -0
- package/dest/archiver/archiver_store.test.js +61 -0
- package/dest/archiver/config.d.ts +11 -1
- package/dest/archiver/config.d.ts.map +1 -1
- package/dest/archiver/config.js +4 -3
- package/dest/archiver/data_retrieval.d.ts +4 -4
- package/dest/archiver/data_retrieval.d.ts.map +1 -1
- package/dest/archiver/data_retrieval.js +3 -3
- package/dest/archiver/eth_log_handlers.d.ts +6 -6
- package/dest/archiver/eth_log_handlers.d.ts.map +1 -1
- package/dest/archiver/eth_log_handlers.js +13 -13
- package/dest/archiver/l1_to_l2_message_store.d.ts +1 -1
- package/dest/archiver/l1_to_l2_message_store.d.ts.map +1 -1
- package/dest/archiver/l1_to_l2_message_store.js +6 -6
- package/dest/archiver/l1_to_l2_message_store.test.js +4 -4
- package/dest/index.d.ts.map +1 -1
- package/dest/index.js +5 -5
- package/package.json +7 -6
- package/src/archiver/archiver.test.ts +11 -10
- package/src/archiver/archiver.ts +61 -38
- package/src/archiver/archiver_store.test.ts +74 -0
- package/src/archiver/archiver_store.ts +72 -63
- package/src/archiver/config.ts +17 -3
- package/src/archiver/data_retrieval.ts +10 -8
- package/src/archiver/eth_log_handlers.ts +18 -17
- package/src/archiver/l1_to_l2_message_store.test.ts +4 -3
- package/src/archiver/l1_to_l2_message_store.ts +5 -5
- package/src/index.ts +6 -4
- package/tsconfig.json +3 -0
|
@@ -33,18 +33,18 @@ export class L1ToL2MessageStore {
|
|
|
33
33
|
* for removing messages or fetching multiple messages.
|
|
34
34
|
*/
|
|
35
35
|
export class PendingL1ToL2MessageStore extends L1ToL2MessageStore {
|
|
36
|
-
getMessageKeys(
|
|
37
|
-
if (
|
|
36
|
+
getMessageKeys(limit) {
|
|
37
|
+
if (limit < 1) {
|
|
38
38
|
return [];
|
|
39
39
|
}
|
|
40
|
-
// fetch `
|
|
40
|
+
// fetch `limit` number of messages from the store with the highest fee.
|
|
41
41
|
// Note the store has multiple of the same message. So if a message has count 2, include both of them in the result:
|
|
42
42
|
const messages = [];
|
|
43
43
|
const sortedMessages = Array.from(this.store.values()).sort((a, b) => b.message.fee - a.message.fee);
|
|
44
44
|
for (const messageAndCount of sortedMessages) {
|
|
45
45
|
for (let i = 0; i < messageAndCount.count; i++) {
|
|
46
46
|
messages.push(messageAndCount.message.entryKey);
|
|
47
|
-
if (messages.length ===
|
|
47
|
+
if (messages.length === limit) {
|
|
48
48
|
return messages;
|
|
49
49
|
}
|
|
50
50
|
}
|
|
@@ -58,7 +58,7 @@ export class PendingL1ToL2MessageStore extends L1ToL2MessageStore {
|
|
|
58
58
|
const messageKeyBigInt = messageKey.value;
|
|
59
59
|
const msgAndCount = this.store.get(messageKeyBigInt);
|
|
60
60
|
if (!msgAndCount) {
|
|
61
|
-
throw new Error(`Message with key ${messageKeyBigInt} not found in store`);
|
|
61
|
+
throw new Error(`Unable to remove message: L1 to L2 Message with key ${messageKeyBigInt} not found in store`);
|
|
62
62
|
}
|
|
63
63
|
if (msgAndCount.count > 1) {
|
|
64
64
|
msgAndCount.count--;
|
|
@@ -68,4 +68,4 @@ export class PendingL1ToL2MessageStore extends L1ToL2MessageStore {
|
|
|
68
68
|
}
|
|
69
69
|
}
|
|
70
70
|
}
|
|
71
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
71
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibDFfdG9fbDJfbWVzc2FnZV9zdG9yZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcmNoaXZlci9sMV90b19sMl9tZXNzYWdlX3N0b3JlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUc5Qzs7O0dBR0c7QUFDSCxNQUFNLE9BQU8sa0JBQWtCO0lBTzdCO1FBTkE7OztXQUdHO1FBQ08sVUFBSyxHQUF1QyxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBRWpELENBQUM7SUFFaEIsVUFBVSxDQUFDLFVBQWMsRUFBRSxHQUFrQjtRQUMzQyxNQUFNLGdCQUFnQixHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUM7UUFDMUMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUNyRCxJQUFJLFdBQVcsRUFBRTtZQUNmLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztTQUNyQjthQUFNO1lBQ0wsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQzlEO0lBQ0gsQ0FBQztJQUVELFVBQVUsQ0FBQyxVQUFjO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFLE9BQU8sQ0FBQztJQUNuRCxDQUFDO0lBRUQsa0JBQWtCLENBQUMsVUFBYztRQUMvQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxQyxDQUFDO0NBQ0Y7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLE9BQU8seUJBQTBCLFNBQVEsa0JBQWtCO0lBQy9ELGNBQWMsQ0FBQyxLQUFhO1FBQzFCLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRTtZQUNiLE9BQU8sRUFBRSxDQUFDO1NBQ1g7UUFDRCx3RUFBd0U7UUFDeEUsb0hBQW9IO1FBQ3BILE1BQU0sUUFBUSxHQUFTLEVBQUUsQ0FBQztRQUMxQixNQUFNLGNBQWMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3JHLEtBQUssTUFBTSxlQUFlLElBQUksY0FBYyxFQUFFO1lBQzVDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxlQUFlLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUM5QyxRQUFRLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsUUFBUyxDQUFDLENBQUM7Z0JBQ2pELElBQUksUUFBUSxDQUFDLE1BQU0sS0FBSyxLQUFLLEVBQUU7b0JBQzdCLE9BQU8sUUFBUSxDQUFDO2lCQUNqQjthQUNGO1NBQ0Y7UUFDRCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBRUQsYUFBYSxDQUFDLFVBQWM7UUFDMUIsb0dBQW9HO1FBQ3BHLElBQUksVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDO1lBQUUsT0FBTztRQUN2QyxNQUFNLGdCQUFnQixHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUM7UUFDMUMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUNyRCxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ2hCLE1BQU0sSUFBSSxLQUFLLENBQUMsdURBQXVELGdCQUFnQixxQkFBcUIsQ0FBQyxDQUFDO1NBQy9HO1FBQ0QsSUFBSSxXQUFXLENBQUMsS0FBSyxHQUFHLENBQUMsRUFBRTtZQUN6QixXQUFXLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDckI7YUFBTTtZQUNMLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7U0FDckM7SUFDSCxDQUFDO0NBQ0YifQ==
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Fr } from '@aztec/foundation/fields';
|
|
2
|
-
import { L1ToL2MessageStore, PendingL1ToL2MessageStore } from './l1_to_l2_message_store.js';
|
|
3
2
|
import { L1Actor, L1ToL2Message, L2Actor } from '@aztec/types';
|
|
3
|
+
import { L1ToL2MessageStore, PendingL1ToL2MessageStore } from './l1_to_l2_message_store.js';
|
|
4
4
|
describe('l1_to_l2_message_store', () => {
|
|
5
5
|
let store;
|
|
6
6
|
let entryKey;
|
|
@@ -51,11 +51,11 @@ describe('pending_l1_to_l2_message_store', () => {
|
|
|
51
51
|
it('get messages for an empty store', () => {
|
|
52
52
|
expect(store.getMessageKeys(10)).toEqual([]);
|
|
53
53
|
});
|
|
54
|
-
it('getMessageKeys returns an empty array if
|
|
54
|
+
it('getMessageKeys returns an empty array if limit is 0', () => {
|
|
55
55
|
store.addMessage(entryKey, msg);
|
|
56
56
|
expect(store.getMessageKeys(0)).toEqual([]);
|
|
57
57
|
});
|
|
58
|
-
it('get messages for a non-empty store when
|
|
58
|
+
it('get messages for a non-empty store when limit > number of messages in store', () => {
|
|
59
59
|
const entryKeys = [1, 2, 3, 4, 5].map(x => new Fr(x));
|
|
60
60
|
entryKeys.forEach(entryKey => {
|
|
61
61
|
store.addMessage(entryKey, L1ToL2Message.random());
|
|
@@ -74,4 +74,4 @@ describe('pending_l1_to_l2_message_store', () => {
|
|
|
74
74
|
expect(receivedMessageFees).toEqual(expectedMessgeFees);
|
|
75
75
|
});
|
|
76
76
|
});
|
|
77
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
77
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibDFfdG9fbDJfbWVzc2FnZV9zdG9yZS50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FyY2hpdmVyL2wxX3RvX2wyX21lc3NhZ2Vfc3RvcmUudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDOUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRS9ELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRTVGLFFBQVEsQ0FBQyx3QkFBd0IsRUFBRSxHQUFHLEVBQUU7SUFDdEMsSUFBSSxLQUF5QixDQUFDO0lBQzlCLElBQUksUUFBWSxDQUFDO0lBQ2pCLElBQUksR0FBa0IsQ0FBQztJQUV2QixVQUFVLENBQUMsR0FBRyxFQUFFO1FBQ2Qsc0NBQXNDO1FBQ3RDLEtBQUssR0FBRyxJQUFJLGtCQUFrQixFQUFFLENBQUM7UUFDakMsUUFBUSxHQUFHLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUN2QixHQUFHLEdBQUcsYUFBYSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQy9CLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLDJCQUEyQixFQUFFLEdBQUcsRUFBRTtRQUNuQyxLQUFLLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNoQyxNQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsRCxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyx3RUFBd0UsRUFBRSxHQUFHLEVBQUU7UUFDaEYsS0FBSyxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDaEMsS0FBSyxDQUFDLFVBQVUsQ0FB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
|
package/dest/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AASA,cAAc,qBAAqB,CAAC"}
|
package/dest/index.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
+
import { createDebugLogger } from '@aztec/foundation/log';
|
|
1
2
|
import { fileURLToPath } from 'url';
|
|
2
3
|
import { createPublicClient, http } from 'viem';
|
|
3
4
|
import { localhost } from 'viem/chains';
|
|
4
|
-
import { Archiver, getConfigEnvVars } from './archiver/index.js';
|
|
5
5
|
import { MemoryArchiverStore } from './archiver/archiver_store.js';
|
|
6
|
-
import {
|
|
6
|
+
import { Archiver, getConfigEnvVars } from './archiver/index.js';
|
|
7
7
|
export * from './archiver/index.js';
|
|
8
|
-
const log =
|
|
8
|
+
const log = createDebugLogger('aztec:archiver');
|
|
9
9
|
/**
|
|
10
10
|
* A function which instantiates and starts Archiver.
|
|
11
11
|
*/
|
|
@@ -30,8 +30,8 @@ async function main() {
|
|
|
30
30
|
if (process.argv[1] === fileURLToPath(import.meta.url).replace(/\/index\.js$/, '')) {
|
|
31
31
|
// eslint-disable-next-line @typescript-eslint/no-floating-promises
|
|
32
32
|
main().catch(err => {
|
|
33
|
-
log(err);
|
|
33
|
+
log.fatal(err);
|
|
34
34
|
process.exit(1);
|
|
35
35
|
});
|
|
36
36
|
}
|
|
37
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
37
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFMUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLEtBQUssQ0FBQztBQUNwQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2hELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFeEMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbkUsT0FBTyxFQUFFLFFBQVEsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRWpFLGNBQWMscUJBQXFCLENBQUM7QUFFcEMsTUFBTSxHQUFHLEdBQUcsaUJBQWlCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztBQUVoRDs7R0FFRztBQUNILHlDQUF5QztBQUN6QyxLQUFLLFVBQVUsSUFBSTtJQUNqQixNQUFNLE1BQU0sR0FBRyxnQkFBZ0IsRUFBRSxDQUFDO0lBQ2xDLE1BQU0sRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxpQ0FBaUMsRUFBRSxnQkFBZ0IsRUFBRSxHQUFHLE1BQU0sQ0FBQztJQUU5RyxNQUFNLFlBQVksR0FBRyxrQkFBa0IsQ0FBQztRQUN0QyxLQUFLLEVBQUUsU0FBUztRQUNoQixTQUFTLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQztLQUN4QixDQUFDLENBQUM7SUFFSCxNQUFNLGFBQWEsR0FBRyxJQUFJLG1CQUFtQixFQUFFLENBQUM7SUFFaEQsTUFBTSxRQUFRLEdBQUcsSUFBSSxRQUFRLENBQzNCLFlBQVksRUFDWixjQUFjLEVBQ2QsYUFBYSxFQUNiLGlDQUFpQyxFQUNqQyxnQkFBZ0IsRUFDaEIsYUFBYSxDQUNkLENBQUM7SUFFRixNQUFNLFFBQVEsR0FBRyxLQUFLLElBQUksRUFBRTtRQUMxQixNQUFNLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN0QixPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xCLENBQUMsQ0FBQztJQUNGLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ2pDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ3BDLENBQUM7QUFFRCxpRUFBaUU7QUFDakUsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLGFBQWEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLEVBQUU7SUFDbEYsbUVBQW1FO0lBQ25FLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUNqQixHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2YsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsQixDQUFDLENBQUMsQ0FBQztDQUNKIn0=
|
package/package.json
CHANGED
|
@@ -1,19 +1,20 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/archiver",
|
|
3
|
-
"version": "0.1.0-
|
|
3
|
+
"version": "0.1.0-alpha40",
|
|
4
4
|
"exports": "./dest/index.js",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"dependencies": {
|
|
7
|
-
"@aztec/
|
|
8
|
-
"@aztec/
|
|
9
|
-
"@aztec/
|
|
10
|
-
"@aztec/
|
|
7
|
+
"@aztec/circuits.js": "0.1.0-alpha40",
|
|
8
|
+
"@aztec/ethereum": "0.1.0-alpha40",
|
|
9
|
+
"@aztec/foundation": "0.1.0-alpha40",
|
|
10
|
+
"@aztec/l1-artifacts": "0.1.0-alpha40",
|
|
11
|
+
"@aztec/types": "0.1.0-alpha40",
|
|
11
12
|
"@types/lodash.omit": "^4.5.7",
|
|
12
13
|
"debug": "^4.3.4",
|
|
13
14
|
"lodash.omit": "^4.5.0",
|
|
14
15
|
"tsc-watch": "^6.0.0",
|
|
15
16
|
"tslib": "^2.5.0",
|
|
16
|
-
"viem": "
|
|
17
|
+
"viem": "1.4.2",
|
|
17
18
|
"ws": "^8.13.0"
|
|
18
19
|
}
|
|
19
20
|
}
|
|
@@ -1,21 +1,22 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { AztecAddress } from '@aztec/foundation/aztec-address';
|
|
2
|
+
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
3
|
+
import { Fr } from '@aztec/foundation/fields';
|
|
4
|
+
import { sleep } from '@aztec/foundation/sleep';
|
|
5
|
+
import { ContractDeploymentEmitterAbi, InboxAbi, RollupAbi } from '@aztec/l1-artifacts';
|
|
2
6
|
import {
|
|
3
7
|
ContractData,
|
|
4
|
-
|
|
8
|
+
ContractDataAndBytecode,
|
|
5
9
|
EncodedContractFunction,
|
|
6
10
|
L2Block,
|
|
7
11
|
L2BlockL2Logs,
|
|
8
12
|
LogType,
|
|
9
13
|
} from '@aztec/types';
|
|
14
|
+
|
|
10
15
|
import { MockProxy, mock } from 'jest-mock-extended';
|
|
11
16
|
import { Chain, HttpTransport, Log, PublicClient, Transaction, encodeFunctionData, toHex } from 'viem';
|
|
17
|
+
|
|
12
18
|
import { Archiver } from './archiver.js';
|
|
13
|
-
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
14
|
-
import { sleep } from '@aztec/foundation/sleep';
|
|
15
|
-
import { AztecAddress } from '@aztec/foundation/aztec-address';
|
|
16
|
-
import { randomBytes } from '@aztec/foundation/crypto';
|
|
17
19
|
import { ArchiverDataStore, MemoryArchiverStore } from './archiver_store.js';
|
|
18
|
-
import { Fr } from '@aztec/foundation/fields';
|
|
19
20
|
|
|
20
21
|
describe('Archiver', () => {
|
|
21
22
|
const rollupAddress = '0x0000000000000000000000000000000000000000';
|
|
@@ -157,7 +158,7 @@ function makeContractDeploymentEvent(l1BlockNum: bigint, l2Block: L2Block) {
|
|
|
157
158
|
// const contractData = ContractData.random();
|
|
158
159
|
const aztecAddress = AztecAddress.random();
|
|
159
160
|
const portalAddress = EthAddress.random();
|
|
160
|
-
const contractData = new
|
|
161
|
+
const contractData = new ContractDataAndBytecode(new ContractData(aztecAddress, portalAddress), [
|
|
161
162
|
EncodedContractFunction.random(),
|
|
162
163
|
EncodedContractFunction.random(),
|
|
163
164
|
]);
|
|
@@ -190,8 +191,8 @@ function makeL1ToL2MessageAddedEvents(l1BlockNum: bigint, entryKeys: string[]) {
|
|
|
190
191
|
senderChainId: 1n,
|
|
191
192
|
recipient: AztecAddress.random().toString(),
|
|
192
193
|
recipientVersion: 1n,
|
|
193
|
-
content:
|
|
194
|
-
secretHash:
|
|
194
|
+
content: Fr.random().toString(true),
|
|
195
|
+
secretHash: Fr.random().toString(true),
|
|
195
196
|
deadline: 100,
|
|
196
197
|
fee: 1n,
|
|
197
198
|
entryKey: entryKey,
|
package/src/archiver/archiver.ts
CHANGED
|
@@ -1,30 +1,35 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { createEthereumChain } from '@aztec/ethereum';
|
|
2
|
+
import { AztecAddress } from '@aztec/foundation/aztec-address';
|
|
3
|
+
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
4
|
+
import { Fr } from '@aztec/foundation/fields';
|
|
2
5
|
import { DebugLogger, createDebugLogger } from '@aztec/foundation/log';
|
|
3
6
|
import { RunningPromise } from '@aztec/foundation/running-promise';
|
|
4
|
-
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
5
|
-
import { AztecAddress } from '@aztec/foundation/aztec-address';
|
|
6
|
-
import { INITIAL_L2_BLOCK_NUM, L1ToL2Message, L1ToL2MessageSource, L2BlockL2Logs, LogType } from '@aztec/types';
|
|
7
7
|
import {
|
|
8
8
|
ContractData,
|
|
9
|
-
|
|
9
|
+
ContractDataAndBytecode,
|
|
10
10
|
ContractDataSource,
|
|
11
11
|
EncodedContractFunction,
|
|
12
|
+
INITIAL_L2_BLOCK_NUM,
|
|
13
|
+
L1ToL2Message,
|
|
14
|
+
L1ToL2MessageSource,
|
|
12
15
|
L2Block,
|
|
16
|
+
L2BlockL2Logs,
|
|
13
17
|
L2BlockSource,
|
|
14
18
|
L2LogsSource,
|
|
19
|
+
LogType,
|
|
15
20
|
} from '@aztec/types';
|
|
21
|
+
|
|
22
|
+
import omit from 'lodash.omit';
|
|
16
23
|
import { Chain, HttpTransport, PublicClient, createPublicClient, http } from 'viem';
|
|
17
|
-
import { createEthereumChain } from '@aztec/ethereum';
|
|
18
|
-
import { Fr } from '@aztec/foundation/fields';
|
|
19
24
|
|
|
25
|
+
import { ArchiverDataStore, MemoryArchiverStore } from './archiver_store.js';
|
|
20
26
|
import { ArchiverConfig } from './config.js';
|
|
21
27
|
import {
|
|
22
28
|
retrieveBlocks,
|
|
29
|
+
retrieveNewCancelledL1ToL2Messages,
|
|
23
30
|
retrieveNewContractData,
|
|
24
31
|
retrieveNewPendingL1ToL2Messages,
|
|
25
|
-
retrieveNewCancelledL1ToL2Messages,
|
|
26
32
|
} from './data_retrieval.js';
|
|
27
|
-
import { ArchiverDataStore, MemoryArchiverStore } from './archiver_store.js';
|
|
28
33
|
|
|
29
34
|
/**
|
|
30
35
|
* Pulls L2 blocks in a non-blocking manner and provides interface for their retrieval.
|
|
@@ -88,6 +93,7 @@ export class Archiver implements L2BlockSource, L2LogsSource, ContractDataSource
|
|
|
88
93
|
const publicClient = createPublicClient({
|
|
89
94
|
chain: chain.chainInfo,
|
|
90
95
|
transport: http(chain.rpcUrl),
|
|
96
|
+
pollingInterval: config.viemPollingIntervalMS,
|
|
91
97
|
});
|
|
92
98
|
const archiverStore = new MemoryArchiverStore();
|
|
93
99
|
const archiver = new Archiver(
|
|
@@ -97,7 +103,7 @@ export class Archiver implements L2BlockSource, L2LogsSource, ContractDataSource
|
|
|
97
103
|
config.contractDeploymentEmitterContract,
|
|
98
104
|
config.searchStartBlock,
|
|
99
105
|
archiverStore,
|
|
100
|
-
config.
|
|
106
|
+
config.archiverPollingIntervalMS,
|
|
101
107
|
);
|
|
102
108
|
await archiver.start(blockUntilSynced);
|
|
103
109
|
return archiver;
|
|
@@ -136,7 +142,7 @@ export class Archiver implements L2BlockSource, L2LogsSource, ContractDataSource
|
|
|
136
142
|
return;
|
|
137
143
|
}
|
|
138
144
|
|
|
139
|
-
// ********** Events that are processed
|
|
145
|
+
// ********** Events that are processed in between blocks **********
|
|
140
146
|
|
|
141
147
|
// Process l1ToL2Messages, these are consumed as time passes, not each block
|
|
142
148
|
const retrievedPendingL1ToL2Messages = await retrieveNewPendingL1ToL2Messages(
|
|
@@ -215,9 +221,9 @@ export class Archiver implements L2BlockSource, L2LogsSource, ContractDataSource
|
|
|
215
221
|
// store contracts for which we have retrieved L2 blocks
|
|
216
222
|
const lastKnownL2BlockNum = retrievedBlocks.retrievedData[retrievedBlocks.retrievedData.length - 1].number;
|
|
217
223
|
retrievedContracts.retrievedData.forEach(async ([contracts, l2BlockNum], index) => {
|
|
218
|
-
this.log(`Retrieved contract
|
|
224
|
+
this.log(`Retrieved contract data and bytecode for l2 block number: ${index}`);
|
|
219
225
|
if (l2BlockNum <= lastKnownL2BlockNum) {
|
|
220
|
-
await this.store.
|
|
226
|
+
await this.store.addContractDataAndBytecode(contracts, l2BlockNum);
|
|
221
227
|
}
|
|
222
228
|
});
|
|
223
229
|
|
|
@@ -251,14 +257,32 @@ export class Archiver implements L2BlockSource, L2LogsSource, ContractDataSource
|
|
|
251
257
|
return Promise.resolve();
|
|
252
258
|
}
|
|
253
259
|
|
|
260
|
+
public getRollupAddress(): Promise<EthAddress> {
|
|
261
|
+
return Promise.resolve(this.rollupAddress);
|
|
262
|
+
}
|
|
263
|
+
|
|
254
264
|
/**
|
|
255
|
-
* Gets
|
|
265
|
+
* Gets up to `limit` amount of L2 blocks starting from `from`.
|
|
256
266
|
* @param from - Number of the first block to return (inclusive).
|
|
257
|
-
* @param
|
|
267
|
+
* @param limit - The number of blocks to return.
|
|
258
268
|
* @returns The requested L2 blocks.
|
|
259
269
|
*/
|
|
260
|
-
public getL2Blocks(from: number,
|
|
261
|
-
return this.store.getL2Blocks(from,
|
|
270
|
+
public getL2Blocks(from: number, limit: number): Promise<L2Block[]> {
|
|
271
|
+
return this.store.getL2Blocks(from, limit);
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
/**
|
|
275
|
+
* Gets an l2 block.
|
|
276
|
+
* @param number - The block number to return (inclusive).
|
|
277
|
+
* @returns The requested L2 block.
|
|
278
|
+
*/
|
|
279
|
+
public async getL2Block(number: number): Promise<L2Block | undefined> {
|
|
280
|
+
// If the number provided is -ve, then return the latest block.
|
|
281
|
+
if (number < 0) {
|
|
282
|
+
number = this.store.getBlocksLength();
|
|
283
|
+
}
|
|
284
|
+
const blocks = await this.store.getL2Blocks(number, 1);
|
|
285
|
+
return blocks.length === 0 ? undefined : blocks[0];
|
|
262
286
|
}
|
|
263
287
|
|
|
264
288
|
/**
|
|
@@ -267,8 +291,8 @@ export class Archiver implements L2BlockSource, L2LogsSource, ContractDataSource
|
|
|
267
291
|
* @param contractAddress - The contract data address.
|
|
268
292
|
* @returns The contract data.
|
|
269
293
|
*/
|
|
270
|
-
public
|
|
271
|
-
return this.store.
|
|
294
|
+
public getContractDataAndBytecode(contractAddress: AztecAddress): Promise<ContractDataAndBytecode | undefined> {
|
|
295
|
+
return this.store.getContractDataAndBytecode(contractAddress);
|
|
272
296
|
}
|
|
273
297
|
|
|
274
298
|
/**
|
|
@@ -276,28 +300,28 @@ export class Archiver implements L2BlockSource, L2LogsSource, ContractDataSource
|
|
|
276
300
|
* @param blockNum - The block number to get all contract data from.
|
|
277
301
|
* @returns All new contract data in the block (if found).
|
|
278
302
|
*/
|
|
279
|
-
public
|
|
280
|
-
return this.store.
|
|
303
|
+
public getContractDataAndBytecodeInBlock(blockNum: number): Promise<ContractDataAndBytecode[]> {
|
|
304
|
+
return this.store.getContractDataAndBytecodeInBlock(blockNum);
|
|
281
305
|
}
|
|
282
306
|
|
|
283
307
|
/**
|
|
284
|
-
* Lookup the
|
|
308
|
+
* Lookup the contract data for this contract.
|
|
285
309
|
* Contains contract address & the ethereum portal address.
|
|
286
310
|
* @param contractAddress - The contract data address.
|
|
287
311
|
* @returns ContractData with the portal address (if we didn't throw an error).
|
|
288
312
|
*/
|
|
289
|
-
public
|
|
290
|
-
return this.store.
|
|
313
|
+
public getContractData(contractAddress: AztecAddress): Promise<ContractData | undefined> {
|
|
314
|
+
return this.store.getContractData(contractAddress);
|
|
291
315
|
}
|
|
292
316
|
|
|
293
317
|
/**
|
|
294
|
-
* Lookup the L2 contract
|
|
318
|
+
* Lookup the L2 contract data inside a block.
|
|
295
319
|
* Contains contract address & the ethereum portal address.
|
|
296
320
|
* @param l2BlockNum - The L2 block number to get the contract data from.
|
|
297
321
|
* @returns ContractData with the portal address (if we didn't throw an error).
|
|
298
322
|
*/
|
|
299
|
-
public
|
|
300
|
-
return this.store.
|
|
323
|
+
public getContractDataInBlock(l2BlockNum: number): Promise<ContractData[] | undefined> {
|
|
324
|
+
return this.store.getContractDataInBlock(l2BlockNum);
|
|
301
325
|
}
|
|
302
326
|
|
|
303
327
|
/**
|
|
@@ -310,20 +334,19 @@ export class Archiver implements L2BlockSource, L2LogsSource, ContractDataSource
|
|
|
310
334
|
contractAddress: AztecAddress,
|
|
311
335
|
functionSelector: Buffer,
|
|
312
336
|
): Promise<EncodedContractFunction | undefined> {
|
|
313
|
-
const contractData = await this.
|
|
314
|
-
|
|
315
|
-
return result;
|
|
337
|
+
const contractData = await this.getContractDataAndBytecode(contractAddress);
|
|
338
|
+
return contractData?.getPublicFunction(functionSelector);
|
|
316
339
|
}
|
|
317
340
|
|
|
318
341
|
/**
|
|
319
|
-
* Gets
|
|
342
|
+
* Gets up to `limit` amount of logs starting from `from`.
|
|
320
343
|
* @param from - Number of the L2 block to which corresponds the first logs to be returned.
|
|
321
|
-
* @param
|
|
344
|
+
* @param limit - The number of logs to return.
|
|
322
345
|
* @param logType - Specifies whether to return encrypted or unencrypted logs.
|
|
323
346
|
* @returns The requested logs.
|
|
324
347
|
*/
|
|
325
|
-
public getLogs(from: number,
|
|
326
|
-
return this.store.getLogs(from,
|
|
348
|
+
public getLogs(from: number, limit: number, logType: LogType): Promise<L2BlockL2Logs[]> {
|
|
349
|
+
return this.store.getLogs(from, limit, logType);
|
|
327
350
|
}
|
|
328
351
|
|
|
329
352
|
/**
|
|
@@ -335,12 +358,12 @@ export class Archiver implements L2BlockSource, L2LogsSource, ContractDataSource
|
|
|
335
358
|
}
|
|
336
359
|
|
|
337
360
|
/**
|
|
338
|
-
* Gets
|
|
339
|
-
* @param
|
|
361
|
+
* Gets up to `limit` amount of pending L1 to L2 messages.
|
|
362
|
+
* @param limit - The number of messages to return.
|
|
340
363
|
* @returns The requested L1 to L2 messages' keys.
|
|
341
364
|
*/
|
|
342
|
-
getPendingL1ToL2Messages(
|
|
343
|
-
return this.store.getPendingL1ToL2MessageKeys(
|
|
365
|
+
getPendingL1ToL2Messages(limit: number): Promise<Fr[]> {
|
|
366
|
+
return this.store.getPendingL1ToL2MessageKeys(limit);
|
|
344
367
|
}
|
|
345
368
|
|
|
346
369
|
/**
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { INITIAL_L2_BLOCK_NUM, L2Block, L2BlockL2Logs, LogType } from '@aztec/types';
|
|
2
|
+
|
|
3
|
+
import { ArchiverDataStore, MemoryArchiverStore } from './archiver_store.js';
|
|
4
|
+
|
|
5
|
+
describe('Archiver Memory Store', () => {
|
|
6
|
+
let archiverStore: ArchiverDataStore;
|
|
7
|
+
|
|
8
|
+
beforeEach(() => {
|
|
9
|
+
archiverStore = new MemoryArchiverStore();
|
|
10
|
+
});
|
|
11
|
+
|
|
12
|
+
it('can store and retrieve blocks', async () => {
|
|
13
|
+
const blocks = Array(10)
|
|
14
|
+
.fill(0)
|
|
15
|
+
.map((_, index) => L2Block.random(index));
|
|
16
|
+
await archiverStore.addL2Blocks(blocks);
|
|
17
|
+
// Offset indices by INTIAL_L2_BLOCK_NUM to ensure we are correctly aligned
|
|
18
|
+
for (const [from, limit] of [
|
|
19
|
+
[0 + INITIAL_L2_BLOCK_NUM, 10],
|
|
20
|
+
[3 + INITIAL_L2_BLOCK_NUM, 3],
|
|
21
|
+
[1 + INITIAL_L2_BLOCK_NUM, 7],
|
|
22
|
+
[5 + INITIAL_L2_BLOCK_NUM, 8],
|
|
23
|
+
[10 + INITIAL_L2_BLOCK_NUM, 1],
|
|
24
|
+
[11 + INITIAL_L2_BLOCK_NUM, 1],
|
|
25
|
+
]) {
|
|
26
|
+
const expected = blocks.slice(from - INITIAL_L2_BLOCK_NUM, from - INITIAL_L2_BLOCK_NUM + limit);
|
|
27
|
+
const actual = await archiverStore.getL2Blocks(from, limit);
|
|
28
|
+
expect(expected).toEqual(actual);
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
test.each([LogType.ENCRYPTED, LogType.UNENCRYPTED])('can store and retrieve logs', async (logType: LogType) => {
|
|
33
|
+
const logs = Array(10)
|
|
34
|
+
.fill(0)
|
|
35
|
+
.map(_ => L2BlockL2Logs.random(6, 3, 2));
|
|
36
|
+
await archiverStore.addLogs(logs, logType);
|
|
37
|
+
// Offset indices by INTIAL_L2_BLOCK_NUM to ensure we are correctly aligned
|
|
38
|
+
for (const [from, limit] of [
|
|
39
|
+
[0 + INITIAL_L2_BLOCK_NUM, 10],
|
|
40
|
+
[3 + INITIAL_L2_BLOCK_NUM, 3],
|
|
41
|
+
[1 + INITIAL_L2_BLOCK_NUM, 7],
|
|
42
|
+
[5 + INITIAL_L2_BLOCK_NUM, 8],
|
|
43
|
+
[10 + INITIAL_L2_BLOCK_NUM, 1],
|
|
44
|
+
[11 + INITIAL_L2_BLOCK_NUM, 1],
|
|
45
|
+
]) {
|
|
46
|
+
const expected = logs.slice(from - INITIAL_L2_BLOCK_NUM, from - INITIAL_L2_BLOCK_NUM + limit);
|
|
47
|
+
const actual = await archiverStore.getLogs(from, limit, logType);
|
|
48
|
+
expect(expected).toEqual(actual);
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
it('throws if we try and request less than 1 block', async () => {
|
|
53
|
+
const blocks = Array(10)
|
|
54
|
+
.fill(0)
|
|
55
|
+
.map((_, index) => L2Block.random(index));
|
|
56
|
+
await archiverStore.addL2Blocks(blocks);
|
|
57
|
+
await expect(async () => await archiverStore.getL2Blocks(1, 0)).rejects.toThrow(
|
|
58
|
+
`Invalid block range from: 1, limit: 0`,
|
|
59
|
+
);
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
test.each([LogType.ENCRYPTED, LogType.UNENCRYPTED])(
|
|
63
|
+
'throws if we try and request less than 1 log',
|
|
64
|
+
async (logType: LogType) => {
|
|
65
|
+
const logs = Array(10)
|
|
66
|
+
.fill(0)
|
|
67
|
+
.map(_ => L2BlockL2Logs.random(6, 3, 2));
|
|
68
|
+
await archiverStore.addLogs(logs, logType);
|
|
69
|
+
await expect(async () => await archiverStore.getLogs(1, 0, logType)).rejects.toThrow(
|
|
70
|
+
`Invalid block range from: 1, limit: 0`,
|
|
71
|
+
);
|
|
72
|
+
},
|
|
73
|
+
);
|
|
74
|
+
});
|