@aztec/archiver 0.7.10 → 0.8.6
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/archiver.d.ts +4 -1
- package/dest/archiver/archiver.d.ts.map +1 -1
- package/dest/archiver/archiver.js +38 -7
- package/dest/archiver/config.d.ts +10 -2
- package/dest/archiver/config.d.ts.map +1 -1
- package/dest/archiver/config.js +15 -7
- package/dest/archiver/data_retrieval.d.ts +8 -8
- package/dest/archiver/data_retrieval.d.ts.map +1 -1
- package/dest/archiver/data_retrieval.js +21 -21
- package/dest/archiver/eth_log_handlers.d.ts +8 -4
- package/dest/archiver/eth_log_handlers.d.ts.map +1 -1
- package/dest/archiver/eth_log_handlers.js +13 -5
- package/dest/index.js +3 -3
- package/package.json +60 -7
- package/src/archiver/archiver.ts +41 -7
- package/src/archiver/config.ts +27 -7
- package/src/archiver/data_retrieval.ts +30 -18
- package/src/archiver/eth_log_handlers.ts +12 -0
- package/src/index.ts +5 -4
- package/.eslintrc.cjs +0 -1
- package/.tsbuildinfo +0 -1
- 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.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/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/src/archiver/archiver.test.ts +0 -223
- package/src/archiver/archiver_store.test.ts +0 -74
- package/src/archiver/l1_to_l2_message_store.test.ts +0 -98
- package/tsconfig.json +0 -26
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"archiver.test.d.ts","sourceRoot":"","sources":["../../src/archiver/archiver.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,184 +0,0 @@
|
|
|
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 { RollupAbi } from '@aztec/l1-artifacts';
|
|
6
|
-
import { ExtendedContractData, L2Block, L2BlockL2Logs, LogType } from '@aztec/types';
|
|
7
|
-
import { mock } from 'jest-mock-extended';
|
|
8
|
-
import { encodeFunctionData, toHex } from 'viem';
|
|
9
|
-
import { Archiver } from './archiver.js';
|
|
10
|
-
import { MemoryArchiverStore } from './archiver_store.js';
|
|
11
|
-
describe('Archiver', () => {
|
|
12
|
-
const rollupAddress = '0x0000000000000000000000000000000000000000';
|
|
13
|
-
const inboxAddress = '0x0000000000000000000000000000000000000000';
|
|
14
|
-
const contractDeploymentEmitterAddress = '0x0000000000000000000000000000000000000001';
|
|
15
|
-
const blockNums = [1, 2, 3];
|
|
16
|
-
let publicClient;
|
|
17
|
-
let archiverStore;
|
|
18
|
-
beforeEach(() => {
|
|
19
|
-
publicClient = mock();
|
|
20
|
-
archiverStore = new MemoryArchiverStore();
|
|
21
|
-
});
|
|
22
|
-
it('can start, sync and stop and handle l1 to l2 messages and logs', async () => {
|
|
23
|
-
const archiver = new Archiver(publicClient, EthAddress.fromString(rollupAddress), EthAddress.fromString(inboxAddress), EthAddress.fromString(contractDeploymentEmitterAddress), 0, archiverStore, 1000);
|
|
24
|
-
let latestBlockNum = await archiver.getBlockNumber();
|
|
25
|
-
expect(latestBlockNum).toEqual(0);
|
|
26
|
-
const blocks = blockNums.map(x => L2Block.random(x, 4, x, x + 1, x * 2, x * 3));
|
|
27
|
-
const rollupTxs = blocks.map(makeRollupTx);
|
|
28
|
-
// `L2Block.random(x)` creates some l1 to l2 messages. We add those,
|
|
29
|
-
// since it is expected by the test that these would be consumed.
|
|
30
|
-
// Archiver removes such messages from pending store.
|
|
31
|
-
// Also create some more messages to cancel and some that will stay pending.
|
|
32
|
-
const messageToCancel1 = Fr.random().toString(true);
|
|
33
|
-
const messageToCancel2 = Fr.random().toString(true);
|
|
34
|
-
const l1ToL2MessagesToCancel = [messageToCancel1, messageToCancel2];
|
|
35
|
-
const messageToStayPending1 = Fr.random().toString(true);
|
|
36
|
-
const messageToStayPending2 = Fr.random().toString(true);
|
|
37
|
-
const l1ToL2MessageAddedEvents = [
|
|
38
|
-
makeL1ToL2MessageAddedEvents(100n, blocks[0].newL1ToL2Messages.map(key => key.toString(true))),
|
|
39
|
-
makeL1ToL2MessageAddedEvents(100n, blocks[1].newL1ToL2Messages.map(key => key.toString(true))),
|
|
40
|
-
makeL1ToL2MessageAddedEvents(1000n, blocks[2].newL1ToL2Messages.map(key => key.toString(true))),
|
|
41
|
-
makeL1ToL2MessageAddedEvents(102n, [
|
|
42
|
-
messageToCancel1,
|
|
43
|
-
messageToCancel2,
|
|
44
|
-
messageToStayPending1,
|
|
45
|
-
messageToStayPending2,
|
|
46
|
-
]),
|
|
47
|
-
];
|
|
48
|
-
publicClient.getBlockNumber.mockResolvedValueOnce(2500n).mockResolvedValueOnce(2501n).mockResolvedValueOnce(2502n);
|
|
49
|
-
// logs should be created in order of how archiver syncs.
|
|
50
|
-
publicClient.getLogs
|
|
51
|
-
.mockResolvedValueOnce(l1ToL2MessageAddedEvents.slice(0, 2).flat())
|
|
52
|
-
.mockResolvedValueOnce([]) // no messages to cancel
|
|
53
|
-
.mockResolvedValueOnce([makeL2BlockProcessedEvent(101n, 1n)])
|
|
54
|
-
.mockResolvedValueOnce([makeContractDeploymentEvent(103n, blocks[0])])
|
|
55
|
-
.mockResolvedValueOnce(l1ToL2MessageAddedEvents.slice(2, 4).flat())
|
|
56
|
-
.mockResolvedValueOnce(makeL1ToL2MessageCancelledEvents(1100n, l1ToL2MessagesToCancel))
|
|
57
|
-
.mockResolvedValueOnce([makeL2BlockProcessedEvent(1101n, 2n), makeL2BlockProcessedEvent(1150n, 3n)])
|
|
58
|
-
.mockResolvedValueOnce([makeContractDeploymentEvent(1102n, blocks[1])])
|
|
59
|
-
.mockResolvedValue([]);
|
|
60
|
-
rollupTxs.forEach(tx => publicClient.getTransaction.mockResolvedValueOnce(tx));
|
|
61
|
-
await archiver.start(false);
|
|
62
|
-
// Wait until block 3 is processed. If this won't happen the test will fail with timeout.
|
|
63
|
-
while ((await archiver.getBlockNumber()) !== 3) {
|
|
64
|
-
await sleep(100);
|
|
65
|
-
}
|
|
66
|
-
latestBlockNum = await archiver.getBlockNumber();
|
|
67
|
-
expect(latestBlockNum).toEqual(3);
|
|
68
|
-
// Check that only 2 messages (l1ToL2MessageAddedEvents[3][2] and l1ToL2MessageAddedEvents[3][3]) are pending.
|
|
69
|
-
// Other two (l1ToL2MessageAddedEvents[3][0..2]) were cancelled. And the previous messages were confirmed.
|
|
70
|
-
const expectedPendingMessageKeys = [
|
|
71
|
-
l1ToL2MessageAddedEvents[3][2].args.entryKey,
|
|
72
|
-
l1ToL2MessageAddedEvents[3][3].args.entryKey,
|
|
73
|
-
];
|
|
74
|
-
const actualPendingMessageKeys = (await archiver.getPendingL1ToL2Messages(10)).map(key => key.toString(true));
|
|
75
|
-
expect(expectedPendingMessageKeys).toEqual(actualPendingMessageKeys);
|
|
76
|
-
// Expect logs to correspond to what is set by L2Block.random(...)
|
|
77
|
-
const encryptedLogs = await archiver.getLogs(1, 100, LogType.ENCRYPTED);
|
|
78
|
-
expect(encryptedLogs.length).toEqual(blockNums.length);
|
|
79
|
-
for (const [index, x] of blockNums.entries()) {
|
|
80
|
-
const expectedTotalNumEncryptedLogs = 4 * x * (x * 2);
|
|
81
|
-
const totalNumEncryptedLogs = L2BlockL2Logs.unrollLogs([encryptedLogs[index]]).length;
|
|
82
|
-
expect(totalNumEncryptedLogs).toEqual(expectedTotalNumEncryptedLogs);
|
|
83
|
-
}
|
|
84
|
-
const unencryptedLogs = await archiver.getLogs(1, 100, LogType.UNENCRYPTED);
|
|
85
|
-
expect(unencryptedLogs.length).toEqual(blockNums.length);
|
|
86
|
-
blockNums.forEach((x, index) => {
|
|
87
|
-
const expectedTotalNumUnencryptedLogs = 4 * (x + 1) * (x * 3);
|
|
88
|
-
const totalNumUnencryptedLogs = L2BlockL2Logs.unrollLogs([unencryptedLogs[index]]).length;
|
|
89
|
-
expect(totalNumUnencryptedLogs).toEqual(expectedTotalNumUnencryptedLogs);
|
|
90
|
-
});
|
|
91
|
-
await archiver.stop();
|
|
92
|
-
}, 10000);
|
|
93
|
-
});
|
|
94
|
-
/**
|
|
95
|
-
* Makes a fake L2BlockProcessed event for testing purposes.
|
|
96
|
-
* @param l1BlockNum - L1 block number.
|
|
97
|
-
* @param l2BlockNum - L2Block number.
|
|
98
|
-
* @returns An L2BlockProcessed event log.
|
|
99
|
-
*/
|
|
100
|
-
function makeL2BlockProcessedEvent(l1BlockNum, l2BlockNum) {
|
|
101
|
-
return {
|
|
102
|
-
blockNumber: l1BlockNum,
|
|
103
|
-
args: { blockNum: l2BlockNum },
|
|
104
|
-
transactionHash: `0x${l2BlockNum}`,
|
|
105
|
-
};
|
|
106
|
-
}
|
|
107
|
-
/**
|
|
108
|
-
* Makes a fake ContractDeployment event for testing purposes.
|
|
109
|
-
* @param l1BlockNum - L1 block number.
|
|
110
|
-
* @param l2Block - The l2Block this event is associated with.
|
|
111
|
-
* @returns An ContractDeployment event.
|
|
112
|
-
*/
|
|
113
|
-
function makeContractDeploymentEvent(l1BlockNum, l2Block) {
|
|
114
|
-
const extendedContractData = ExtendedContractData.random();
|
|
115
|
-
const acir = extendedContractData.bytecode?.toString('hex');
|
|
116
|
-
return {
|
|
117
|
-
blockNumber: l1BlockNum,
|
|
118
|
-
args: {
|
|
119
|
-
l2BlockNum: BigInt(l2Block.number),
|
|
120
|
-
aztecAddress: extendedContractData.contractData.contractAddress.toString(),
|
|
121
|
-
portalAddress: extendedContractData.contractData.portalContractAddress.toString(),
|
|
122
|
-
l2BlockHash: `0x${l2Block.getCalldataHash().toString('hex')}`,
|
|
123
|
-
partialAddress: extendedContractData.partialAddress.toString(true),
|
|
124
|
-
pubKeyX: extendedContractData.publicKey.x.toString(true),
|
|
125
|
-
pubKeyY: extendedContractData.publicKey.y.toString(true),
|
|
126
|
-
acir: '0x' + acir,
|
|
127
|
-
},
|
|
128
|
-
transactionHash: `0x${l2Block.number}`,
|
|
129
|
-
};
|
|
130
|
-
}
|
|
131
|
-
/**
|
|
132
|
-
* Makes fake L1ToL2 MessageAdded events for testing purposes.
|
|
133
|
-
* @param l1BlockNum - L1 block number.
|
|
134
|
-
* @param entryKeys - The entry keys of the messages to add.
|
|
135
|
-
* @returns MessageAdded event logs.
|
|
136
|
-
*/
|
|
137
|
-
function makeL1ToL2MessageAddedEvents(l1BlockNum, entryKeys) {
|
|
138
|
-
return entryKeys.map(entryKey => {
|
|
139
|
-
return {
|
|
140
|
-
blockNumber: l1BlockNum,
|
|
141
|
-
args: {
|
|
142
|
-
sender: EthAddress.random().toString(),
|
|
143
|
-
senderChainId: 1n,
|
|
144
|
-
recipient: AztecAddress.random().toString(),
|
|
145
|
-
recipientVersion: 1n,
|
|
146
|
-
content: Fr.random().toString(true),
|
|
147
|
-
secretHash: Fr.random().toString(true),
|
|
148
|
-
deadline: 100,
|
|
149
|
-
fee: 1n,
|
|
150
|
-
entryKey: entryKey,
|
|
151
|
-
},
|
|
152
|
-
transactionHash: `0x${l1BlockNum}`,
|
|
153
|
-
};
|
|
154
|
-
});
|
|
155
|
-
}
|
|
156
|
-
/**
|
|
157
|
-
* Makes fake L1ToL2 MessageCancelled events for testing purposes.
|
|
158
|
-
* @param l1BlockNum - L1 block number.
|
|
159
|
-
* @param entryKey - The entry keys of the message to cancel.
|
|
160
|
-
* @returns MessageCancelled event logs.
|
|
161
|
-
*/
|
|
162
|
-
function makeL1ToL2MessageCancelledEvents(l1BlockNum, entryKeys) {
|
|
163
|
-
return entryKeys.map(entryKey => {
|
|
164
|
-
return {
|
|
165
|
-
blockNumber: l1BlockNum,
|
|
166
|
-
args: {
|
|
167
|
-
entryKey,
|
|
168
|
-
},
|
|
169
|
-
transactionHash: `0x${l1BlockNum}`,
|
|
170
|
-
};
|
|
171
|
-
});
|
|
172
|
-
}
|
|
173
|
-
/**
|
|
174
|
-
* Makes a fake rollup tx for testing purposes.
|
|
175
|
-
* @param block - The L2Block.
|
|
176
|
-
* @returns A fake tx with calldata that corresponds to calling process in the Rollup contract.
|
|
177
|
-
*/
|
|
178
|
-
function makeRollupTx(l2Block) {
|
|
179
|
-
const proof = `0x`;
|
|
180
|
-
const block = toHex(l2Block.encode());
|
|
181
|
-
const input = encodeFunctionData({ abi: RollupAbi, functionName: 'process', args: [proof, block] });
|
|
182
|
-
return { input };
|
|
183
|
-
}
|
|
184
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJjaGl2ZXIudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcmNoaXZlci9hcmNoaXZlci50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUMvRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDM0QsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNoRCxPQUFPLEVBQTBDLFNBQVMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3hGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE9BQU8sRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUVyRixPQUFPLEVBQWEsSUFBSSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDckQsT0FBTyxFQUF3RCxrQkFBa0IsRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFdkcsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQXFCLG1CQUFtQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFN0UsUUFBUSxDQUFDLFVBQVUsRUFBRSxHQUFHLEVBQUU7SUFDeEIsTUFBTSxhQUFhLEdBQUcsNENBQTRDLENBQUM7SUFDbkUsTUFBTSxZQUFZLEdBQUcsNENBQTRDLENBQUM7SUFDbEUsTUFBTSxnQ0FBZ0MsR0FBRyw0Q0FBNEMsQ0FBQztJQUN0RixNQUFNLFNBQVMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDNUIsSUFBSSxZQUEyRCxDQUFDO0lBQ2hFLElBQUksYUFBZ0MsQ0FBQztJQUVyQyxVQUFVLENBQUMsR0FBRyxFQUFFO1FBQ2QsWUFBWSxHQUFHLElBQUksRUFBc0MsQ0FBQztR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
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"archiver_store.test.d.ts","sourceRoot":"","sources":["../../src/archiver/archiver_store.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
import { INITIAL_L2_BLOCK_NUM, L2Block, L2BlockL2Logs, LogType } from '@aztec/types';
|
|
2
|
-
import { MemoryArchiverStore } from './archiver_store.js';
|
|
3
|
-
describe('Archiver Memory Store', () => {
|
|
4
|
-
let archiverStore;
|
|
5
|
-
beforeEach(() => {
|
|
6
|
-
archiverStore = new MemoryArchiverStore();
|
|
7
|
-
});
|
|
8
|
-
it('can store and retrieve blocks', async () => {
|
|
9
|
-
const blocks = Array(10)
|
|
10
|
-
.fill(0)
|
|
11
|
-
.map((_, index) => L2Block.random(index));
|
|
12
|
-
await archiverStore.addL2Blocks(blocks);
|
|
13
|
-
// Offset indices by INTIAL_L2_BLOCK_NUM to ensure we are correctly aligned
|
|
14
|
-
for (const [from, limit] of [
|
|
15
|
-
[0 + INITIAL_L2_BLOCK_NUM, 10],
|
|
16
|
-
[3 + INITIAL_L2_BLOCK_NUM, 3],
|
|
17
|
-
[1 + INITIAL_L2_BLOCK_NUM, 7],
|
|
18
|
-
[5 + INITIAL_L2_BLOCK_NUM, 8],
|
|
19
|
-
[10 + INITIAL_L2_BLOCK_NUM, 1],
|
|
20
|
-
[11 + INITIAL_L2_BLOCK_NUM, 1],
|
|
21
|
-
]) {
|
|
22
|
-
const expected = blocks.slice(from - INITIAL_L2_BLOCK_NUM, from - INITIAL_L2_BLOCK_NUM + limit);
|
|
23
|
-
const actual = await archiverStore.getL2Blocks(from, limit);
|
|
24
|
-
expect(expected).toEqual(actual);
|
|
25
|
-
}
|
|
26
|
-
});
|
|
27
|
-
test.each([LogType.ENCRYPTED, LogType.UNENCRYPTED])('can store and retrieve logs', async (logType) => {
|
|
28
|
-
const logs = Array(10)
|
|
29
|
-
.fill(0)
|
|
30
|
-
.map(_ => L2BlockL2Logs.random(6, 3, 2));
|
|
31
|
-
await archiverStore.addLogs(logs, logType);
|
|
32
|
-
// Offset indices by INTIAL_L2_BLOCK_NUM to ensure we are correctly aligned
|
|
33
|
-
for (const [from, limit] of [
|
|
34
|
-
[0 + INITIAL_L2_BLOCK_NUM, 10],
|
|
35
|
-
[3 + INITIAL_L2_BLOCK_NUM, 3],
|
|
36
|
-
[1 + INITIAL_L2_BLOCK_NUM, 7],
|
|
37
|
-
[5 + INITIAL_L2_BLOCK_NUM, 8],
|
|
38
|
-
[10 + INITIAL_L2_BLOCK_NUM, 1],
|
|
39
|
-
[11 + INITIAL_L2_BLOCK_NUM, 1],
|
|
40
|
-
]) {
|
|
41
|
-
const expected = logs.slice(from - INITIAL_L2_BLOCK_NUM, from - INITIAL_L2_BLOCK_NUM + limit);
|
|
42
|
-
const actual = await archiverStore.getLogs(from, limit, logType);
|
|
43
|
-
expect(expected).toEqual(actual);
|
|
44
|
-
}
|
|
45
|
-
});
|
|
46
|
-
it('throws if we try and request less than 1 block', async () => {
|
|
47
|
-
const blocks = Array(10)
|
|
48
|
-
.fill(0)
|
|
49
|
-
.map((_, index) => L2Block.random(index));
|
|
50
|
-
await archiverStore.addL2Blocks(blocks);
|
|
51
|
-
await expect(async () => await archiverStore.getL2Blocks(1, 0)).rejects.toThrow(`Invalid block range from: 1, limit: 0`);
|
|
52
|
-
});
|
|
53
|
-
test.each([LogType.ENCRYPTED, LogType.UNENCRYPTED])('throws if we try and request less than 1 log', async (logType) => {
|
|
54
|
-
const logs = Array(10)
|
|
55
|
-
.fill(0)
|
|
56
|
-
.map(_ => L2BlockL2Logs.random(6, 3, 2));
|
|
57
|
-
await archiverStore.addLogs(logs, logType);
|
|
58
|
-
await expect(async () => await archiverStore.getLogs(1, 0, logType)).rejects.toThrow(`Invalid block range from: 1, limit: 0`);
|
|
59
|
-
});
|
|
60
|
-
});
|
|
61
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJjaGl2ZXJfc3RvcmUudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcmNoaXZlci9hcmNoaXZlcl9zdG9yZS50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE9BQU8sRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUVyRixPQUFPLEVBQXFCLG1CQUFtQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFN0UsUUFBUSxDQUFDLHVCQUF1QixFQUFFLEdBQUcsRUFBRTtJQUNyQyxJQUFJLGFBQWdDLENBQUM7SUFFckMsVUFBVSxDQUFDLEdBQUcsRUFBRTtRQUNkLGFBQWEsR0FBRyxJQUFJLG1CQUFtQixFQUFFLENBQUM7SUFDNUMsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsK0JBQStCLEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDN0MsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQzthQUNyQixJQUFJLENBQUMsQ0FBQyxDQUFDO2FBQ1AsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQzVDLE1BQU0sYUFBYSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN4QywyRUFBMkU7UUFDM0UsS0FBSyxNQUFNLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO1lBQzFCLENBQUMsQ0FBQyxHQUFHLG9CQUFvQixFQUFFLEVBQUUsQ0FBQztZQUM5QixDQUFDLENBQUMsR0FBRyxvQkFBb0IsRUFBRSxDQUFDLENBQUM7WUFDN0IsQ0FBQyxDQUFDLEdBQUcsb0JBQW9CLEVBQUUsQ0FBQyxDQUFDO1lBQzdCLENBQUMsQ0FBQyxHQUFHLG9CQUFvQixFQUFFLENBQUMsQ0FBQztZQUM3QixDQUFDLEVBQUUsR0FBRyxvQkFBb0IsRUFBRSxDQUFDLENBQUM7WUFDOUIsQ0FBQyxFQUFFLEdBQUcsb0JBQW9CLEVBQUUsQ0FBQyxDQUFDO1NBQy9CLEVBQUU7WUFDRCxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxvQkFBb0IsRUFBRSxJQUFJLEdBQUcsb0JBQW9CLEdBQUcsS0FBSyxDQUFDLENBQUM7WUFDaEcsTUFBTSxNQUFNLEdBQUcsTUFBTSxhQUFhLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztZQUM1RCxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ2xDO0lBQ0gsQ0FBQyxDQUFDLENBQUM7SUFFSCxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyw2QkFBNkIsRUFBRSxLQUFLLEVBQUUsT0FBZ0IsRUFBRSxFQUFFO1FBQzVHLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUM7YUFDbkIsSUFBSSxDQUFDLENBQUMsQ0FBQzthQUNQLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzNDLE1BQU0sYUFBYSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDM0MsMkVBQTJFO1FBQzNFLEtBQUssTUFBTSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSTtZQUMxQixDQUFDLENBQUMsR0FBRyxvQkFBb0IsRUFBRSxFQUFFLENBQUM7WUFDOUIsQ0FBQyxDQUFDLEdBQUcsb0JBQW9CLEVBQUUsQ0FBQyxDQUFDO1lBQzdCLENBQUMsQ0FBQyxHQUFHLG9CQUFvQixFQUFFLENBQUMsQ0FBQztZQUM3QixDQUFDLENBQUMsR0FBRyxvQkFBb0IsRUFBRSxDQUFDLENBQUM7WUFDN0IsQ0FBQyxFQUFFLEdBQUcsb0JBQW9CLEVBQUUsQ0FBQyxDQUFDO1lBQzlCLENBQUMsRUFBRSxHQUFHLG9CQUFvQixFQUFFLENBQUMsQ0FBQztTQUMvQixFQUFFO1lBQ0QsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsb0JBQW9CLEVBQUUsSUFBSSxHQUFHLG9CQUFvQixHQUFHLEtBQUssQ0FBQyxDQUFDO1lBQzlGLE1BQU0sTUFBTSxHQUFHLE1BQU0sYUFBYSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ2pFLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDbEM7SUFDSCxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyxnREFBZ0QsRUFBRSxLQUFLLElBQUksRUFBRTtRQUM5RCxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDO2FBQ3JCLElBQUksQ0FBQyxDQUFDLENBQUM7YUFDUCxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDNUMsTUFBTSxhQUFhLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3hDLE1BQU0sTUFBTSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsTUFBTSxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQzdFLHVDQUF1QyxDQUN4QyxDQUFDO0lBQ0osQ0FBQyxDQUFDLENBQUM7SUFFSCxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FDakQsOENBQThDLEVBQzlDLEtBQUssRUFBRSxPQUFnQixFQUFFLEVBQUU7UUFDekIsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQzthQUNuQixJQUFJLENBQUMsQ0FBQyxDQUFDO2FBQ1AsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0MsTUFBTSxhQUFhLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztRQUMzQyxNQUFNLE1BQU0sQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLE1BQU0sYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FDbEYsdUNBQXVDLENBQ3hDLENBQUM7SUFDSixDQUFDLENBQ0YsQ0FBQztBQUNKLENBQUMsQ0FBQyxDQUFDIn0=
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"l1_to_l2_message_store.test.d.ts","sourceRoot":"","sources":["../../src/archiver/l1_to_l2_message_store.test.ts"],"names":[],"mappings":""}
|
|
@@ -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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
|
|
@@ -1,223 +0,0 @@
|
|
|
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';
|
|
6
|
-
import { ExtendedContractData, L2Block, L2BlockL2Logs, LogType } from '@aztec/types';
|
|
7
|
-
|
|
8
|
-
import { MockProxy, mock } from 'jest-mock-extended';
|
|
9
|
-
import { Chain, HttpTransport, Log, PublicClient, Transaction, encodeFunctionData, toHex } from 'viem';
|
|
10
|
-
|
|
11
|
-
import { Archiver } from './archiver.js';
|
|
12
|
-
import { ArchiverDataStore, MemoryArchiverStore } from './archiver_store.js';
|
|
13
|
-
|
|
14
|
-
describe('Archiver', () => {
|
|
15
|
-
const rollupAddress = '0x0000000000000000000000000000000000000000';
|
|
16
|
-
const inboxAddress = '0x0000000000000000000000000000000000000000';
|
|
17
|
-
const contractDeploymentEmitterAddress = '0x0000000000000000000000000000000000000001';
|
|
18
|
-
const blockNums = [1, 2, 3];
|
|
19
|
-
let publicClient: MockProxy<PublicClient<HttpTransport, Chain>>;
|
|
20
|
-
let archiverStore: ArchiverDataStore;
|
|
21
|
-
|
|
22
|
-
beforeEach(() => {
|
|
23
|
-
publicClient = mock<PublicClient<HttpTransport, Chain>>();
|
|
24
|
-
archiverStore = new MemoryArchiverStore();
|
|
25
|
-
});
|
|
26
|
-
|
|
27
|
-
it('can start, sync and stop and handle l1 to l2 messages and logs', async () => {
|
|
28
|
-
const archiver = new Archiver(
|
|
29
|
-
publicClient,
|
|
30
|
-
EthAddress.fromString(rollupAddress),
|
|
31
|
-
EthAddress.fromString(inboxAddress),
|
|
32
|
-
EthAddress.fromString(contractDeploymentEmitterAddress),
|
|
33
|
-
0,
|
|
34
|
-
archiverStore,
|
|
35
|
-
1000,
|
|
36
|
-
);
|
|
37
|
-
|
|
38
|
-
let latestBlockNum = await archiver.getBlockNumber();
|
|
39
|
-
expect(latestBlockNum).toEqual(0);
|
|
40
|
-
|
|
41
|
-
const blocks = blockNums.map(x => L2Block.random(x, 4, x, x + 1, x * 2, x * 3));
|
|
42
|
-
const rollupTxs = blocks.map(makeRollupTx);
|
|
43
|
-
// `L2Block.random(x)` creates some l1 to l2 messages. We add those,
|
|
44
|
-
// since it is expected by the test that these would be consumed.
|
|
45
|
-
// Archiver removes such messages from pending store.
|
|
46
|
-
// Also create some more messages to cancel and some that will stay pending.
|
|
47
|
-
|
|
48
|
-
const messageToCancel1 = Fr.random().toString(true);
|
|
49
|
-
const messageToCancel2 = Fr.random().toString(true);
|
|
50
|
-
const l1ToL2MessagesToCancel = [messageToCancel1, messageToCancel2];
|
|
51
|
-
const messageToStayPending1 = Fr.random().toString(true);
|
|
52
|
-
const messageToStayPending2 = Fr.random().toString(true);
|
|
53
|
-
|
|
54
|
-
const l1ToL2MessageAddedEvents = [
|
|
55
|
-
makeL1ToL2MessageAddedEvents(
|
|
56
|
-
100n,
|
|
57
|
-
blocks[0].newL1ToL2Messages.map(key => key.toString(true)),
|
|
58
|
-
),
|
|
59
|
-
makeL1ToL2MessageAddedEvents(
|
|
60
|
-
100n,
|
|
61
|
-
blocks[1].newL1ToL2Messages.map(key => key.toString(true)),
|
|
62
|
-
),
|
|
63
|
-
makeL1ToL2MessageAddedEvents(
|
|
64
|
-
1000n,
|
|
65
|
-
blocks[2].newL1ToL2Messages.map(key => key.toString(true)),
|
|
66
|
-
),
|
|
67
|
-
makeL1ToL2MessageAddedEvents(102n, [
|
|
68
|
-
messageToCancel1,
|
|
69
|
-
messageToCancel2,
|
|
70
|
-
messageToStayPending1,
|
|
71
|
-
messageToStayPending2,
|
|
72
|
-
]),
|
|
73
|
-
];
|
|
74
|
-
publicClient.getBlockNumber.mockResolvedValueOnce(2500n).mockResolvedValueOnce(2501n).mockResolvedValueOnce(2502n);
|
|
75
|
-
// logs should be created in order of how archiver syncs.
|
|
76
|
-
publicClient.getLogs
|
|
77
|
-
.mockResolvedValueOnce(l1ToL2MessageAddedEvents.slice(0, 2).flat())
|
|
78
|
-
.mockResolvedValueOnce([]) // no messages to cancel
|
|
79
|
-
.mockResolvedValueOnce([makeL2BlockProcessedEvent(101n, 1n)])
|
|
80
|
-
.mockResolvedValueOnce([makeContractDeploymentEvent(103n, blocks[0])])
|
|
81
|
-
.mockResolvedValueOnce(l1ToL2MessageAddedEvents.slice(2, 4).flat())
|
|
82
|
-
.mockResolvedValueOnce(makeL1ToL2MessageCancelledEvents(1100n, l1ToL2MessagesToCancel))
|
|
83
|
-
.mockResolvedValueOnce([makeL2BlockProcessedEvent(1101n, 2n), makeL2BlockProcessedEvent(1150n, 3n)])
|
|
84
|
-
.mockResolvedValueOnce([makeContractDeploymentEvent(1102n, blocks[1])])
|
|
85
|
-
.mockResolvedValue([]);
|
|
86
|
-
rollupTxs.forEach(tx => publicClient.getTransaction.mockResolvedValueOnce(tx));
|
|
87
|
-
|
|
88
|
-
await archiver.start(false);
|
|
89
|
-
|
|
90
|
-
// Wait until block 3 is processed. If this won't happen the test will fail with timeout.
|
|
91
|
-
while ((await archiver.getBlockNumber()) !== 3) {
|
|
92
|
-
await sleep(100);
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
latestBlockNum = await archiver.getBlockNumber();
|
|
96
|
-
expect(latestBlockNum).toEqual(3);
|
|
97
|
-
|
|
98
|
-
// Check that only 2 messages (l1ToL2MessageAddedEvents[3][2] and l1ToL2MessageAddedEvents[3][3]) are pending.
|
|
99
|
-
// Other two (l1ToL2MessageAddedEvents[3][0..2]) were cancelled. And the previous messages were confirmed.
|
|
100
|
-
const expectedPendingMessageKeys = [
|
|
101
|
-
l1ToL2MessageAddedEvents[3][2].args.entryKey,
|
|
102
|
-
l1ToL2MessageAddedEvents[3][3].args.entryKey,
|
|
103
|
-
];
|
|
104
|
-
const actualPendingMessageKeys = (await archiver.getPendingL1ToL2Messages(10)).map(key => key.toString(true));
|
|
105
|
-
expect(expectedPendingMessageKeys).toEqual(actualPendingMessageKeys);
|
|
106
|
-
|
|
107
|
-
// Expect logs to correspond to what is set by L2Block.random(...)
|
|
108
|
-
const encryptedLogs = await archiver.getLogs(1, 100, LogType.ENCRYPTED);
|
|
109
|
-
expect(encryptedLogs.length).toEqual(blockNums.length);
|
|
110
|
-
|
|
111
|
-
for (const [index, x] of blockNums.entries()) {
|
|
112
|
-
const expectedTotalNumEncryptedLogs = 4 * x * (x * 2);
|
|
113
|
-
const totalNumEncryptedLogs = L2BlockL2Logs.unrollLogs([encryptedLogs[index]]).length;
|
|
114
|
-
expect(totalNumEncryptedLogs).toEqual(expectedTotalNumEncryptedLogs);
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
const unencryptedLogs = await archiver.getLogs(1, 100, LogType.UNENCRYPTED);
|
|
118
|
-
expect(unencryptedLogs.length).toEqual(blockNums.length);
|
|
119
|
-
|
|
120
|
-
blockNums.forEach((x, index) => {
|
|
121
|
-
const expectedTotalNumUnencryptedLogs = 4 * (x + 1) * (x * 3);
|
|
122
|
-
const totalNumUnencryptedLogs = L2BlockL2Logs.unrollLogs([unencryptedLogs[index]]).length;
|
|
123
|
-
expect(totalNumUnencryptedLogs).toEqual(expectedTotalNumUnencryptedLogs);
|
|
124
|
-
});
|
|
125
|
-
|
|
126
|
-
await archiver.stop();
|
|
127
|
-
}, 10_000);
|
|
128
|
-
});
|
|
129
|
-
|
|
130
|
-
/**
|
|
131
|
-
* Makes a fake L2BlockProcessed event for testing purposes.
|
|
132
|
-
* @param l1BlockNum - L1 block number.
|
|
133
|
-
* @param l2BlockNum - L2Block number.
|
|
134
|
-
* @returns An L2BlockProcessed event log.
|
|
135
|
-
*/
|
|
136
|
-
function makeL2BlockProcessedEvent(l1BlockNum: bigint, l2BlockNum: bigint) {
|
|
137
|
-
return {
|
|
138
|
-
blockNumber: l1BlockNum,
|
|
139
|
-
args: { blockNum: l2BlockNum },
|
|
140
|
-
transactionHash: `0x${l2BlockNum}`,
|
|
141
|
-
} as Log<bigint, number, undefined, true, typeof RollupAbi, 'L2BlockProcessed'>;
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
/**
|
|
145
|
-
* Makes a fake ContractDeployment event for testing purposes.
|
|
146
|
-
* @param l1BlockNum - L1 block number.
|
|
147
|
-
* @param l2Block - The l2Block this event is associated with.
|
|
148
|
-
* @returns An ContractDeployment event.
|
|
149
|
-
*/
|
|
150
|
-
function makeContractDeploymentEvent(l1BlockNum: bigint, l2Block: L2Block) {
|
|
151
|
-
const extendedContractData = ExtendedContractData.random();
|
|
152
|
-
const acir = extendedContractData.bytecode?.toString('hex');
|
|
153
|
-
return {
|
|
154
|
-
blockNumber: l1BlockNum,
|
|
155
|
-
args: {
|
|
156
|
-
l2BlockNum: BigInt(l2Block.number),
|
|
157
|
-
aztecAddress: extendedContractData.contractData.contractAddress.toString(),
|
|
158
|
-
portalAddress: extendedContractData.contractData.portalContractAddress.toString(),
|
|
159
|
-
l2BlockHash: `0x${l2Block.getCalldataHash().toString('hex')}`,
|
|
160
|
-
partialAddress: extendedContractData.partialAddress.toString(true),
|
|
161
|
-
pubKeyX: extendedContractData.publicKey.x.toString(true),
|
|
162
|
-
pubKeyY: extendedContractData.publicKey.y.toString(true),
|
|
163
|
-
acir: '0x' + acir,
|
|
164
|
-
},
|
|
165
|
-
transactionHash: `0x${l2Block.number}`,
|
|
166
|
-
} as Log<bigint, number, undefined, true, typeof ContractDeploymentEmitterAbi, 'ContractDeployment'>;
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
/**
|
|
170
|
-
* Makes fake L1ToL2 MessageAdded events for testing purposes.
|
|
171
|
-
* @param l1BlockNum - L1 block number.
|
|
172
|
-
* @param entryKeys - The entry keys of the messages to add.
|
|
173
|
-
* @returns MessageAdded event logs.
|
|
174
|
-
*/
|
|
175
|
-
function makeL1ToL2MessageAddedEvents(l1BlockNum: bigint, entryKeys: string[]) {
|
|
176
|
-
return entryKeys.map(entryKey => {
|
|
177
|
-
return {
|
|
178
|
-
blockNumber: l1BlockNum,
|
|
179
|
-
args: {
|
|
180
|
-
sender: EthAddress.random().toString(),
|
|
181
|
-
senderChainId: 1n,
|
|
182
|
-
recipient: AztecAddress.random().toString(),
|
|
183
|
-
recipientVersion: 1n,
|
|
184
|
-
content: Fr.random().toString(true),
|
|
185
|
-
secretHash: Fr.random().toString(true),
|
|
186
|
-
deadline: 100,
|
|
187
|
-
fee: 1n,
|
|
188
|
-
entryKey: entryKey,
|
|
189
|
-
},
|
|
190
|
-
transactionHash: `0x${l1BlockNum}`,
|
|
191
|
-
} as Log<bigint, number, undefined, true, typeof InboxAbi, 'MessageAdded'>;
|
|
192
|
-
});
|
|
193
|
-
}
|
|
194
|
-
|
|
195
|
-
/**
|
|
196
|
-
* Makes fake L1ToL2 MessageCancelled events for testing purposes.
|
|
197
|
-
* @param l1BlockNum - L1 block number.
|
|
198
|
-
* @param entryKey - The entry keys of the message to cancel.
|
|
199
|
-
* @returns MessageCancelled event logs.
|
|
200
|
-
*/
|
|
201
|
-
function makeL1ToL2MessageCancelledEvents(l1BlockNum: bigint, entryKeys: string[]) {
|
|
202
|
-
return entryKeys.map(entryKey => {
|
|
203
|
-
return {
|
|
204
|
-
blockNumber: l1BlockNum,
|
|
205
|
-
args: {
|
|
206
|
-
entryKey,
|
|
207
|
-
},
|
|
208
|
-
transactionHash: `0x${l1BlockNum}`,
|
|
209
|
-
} as Log<bigint, number, undefined, true, typeof InboxAbi, 'L1ToL2MessageCancelled'>;
|
|
210
|
-
});
|
|
211
|
-
}
|
|
212
|
-
|
|
213
|
-
/**
|
|
214
|
-
* Makes a fake rollup tx for testing purposes.
|
|
215
|
-
* @param block - The L2Block.
|
|
216
|
-
* @returns A fake tx with calldata that corresponds to calling process in the Rollup contract.
|
|
217
|
-
*/
|
|
218
|
-
function makeRollupTx(l2Block: L2Block) {
|
|
219
|
-
const proof = `0x`;
|
|
220
|
-
const block = toHex(l2Block.encode());
|
|
221
|
-
const input = encodeFunctionData({ abi: RollupAbi, functionName: 'process', args: [proof, block] });
|
|
222
|
-
return { input } as Transaction<bigint, number>;
|
|
223
|
-
}
|