@aztec/archiver 3.0.0-devnet.5 → 3.0.0-devnet.6-patch.1
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 +67 -60
- package/dest/archiver/archiver.d.ts.map +1 -1
- package/dest/archiver/archiver.js +391 -262
- package/dest/archiver/archiver_store.d.ts +21 -27
- package/dest/archiver/archiver_store.d.ts.map +1 -1
- package/dest/archiver/archiver_store_test_suite.d.ts +1 -1
- package/dest/archiver/archiver_store_test_suite.d.ts.map +1 -1
- package/dest/archiver/archiver_store_test_suite.js +125 -140
- package/dest/archiver/config.d.ts +3 -2
- package/dest/archiver/config.d.ts.map +1 -1
- package/dest/archiver/config.js +13 -1
- package/dest/archiver/errors.d.ts +1 -1
- package/dest/archiver/errors.d.ts.map +1 -1
- package/dest/archiver/index.d.ts +1 -1
- package/dest/archiver/instrumentation.d.ts +5 -3
- package/dest/archiver/instrumentation.d.ts.map +1 -1
- package/dest/archiver/instrumentation.js +11 -0
- package/dest/archiver/kv_archiver_store/block_store.d.ts +10 -9
- package/dest/archiver/kv_archiver_store/block_store.d.ts.map +1 -1
- package/dest/archiver/kv_archiver_store/block_store.js +9 -8
- package/dest/archiver/kv_archiver_store/contract_class_store.d.ts +2 -2
- package/dest/archiver/kv_archiver_store/contract_class_store.d.ts.map +1 -1
- package/dest/archiver/kv_archiver_store/contract_class_store.js +1 -1
- package/dest/archiver/kv_archiver_store/contract_instance_store.d.ts +2 -2
- package/dest/archiver/kv_archiver_store/contract_instance_store.d.ts.map +1 -1
- package/dest/archiver/kv_archiver_store/kv_archiver_store.d.ts +23 -29
- package/dest/archiver/kv_archiver_store/kv_archiver_store.d.ts.map +1 -1
- package/dest/archiver/kv_archiver_store/kv_archiver_store.js +7 -15
- package/dest/archiver/kv_archiver_store/log_store.d.ts +3 -10
- package/dest/archiver/kv_archiver_store/log_store.d.ts.map +1 -1
- package/dest/archiver/kv_archiver_store/log_store.js +4 -26
- package/dest/archiver/kv_archiver_store/message_store.d.ts +6 -5
- package/dest/archiver/kv_archiver_store/message_store.d.ts.map +1 -1
- package/dest/archiver/kv_archiver_store/message_store.js +15 -14
- package/dest/archiver/l1/bin/retrieve-calldata.d.ts +3 -0
- package/dest/archiver/l1/bin/retrieve-calldata.d.ts.map +1 -0
- package/dest/archiver/l1/bin/retrieve-calldata.js +147 -0
- package/dest/archiver/l1/calldata_retriever.d.ts +98 -0
- package/dest/archiver/l1/calldata_retriever.d.ts.map +1 -0
- package/dest/archiver/l1/calldata_retriever.js +403 -0
- package/dest/archiver/l1/data_retrieval.d.ts +87 -0
- package/dest/archiver/l1/data_retrieval.d.ts.map +1 -0
- package/dest/archiver/l1/data_retrieval.js +318 -0
- package/dest/archiver/l1/debug_tx.d.ts +19 -0
- package/dest/archiver/l1/debug_tx.d.ts.map +1 -0
- package/dest/archiver/l1/debug_tx.js +73 -0
- package/dest/archiver/l1/spire_proposer.d.ts +70 -0
- package/dest/archiver/l1/spire_proposer.d.ts.map +1 -0
- package/dest/archiver/l1/spire_proposer.js +157 -0
- package/dest/archiver/l1/trace_tx.d.ts +97 -0
- package/dest/archiver/l1/trace_tx.d.ts.map +1 -0
- package/dest/archiver/l1/trace_tx.js +91 -0
- package/dest/archiver/l1/types.d.ts +12 -0
- package/dest/archiver/l1/types.d.ts.map +1 -0
- package/dest/archiver/l1/types.js +3 -0
- package/dest/archiver/l1/validate_trace.d.ts +29 -0
- package/dest/archiver/l1/validate_trace.d.ts.map +1 -0
- package/dest/archiver/l1/validate_trace.js +150 -0
- package/dest/archiver/structs/data_retrieval.d.ts +1 -1
- package/dest/archiver/structs/inbox_message.d.ts +4 -4
- package/dest/archiver/structs/inbox_message.d.ts.map +1 -1
- package/dest/archiver/structs/inbox_message.js +6 -5
- package/dest/archiver/structs/published.d.ts +3 -2
- package/dest/archiver/structs/published.d.ts.map +1 -1
- package/dest/archiver/validation.d.ts +10 -4
- package/dest/archiver/validation.d.ts.map +1 -1
- package/dest/archiver/validation.js +29 -21
- package/dest/factory.d.ts +3 -5
- package/dest/factory.d.ts.map +1 -1
- package/dest/factory.js +3 -2
- package/dest/index.d.ts +2 -2
- package/dest/index.d.ts.map +1 -1
- package/dest/index.js +1 -1
- package/dest/rpc/index.d.ts +2 -2
- package/dest/test/index.d.ts +1 -1
- package/dest/test/mock_archiver.d.ts +16 -8
- package/dest/test/mock_archiver.d.ts.map +1 -1
- package/dest/test/mock_archiver.js +19 -14
- package/dest/test/mock_l1_to_l2_message_source.d.ts +7 -6
- package/dest/test/mock_l1_to_l2_message_source.d.ts.map +1 -1
- package/dest/test/mock_l1_to_l2_message_source.js +10 -9
- package/dest/test/mock_l2_block_source.d.ts +15 -10
- package/dest/test/mock_l2_block_source.d.ts.map +1 -1
- package/dest/test/mock_l2_block_source.js +22 -9
- package/dest/test/mock_structs.d.ts +3 -2
- package/dest/test/mock_structs.d.ts.map +1 -1
- package/dest/test/mock_structs.js +9 -8
- package/package.json +18 -17
- package/src/archiver/archiver.ts +531 -345
- package/src/archiver/archiver_store.ts +24 -27
- package/src/archiver/archiver_store_test_suite.ts +151 -128
- package/src/archiver/config.ts +13 -7
- package/src/archiver/instrumentation.ts +16 -2
- package/src/archiver/kv_archiver_store/block_store.ts +18 -17
- package/src/archiver/kv_archiver_store/contract_class_store.ts +1 -1
- package/src/archiver/kv_archiver_store/contract_instance_store.ts +1 -1
- package/src/archiver/kv_archiver_store/kv_archiver_store.ts +23 -32
- package/src/archiver/kv_archiver_store/log_store.ts +4 -30
- package/src/archiver/kv_archiver_store/message_store.ts +21 -18
- package/src/archiver/l1/README.md +98 -0
- package/src/archiver/l1/bin/retrieve-calldata.ts +182 -0
- package/src/archiver/l1/calldata_retriever.ts +531 -0
- package/src/archiver/{data_retrieval.ts → l1/data_retrieval.ts} +196 -250
- package/src/archiver/l1/debug_tx.ts +99 -0
- package/src/archiver/l1/spire_proposer.ts +160 -0
- package/src/archiver/l1/trace_tx.ts +128 -0
- package/src/archiver/l1/types.ts +13 -0
- package/src/archiver/l1/validate_trace.ts +211 -0
- package/src/archiver/structs/inbox_message.ts +8 -8
- package/src/archiver/structs/published.ts +2 -1
- package/src/archiver/validation.ts +52 -27
- package/src/factory.ts +4 -5
- package/src/index.ts +1 -1
- package/src/test/fixtures/debug_traceTransaction-multicall3.json +88 -0
- package/src/test/fixtures/debug_traceTransaction-multiplePropose.json +153 -0
- package/src/test/fixtures/debug_traceTransaction-proxied.json +122 -0
- package/src/test/fixtures/trace_transaction-multicall3.json +65 -0
- package/src/test/fixtures/trace_transaction-multiplePropose.json +319 -0
- package/src/test/fixtures/trace_transaction-proxied.json +128 -0
- package/src/test/fixtures/trace_transaction-randomRevert.json +216 -0
- package/src/test/mock_archiver.ts +22 -16
- package/src/test/mock_l1_to_l2_message_source.ts +10 -9
- package/src/test/mock_l2_block_source.ts +32 -15
- package/src/test/mock_structs.ts +10 -9
- package/dest/archiver/data_retrieval.d.ts +0 -79
- package/dest/archiver/data_retrieval.d.ts.map +0 -1
- package/dest/archiver/data_retrieval.js +0 -362
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import { INITIAL_L2_BLOCK_NUM, NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP, PRIVATE_LOG_SIZE_IN_FIELDS } from '@aztec/constants';
|
|
2
2
|
import { makeTuple } from '@aztec/foundation/array';
|
|
3
|
+
import { BlockNumber, CheckpointNumber, EpochNumber } from '@aztec/foundation/branded-types';
|
|
3
4
|
import { Buffer16, Buffer32 } from '@aztec/foundation/buffer';
|
|
4
5
|
import { times, timesParallel } from '@aztec/foundation/collection';
|
|
5
|
-
import { randomInt } from '@aztec/foundation/crypto';
|
|
6
|
-
import { Fr } from '@aztec/foundation/
|
|
6
|
+
import { randomInt } from '@aztec/foundation/crypto/random';
|
|
7
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
7
8
|
import { toArray } from '@aztec/foundation/iterable';
|
|
8
9
|
import { sleep } from '@aztec/foundation/sleep';
|
|
9
10
|
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
10
|
-
import { CommitteeAttestation, EthAddress, L2Block, L2BlockHash, PublishedL2Block, randomBlockInfo,
|
|
11
|
+
import { CommitteeAttestation, EthAddress, L2Block, L2BlockHash, PublishedL2Block, randomBlockInfo, wrapDataInBlock } from '@aztec/stdlib/block';
|
|
11
12
|
import { SerializableContractInstance, computePublicBytecodeCommitment } from '@aztec/stdlib/contract';
|
|
12
13
|
import { LogId, PrivateLog, PublicLog } from '@aztec/stdlib/logs';
|
|
13
14
|
import { InboxLeaf } from '@aztec/stdlib/messaging';
|
|
@@ -73,7 +74,7 @@ import { MessageStoreError } from './kv_archiver_store/message_store.js';
|
|
|
73
74
|
};
|
|
74
75
|
beforeEach(async ()=>{
|
|
75
76
|
store = await getStore();
|
|
76
|
-
blocks = await timesParallel(10, async (i)=>makePublished(await L2Block.random(i + 1), i + 10));
|
|
77
|
+
blocks = await timesParallel(10, async (i)=>makePublished(await L2Block.random(BlockNumber(i + 1)), i + 10));
|
|
77
78
|
});
|
|
78
79
|
describe('addBlocks', ()=>{
|
|
79
80
|
it('returns success when adding blocks', async ()=>{
|
|
@@ -84,19 +85,19 @@ import { MessageStoreError } from './kv_archiver_store/message_store.js';
|
|
|
84
85
|
await expect(store.addBlocks(blocks)).resolves.toBe(true);
|
|
85
86
|
});
|
|
86
87
|
it('throws an error if the previous block does not exist in the store', async ()=>{
|
|
87
|
-
const block = makePublished(await L2Block.random(2), 2);
|
|
88
|
+
const block = makePublished(await L2Block.random(BlockNumber(2)), 2);
|
|
88
89
|
await expect(store.addBlocks([
|
|
89
90
|
block
|
|
90
91
|
])).rejects.toThrow(InitialBlockNumberNotSequentialError);
|
|
91
|
-
await expect(store.getPublishedBlocks(1, 10)).resolves.toEqual([]);
|
|
92
|
+
await expect(store.getPublishedBlocks(BlockNumber(1), 10)).resolves.toEqual([]);
|
|
92
93
|
});
|
|
93
94
|
it('throws an error if there is a gap in the blocks being added', async ()=>{
|
|
94
95
|
const blocks = [
|
|
95
|
-
makePublished(await L2Block.random(1), 1),
|
|
96
|
-
makePublished(await L2Block.random(3), 3)
|
|
96
|
+
makePublished(await L2Block.random(BlockNumber(1)), 1),
|
|
97
|
+
makePublished(await L2Block.random(BlockNumber(3)), 3)
|
|
97
98
|
];
|
|
98
99
|
await expect(store.addBlocks(blocks)).rejects.toThrow(BlockNumberNotSequentialError);
|
|
99
|
-
await expect(store.getPublishedBlocks(1, 10)).resolves.toEqual([]);
|
|
100
|
+
await expect(store.getPublishedBlocks(BlockNumber(1), 10)).resolves.toEqual([]);
|
|
100
101
|
});
|
|
101
102
|
});
|
|
102
103
|
describe('unwindBlocks', ()=>{
|
|
@@ -111,12 +112,12 @@ import { MessageStoreError } from './kv_archiver_store/message_store.js';
|
|
|
111
112
|
expect(await store.getPublishedBlocks(blockNumber, 1)).toEqual([]);
|
|
112
113
|
});
|
|
113
114
|
it('can unwind multiple empty blocks', async ()=>{
|
|
114
|
-
const emptyBlocks = await timesParallel(10, async (i)=>makePublished(await L2Block.random(i + 1, 0), i + 10));
|
|
115
|
+
const emptyBlocks = await timesParallel(10, async (i)=>makePublished(await L2Block.random(BlockNumber(i + 1), 0), i + 10));
|
|
115
116
|
await store.addBlocks(emptyBlocks);
|
|
116
117
|
expect(await store.getSynchedL2BlockNumber()).toBe(10);
|
|
117
|
-
await store.unwindBlocks(10, 3);
|
|
118
|
+
await store.unwindBlocks(BlockNumber(10), 3);
|
|
118
119
|
expect(await store.getSynchedL2BlockNumber()).toBe(7);
|
|
119
|
-
expect((await store.getPublishedBlocks(1, 10)).map((b)=>b.block.number)).toEqual([
|
|
120
|
+
expect((await store.getPublishedBlocks(BlockNumber(1), 10)).map((b)=>b.block.number)).toEqual([
|
|
120
121
|
1,
|
|
121
122
|
2,
|
|
122
123
|
3,
|
|
@@ -128,7 +129,7 @@ import { MessageStoreError } from './kv_archiver_store/message_store.js';
|
|
|
128
129
|
});
|
|
129
130
|
it('refuses to unwind blocks if the tip is not the last block', async ()=>{
|
|
130
131
|
await store.addBlocks(blocks);
|
|
131
|
-
await expect(store.unwindBlocks(5, 1)).rejects.toThrow(/can only unwind blocks from the tip/i);
|
|
132
|
+
await expect(store.unwindBlocks(BlockNumber(5), 1)).rejects.toThrow(/can only unwind blocks from the tip/i);
|
|
132
133
|
});
|
|
133
134
|
it('unwound blocks and headers cannot be retrieved by hash or archive', async ()=>{
|
|
134
135
|
await store.addBlocks(blocks);
|
|
@@ -154,33 +155,33 @@ import { MessageStoreError } from './kv_archiver_store/message_store.js';
|
|
|
154
155
|
await store.addBlocks(blocks);
|
|
155
156
|
});
|
|
156
157
|
it.each(blockTests)('retrieves previously stored blocks', async (start, limit, getExpectedBlocks)=>{
|
|
157
|
-
expectBlocksEqual(await store.getPublishedBlocks(start, limit), getExpectedBlocks());
|
|
158
|
+
expectBlocksEqual(await store.getPublishedBlocks(BlockNumber(start), limit), getExpectedBlocks());
|
|
158
159
|
});
|
|
159
160
|
it('returns an empty array if no blocks are found', async ()=>{
|
|
160
|
-
await expect(store.getPublishedBlocks(12, 1)).resolves.toEqual([]);
|
|
161
|
+
await expect(store.getPublishedBlocks(BlockNumber(12), 1)).resolves.toEqual([]);
|
|
161
162
|
});
|
|
162
163
|
it('throws an error if limit is invalid', async ()=>{
|
|
163
|
-
await expect(store.getPublishedBlocks(1, 0)).rejects.toThrow('Invalid limit: 0');
|
|
164
|
+
await expect(store.getPublishedBlocks(BlockNumber(1), 0)).rejects.toThrow('Invalid limit: 0');
|
|
164
165
|
});
|
|
165
166
|
it('throws an error if `from` it is out of range', async ()=>{
|
|
166
167
|
await expect(store.getPublishedBlocks(INITIAL_L2_BLOCK_NUM - 100, 1)).rejects.toThrow('Invalid start: -99');
|
|
167
168
|
});
|
|
168
169
|
it('throws an error if unexpected initial block number is found', async ()=>{
|
|
169
170
|
await store.addBlocks([
|
|
170
|
-
makePublished(await L2Block.random(21), 31)
|
|
171
|
+
makePublished(await L2Block.random(BlockNumber(21)), 31)
|
|
171
172
|
], {
|
|
172
173
|
force: true
|
|
173
174
|
});
|
|
174
|
-
await expect(store.getPublishedBlocks(20, 1)).rejects.toThrow(`mismatch`);
|
|
175
|
+
await expect(store.getPublishedBlocks(BlockNumber(20), 1)).rejects.toThrow(`mismatch`);
|
|
175
176
|
});
|
|
176
177
|
it('throws an error if a gap is found', async ()=>{
|
|
177
178
|
await store.addBlocks([
|
|
178
|
-
makePublished(await L2Block.random(20), 30),
|
|
179
|
-
makePublished(await L2Block.random(22), 32)
|
|
179
|
+
makePublished(await L2Block.random(BlockNumber(20)), 30),
|
|
180
|
+
makePublished(await L2Block.random(BlockNumber(22)), 32)
|
|
180
181
|
], {
|
|
181
182
|
force: true
|
|
182
183
|
});
|
|
183
|
-
await expect(store.getPublishedBlocks(20, 2)).rejects.toThrow(`mismatch`);
|
|
184
|
+
await expect(store.getPublishedBlocks(BlockNumber(20), 2)).rejects.toThrow(`mismatch`);
|
|
184
185
|
});
|
|
185
186
|
});
|
|
186
187
|
describe('getPublishedBlockByHash', ()=>{
|
|
@@ -330,41 +331,24 @@ import { MessageStoreError } from './kv_archiver_store/message_store.js';
|
|
|
330
331
|
])).resolves.toEqual(true);
|
|
331
332
|
});
|
|
332
333
|
});
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
expect((await store.getPublicLogs({
|
|
352
|
-
fromBlock: 1
|
|
353
|
-
})).logs.length).toEqual(0);
|
|
354
|
-
});
|
|
355
|
-
});
|
|
356
|
-
describe('getPrivateLogs', ()=>{
|
|
357
|
-
it('gets added private logs', async ()=>{
|
|
358
|
-
const block = blocks[0].block;
|
|
359
|
-
await store.addBlocks([
|
|
360
|
-
blocks[0]
|
|
361
|
-
]);
|
|
362
|
-
await store.addLogs([
|
|
363
|
-
block
|
|
364
|
-
]);
|
|
365
|
-
const privateLogs = await store.getPrivateLogs(1, 1);
|
|
366
|
-
expect(privateLogs).toEqual(block.body.txEffects.map((txEffect)=>txEffect.privateLogs).flat());
|
|
367
|
-
});
|
|
334
|
+
it('deleteLogs', async ()=>{
|
|
335
|
+
const block = blocks[0].block;
|
|
336
|
+
await store.addBlocks([
|
|
337
|
+
blocks[0]
|
|
338
|
+
]);
|
|
339
|
+
await expect(store.addLogs([
|
|
340
|
+
block
|
|
341
|
+
])).resolves.toEqual(true);
|
|
342
|
+
expect((await store.getPublicLogs({
|
|
343
|
+
fromBlock: BlockNumber(1)
|
|
344
|
+
})).logs.length).toEqual(block.body.txEffects.map((txEffect)=>txEffect.publicLogs).flat().length);
|
|
345
|
+
// This one is a pain for memory as we would never want to just delete memory in the middle.
|
|
346
|
+
await store.deleteLogs([
|
|
347
|
+
block
|
|
348
|
+
]);
|
|
349
|
+
expect((await store.getPublicLogs({
|
|
350
|
+
fromBlock: BlockNumber(1)
|
|
351
|
+
})).logs.length).toEqual(0);
|
|
368
352
|
});
|
|
369
353
|
describe('getTxEffect', ()=>{
|
|
370
354
|
beforeEach(async ()=>{
|
|
@@ -412,13 +396,13 @@ import { MessageStoreError } from './kv_archiver_store/message_store.js';
|
|
|
412
396
|
await expect(store.getTxEffect(TxHash.random())).resolves.toBeUndefined();
|
|
413
397
|
});
|
|
414
398
|
it.each([
|
|
415
|
-
()=>
|
|
416
|
-
()=>
|
|
417
|
-
()=>
|
|
418
|
-
()=>
|
|
419
|
-
()=>
|
|
399
|
+
()=>wrapDataInBlock(blocks[0].block.body.txEffects[0], blocks[0].block),
|
|
400
|
+
()=>wrapDataInBlock(blocks[9].block.body.txEffects[3], blocks[9].block),
|
|
401
|
+
()=>wrapDataInBlock(blocks[3].block.body.txEffects[1], blocks[3].block),
|
|
402
|
+
()=>wrapDataInBlock(blocks[5].block.body.txEffects[2], blocks[5].block),
|
|
403
|
+
()=>wrapDataInBlock(blocks[1].block.body.txEffects[0], blocks[1].block)
|
|
420
404
|
])('tries to retrieves a previously stored transaction after deleted', async (getExpectedTx)=>{
|
|
421
|
-
await store.unwindBlocks(blocks.length, blocks.length);
|
|
405
|
+
await store.unwindBlocks(BlockNumber(blocks.length), blocks.length);
|
|
422
406
|
const expectedTx = await getExpectedTx();
|
|
423
407
|
const actualTx = await store.getTxEffect(expectedTx.data.txHash);
|
|
424
408
|
expect(actualTx).toEqual(undefined);
|
|
@@ -427,7 +411,7 @@ import { MessageStoreError } from './kv_archiver_store/message_store.js';
|
|
|
427
411
|
await expect(store.getTxEffect(TxHash.random())).resolves.toBeUndefined();
|
|
428
412
|
});
|
|
429
413
|
it('does not fail if the block is unwound while requesting a tx', async ()=>{
|
|
430
|
-
const expectedTx = await
|
|
414
|
+
const expectedTx = await wrapDataInBlock(blocks[1].block.body.txEffects[0], blocks[1].block);
|
|
431
415
|
let done = false;
|
|
432
416
|
void (async ()=>{
|
|
433
417
|
while(!done){
|
|
@@ -435,13 +419,13 @@ import { MessageStoreError } from './kv_archiver_store/message_store.js';
|
|
|
435
419
|
await sleep(1);
|
|
436
420
|
}
|
|
437
421
|
})();
|
|
438
|
-
await store.unwindBlocks(blocks.length, blocks.length);
|
|
422
|
+
await store.unwindBlocks(BlockNumber(blocks.length), blocks.length);
|
|
439
423
|
done = true;
|
|
440
424
|
expect(await store.getTxEffect(expectedTx.data.txHash)).toEqual(undefined);
|
|
441
425
|
});
|
|
442
426
|
});
|
|
443
427
|
describe('L1 to L2 Messages', ()=>{
|
|
444
|
-
const
|
|
428
|
+
const initialCheckpointNumber = CheckpointNumber(13);
|
|
445
429
|
const checkMessages = async (msgs)=>{
|
|
446
430
|
expect(await store.getLastL1ToL2Message()).toEqual(msgs.at(-1));
|
|
447
431
|
expect(await toArray(store.iterateL1ToL2Messages())).toEqual(msgs);
|
|
@@ -449,11 +433,11 @@ import { MessageStoreError } from './kv_archiver_store/message_store.js';
|
|
|
449
433
|
};
|
|
450
434
|
const makeInboxMessagesWithFullBlocks = (blockCount, opts = {})=>makeInboxMessages(NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP * blockCount, {
|
|
451
435
|
overrideFn: (msg, i)=>{
|
|
452
|
-
const
|
|
453
|
-
const index = InboxLeaf.
|
|
436
|
+
const checkpointNumber = CheckpointNumber((opts.initialCheckpointNumber ?? initialCheckpointNumber) + Math.floor(i / NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP));
|
|
437
|
+
const index = InboxLeaf.smallestIndexForCheckpoint(checkpointNumber) + BigInt(i % NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP);
|
|
454
438
|
return {
|
|
455
439
|
...msg,
|
|
456
|
-
|
|
440
|
+
checkpointNumber,
|
|
457
441
|
index
|
|
458
442
|
};
|
|
459
443
|
}
|
|
@@ -461,7 +445,7 @@ import { MessageStoreError } from './kv_archiver_store/message_store.js';
|
|
|
461
445
|
it('stores first message ever', async ()=>{
|
|
462
446
|
const msg = makeInboxMessage(Buffer16.ZERO, {
|
|
463
447
|
index: 0n,
|
|
464
|
-
|
|
448
|
+
checkpointNumber: CheckpointNumber(1)
|
|
465
449
|
});
|
|
466
450
|
await store.addL1ToL2Messages([
|
|
467
451
|
msg
|
|
@@ -469,13 +453,13 @@ import { MessageStoreError } from './kv_archiver_store/message_store.js';
|
|
|
469
453
|
await checkMessages([
|
|
470
454
|
msg
|
|
471
455
|
]);
|
|
472
|
-
expect(await store.getL1ToL2Messages(1)).toEqual([
|
|
456
|
+
expect(await store.getL1ToL2Messages(CheckpointNumber(1))).toEqual([
|
|
473
457
|
msg.leaf
|
|
474
458
|
]);
|
|
475
459
|
});
|
|
476
460
|
it('stores single message', async ()=>{
|
|
477
461
|
const msg = makeInboxMessage(Buffer16.ZERO, {
|
|
478
|
-
|
|
462
|
+
checkpointNumber: CheckpointNumber(2)
|
|
479
463
|
});
|
|
480
464
|
await store.addL1ToL2Messages([
|
|
481
465
|
msg
|
|
@@ -483,23 +467,23 @@ import { MessageStoreError } from './kv_archiver_store/message_store.js';
|
|
|
483
467
|
await checkMessages([
|
|
484
468
|
msg
|
|
485
469
|
]);
|
|
486
|
-
expect(await store.getL1ToL2Messages(2)).toEqual([
|
|
470
|
+
expect(await store.getL1ToL2Messages(CheckpointNumber(2))).toEqual([
|
|
487
471
|
msg.leaf
|
|
488
472
|
]);
|
|
489
473
|
});
|
|
490
474
|
it('stores and returns messages across different blocks', async ()=>{
|
|
491
475
|
const msgs = makeInboxMessages(5, {
|
|
492
|
-
|
|
476
|
+
initialCheckpointNumber
|
|
493
477
|
});
|
|
494
478
|
await store.addL1ToL2Messages(msgs);
|
|
495
479
|
await checkMessages(msgs);
|
|
496
|
-
expect(await store.getL1ToL2Messages(
|
|
480
|
+
expect(await store.getL1ToL2Messages(CheckpointNumber(initialCheckpointNumber + 2))).toEqual([
|
|
497
481
|
msgs[2]
|
|
498
482
|
].map((m)=>m.leaf));
|
|
499
483
|
});
|
|
500
484
|
it('stores the same messages again', async ()=>{
|
|
501
485
|
const msgs = makeInboxMessages(5, {
|
|
502
|
-
|
|
486
|
+
initialCheckpointNumber
|
|
503
487
|
});
|
|
504
488
|
await store.addL1ToL2Messages(msgs);
|
|
505
489
|
await store.addL1ToL2Messages(msgs.slice(2));
|
|
@@ -507,10 +491,10 @@ import { MessageStoreError } from './kv_archiver_store/message_store.js';
|
|
|
507
491
|
});
|
|
508
492
|
it('stores and returns messages across different blocks with gaps', async ()=>{
|
|
509
493
|
const msgs1 = makeInboxMessages(3, {
|
|
510
|
-
|
|
494
|
+
initialCheckpointNumber: CheckpointNumber(1)
|
|
511
495
|
});
|
|
512
496
|
const msgs2 = makeInboxMessages(3, {
|
|
513
|
-
|
|
497
|
+
initialCheckpointNumber: CheckpointNumber(20),
|
|
514
498
|
initialHash: msgs1.at(-1).rollingHash
|
|
515
499
|
});
|
|
516
500
|
await store.addL1ToL2Messages(msgs1);
|
|
@@ -519,22 +503,22 @@ import { MessageStoreError } from './kv_archiver_store/message_store.js';
|
|
|
519
503
|
...msgs1,
|
|
520
504
|
...msgs2
|
|
521
505
|
]);
|
|
522
|
-
expect(await store.getL1ToL2Messages(1)).toEqual([
|
|
506
|
+
expect(await store.getL1ToL2Messages(CheckpointNumber(1))).toEqual([
|
|
523
507
|
msgs1[0].leaf
|
|
524
508
|
]);
|
|
525
|
-
expect(await store.getL1ToL2Messages(4)).toEqual([]);
|
|
526
|
-
expect(await store.getL1ToL2Messages(20)).toEqual([
|
|
509
|
+
expect(await store.getL1ToL2Messages(CheckpointNumber(4))).toEqual([]);
|
|
510
|
+
expect(await store.getL1ToL2Messages(CheckpointNumber(20))).toEqual([
|
|
527
511
|
msgs2[0].leaf
|
|
528
512
|
]);
|
|
529
|
-
expect(await store.getL1ToL2Messages(24)).toEqual([]);
|
|
513
|
+
expect(await store.getL1ToL2Messages(CheckpointNumber(24))).toEqual([]);
|
|
530
514
|
});
|
|
531
515
|
it('stores and returns messages with block numbers larger than a byte', async ()=>{
|
|
532
516
|
const msgs = makeInboxMessages(5, {
|
|
533
|
-
|
|
517
|
+
initialCheckpointNumber: CheckpointNumber(1000)
|
|
534
518
|
});
|
|
535
519
|
await store.addL1ToL2Messages(msgs);
|
|
536
520
|
await checkMessages(msgs);
|
|
537
|
-
expect(await store.getL1ToL2Messages(1002)).toEqual([
|
|
521
|
+
expect(await store.getL1ToL2Messages(CheckpointNumber(1002))).toEqual([
|
|
538
522
|
msgs[2]
|
|
539
523
|
].map((m)=>m.leaf));
|
|
540
524
|
});
|
|
@@ -542,27 +526,27 @@ import { MessageStoreError } from './kv_archiver_store/message_store.js';
|
|
|
542
526
|
const msgs = makeInboxMessagesWithFullBlocks(4);
|
|
543
527
|
await store.addL1ToL2Messages(msgs);
|
|
544
528
|
await checkMessages(msgs);
|
|
545
|
-
const blockMessages = await store.getL1ToL2Messages(
|
|
529
|
+
const blockMessages = await store.getL1ToL2Messages(CheckpointNumber(initialCheckpointNumber + 1));
|
|
546
530
|
expect(blockMessages).toHaveLength(NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP);
|
|
547
531
|
expect(blockMessages).toEqual(msgs.slice(NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP, NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP * 2).map((m)=>m.leaf));
|
|
548
532
|
});
|
|
549
533
|
it('stores messages in multiple operations', async ()=>{
|
|
550
534
|
const msgs = makeInboxMessages(20, {
|
|
551
|
-
|
|
535
|
+
initialCheckpointNumber
|
|
552
536
|
});
|
|
553
537
|
await store.addL1ToL2Messages(msgs.slice(0, 10));
|
|
554
538
|
await store.addL1ToL2Messages(msgs.slice(10, 20));
|
|
555
|
-
expect(await store.getL1ToL2Messages(
|
|
539
|
+
expect(await store.getL1ToL2Messages(CheckpointNumber(initialCheckpointNumber + 2))).toEqual([
|
|
556
540
|
msgs[2]
|
|
557
541
|
].map((m)=>m.leaf));
|
|
558
|
-
expect(await store.getL1ToL2Messages(
|
|
542
|
+
expect(await store.getL1ToL2Messages(CheckpointNumber(initialCheckpointNumber + 12))).toEqual([
|
|
559
543
|
msgs[12]
|
|
560
544
|
].map((m)=>m.leaf));
|
|
561
545
|
await checkMessages(msgs);
|
|
562
546
|
});
|
|
563
547
|
it('iterates over messages from start index', async ()=>{
|
|
564
548
|
const msgs = makeInboxMessages(10, {
|
|
565
|
-
|
|
549
|
+
initialCheckpointNumber
|
|
566
550
|
});
|
|
567
551
|
await store.addL1ToL2Messages(msgs);
|
|
568
552
|
const iterated = await toArray(store.iterateL1ToL2Messages({
|
|
@@ -572,9 +556,10 @@ import { MessageStoreError } from './kv_archiver_store/message_store.js';
|
|
|
572
556
|
});
|
|
573
557
|
it('iterates over messages in reverse', async ()=>{
|
|
574
558
|
const msgs = makeInboxMessages(10, {
|
|
575
|
-
|
|
559
|
+
initialCheckpointNumber
|
|
576
560
|
});
|
|
577
561
|
await store.addL1ToL2Messages(msgs);
|
|
562
|
+
initialCheckpointNumber;
|
|
578
563
|
const iterated = await toArray(store.iterateL1ToL2Messages({
|
|
579
564
|
reverse: true,
|
|
580
565
|
end: msgs[3].index
|
|
@@ -592,9 +577,9 @@ import { MessageStoreError } from './kv_archiver_store/message_store.js';
|
|
|
592
577
|
});
|
|
593
578
|
it('throws if block number for the first message is out of order', async ()=>{
|
|
594
579
|
const msgs = makeInboxMessages(4, {
|
|
595
|
-
|
|
580
|
+
initialCheckpointNumber
|
|
596
581
|
});
|
|
597
|
-
msgs[2].
|
|
582
|
+
msgs[2].checkpointNumber = CheckpointNumber(initialCheckpointNumber - 1);
|
|
598
583
|
await store.addL1ToL2Messages(msgs.slice(0, 2));
|
|
599
584
|
await expect(store.addL1ToL2Messages(msgs.slice(2, 4))).rejects.toThrow(MessageStoreError);
|
|
600
585
|
});
|
|
@@ -606,29 +591,29 @@ import { MessageStoreError } from './kv_archiver_store/message_store.js';
|
|
|
606
591
|
it('throws if rolling hash for first message is not correct', async ()=>{
|
|
607
592
|
const msgs = makeInboxMessages(4);
|
|
608
593
|
msgs[2].rollingHash = Buffer16.random();
|
|
609
|
-
await store.addL1ToL2Messages(msgs.slice(0, 2));
|
|
594
|
+
await store.addL1ToL2Messages(msgs.slice(0, CheckpointNumber(2)));
|
|
610
595
|
await expect(store.addL1ToL2Messages(msgs.slice(2, 4))).rejects.toThrow(MessageStoreError);
|
|
611
596
|
});
|
|
612
597
|
it('throws if index is not in the correct range', async ()=>{
|
|
613
598
|
const msgs = makeInboxMessages(5, {
|
|
614
|
-
|
|
599
|
+
initialCheckpointNumber
|
|
615
600
|
});
|
|
616
601
|
msgs.at(-1).index += 100n;
|
|
617
602
|
await expect(store.addL1ToL2Messages(msgs)).rejects.toThrow(MessageStoreError);
|
|
618
603
|
});
|
|
619
604
|
it('throws if first index in block has gaps', async ()=>{
|
|
620
605
|
const msgs = makeInboxMessages(4, {
|
|
621
|
-
|
|
606
|
+
initialCheckpointNumber
|
|
622
607
|
});
|
|
623
608
|
msgs[2].index++;
|
|
624
609
|
await expect(store.addL1ToL2Messages(msgs)).rejects.toThrow(MessageStoreError);
|
|
625
610
|
});
|
|
626
611
|
it('throws if index does not follow previous one', async ()=>{
|
|
627
612
|
const msgs = makeInboxMessages(2, {
|
|
628
|
-
|
|
613
|
+
initialCheckpointNumber,
|
|
629
614
|
overrideFn: (msg, i)=>({
|
|
630
615
|
...msg,
|
|
631
|
-
|
|
616
|
+
checkpointNumber: CheckpointNumber(2),
|
|
632
617
|
index: BigInt(i + NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP * 2)
|
|
633
618
|
})
|
|
634
619
|
});
|
|
@@ -637,24 +622,24 @@ import { MessageStoreError } from './kv_archiver_store/message_store.js';
|
|
|
637
622
|
});
|
|
638
623
|
it('removes messages up to the given block number', async ()=>{
|
|
639
624
|
const msgs = makeInboxMessagesWithFullBlocks(4, {
|
|
640
|
-
|
|
625
|
+
initialCheckpointNumber: CheckpointNumber(1)
|
|
641
626
|
});
|
|
642
627
|
await store.addL1ToL2Messages(msgs);
|
|
643
628
|
await checkMessages(msgs);
|
|
644
|
-
expect(await store.getL1ToL2Messages(1)).toHaveLength(NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP);
|
|
645
|
-
expect(await store.getL1ToL2Messages(2)).toHaveLength(NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP);
|
|
646
|
-
expect(await store.getL1ToL2Messages(3)).toHaveLength(NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP);
|
|
647
|
-
expect(await store.getL1ToL2Messages(4)).toHaveLength(NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP);
|
|
648
|
-
await store.
|
|
649
|
-
expect(await store.getL1ToL2Messages(1)).toHaveLength(NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP);
|
|
650
|
-
expect(await store.getL1ToL2Messages(2)).toHaveLength(NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP);
|
|
651
|
-
expect(await store.getL1ToL2Messages(3)).toHaveLength(0);
|
|
652
|
-
expect(await store.getL1ToL2Messages(4)).toHaveLength(0);
|
|
629
|
+
expect(await store.getL1ToL2Messages(CheckpointNumber(1))).toHaveLength(NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP);
|
|
630
|
+
expect(await store.getL1ToL2Messages(CheckpointNumber(2))).toHaveLength(NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP);
|
|
631
|
+
expect(await store.getL1ToL2Messages(CheckpointNumber(3))).toHaveLength(NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP);
|
|
632
|
+
expect(await store.getL1ToL2Messages(CheckpointNumber(4))).toHaveLength(NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP);
|
|
633
|
+
await store.rollbackL1ToL2MessagesToCheckpoint(CheckpointNumber(2));
|
|
634
|
+
expect(await store.getL1ToL2Messages(CheckpointNumber(1))).toHaveLength(NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP);
|
|
635
|
+
expect(await store.getL1ToL2Messages(CheckpointNumber(2))).toHaveLength(NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP);
|
|
636
|
+
expect(await store.getL1ToL2Messages(CheckpointNumber(3))).toHaveLength(0);
|
|
637
|
+
expect(await store.getL1ToL2Messages(CheckpointNumber(4))).toHaveLength(0);
|
|
653
638
|
await checkMessages(msgs.slice(0, NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP * 2));
|
|
654
639
|
});
|
|
655
640
|
it('removes messages starting with the given index', async ()=>{
|
|
656
641
|
const msgs = makeInboxMessagesWithFullBlocks(4, {
|
|
657
|
-
|
|
642
|
+
initialCheckpointNumber: CheckpointNumber(1)
|
|
658
643
|
});
|
|
659
644
|
await store.addL1ToL2Messages(msgs);
|
|
660
645
|
await store.removeL1ToL2Messages(msgs[13].index);
|
|
@@ -677,7 +662,7 @@ import { MessageStoreError } from './kv_archiver_store/message_store.js';
|
|
|
677
662
|
};
|
|
678
663
|
await store.addContractInstances([
|
|
679
664
|
contractInstance
|
|
680
|
-
], blockNum);
|
|
665
|
+
], BlockNumber(blockNum));
|
|
681
666
|
});
|
|
682
667
|
it('returns previously stored contract instances', async ()=>{
|
|
683
668
|
await expect(store.getContractInstance(contractInstance.address, timestamp)).resolves.toMatchObject(contractInstance);
|
|
@@ -688,7 +673,7 @@ import { MessageStoreError } from './kv_archiver_store/message_store.js';
|
|
|
688
673
|
it('returns undefined if previously stored contract instances was deleted', async ()=>{
|
|
689
674
|
await store.deleteContractInstances([
|
|
690
675
|
contractInstance
|
|
691
|
-
], blockNum);
|
|
676
|
+
], BlockNumber(blockNum));
|
|
692
677
|
await expect(store.getContractInstance(contractInstance.address, timestamp)).resolves.toBeUndefined();
|
|
693
678
|
});
|
|
694
679
|
});
|
|
@@ -710,7 +695,7 @@ import { MessageStoreError } from './kv_archiver_store/message_store.js';
|
|
|
710
695
|
};
|
|
711
696
|
await store.addContractInstances([
|
|
712
697
|
contractInstance
|
|
713
|
-
], 1);
|
|
698
|
+
], BlockNumber(1));
|
|
714
699
|
await store.addContractInstanceUpdates([
|
|
715
700
|
{
|
|
716
701
|
prevContractClassId: classId,
|
|
@@ -747,7 +732,7 @@ import { MessageStoreError } from './kv_archiver_store/message_store.js';
|
|
|
747
732
|
};
|
|
748
733
|
await store.addContractInstances([
|
|
749
734
|
otherContractInstance
|
|
750
|
-
], 1);
|
|
735
|
+
], BlockNumber(1));
|
|
751
736
|
const fetchedInstance = await store.getContractInstance(otherContractInstance.address, timestampOfChange + 1n);
|
|
752
737
|
expect(fetchedInstance?.originalContractClassId).toEqual(otherClassId);
|
|
753
738
|
expect(fetchedInstance?.currentContractClassId).toEqual(otherClassId);
|
|
@@ -765,7 +750,7 @@ import { MessageStoreError } from './kv_archiver_store/message_store.js';
|
|
|
765
750
|
};
|
|
766
751
|
await store.addContractInstances([
|
|
767
752
|
otherContractInstance
|
|
768
|
-
], 1);
|
|
753
|
+
], BlockNumber(1));
|
|
769
754
|
await store.addContractInstanceUpdates([
|
|
770
755
|
{
|
|
771
756
|
prevContractClassId: otherClassId,
|
|
@@ -788,7 +773,7 @@ import { MessageStoreError } from './kv_archiver_store/message_store.js';
|
|
|
788
773
|
contractClass
|
|
789
774
|
], [
|
|
790
775
|
await computePublicBytecodeCommitment(contractClass.packedBytecode)
|
|
791
|
-
], blockNum);
|
|
776
|
+
], BlockNumber(blockNum));
|
|
792
777
|
});
|
|
793
778
|
it('returns previously stored contract class', async ()=>{
|
|
794
779
|
await expect(store.getContractClass(contractClass.id)).resolves.toMatchObject(contractClass);
|
|
@@ -796,7 +781,7 @@ import { MessageStoreError } from './kv_archiver_store/message_store.js';
|
|
|
796
781
|
it('returns undefined if the initial deployed contract class was deleted', async ()=>{
|
|
797
782
|
await store.deleteContractClasses([
|
|
798
783
|
contractClass
|
|
799
|
-
], blockNum);
|
|
784
|
+
], BlockNumber(blockNum));
|
|
800
785
|
await expect(store.getContractClass(contractClass.id)).resolves.toBeUndefined();
|
|
801
786
|
});
|
|
802
787
|
it('returns contract class if later "deployment" class was deleted', async ()=>{
|
|
@@ -804,10 +789,10 @@ import { MessageStoreError } from './kv_archiver_store/message_store.js';
|
|
|
804
789
|
contractClass
|
|
805
790
|
], [
|
|
806
791
|
await computePublicBytecodeCommitment(contractClass.packedBytecode)
|
|
807
|
-
], blockNum + 1);
|
|
792
|
+
], BlockNumber(blockNum + 1));
|
|
808
793
|
await store.deleteContractClasses([
|
|
809
794
|
contractClass
|
|
810
|
-
], blockNum + 1);
|
|
795
|
+
], BlockNumber(blockNum + 1));
|
|
811
796
|
await expect(store.getContractClass(contractClass.id)).resolves.toMatchObject(contractClass);
|
|
812
797
|
});
|
|
813
798
|
it('returns undefined if contract class is not found', async ()=>{
|
|
@@ -870,8 +855,8 @@ import { MessageStoreError } from './kv_archiver_store/message_store.js';
|
|
|
870
855
|
});
|
|
871
856
|
};
|
|
872
857
|
const mockBlockWithLogs = async (blockNumber)=>{
|
|
873
|
-
const block = await L2Block.random(blockNumber);
|
|
874
|
-
block.header.globalVariables.blockNumber = blockNumber;
|
|
858
|
+
const block = await L2Block.random(BlockNumber(blockNumber));
|
|
859
|
+
block.header.globalVariables.blockNumber = BlockNumber(blockNumber);
|
|
875
860
|
block.body.txEffects = await timesParallel(numTxsPerBlock, async (txIndex)=>{
|
|
876
861
|
const txEffect = await TxEffect.random();
|
|
877
862
|
txEffect.privateLogs = mockPrivateLogs(blockNumber, txIndex);
|
|
@@ -995,7 +980,7 @@ import { MessageStoreError } from './kv_archiver_store/message_store.js';
|
|
|
995
980
|
let blocks;
|
|
996
981
|
beforeEach(async ()=>{
|
|
997
982
|
blocks = await timesParallel(numBlocks, async (index)=>PublishedL2Block.fromFields({
|
|
998
|
-
block: await L2Block.random(index + 1, txsPerBlock, numPublicFunctionCalls, numPublicLogs),
|
|
983
|
+
block: await L2Block.random(BlockNumber(index + 1), txsPerBlock, numPublicFunctionCalls, numPublicLogs),
|
|
999
984
|
l1: {
|
|
1000
985
|
blockNumber: BigInt(index),
|
|
1001
986
|
blockHash: makeBlockHash(index),
|
|
@@ -1012,7 +997,7 @@ import { MessageStoreError } from './kv_archiver_store/message_store.js';
|
|
|
1012
997
|
const targetTxIndex = randomInt(txsPerBlock);
|
|
1013
998
|
const targetTxHash = blocks[targetBlockIndex].block.body.txEffects[targetTxIndex].txHash;
|
|
1014
999
|
await Promise.all([
|
|
1015
|
-
store.unwindBlocks(blocks.length, blocks.length),
|
|
1000
|
+
store.unwindBlocks(BlockNumber(blocks.length), blocks.length),
|
|
1016
1001
|
store.deleteLogs(blocks.map((b)=>b.block))
|
|
1017
1002
|
]);
|
|
1018
1003
|
const response = await store.getPublicLogs({
|
|
@@ -1077,7 +1062,7 @@ import { MessageStoreError } from './kv_archiver_store/message_store.js';
|
|
|
1077
1062
|
const targetBlockIndex = randomInt(numBlocks);
|
|
1078
1063
|
const targetTxIndex = randomInt(txsPerBlock);
|
|
1079
1064
|
const targetLogIndex = randomInt(numPublicLogs);
|
|
1080
|
-
const afterLog = new LogId(targetBlockIndex + INITIAL_L2_BLOCK_NUM, targetTxIndex, targetLogIndex);
|
|
1065
|
+
const afterLog = new LogId(BlockNumber(targetBlockIndex + INITIAL_L2_BLOCK_NUM), targetTxIndex, targetLogIndex);
|
|
1081
1066
|
const response = await store.getPublicLogs({
|
|
1082
1067
|
afterLog
|
|
1083
1068
|
});
|
|
@@ -1097,7 +1082,7 @@ import { MessageStoreError } from './kv_archiver_store/message_store.js';
|
|
|
1097
1082
|
it('"txHash" filter param is ignored when "afterLog" is set', async ()=>{
|
|
1098
1083
|
// Get random txHash
|
|
1099
1084
|
const txHash = TxHash.random();
|
|
1100
|
-
const afterLog = new LogId(1, 0, 0);
|
|
1085
|
+
const afterLog = new LogId(BlockNumber(1), 0, 0);
|
|
1101
1086
|
const response = await store.getPublicLogs({
|
|
1102
1087
|
txHash,
|
|
1103
1088
|
afterLog
|
|
@@ -1113,7 +1098,7 @@ import { MessageStoreError } from './kv_archiver_store/message_store.js';
|
|
|
1113
1098
|
// "fromBlock" gets correctly trimmed to range and "toBlock" is exclusive
|
|
1114
1099
|
logs = (await store.getPublicLogs({
|
|
1115
1100
|
fromBlock: -10,
|
|
1116
|
-
toBlock: 5
|
|
1101
|
+
toBlock: BlockNumber(5)
|
|
1117
1102
|
})).logs;
|
|
1118
1103
|
let blockNumbers = new Set(logs.map((log)=>log.id.blockNumber));
|
|
1119
1104
|
expect(blockNumbers).toEqual(new Set([
|
|
@@ -1124,13 +1109,13 @@ import { MessageStoreError } from './kv_archiver_store/message_store.js';
|
|
|
1124
1109
|
]));
|
|
1125
1110
|
// "toBlock" should be exclusive
|
|
1126
1111
|
logs = (await store.getPublicLogs({
|
|
1127
|
-
fromBlock: 1,
|
|
1128
|
-
toBlock: 1
|
|
1112
|
+
fromBlock: BlockNumber(1),
|
|
1113
|
+
toBlock: BlockNumber(1)
|
|
1129
1114
|
})).logs;
|
|
1130
1115
|
expect(logs.length).toBe(0);
|
|
1131
1116
|
logs = (await store.getPublicLogs({
|
|
1132
|
-
fromBlock: 10,
|
|
1133
|
-
toBlock: 5
|
|
1117
|
+
fromBlock: BlockNumber(10),
|
|
1118
|
+
toBlock: BlockNumber(5)
|
|
1134
1119
|
})).logs;
|
|
1135
1120
|
expect(logs.length).toBe(0);
|
|
1136
1121
|
// both "fromBlock" and "toBlock" get correctly capped to range and logs from all blocks are returned
|
|
@@ -1142,23 +1127,23 @@ import { MessageStoreError } from './kv_archiver_store/message_store.js';
|
|
|
1142
1127
|
expect(blockNumbers.size).toBe(numBlocks);
|
|
1143
1128
|
// intersecting with "afterLog" works
|
|
1144
1129
|
logs = (await store.getPublicLogs({
|
|
1145
|
-
fromBlock: 2,
|
|
1146
|
-
toBlock: 5,
|
|
1147
|
-
afterLog: new LogId(4, 0, 0)
|
|
1130
|
+
fromBlock: BlockNumber(2),
|
|
1131
|
+
toBlock: BlockNumber(5),
|
|
1132
|
+
afterLog: new LogId(BlockNumber(4), 0, 0)
|
|
1148
1133
|
})).logs;
|
|
1149
1134
|
blockNumbers = new Set(logs.map((log)=>log.id.blockNumber));
|
|
1150
1135
|
expect(blockNumbers).toEqual(new Set([
|
|
1151
1136
|
4
|
|
1152
1137
|
]));
|
|
1153
1138
|
logs = (await store.getPublicLogs({
|
|
1154
|
-
toBlock: 5,
|
|
1155
|
-
afterLog: new LogId(5, 1, 0)
|
|
1139
|
+
toBlock: BlockNumber(5),
|
|
1140
|
+
afterLog: new LogId(BlockNumber(5), 1, 0)
|
|
1156
1141
|
})).logs;
|
|
1157
1142
|
expect(logs.length).toBe(0);
|
|
1158
1143
|
logs = (await store.getPublicLogs({
|
|
1159
|
-
fromBlock: 2,
|
|
1160
|
-
toBlock: 5,
|
|
1161
|
-
afterLog: new LogId(100, 0, 0)
|
|
1144
|
+
fromBlock: BlockNumber(2),
|
|
1145
|
+
toBlock: BlockNumber(5),
|
|
1146
|
+
afterLog: new LogId(BlockNumber(100), 0, 0)
|
|
1162
1147
|
})).logs;
|
|
1163
1148
|
expect(logs.length).toBe(0);
|
|
1164
1149
|
});
|
|
@@ -1167,7 +1152,7 @@ import { MessageStoreError } from './kv_archiver_store/message_store.js';
|
|
|
1167
1152
|
const targetBlockIndex = randomInt(numBlocks);
|
|
1168
1153
|
const targetTxIndex = randomInt(txsPerBlock);
|
|
1169
1154
|
const targetLogIndex = randomInt(numPublicLogs);
|
|
1170
|
-
const afterLog = new LogId(targetBlockIndex + INITIAL_L2_BLOCK_NUM, targetTxIndex, targetLogIndex);
|
|
1155
|
+
const afterLog = new LogId(BlockNumber(targetBlockIndex + INITIAL_L2_BLOCK_NUM), targetTxIndex, targetLogIndex);
|
|
1171
1156
|
const response = await store.getPublicLogs({
|
|
1172
1157
|
afterLog,
|
|
1173
1158
|
fromBlock: afterLog.blockNumber
|
|
@@ -1207,7 +1192,7 @@ import { MessageStoreError } from './kv_archiver_store/message_store.js';
|
|
|
1207
1192
|
EthAddress.random(),
|
|
1208
1193
|
EthAddress.random()
|
|
1209
1194
|
],
|
|
1210
|
-
epoch:
|
|
1195
|
+
epoch: EpochNumber(123),
|
|
1211
1196
|
seed: 456n,
|
|
1212
1197
|
attestors: [
|
|
1213
1198
|
EthAddress.random()
|
|
@@ -1231,7 +1216,7 @@ import { MessageStoreError } from './kv_archiver_store/message_store.js';
|
|
|
1231
1216
|
attestors: [
|
|
1232
1217
|
EthAddress.random()
|
|
1233
1218
|
],
|
|
1234
|
-
epoch:
|
|
1219
|
+
epoch: EpochNumber(789),
|
|
1235
1220
|
seed: 101n,
|
|
1236
1221
|
attestations: [
|
|
1237
1222
|
CommitteeAttestation.random()
|
|
@@ -1253,7 +1238,7 @@ import { MessageStoreError } from './kv_archiver_store/message_store.js';
|
|
|
1253
1238
|
committee: [
|
|
1254
1239
|
EthAddress.random()
|
|
1255
1240
|
],
|
|
1256
|
-
epoch:
|
|
1241
|
+
epoch: EpochNumber(999),
|
|
1257
1242
|
seed: 888n,
|
|
1258
1243
|
attestors: [
|
|
1259
1244
|
EthAddress.random()
|
|
@@ -1273,7 +1258,7 @@ import { MessageStoreError } from './kv_archiver_store/message_store.js';
|
|
|
1273
1258
|
valid: false,
|
|
1274
1259
|
block: randomBlockInfo(4),
|
|
1275
1260
|
committee: [],
|
|
1276
|
-
epoch:
|
|
1261
|
+
epoch: EpochNumber(0),
|
|
1277
1262
|
seed: 0n,
|
|
1278
1263
|
attestors: [],
|
|
1279
1264
|
attestations: [],
|