@aztec/archiver 0.0.1-commit.b655e406 → 0.0.1-commit.d3ec352c

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.
Files changed (81) hide show
  1. package/dest/archiver/archiver.d.ts +53 -40
  2. package/dest/archiver/archiver.d.ts.map +1 -1
  3. package/dest/archiver/archiver.js +333 -221
  4. package/dest/archiver/archiver_store.d.ts +16 -15
  5. package/dest/archiver/archiver_store.d.ts.map +1 -1
  6. package/dest/archiver/archiver_store_test_suite.d.ts +1 -1
  7. package/dest/archiver/archiver_store_test_suite.d.ts.map +1 -1
  8. package/dest/archiver/archiver_store_test_suite.js +85 -84
  9. package/dest/archiver/config.d.ts +1 -1
  10. package/dest/archiver/config.d.ts.map +1 -1
  11. package/dest/archiver/config.js +5 -0
  12. package/dest/archiver/data_retrieval.d.ts +18 -17
  13. package/dest/archiver/data_retrieval.d.ts.map +1 -1
  14. package/dest/archiver/data_retrieval.js +111 -86
  15. package/dest/archiver/errors.d.ts +1 -1
  16. package/dest/archiver/errors.d.ts.map +1 -1
  17. package/dest/archiver/index.d.ts +1 -1
  18. package/dest/archiver/instrumentation.d.ts +3 -3
  19. package/dest/archiver/instrumentation.d.ts.map +1 -1
  20. package/dest/archiver/kv_archiver_store/block_store.d.ts +9 -8
  21. package/dest/archiver/kv_archiver_store/block_store.d.ts.map +1 -1
  22. package/dest/archiver/kv_archiver_store/block_store.js +8 -7
  23. package/dest/archiver/kv_archiver_store/contract_class_store.d.ts +1 -1
  24. package/dest/archiver/kv_archiver_store/contract_class_store.d.ts.map +1 -1
  25. package/dest/archiver/kv_archiver_store/contract_instance_store.d.ts +1 -1
  26. package/dest/archiver/kv_archiver_store/contract_instance_store.d.ts.map +1 -1
  27. package/dest/archiver/kv_archiver_store/kv_archiver_store.d.ts +18 -17
  28. package/dest/archiver/kv_archiver_store/kv_archiver_store.d.ts.map +1 -1
  29. package/dest/archiver/kv_archiver_store/log_store.d.ts +1 -1
  30. package/dest/archiver/kv_archiver_store/log_store.d.ts.map +1 -1
  31. package/dest/archiver/kv_archiver_store/log_store.js +3 -2
  32. package/dest/archiver/kv_archiver_store/message_store.d.ts +1 -1
  33. package/dest/archiver/kv_archiver_store/message_store.d.ts.map +1 -1
  34. package/dest/archiver/structs/data_retrieval.d.ts +1 -1
  35. package/dest/archiver/structs/inbox_message.d.ts +3 -3
  36. package/dest/archiver/structs/inbox_message.d.ts.map +1 -1
  37. package/dest/archiver/structs/inbox_message.js +2 -1
  38. package/dest/archiver/structs/published.d.ts +3 -2
  39. package/dest/archiver/structs/published.d.ts.map +1 -1
  40. package/dest/archiver/validation.d.ts +10 -4
  41. package/dest/archiver/validation.d.ts.map +1 -1
  42. package/dest/archiver/validation.js +29 -21
  43. package/dest/factory.d.ts +1 -1
  44. package/dest/factory.d.ts.map +1 -1
  45. package/dest/factory.js +3 -2
  46. package/dest/index.d.ts +2 -2
  47. package/dest/index.d.ts.map +1 -1
  48. package/dest/index.js +1 -1
  49. package/dest/rpc/index.d.ts +2 -2
  50. package/dest/test/index.d.ts +1 -1
  51. package/dest/test/mock_archiver.d.ts +14 -5
  52. package/dest/test/mock_archiver.d.ts.map +1 -1
  53. package/dest/test/mock_archiver.js +19 -10
  54. package/dest/test/mock_l1_to_l2_message_source.d.ts +4 -2
  55. package/dest/test/mock_l1_to_l2_message_source.d.ts.map +1 -1
  56. package/dest/test/mock_l1_to_l2_message_source.js +7 -2
  57. package/dest/test/mock_l2_block_source.d.ts +14 -9
  58. package/dest/test/mock_l2_block_source.d.ts.map +1 -1
  59. package/dest/test/mock_l2_block_source.js +20 -7
  60. package/dest/test/mock_structs.d.ts +1 -1
  61. package/dest/test/mock_structs.d.ts.map +1 -1
  62. package/dest/test/mock_structs.js +3 -2
  63. package/package.json +17 -17
  64. package/src/archiver/archiver.ts +448 -290
  65. package/src/archiver/archiver_store.ts +19 -14
  66. package/src/archiver/archiver_store_test_suite.ts +111 -79
  67. package/src/archiver/config.ts +5 -0
  68. package/src/archiver/data_retrieval.ts +157 -125
  69. package/src/archiver/instrumentation.ts +2 -2
  70. package/src/archiver/kv_archiver_store/block_store.ts +17 -16
  71. package/src/archiver/kv_archiver_store/kv_archiver_store.ts +16 -15
  72. package/src/archiver/kv_archiver_store/log_store.ts +3 -2
  73. package/src/archiver/structs/inbox_message.ts +5 -4
  74. package/src/archiver/structs/published.ts +2 -1
  75. package/src/archiver/validation.ts +52 -27
  76. package/src/factory.ts +3 -2
  77. package/src/index.ts +1 -1
  78. package/src/test/mock_archiver.ts +22 -11
  79. package/src/test/mock_l1_to_l2_message_source.ts +9 -3
  80. package/src/test/mock_l2_block_source.ts +30 -13
  81. package/src/test/mock_structs.ts +3 -2
@@ -1,5 +1,6 @@
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, 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
6
  import { randomInt } from '@aztec/foundation/crypto';
@@ -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', ()=>{
@@ -339,17 +340,17 @@ import { MessageStoreError } from './kv_archiver_store/message_store.js';
339
340
  await expect(store.addLogs([
340
341
  block
341
342
  ])).resolves.toEqual(true);
342
- expect((await store.getPrivateLogs(1, 1)).length).toEqual(block.body.txEffects.map((txEffect)=>txEffect.privateLogs).flat().length);
343
+ expect((await store.getPrivateLogs(BlockNumber(1), 1)).length).toEqual(block.body.txEffects.map((txEffect)=>txEffect.privateLogs).flat().length);
343
344
  expect((await store.getPublicLogs({
344
- fromBlock: 1
345
+ fromBlock: BlockNumber(1)
345
346
  })).logs.length).toEqual(block.body.txEffects.map((txEffect)=>txEffect.publicLogs).flat().length);
346
347
  // This one is a pain for memory as we would never want to just delete memory in the middle.
347
348
  await store.deleteLogs([
348
349
  block
349
350
  ]);
350
- expect((await store.getPrivateLogs(1, 1)).length).toEqual(0);
351
+ expect((await store.getPrivateLogs(BlockNumber(1), 1)).length).toEqual(0);
351
352
  expect((await store.getPublicLogs({
352
- fromBlock: 1
353
+ fromBlock: BlockNumber(1)
353
354
  })).logs.length).toEqual(0);
354
355
  });
355
356
  });
@@ -362,7 +363,7 @@ import { MessageStoreError } from './kv_archiver_store/message_store.js';
362
363
  await store.addLogs([
363
364
  block
364
365
  ]);
365
- const privateLogs = await store.getPrivateLogs(1, 1);
366
+ const privateLogs = await store.getPrivateLogs(BlockNumber(1), 1);
366
367
  expect(privateLogs).toEqual(block.body.txEffects.map((txEffect)=>txEffect.privateLogs).flat());
367
368
  });
368
369
  });
@@ -418,7 +419,7 @@ import { MessageStoreError } from './kv_archiver_store/message_store.js';
418
419
  ()=>wrapInBlock(blocks[5].block.body.txEffects[2], blocks[5].block),
419
420
  ()=>wrapInBlock(blocks[1].block.body.txEffects[0], blocks[1].block)
420
421
  ])('tries to retrieves a previously stored transaction after deleted', async (getExpectedTx)=>{
421
- await store.unwindBlocks(blocks.length, blocks.length);
422
+ await store.unwindBlocks(BlockNumber(blocks.length), blocks.length);
422
423
  const expectedTx = await getExpectedTx();
423
424
  const actualTx = await store.getTxEffect(expectedTx.data.txHash);
424
425
  expect(actualTx).toEqual(undefined);
@@ -435,7 +436,7 @@ import { MessageStoreError } from './kv_archiver_store/message_store.js';
435
436
  await sleep(1);
436
437
  }
437
438
  })();
438
- await store.unwindBlocks(blocks.length, blocks.length);
439
+ await store.unwindBlocks(BlockNumber(blocks.length), blocks.length);
439
440
  done = true;
440
441
  expect(await store.getTxEffect(expectedTx.data.txHash)).toEqual(undefined);
441
442
  });
@@ -449,7 +450,7 @@ import { MessageStoreError } from './kv_archiver_store/message_store.js';
449
450
  };
450
451
  const makeInboxMessagesWithFullBlocks = (blockCount, opts = {})=>makeInboxMessages(NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP * blockCount, {
451
452
  overrideFn: (msg, i)=>{
452
- const l2BlockNumber = (opts.initialL2BlockNumber ?? initialL2BlockNumber) + Math.floor(i / NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP);
453
+ const l2BlockNumber = BlockNumber((opts.initialL2BlockNumber ?? initialL2BlockNumber) + Math.floor(i / NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP));
453
454
  const index = InboxLeaf.smallestIndexFromL2Block(l2BlockNumber) + BigInt(i % NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP);
454
455
  return {
455
456
  ...msg,
@@ -461,7 +462,7 @@ import { MessageStoreError } from './kv_archiver_store/message_store.js';
461
462
  it('stores first message ever', async ()=>{
462
463
  const msg = makeInboxMessage(Buffer16.ZERO, {
463
464
  index: 0n,
464
- l2BlockNumber: 1
465
+ l2BlockNumber: BlockNumber(1)
465
466
  });
466
467
  await store.addL1ToL2Messages([
467
468
  msg
@@ -469,13 +470,13 @@ import { MessageStoreError } from './kv_archiver_store/message_store.js';
469
470
  await checkMessages([
470
471
  msg
471
472
  ]);
472
- expect(await store.getL1ToL2Messages(1)).toEqual([
473
+ expect(await store.getL1ToL2Messages(BlockNumber(1))).toEqual([
473
474
  msg.leaf
474
475
  ]);
475
476
  });
476
477
  it('stores single message', async ()=>{
477
478
  const msg = makeInboxMessage(Buffer16.ZERO, {
478
- l2BlockNumber: 2
479
+ l2BlockNumber: BlockNumber(2)
479
480
  });
480
481
  await store.addL1ToL2Messages([
481
482
  msg
@@ -483,7 +484,7 @@ import { MessageStoreError } from './kv_archiver_store/message_store.js';
483
484
  await checkMessages([
484
485
  msg
485
486
  ]);
486
- expect(await store.getL1ToL2Messages(2)).toEqual([
487
+ expect(await store.getL1ToL2Messages(BlockNumber(2))).toEqual([
487
488
  msg.leaf
488
489
  ]);
489
490
  });
@@ -493,7 +494,7 @@ import { MessageStoreError } from './kv_archiver_store/message_store.js';
493
494
  });
494
495
  await store.addL1ToL2Messages(msgs);
495
496
  await checkMessages(msgs);
496
- expect(await store.getL1ToL2Messages(initialL2BlockNumber + 2)).toEqual([
497
+ expect(await store.getL1ToL2Messages(BlockNumber(initialL2BlockNumber + 2))).toEqual([
497
498
  msgs[2]
498
499
  ].map((m)=>m.leaf));
499
500
  });
@@ -519,14 +520,14 @@ import { MessageStoreError } from './kv_archiver_store/message_store.js';
519
520
  ...msgs1,
520
521
  ...msgs2
521
522
  ]);
522
- expect(await store.getL1ToL2Messages(1)).toEqual([
523
+ expect(await store.getL1ToL2Messages(BlockNumber(1))).toEqual([
523
524
  msgs1[0].leaf
524
525
  ]);
525
- expect(await store.getL1ToL2Messages(4)).toEqual([]);
526
- expect(await store.getL1ToL2Messages(20)).toEqual([
526
+ expect(await store.getL1ToL2Messages(BlockNumber(4))).toEqual([]);
527
+ expect(await store.getL1ToL2Messages(BlockNumber(20))).toEqual([
527
528
  msgs2[0].leaf
528
529
  ]);
529
- expect(await store.getL1ToL2Messages(24)).toEqual([]);
530
+ expect(await store.getL1ToL2Messages(BlockNumber(24))).toEqual([]);
530
531
  });
531
532
  it('stores and returns messages with block numbers larger than a byte', async ()=>{
532
533
  const msgs = makeInboxMessages(5, {
@@ -534,7 +535,7 @@ import { MessageStoreError } from './kv_archiver_store/message_store.js';
534
535
  });
535
536
  await store.addL1ToL2Messages(msgs);
536
537
  await checkMessages(msgs);
537
- expect(await store.getL1ToL2Messages(1002)).toEqual([
538
+ expect(await store.getL1ToL2Messages(BlockNumber(1002))).toEqual([
538
539
  msgs[2]
539
540
  ].map((m)=>m.leaf));
540
541
  });
@@ -542,7 +543,7 @@ import { MessageStoreError } from './kv_archiver_store/message_store.js';
542
543
  const msgs = makeInboxMessagesWithFullBlocks(4);
543
544
  await store.addL1ToL2Messages(msgs);
544
545
  await checkMessages(msgs);
545
- const blockMessages = await store.getL1ToL2Messages(initialL2BlockNumber + 1);
546
+ const blockMessages = await store.getL1ToL2Messages(BlockNumber(initialL2BlockNumber + 1));
546
547
  expect(blockMessages).toHaveLength(NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP);
547
548
  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
549
  });
@@ -552,10 +553,10 @@ import { MessageStoreError } from './kv_archiver_store/message_store.js';
552
553
  });
553
554
  await store.addL1ToL2Messages(msgs.slice(0, 10));
554
555
  await store.addL1ToL2Messages(msgs.slice(10, 20));
555
- expect(await store.getL1ToL2Messages(initialL2BlockNumber + 2)).toEqual([
556
+ expect(await store.getL1ToL2Messages(BlockNumber(initialL2BlockNumber + 2))).toEqual([
556
557
  msgs[2]
557
558
  ].map((m)=>m.leaf));
558
- expect(await store.getL1ToL2Messages(initialL2BlockNumber + 12)).toEqual([
559
+ expect(await store.getL1ToL2Messages(BlockNumber(initialL2BlockNumber + 12))).toEqual([
559
560
  msgs[12]
560
561
  ].map((m)=>m.leaf));
561
562
  await checkMessages(msgs);
@@ -594,7 +595,7 @@ import { MessageStoreError } from './kv_archiver_store/message_store.js';
594
595
  const msgs = makeInboxMessages(4, {
595
596
  initialL2BlockNumber
596
597
  });
597
- msgs[2].l2BlockNumber = initialL2BlockNumber - 1;
598
+ msgs[2].l2BlockNumber = BlockNumber(initialL2BlockNumber - 1);
598
599
  await store.addL1ToL2Messages(msgs.slice(0, 2));
599
600
  await expect(store.addL1ToL2Messages(msgs.slice(2, 4))).rejects.toThrow(MessageStoreError);
600
601
  });
@@ -606,7 +607,7 @@ import { MessageStoreError } from './kv_archiver_store/message_store.js';
606
607
  it('throws if rolling hash for first message is not correct', async ()=>{
607
608
  const msgs = makeInboxMessages(4);
608
609
  msgs[2].rollingHash = Buffer16.random();
609
- await store.addL1ToL2Messages(msgs.slice(0, 2));
610
+ await store.addL1ToL2Messages(msgs.slice(0, BlockNumber(2)));
610
611
  await expect(store.addL1ToL2Messages(msgs.slice(2, 4))).rejects.toThrow(MessageStoreError);
611
612
  });
612
613
  it('throws if index is not in the correct range', async ()=>{
@@ -628,7 +629,7 @@ import { MessageStoreError } from './kv_archiver_store/message_store.js';
628
629
  initialL2BlockNumber,
629
630
  overrideFn: (msg, i)=>({
630
631
  ...msg,
631
- l2BlockNumber: 2,
632
+ l2BlockNumber: BlockNumber(2),
632
633
  index: BigInt(i + NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP * 2)
633
634
  })
634
635
  });
@@ -641,15 +642,15 @@ import { MessageStoreError } from './kv_archiver_store/message_store.js';
641
642
  });
642
643
  await store.addL1ToL2Messages(msgs);
643
644
  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.rollbackL1ToL2MessagesToL2Block(2);
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);
645
+ expect(await store.getL1ToL2Messages(BlockNumber(1))).toHaveLength(NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP);
646
+ expect(await store.getL1ToL2Messages(BlockNumber(2))).toHaveLength(NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP);
647
+ expect(await store.getL1ToL2Messages(BlockNumber(3))).toHaveLength(NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP);
648
+ expect(await store.getL1ToL2Messages(BlockNumber(4))).toHaveLength(NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP);
649
+ await store.rollbackL1ToL2MessagesToL2Block(BlockNumber(2));
650
+ expect(await store.getL1ToL2Messages(BlockNumber(1))).toHaveLength(NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP);
651
+ expect(await store.getL1ToL2Messages(BlockNumber(2))).toHaveLength(NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP);
652
+ expect(await store.getL1ToL2Messages(BlockNumber(3))).toHaveLength(0);
653
+ expect(await store.getL1ToL2Messages(BlockNumber(4))).toHaveLength(0);
653
654
  await checkMessages(msgs.slice(0, NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP * 2));
654
655
  });
655
656
  it('removes messages starting with the given index', async ()=>{
@@ -677,7 +678,7 @@ import { MessageStoreError } from './kv_archiver_store/message_store.js';
677
678
  };
678
679
  await store.addContractInstances([
679
680
  contractInstance
680
- ], blockNum);
681
+ ], BlockNumber(blockNum));
681
682
  });
682
683
  it('returns previously stored contract instances', async ()=>{
683
684
  await expect(store.getContractInstance(contractInstance.address, timestamp)).resolves.toMatchObject(contractInstance);
@@ -688,7 +689,7 @@ import { MessageStoreError } from './kv_archiver_store/message_store.js';
688
689
  it('returns undefined if previously stored contract instances was deleted', async ()=>{
689
690
  await store.deleteContractInstances([
690
691
  contractInstance
691
- ], blockNum);
692
+ ], BlockNumber(blockNum));
692
693
  await expect(store.getContractInstance(contractInstance.address, timestamp)).resolves.toBeUndefined();
693
694
  });
694
695
  });
@@ -710,7 +711,7 @@ import { MessageStoreError } from './kv_archiver_store/message_store.js';
710
711
  };
711
712
  await store.addContractInstances([
712
713
  contractInstance
713
- ], 1);
714
+ ], BlockNumber(1));
714
715
  await store.addContractInstanceUpdates([
715
716
  {
716
717
  prevContractClassId: classId,
@@ -747,7 +748,7 @@ import { MessageStoreError } from './kv_archiver_store/message_store.js';
747
748
  };
748
749
  await store.addContractInstances([
749
750
  otherContractInstance
750
- ], 1);
751
+ ], BlockNumber(1));
751
752
  const fetchedInstance = await store.getContractInstance(otherContractInstance.address, timestampOfChange + 1n);
752
753
  expect(fetchedInstance?.originalContractClassId).toEqual(otherClassId);
753
754
  expect(fetchedInstance?.currentContractClassId).toEqual(otherClassId);
@@ -765,7 +766,7 @@ import { MessageStoreError } from './kv_archiver_store/message_store.js';
765
766
  };
766
767
  await store.addContractInstances([
767
768
  otherContractInstance
768
- ], 1);
769
+ ], BlockNumber(1));
769
770
  await store.addContractInstanceUpdates([
770
771
  {
771
772
  prevContractClassId: otherClassId,
@@ -788,7 +789,7 @@ import { MessageStoreError } from './kv_archiver_store/message_store.js';
788
789
  contractClass
789
790
  ], [
790
791
  await computePublicBytecodeCommitment(contractClass.packedBytecode)
791
- ], blockNum);
792
+ ], BlockNumber(blockNum));
792
793
  });
793
794
  it('returns previously stored contract class', async ()=>{
794
795
  await expect(store.getContractClass(contractClass.id)).resolves.toMatchObject(contractClass);
@@ -796,7 +797,7 @@ import { MessageStoreError } from './kv_archiver_store/message_store.js';
796
797
  it('returns undefined if the initial deployed contract class was deleted', async ()=>{
797
798
  await store.deleteContractClasses([
798
799
  contractClass
799
- ], blockNum);
800
+ ], BlockNumber(blockNum));
800
801
  await expect(store.getContractClass(contractClass.id)).resolves.toBeUndefined();
801
802
  });
802
803
  it('returns contract class if later "deployment" class was deleted', async ()=>{
@@ -804,10 +805,10 @@ import { MessageStoreError } from './kv_archiver_store/message_store.js';
804
805
  contractClass
805
806
  ], [
806
807
  await computePublicBytecodeCommitment(contractClass.packedBytecode)
807
- ], blockNum + 1);
808
+ ], BlockNumber(blockNum + 1));
808
809
  await store.deleteContractClasses([
809
810
  contractClass
810
- ], blockNum + 1);
811
+ ], BlockNumber(blockNum + 1));
811
812
  await expect(store.getContractClass(contractClass.id)).resolves.toMatchObject(contractClass);
812
813
  });
813
814
  it('returns undefined if contract class is not found', async ()=>{
@@ -870,8 +871,8 @@ import { MessageStoreError } from './kv_archiver_store/message_store.js';
870
871
  });
871
872
  };
872
873
  const mockBlockWithLogs = async (blockNumber)=>{
873
- const block = await L2Block.random(blockNumber);
874
- block.header.globalVariables.blockNumber = blockNumber;
874
+ const block = await L2Block.random(BlockNumber(blockNumber));
875
+ block.header.globalVariables.blockNumber = BlockNumber(blockNumber);
875
876
  block.body.txEffects = await timesParallel(numTxsPerBlock, async (txIndex)=>{
876
877
  const txEffect = await TxEffect.random();
877
878
  txEffect.privateLogs = mockPrivateLogs(blockNumber, txIndex);
@@ -995,7 +996,7 @@ import { MessageStoreError } from './kv_archiver_store/message_store.js';
995
996
  let blocks;
996
997
  beforeEach(async ()=>{
997
998
  blocks = await timesParallel(numBlocks, async (index)=>PublishedL2Block.fromFields({
998
- block: await L2Block.random(index + 1, txsPerBlock, numPublicFunctionCalls, numPublicLogs),
999
+ block: await L2Block.random(BlockNumber(index + 1), txsPerBlock, numPublicFunctionCalls, numPublicLogs),
999
1000
  l1: {
1000
1001
  blockNumber: BigInt(index),
1001
1002
  blockHash: makeBlockHash(index),
@@ -1012,7 +1013,7 @@ import { MessageStoreError } from './kv_archiver_store/message_store.js';
1012
1013
  const targetTxIndex = randomInt(txsPerBlock);
1013
1014
  const targetTxHash = blocks[targetBlockIndex].block.body.txEffects[targetTxIndex].txHash;
1014
1015
  await Promise.all([
1015
- store.unwindBlocks(blocks.length, blocks.length),
1016
+ store.unwindBlocks(BlockNumber(blocks.length), blocks.length),
1016
1017
  store.deleteLogs(blocks.map((b)=>b.block))
1017
1018
  ]);
1018
1019
  const response = await store.getPublicLogs({
@@ -1077,7 +1078,7 @@ import { MessageStoreError } from './kv_archiver_store/message_store.js';
1077
1078
  const targetBlockIndex = randomInt(numBlocks);
1078
1079
  const targetTxIndex = randomInt(txsPerBlock);
1079
1080
  const targetLogIndex = randomInt(numPublicLogs);
1080
- const afterLog = new LogId(targetBlockIndex + INITIAL_L2_BLOCK_NUM, targetTxIndex, targetLogIndex);
1081
+ const afterLog = new LogId(BlockNumber(targetBlockIndex + INITIAL_L2_BLOCK_NUM), targetTxIndex, targetLogIndex);
1081
1082
  const response = await store.getPublicLogs({
1082
1083
  afterLog
1083
1084
  });
@@ -1097,7 +1098,7 @@ import { MessageStoreError } from './kv_archiver_store/message_store.js';
1097
1098
  it('"txHash" filter param is ignored when "afterLog" is set', async ()=>{
1098
1099
  // Get random txHash
1099
1100
  const txHash = TxHash.random();
1100
- const afterLog = new LogId(1, 0, 0);
1101
+ const afterLog = new LogId(BlockNumber(1), 0, 0);
1101
1102
  const response = await store.getPublicLogs({
1102
1103
  txHash,
1103
1104
  afterLog
@@ -1113,7 +1114,7 @@ import { MessageStoreError } from './kv_archiver_store/message_store.js';
1113
1114
  // "fromBlock" gets correctly trimmed to range and "toBlock" is exclusive
1114
1115
  logs = (await store.getPublicLogs({
1115
1116
  fromBlock: -10,
1116
- toBlock: 5
1117
+ toBlock: BlockNumber(5)
1117
1118
  })).logs;
1118
1119
  let blockNumbers = new Set(logs.map((log)=>log.id.blockNumber));
1119
1120
  expect(blockNumbers).toEqual(new Set([
@@ -1124,13 +1125,13 @@ import { MessageStoreError } from './kv_archiver_store/message_store.js';
1124
1125
  ]));
1125
1126
  // "toBlock" should be exclusive
1126
1127
  logs = (await store.getPublicLogs({
1127
- fromBlock: 1,
1128
- toBlock: 1
1128
+ fromBlock: BlockNumber(1),
1129
+ toBlock: BlockNumber(1)
1129
1130
  })).logs;
1130
1131
  expect(logs.length).toBe(0);
1131
1132
  logs = (await store.getPublicLogs({
1132
- fromBlock: 10,
1133
- toBlock: 5
1133
+ fromBlock: BlockNumber(10),
1134
+ toBlock: BlockNumber(5)
1134
1135
  })).logs;
1135
1136
  expect(logs.length).toBe(0);
1136
1137
  // both "fromBlock" and "toBlock" get correctly capped to range and logs from all blocks are returned
@@ -1142,23 +1143,23 @@ import { MessageStoreError } from './kv_archiver_store/message_store.js';
1142
1143
  expect(blockNumbers.size).toBe(numBlocks);
1143
1144
  // intersecting with "afterLog" works
1144
1145
  logs = (await store.getPublicLogs({
1145
- fromBlock: 2,
1146
- toBlock: 5,
1147
- afterLog: new LogId(4, 0, 0)
1146
+ fromBlock: BlockNumber(2),
1147
+ toBlock: BlockNumber(5),
1148
+ afterLog: new LogId(BlockNumber(4), 0, 0)
1148
1149
  })).logs;
1149
1150
  blockNumbers = new Set(logs.map((log)=>log.id.blockNumber));
1150
1151
  expect(blockNumbers).toEqual(new Set([
1151
1152
  4
1152
1153
  ]));
1153
1154
  logs = (await store.getPublicLogs({
1154
- toBlock: 5,
1155
- afterLog: new LogId(5, 1, 0)
1155
+ toBlock: BlockNumber(5),
1156
+ afterLog: new LogId(BlockNumber(5), 1, 0)
1156
1157
  })).logs;
1157
1158
  expect(logs.length).toBe(0);
1158
1159
  logs = (await store.getPublicLogs({
1159
- fromBlock: 2,
1160
- toBlock: 5,
1161
- afterLog: new LogId(100, 0, 0)
1160
+ fromBlock: BlockNumber(2),
1161
+ toBlock: BlockNumber(5),
1162
+ afterLog: new LogId(BlockNumber(100), 0, 0)
1162
1163
  })).logs;
1163
1164
  expect(logs.length).toBe(0);
1164
1165
  });
@@ -1167,7 +1168,7 @@ import { MessageStoreError } from './kv_archiver_store/message_store.js';
1167
1168
  const targetBlockIndex = randomInt(numBlocks);
1168
1169
  const targetTxIndex = randomInt(txsPerBlock);
1169
1170
  const targetLogIndex = randomInt(numPublicLogs);
1170
- const afterLog = new LogId(targetBlockIndex + INITIAL_L2_BLOCK_NUM, targetTxIndex, targetLogIndex);
1171
+ const afterLog = new LogId(BlockNumber(targetBlockIndex + INITIAL_L2_BLOCK_NUM), targetTxIndex, targetLogIndex);
1171
1172
  const response = await store.getPublicLogs({
1172
1173
  afterLog,
1173
1174
  fromBlock: afterLog.blockNumber
@@ -1207,7 +1208,7 @@ import { MessageStoreError } from './kv_archiver_store/message_store.js';
1207
1208
  EthAddress.random(),
1208
1209
  EthAddress.random()
1209
1210
  ],
1210
- epoch: 123n,
1211
+ epoch: EpochNumber(123),
1211
1212
  seed: 456n,
1212
1213
  attestors: [
1213
1214
  EthAddress.random()
@@ -1231,7 +1232,7 @@ import { MessageStoreError } from './kv_archiver_store/message_store.js';
1231
1232
  attestors: [
1232
1233
  EthAddress.random()
1233
1234
  ],
1234
- epoch: 789n,
1235
+ epoch: EpochNumber(789),
1235
1236
  seed: 101n,
1236
1237
  attestations: [
1237
1238
  CommitteeAttestation.random()
@@ -1253,7 +1254,7 @@ import { MessageStoreError } from './kv_archiver_store/message_store.js';
1253
1254
  committee: [
1254
1255
  EthAddress.random()
1255
1256
  ],
1256
- epoch: 999n,
1257
+ epoch: EpochNumber(999),
1257
1258
  seed: 888n,
1258
1259
  attestors: [
1259
1260
  EthAddress.random()
@@ -1273,7 +1274,7 @@ import { MessageStoreError } from './kv_archiver_store/message_store.js';
1273
1274
  valid: false,
1274
1275
  block: randomBlockInfo(4),
1275
1276
  committee: [],
1276
- epoch: 0n,
1277
+ epoch: EpochNumber(0),
1277
1278
  seed: 0n,
1278
1279
  attestors: [],
1279
1280
  attestations: [],
@@ -18,4 +18,4 @@ export declare const archiverConfigMappings: ConfigMappingsType<ArchiverConfig>;
18
18
  * @returns The archiver configuration.
19
19
  */
20
20
  export declare function getArchiverConfigFromEnv(): ArchiverConfig;
21
- //# sourceMappingURL=config.d.ts.map
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXJjaGl2ZXIvY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLGNBQWMsRUFBeUIsTUFBTSx5QkFBeUIsQ0FBQztBQUNyRixPQUFPLEVBQ0wsS0FBSyxpQkFBaUIsRUFDdEIsS0FBSyxjQUFjLEVBSXBCLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUNMLEtBQUssa0JBQWtCLEVBSXhCLE1BQU0sMEJBQTBCLENBQUM7QUFDbEMsT0FBTyxFQUFFLEtBQUssV0FBVyxFQUF1QixNQUFNLHNCQUFzQixDQUFDO0FBQzdFLE9BQU8sS0FBSyxFQUFFLHNCQUFzQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFOUU7Ozs7OztHQU1HO0FBQ0gsTUFBTSxNQUFNLGNBQWMsR0FBRyxzQkFBc0IsR0FBRyxjQUFjLEdBQUcsaUJBQWlCLEdBQUcsY0FBYyxHQUFHLFdBQVcsQ0FBQztBQUV4SCxlQUFPLE1BQU0sc0JBQXNCLEVBQUUsa0JBQWtCLENBQUMsY0FBYyxDQTJDckUsQ0FBQztBQUVGOzs7O0dBSUc7QUFDSCx3QkFBZ0Isd0JBQXdCLElBQUksY0FBYyxDQUV6RCJ9
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/archiver/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAyB,MAAM,yBAAyB,CAAC;AACrF,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,cAAc,EAIpB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,KAAK,kBAAkB,EAIxB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,KAAK,WAAW,EAAuB,MAAM,sBAAsB,CAAC;AAC7E,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AAE9E;;;;;;GAMG;AACH,MAAM,MAAM,cAAc,GAAG,sBAAsB,GAAG,cAAc,GAAG,iBAAiB,GAAG,cAAc,GAAG,WAAW,CAAC;AAExH,eAAO,MAAM,sBAAsB,EAAE,kBAAkB,CAAC,cAAc,CAsCrE,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,wBAAwB,IAAI,cAAc,CAEzD"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/archiver/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAyB,MAAM,yBAAyB,CAAC;AACrF,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,cAAc,EAIpB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,KAAK,kBAAkB,EAIxB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,KAAK,WAAW,EAAuB,MAAM,sBAAsB,CAAC;AAC7E,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AAE9E;;;;;;GAMG;AACH,MAAM,MAAM,cAAc,GAAG,sBAAsB,GAAG,cAAc,GAAG,iBAAiB,GAAG,cAAc,GAAG,WAAW,CAAC;AAExH,eAAO,MAAM,sBAAsB,EAAE,kBAAkB,CAAC,cAAc,CA2CrE,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,wBAAwB,IAAI,cAAc,CAEzD"}
@@ -28,6 +28,11 @@ export const archiverConfigMappings = {
28
28
  description: 'Whether to skip validating block attestations (use only for testing).',
29
29
  ...booleanConfigHelper(false)
30
30
  },
31
+ maxAllowedEthClientDriftSeconds: {
32
+ env: 'MAX_ALLOWED_ETH_CLIENT_DRIFT_SECONDS',
33
+ description: 'Maximum allowed drift in seconds between the Ethereum client and current time.',
34
+ ...numberConfigHelper(300)
35
+ },
31
36
  ...chainConfigMappings,
32
37
  ...l1ReaderConfigMappings,
33
38
  viemPollingIntervalMS: {