@aztec/archiver 0.6.7 → 0.7.2
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/Dockerfile +15 -0
- package/package.json +6 -6
- package/.tsbuildinfo +0 -1
- package/dest/archiver/archiver.d.ts +0 -147
- package/dest/archiver/archiver.d.ts.map +0 -1
- package/dest/archiver/archiver.js +0 -269
- package/dest/archiver/archiver.test.d.ts +0 -2
- package/dest/archiver/archiver.test.d.ts.map +0 -1
- package/dest/archiver/archiver.test.js +0 -184
- package/dest/archiver/archiver_store.d.ts +0 -267
- package/dest/archiver/archiver_store.d.ts.map +0 -1
- package/dest/archiver/archiver_store.js +0 -256
- package/dest/archiver/archiver_store.test.d.ts +0 -2
- package/dest/archiver/archiver_store.test.d.ts.map +0 -1
- package/dest/archiver/archiver_store.test.js +0 -61
- package/dest/archiver/config.d.ts +0 -39
- package/dest/archiver/config.d.ts.map +0 -1
- package/dest/archiver/config.js +0 -22
- package/dest/archiver/data_retrieval.d.ts +0 -64
- package/dest/archiver/data_retrieval.d.ts.map +0 -1
- package/dest/archiver/data_retrieval.js +0 -102
- package/dest/archiver/eth_log_handlers.d.ts +0 -77
- package/dest/archiver/eth_log_handlers.d.ts.map +0 -1
- package/dest/archiver/eth_log_handlers.js +0 -180
- package/dest/archiver/index.d.ts +0 -3
- package/dest/archiver/index.d.ts.map +0 -1
- package/dest/archiver/index.js +0 -3
- package/dest/archiver/l1_to_l2_message_store.d.ts +0 -40
- package/dest/archiver/l1_to_l2_message_store.d.ts.map +0 -1
- package/dest/archiver/l1_to_l2_message_store.js +0 -71
- package/dest/archiver/l1_to_l2_message_store.test.d.ts +0 -2
- package/dest/archiver/l1_to_l2_message_store.test.d.ts.map +0 -1
- package/dest/archiver/l1_to_l2_message_store.test.js +0 -77
- package/dest/index.d.ts +0 -2
- package/dest/index.d.ts.map +0 -1
- package/dest/index.js +0 -37
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
import { Fr } from '@aztec/foundation/fields';
|
|
2
|
-
import { L1Actor, L1ToL2Message, L2Actor } from '@aztec/types';
|
|
3
|
-
import { L1ToL2MessageStore, PendingL1ToL2MessageStore } from './l1_to_l2_message_store.js';
|
|
4
|
-
describe('l1_to_l2_message_store', () => {
|
|
5
|
-
let store;
|
|
6
|
-
let entryKey;
|
|
7
|
-
let msg;
|
|
8
|
-
beforeEach(() => {
|
|
9
|
-
// already adds a message to the store
|
|
10
|
-
store = new L1ToL2MessageStore();
|
|
11
|
-
entryKey = Fr.random();
|
|
12
|
-
msg = L1ToL2Message.random();
|
|
13
|
-
});
|
|
14
|
-
it('addMessage adds a message', () => {
|
|
15
|
-
store.addMessage(entryKey, msg);
|
|
16
|
-
expect(store.getMessage(entryKey)).toEqual(msg);
|
|
17
|
-
});
|
|
18
|
-
it('addMessage increments the count if the message is already in the store', () => {
|
|
19
|
-
store.addMessage(entryKey, msg);
|
|
20
|
-
store.addMessage(entryKey, msg);
|
|
21
|
-
expect(store.getMessageAndCount(entryKey)).toEqual({ message: msg, count: 2 });
|
|
22
|
-
});
|
|
23
|
-
});
|
|
24
|
-
describe('pending_l1_to_l2_message_store', () => {
|
|
25
|
-
let store;
|
|
26
|
-
let entryKey;
|
|
27
|
-
let msg;
|
|
28
|
-
beforeEach(() => {
|
|
29
|
-
// already adds a message to the store
|
|
30
|
-
store = new PendingL1ToL2MessageStore();
|
|
31
|
-
entryKey = Fr.random();
|
|
32
|
-
msg = L1ToL2Message.random();
|
|
33
|
-
});
|
|
34
|
-
it('removeMessage removes the message if the count is 1', () => {
|
|
35
|
-
store.addMessage(entryKey, msg);
|
|
36
|
-
store.removeMessage(entryKey);
|
|
37
|
-
expect(store.getMessage(entryKey)).toBeUndefined();
|
|
38
|
-
});
|
|
39
|
-
it("handles case when removing a message that doesn't exist", () => {
|
|
40
|
-
expect(() => store.removeMessage(new Fr(0))).not.toThrow();
|
|
41
|
-
const one = new Fr(1);
|
|
42
|
-
expect(() => store.removeMessage(one)).toThrow(`Message with key ${one.value} not found in store`);
|
|
43
|
-
});
|
|
44
|
-
it('removeMessage decrements the count if the message is already in the store', () => {
|
|
45
|
-
store.addMessage(entryKey, msg);
|
|
46
|
-
store.addMessage(entryKey, msg);
|
|
47
|
-
store.addMessage(entryKey, msg);
|
|
48
|
-
store.removeMessage(entryKey);
|
|
49
|
-
expect(store.getMessageAndCount(entryKey)).toEqual({ message: msg, count: 2 });
|
|
50
|
-
});
|
|
51
|
-
it('get messages for an empty store', () => {
|
|
52
|
-
expect(store.getMessageKeys(10)).toEqual([]);
|
|
53
|
-
});
|
|
54
|
-
it('getMessageKeys returns an empty array if limit is 0', () => {
|
|
55
|
-
store.addMessage(entryKey, msg);
|
|
56
|
-
expect(store.getMessageKeys(0)).toEqual([]);
|
|
57
|
-
});
|
|
58
|
-
it('get messages for a non-empty store when limit > number of messages in store', () => {
|
|
59
|
-
const entryKeys = [1, 2, 3, 4, 5].map(x => new Fr(x));
|
|
60
|
-
entryKeys.forEach(entryKey => {
|
|
61
|
-
store.addMessage(entryKey, L1ToL2Message.random());
|
|
62
|
-
});
|
|
63
|
-
expect(store.getMessageKeys(10).length).toEqual(5);
|
|
64
|
-
});
|
|
65
|
-
it('get messages returns messages sorted by fees and also includes multiple of the same message', () => {
|
|
66
|
-
const entryKeys = [1, 2, 3, 3, 3, 4].map(x => new Fr(x));
|
|
67
|
-
entryKeys.forEach(entryKey => {
|
|
68
|
-
// set msg.fee to entryKey to test the sort.
|
|
69
|
-
const msg = new L1ToL2Message(L1Actor.random(), L2Actor.random(), Fr.random(), Fr.random(), 100, Number(entryKey.value), entryKey);
|
|
70
|
-
store.addMessage(entryKey, msg);
|
|
71
|
-
});
|
|
72
|
-
const expectedMessgeFees = [4n, 3n, 3n, 3n]; // the top 4.
|
|
73
|
-
const receivedMessageFees = store.getMessageKeys(4).map(key => key.value);
|
|
74
|
-
expect(receivedMessageFees).toEqual(expectedMessgeFees);
|
|
75
|
-
});
|
|
76
|
-
});
|
|
77
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibDFfdG9fbDJfbWVzc2FnZV9zdG9yZS50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FyY2hpdmVyL2wxX3RvX2wyX21lc3NhZ2Vfc3RvcmUudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDOUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRS9ELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRTVGLFFBQVEsQ0FBQyx3QkFBd0IsRUFBRSxHQUFHLEVBQUU7SUFDdEMsSUFBSSxLQUF5QixDQUFDO0lBQzlCLElBQUksUUFBWSxDQUFDO0lBQ2pCLElBQUksR0FBa0IsQ0FBQztJQUV2QixVQUFVLENBQUMsR0FBRyxFQUFFO1FBQ2Qsc0NBQXNDO1FBQ3RDLEtBQUssR0FBRyxJQUFJLGtCQUFrQixFQUFFLENBQUM7UUFDakMsUUFBUSxHQUFHLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUN2QixHQUFHLEdBQUcsYUFBYSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQy9CLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLDJCQUEyQixFQUFFLEdBQUcsRUFBRTtRQUNuQyxLQUFLLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNoQyxNQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsRCxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyx3RUFBd0UsRUFBRSxHQUFHLEVBQUU7UUFDaEYsS0FBSyxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDaEMsS0FBSyxDQUFDLFVBQVUsQ0FB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
|
package/dest/index.d.ts
DELETED
package/dest/index.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AASA,cAAc,qBAAqB,CAAC"}
|
package/dest/index.js
DELETED
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import { createDebugLogger } from '@aztec/foundation/log';
|
|
2
|
-
import { fileURLToPath } from '@aztec/foundation/url';
|
|
3
|
-
import { createPublicClient, http } from 'viem';
|
|
4
|
-
import { localhost } from 'viem/chains';
|
|
5
|
-
import { MemoryArchiverStore } from './archiver/archiver_store.js';
|
|
6
|
-
import { Archiver, getConfigEnvVars } from './archiver/index.js';
|
|
7
|
-
export * from './archiver/index.js';
|
|
8
|
-
const log = createDebugLogger('aztec:archiver');
|
|
9
|
-
/**
|
|
10
|
-
* A function which instantiates and starts Archiver.
|
|
11
|
-
*/
|
|
12
|
-
// eslint-disable-next-line require-await
|
|
13
|
-
async function main() {
|
|
14
|
-
const config = getConfigEnvVars();
|
|
15
|
-
const { rpcUrl, rollupContract, inboxContract, contractDeploymentEmitterContract, searchStartBlock } = config;
|
|
16
|
-
const publicClient = createPublicClient({
|
|
17
|
-
chain: localhost,
|
|
18
|
-
transport: http(rpcUrl),
|
|
19
|
-
});
|
|
20
|
-
const archiverStore = new MemoryArchiverStore();
|
|
21
|
-
const archiver = new Archiver(publicClient, rollupContract, inboxContract, contractDeploymentEmitterContract, searchStartBlock, archiverStore);
|
|
22
|
-
const shutdown = async () => {
|
|
23
|
-
await archiver.stop();
|
|
24
|
-
process.exit(0);
|
|
25
|
-
};
|
|
26
|
-
process.once('SIGINT', shutdown);
|
|
27
|
-
process.once('SIGTERM', shutdown);
|
|
28
|
-
}
|
|
29
|
-
// See https://twitter.com/Rich_Harris/status/1355289863130673153
|
|
30
|
-
if (process.argv[1] === fileURLToPath(import.meta.url).replace(/\/index\.js$/, '')) {
|
|
31
|
-
// eslint-disable-next-line @typescript-eslint/no-floating-promises
|
|
32
|
-
main().catch(err => {
|
|
33
|
-
log.error(err);
|
|
34
|
-
process.exit(1);
|
|
35
|
-
});
|
|
36
|
-
}
|
|
37
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRXRELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDaEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUV4QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFakUsY0FBYyxxQkFBcUIsQ0FBQztBQUVwQyxNQUFNLEdBQUcsR0FBRyxpQkFBaUIsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0FBRWhEOztHQUVHO0FBQ0gseUNBQXlDO0FBQ3pDLEtBQUssVUFBVSxJQUFJO0lBQ2pCLE1BQU0sTUFBTSxHQUFHLGdCQUFnQixFQUFFLENBQUM7SUFDbEMsTUFBTSxFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLGlDQUFpQyxFQUFFLGdCQUFnQixFQUFFLEdBQUcsTUFBTSxDQUFDO0lBRTlHLE1BQU0sWUFBWSxHQUFHLGtCQUFrQixDQUFDO1FBQ3RDLEtBQUssRUFBRSxTQUFTO1FBQ2hCLFNBQVMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDO0tBQ3hCLENBQUMsQ0FBQztJQUVILE1BQU0sYUFBYSxHQUFHLElBQUksbUJBQW1CLEVBQUUsQ0FBQztJQUVoRCxNQUFNLFFBQVEsR0FBRyxJQUFJLFFBQVEsQ0FDM0IsWUFBWSxFQUNaLGNBQWMsRUFDZCxhQUFhLEVBQ2IsaUNBQWlDLEVBQ2pDLGdCQUFnQixFQUNoQixhQUFhLENBQ2QsQ0FBQztJQUVGLE1BQU0sUUFBUSxHQUFHLEtBQUssSUFBSSxFQUFFO1FBQzFCLE1BQU0sUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3RCLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEIsQ0FBQyxDQUFDO0lBQ0YsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDakMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDcEMsQ0FBQztBQUVELGlFQUFpRTtBQUNqRSxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsRUFBRTtJQUNsRixtRUFBbUU7SUFDbkUsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1FBQ2pCLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDZixPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xCLENBQUMsQ0FBQyxDQUFDO0NBQ0oifQ==
|