@aztec/archiver 0.0.1-commit.24de95ac → 0.0.1-commit.3469e52

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 (206) hide show
  1. package/README.md +147 -22
  2. package/dest/archiver.d.ts +135 -0
  3. package/dest/archiver.d.ts.map +1 -0
  4. package/dest/archiver.js +769 -0
  5. package/dest/config.d.ts +30 -0
  6. package/dest/config.d.ts.map +1 -0
  7. package/dest/{archiver/config.js → config.js} +26 -5
  8. package/dest/errors.d.ts +36 -0
  9. package/dest/errors.d.ts.map +1 -0
  10. package/dest/errors.js +54 -0
  11. package/dest/factory.d.ts +5 -6
  12. package/dest/factory.d.ts.map +1 -1
  13. package/dest/factory.js +85 -7
  14. package/dest/index.d.ts +10 -4
  15. package/dest/index.d.ts.map +1 -1
  16. package/dest/index.js +8 -3
  17. package/dest/interfaces.d.ts +9 -0
  18. package/dest/interfaces.d.ts.map +1 -0
  19. package/dest/interfaces.js +3 -0
  20. package/dest/l1/bin/retrieve-calldata.d.ts +3 -0
  21. package/dest/l1/bin/retrieve-calldata.d.ts.map +1 -0
  22. package/dest/l1/bin/retrieve-calldata.js +149 -0
  23. package/dest/l1/calldata_retriever.d.ts +112 -0
  24. package/dest/l1/calldata_retriever.d.ts.map +1 -0
  25. package/dest/l1/calldata_retriever.js +471 -0
  26. package/dest/l1/data_retrieval.d.ts +88 -0
  27. package/dest/l1/data_retrieval.d.ts.map +1 -0
  28. package/dest/l1/data_retrieval.js +312 -0
  29. package/dest/l1/debug_tx.d.ts +19 -0
  30. package/dest/l1/debug_tx.d.ts.map +1 -0
  31. package/dest/l1/debug_tx.js +73 -0
  32. package/dest/l1/spire_proposer.d.ts +70 -0
  33. package/dest/l1/spire_proposer.d.ts.map +1 -0
  34. package/dest/l1/spire_proposer.js +157 -0
  35. package/dest/l1/trace_tx.d.ts +97 -0
  36. package/dest/l1/trace_tx.d.ts.map +1 -0
  37. package/dest/l1/trace_tx.js +91 -0
  38. package/dest/l1/types.d.ts +12 -0
  39. package/dest/l1/types.d.ts.map +1 -0
  40. package/dest/l1/types.js +3 -0
  41. package/dest/l1/validate_trace.d.ts +29 -0
  42. package/dest/l1/validate_trace.d.ts.map +1 -0
  43. package/dest/l1/validate_trace.js +150 -0
  44. package/dest/modules/data_source_base.d.ts +85 -0
  45. package/dest/modules/data_source_base.d.ts.map +1 -0
  46. package/dest/modules/data_source_base.js +291 -0
  47. package/dest/modules/data_store_updater.d.ts +69 -0
  48. package/dest/modules/data_store_updater.d.ts.map +1 -0
  49. package/dest/modules/data_store_updater.js +304 -0
  50. package/dest/modules/instrumentation.d.ts +37 -0
  51. package/dest/modules/instrumentation.d.ts.map +1 -0
  52. package/dest/{archiver → modules}/instrumentation.js +22 -59
  53. package/dest/modules/l1_synchronizer.d.ts +75 -0
  54. package/dest/modules/l1_synchronizer.d.ts.map +1 -0
  55. package/dest/modules/l1_synchronizer.js +1113 -0
  56. package/dest/modules/validation.d.ts +17 -0
  57. package/dest/modules/validation.d.ts.map +1 -0
  58. package/dest/{archiver → modules}/validation.js +35 -21
  59. package/dest/store/block_store.d.ts +178 -0
  60. package/dest/store/block_store.d.ts.map +1 -0
  61. package/dest/store/block_store.js +680 -0
  62. package/dest/store/contract_class_store.d.ts +18 -0
  63. package/dest/store/contract_class_store.d.ts.map +1 -0
  64. package/dest/{archiver/kv_archiver_store → store}/contract_class_store.js +2 -2
  65. package/dest/store/contract_instance_store.d.ts +24 -0
  66. package/dest/store/contract_instance_store.d.ts.map +1 -0
  67. package/dest/{archiver/kv_archiver_store → store}/contract_instance_store.js +1 -1
  68. package/dest/store/kv_archiver_store.d.ts +336 -0
  69. package/dest/store/kv_archiver_store.d.ts.map +1 -0
  70. package/dest/store/kv_archiver_store.js +443 -0
  71. package/dest/store/log_store.d.ts +54 -0
  72. package/dest/store/log_store.d.ts.map +1 -0
  73. package/dest/store/log_store.js +436 -0
  74. package/dest/store/message_store.d.ts +40 -0
  75. package/dest/store/message_store.d.ts.map +1 -0
  76. package/dest/{archiver/kv_archiver_store → store}/message_store.js +15 -14
  77. package/dest/structs/data_retrieval.d.ts +27 -0
  78. package/dest/structs/data_retrieval.d.ts.map +1 -0
  79. package/dest/structs/inbox_message.d.ts +15 -0
  80. package/dest/structs/inbox_message.d.ts.map +1 -0
  81. package/dest/{archiver/structs → structs}/inbox_message.js +6 -5
  82. package/dest/structs/published.d.ts +2 -0
  83. package/dest/structs/published.d.ts.map +1 -0
  84. package/dest/test/fake_l1_state.d.ts +190 -0
  85. package/dest/test/fake_l1_state.d.ts.map +1 -0
  86. package/dest/test/fake_l1_state.js +383 -0
  87. package/dest/test/index.d.ts +2 -1
  88. package/dest/test/index.d.ts.map +1 -1
  89. package/dest/test/index.js +1 -0
  90. package/dest/test/mock_archiver.d.ts +16 -8
  91. package/dest/test/mock_archiver.d.ts.map +1 -1
  92. package/dest/test/mock_archiver.js +18 -14
  93. package/dest/test/mock_l1_to_l2_message_source.d.ts +7 -6
  94. package/dest/test/mock_l1_to_l2_message_source.d.ts.map +1 -1
  95. package/dest/test/mock_l1_to_l2_message_source.js +21 -11
  96. package/dest/test/mock_l2_block_source.d.ts +38 -19
  97. package/dest/test/mock_l2_block_source.d.ts.map +1 -1
  98. package/dest/test/mock_l2_block_source.js +168 -47
  99. package/dest/test/mock_structs.d.ts +78 -3
  100. package/dest/test/mock_structs.d.ts.map +1 -1
  101. package/dest/test/mock_structs.js +141 -9
  102. package/package.json +19 -20
  103. package/src/archiver.ts +525 -0
  104. package/src/{archiver/config.ts → config.ts} +33 -12
  105. package/src/errors.ts +90 -0
  106. package/src/factory.ts +121 -8
  107. package/src/index.ts +10 -3
  108. package/src/interfaces.ts +9 -0
  109. package/src/l1/README.md +98 -0
  110. package/src/l1/bin/retrieve-calldata.ts +182 -0
  111. package/src/l1/calldata_retriever.ts +641 -0
  112. package/src/l1/data_retrieval.ts +495 -0
  113. package/src/l1/debug_tx.ts +99 -0
  114. package/src/l1/spire_proposer.ts +160 -0
  115. package/src/l1/trace_tx.ts +128 -0
  116. package/src/l1/types.ts +13 -0
  117. package/src/l1/validate_trace.ts +211 -0
  118. package/src/modules/data_source_base.ts +418 -0
  119. package/src/modules/data_store_updater.ts +419 -0
  120. package/src/{archiver → modules}/instrumentation.ts +26 -61
  121. package/src/modules/l1_synchronizer.ts +931 -0
  122. package/src/modules/validation.ts +129 -0
  123. package/src/store/block_store.ts +919 -0
  124. package/src/{archiver/kv_archiver_store → store}/contract_class_store.ts +2 -2
  125. package/src/{archiver/kv_archiver_store → store}/contract_instance_store.ts +2 -2
  126. package/src/store/kv_archiver_store.ts +631 -0
  127. package/src/store/log_store.ts +575 -0
  128. package/src/{archiver/kv_archiver_store → store}/message_store.ts +21 -18
  129. package/src/{archiver/structs → structs}/inbox_message.ts +8 -8
  130. package/src/structs/published.ts +1 -0
  131. package/src/test/fake_l1_state.ts +599 -0
  132. package/src/test/fixtures/debug_traceTransaction-multicall3.json +88 -0
  133. package/src/test/fixtures/debug_traceTransaction-multiplePropose.json +153 -0
  134. package/src/test/fixtures/debug_traceTransaction-proxied.json +122 -0
  135. package/src/test/fixtures/trace_transaction-multicall3.json +65 -0
  136. package/src/test/fixtures/trace_transaction-multiplePropose.json +319 -0
  137. package/src/test/fixtures/trace_transaction-proxied.json +128 -0
  138. package/src/test/fixtures/trace_transaction-randomRevert.json +216 -0
  139. package/src/test/index.ts +1 -0
  140. package/src/test/mock_archiver.ts +22 -16
  141. package/src/test/mock_l1_to_l2_message_source.ts +18 -11
  142. package/src/test/mock_l2_block_source.ts +200 -63
  143. package/src/test/mock_structs.ts +256 -10
  144. package/dest/archiver/archiver.d.ts +0 -277
  145. package/dest/archiver/archiver.d.ts.map +0 -1
  146. package/dest/archiver/archiver.js +0 -1322
  147. package/dest/archiver/archiver_store.d.ts +0 -255
  148. package/dest/archiver/archiver_store.d.ts.map +0 -1
  149. package/dest/archiver/archiver_store.js +0 -4
  150. package/dest/archiver/archiver_store_test_suite.d.ts +0 -8
  151. package/dest/archiver/archiver_store_test_suite.d.ts.map +0 -1
  152. package/dest/archiver/archiver_store_test_suite.js +0 -1288
  153. package/dest/archiver/config.d.ts +0 -21
  154. package/dest/archiver/config.d.ts.map +0 -1
  155. package/dest/archiver/data_retrieval.d.ts +0 -79
  156. package/dest/archiver/data_retrieval.d.ts.map +0 -1
  157. package/dest/archiver/data_retrieval.js +0 -362
  158. package/dest/archiver/errors.d.ts +0 -12
  159. package/dest/archiver/errors.d.ts.map +0 -1
  160. package/dest/archiver/errors.js +0 -17
  161. package/dest/archiver/index.d.ts +0 -7
  162. package/dest/archiver/index.d.ts.map +0 -1
  163. package/dest/archiver/index.js +0 -4
  164. package/dest/archiver/instrumentation.d.ts +0 -35
  165. package/dest/archiver/instrumentation.d.ts.map +0 -1
  166. package/dest/archiver/kv_archiver_store/block_store.d.ts +0 -124
  167. package/dest/archiver/kv_archiver_store/block_store.d.ts.map +0 -1
  168. package/dest/archiver/kv_archiver_store/block_store.js +0 -370
  169. package/dest/archiver/kv_archiver_store/contract_class_store.d.ts +0 -18
  170. package/dest/archiver/kv_archiver_store/contract_class_store.d.ts.map +0 -1
  171. package/dest/archiver/kv_archiver_store/contract_instance_store.d.ts +0 -24
  172. package/dest/archiver/kv_archiver_store/contract_instance_store.d.ts.map +0 -1
  173. package/dest/archiver/kv_archiver_store/kv_archiver_store.d.ts +0 -168
  174. package/dest/archiver/kv_archiver_store/kv_archiver_store.d.ts.map +0 -1
  175. package/dest/archiver/kv_archiver_store/kv_archiver_store.js +0 -296
  176. package/dest/archiver/kv_archiver_store/log_store.d.ts +0 -49
  177. package/dest/archiver/kv_archiver_store/log_store.d.ts.map +0 -1
  178. package/dest/archiver/kv_archiver_store/log_store.js +0 -336
  179. package/dest/archiver/kv_archiver_store/message_store.d.ts +0 -39
  180. package/dest/archiver/kv_archiver_store/message_store.d.ts.map +0 -1
  181. package/dest/archiver/structs/data_retrieval.d.ts +0 -27
  182. package/dest/archiver/structs/data_retrieval.d.ts.map +0 -1
  183. package/dest/archiver/structs/inbox_message.d.ts +0 -15
  184. package/dest/archiver/structs/inbox_message.d.ts.map +0 -1
  185. package/dest/archiver/structs/published.d.ts +0 -2
  186. package/dest/archiver/structs/published.d.ts.map +0 -1
  187. package/dest/archiver/validation.d.ts +0 -11
  188. package/dest/archiver/validation.d.ts.map +0 -1
  189. package/dest/rpc/index.d.ts +0 -9
  190. package/dest/rpc/index.d.ts.map +0 -1
  191. package/dest/rpc/index.js +0 -15
  192. package/src/archiver/archiver.ts +0 -1722
  193. package/src/archiver/archiver_store.ts +0 -305
  194. package/src/archiver/archiver_store_test_suite.ts +0 -1263
  195. package/src/archiver/data_retrieval.ts +0 -545
  196. package/src/archiver/errors.ts +0 -26
  197. package/src/archiver/index.ts +0 -6
  198. package/src/archiver/kv_archiver_store/block_store.ts +0 -481
  199. package/src/archiver/kv_archiver_store/kv_archiver_store.ts +0 -422
  200. package/src/archiver/kv_archiver_store/log_store.ts +0 -406
  201. package/src/archiver/structs/published.ts +0 -1
  202. package/src/archiver/validation.ts +0 -99
  203. package/src/rpc/index.ts +0 -16
  204. /package/dest/{archiver/structs → structs}/data_retrieval.js +0 -0
  205. /package/dest/{archiver/structs → structs}/published.js +0 -0
  206. /package/src/{archiver/structs → structs}/data_retrieval.ts +0 -0
@@ -4,11 +4,11 @@ import { MockL2BlockSource } from './mock_l2_block_source.js';
4
4
  * A mocked implementation of the archiver that implements L2BlockSource and L1ToL2MessageSource.
5
5
  */ export class MockArchiver extends MockL2BlockSource {
6
6
  messageSource = new MockL1ToL2MessageSource(0);
7
- setL1ToL2Messages(blockNumber, msgs) {
8
- this.messageSource.setL1ToL2Messages(blockNumber, msgs);
7
+ setL1ToL2Messages(checkpointNumber, msgs) {
8
+ this.messageSource.setL1ToL2Messages(checkpointNumber, msgs);
9
9
  }
10
- getL1ToL2Messages(blockNumber) {
11
- return this.messageSource.getL1ToL2Messages(blockNumber);
10
+ getL1ToL2Messages(checkpointNumber) {
11
+ return this.messageSource.getL1ToL2Messages(checkpointNumber);
12
12
  }
13
13
  getL1ToL2MessageIndex(_l1ToL2Message) {
14
14
  return this.messageSource.getL1ToL2MessageIndex(_l1ToL2Message);
@@ -17,24 +17,28 @@ import { MockL2BlockSource } from './mock_l2_block_source.js';
17
17
  /**
18
18
  * A mocked implementation of the archiver with a set of precomputed blocks and messages.
19
19
  */ export class MockPrefilledArchiver extends MockArchiver {
20
- precomputed;
21
- constructor(precomputed, messages){
20
+ prefilled = [];
21
+ constructor(prefilled){
22
22
  super();
23
- this.precomputed = precomputed.slice();
24
- messages.forEach((msgs, i)=>this.setL1ToL2Messages(i + 1, msgs));
23
+ this.setPrefilled(prefilled);
25
24
  }
26
- setPrefilledBlocks(blocks, messages) {
27
- for (const block of blocks){
28
- this.precomputed[block.number - 1] = block;
25
+ setPrefilled(prefilled) {
26
+ for (const { checkpoint, messages } of prefilled){
27
+ this.prefilled[checkpoint.number - 1] = checkpoint;
28
+ if (checkpoint.blocks.length !== 1) {
29
+ throw new Error('Prefilled checkpoint must only have 1 block at the moment.');
30
+ }
31
+ this.setL1ToL2Messages(checkpoint.number, messages);
29
32
  }
30
- messages.forEach((msgs, i)=>this.setL1ToL2Messages(blocks[i].number, msgs));
31
33
  }
32
34
  createBlocks(numBlocks) {
33
- if (this.l2Blocks.length + numBlocks > this.precomputed.length) {
35
+ const flattenedBlocks = this.prefilled.flatMap((c)=>c.blocks);
36
+ if (this.l2Blocks.length + numBlocks > flattenedBlocks.length) {
34
37
  throw new Error(`Not enough precomputed blocks to create ${numBlocks} more blocks (already at ${this.l2Blocks.length})`);
35
38
  }
36
39
  const fromBlock = this.l2Blocks.length;
37
- this.addBlocks(this.precomputed.slice(fromBlock, fromBlock + numBlocks));
40
+ // TODO: Add L2 blocks and checkpoints separately once archiver has the apis for that.
41
+ this.addBlocks(this.prefilled.slice(fromBlock, fromBlock + numBlocks).flatMap((c)=>c.blocks));
38
42
  return Promise.resolve();
39
43
  }
40
44
  }
@@ -1,4 +1,5 @@
1
- import { Fr } from '@aztec/foundation/fields';
1
+ import { BlockNumber, CheckpointNumber } from '@aztec/foundation/branded-types';
2
+ import { Fr } from '@aztec/foundation/curves/bn254';
2
3
  import type { L2Tips } from '@aztec/stdlib/block';
3
4
  import type { L1ToL2MessageSource } from '@aztec/stdlib/messaging';
4
5
  /**
@@ -6,13 +7,13 @@ import type { L1ToL2MessageSource } from '@aztec/stdlib/messaging';
6
7
  */
7
8
  export declare class MockL1ToL2MessageSource implements L1ToL2MessageSource {
8
9
  private blockNumber;
9
- private messagesPerBlock;
10
+ private messagesPerCheckpoint;
10
11
  constructor(blockNumber: number);
11
- setL1ToL2Messages(blockNumber: number, msgs: Fr[]): void;
12
+ setL1ToL2Messages(checkpointNumber: CheckpointNumber, msgs: Fr[]): void;
12
13
  setBlockNumber(blockNumber: number): void;
13
- getL1ToL2Messages(blockNumber: number): Promise<Fr[]>;
14
+ getL1ToL2Messages(checkpointNumber: CheckpointNumber): Promise<Fr[]>;
14
15
  getL1ToL2MessageIndex(_l1ToL2Message: Fr): Promise<bigint | undefined>;
15
- getBlockNumber(): Promise<number>;
16
+ getBlockNumber(): Promise<BlockNumber>;
16
17
  getL2Tips(): Promise<L2Tips>;
17
18
  }
18
- //# sourceMappingURL=mock_l1_to_l2_message_source.d.ts.map
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ja19sMV90b19sMl9tZXNzYWdlX3NvdXJjZS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Rlc3QvbW9ja19sMV90b19sMl9tZXNzYWdlX3NvdXJjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDaEYsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3BELE9BQU8sS0FBSyxFQUFvQyxNQUFNLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNwRixPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRW5FOztHQUVHO0FBQ0gscUJBQWEsdUJBQXdCLFlBQVcsbUJBQW1CO0lBR3JELE9BQU8sQ0FBQyxXQUFXO0lBRi9CLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBcUM7SUFFbEUsWUFBb0IsV0FBVyxFQUFFLE1BQU0sRUFBSTtJQUVwQyxpQkFBaUIsQ0FBQyxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLFFBRXRFO0lBRU0sY0FBYyxDQUFDLFdBQVcsRUFBRSxNQUFNLFFBRXhDO0lBRUQsaUJBQWlCLENBQUMsZ0JBQWdCLEVBQUUsZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBRW5FO0lBRUQscUJBQXFCLENBQUMsY0FBYyxFQUFFLEVBQUUsR0FBRyxPQUFPLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxDQUVyRTtJQUVELGNBQWMseUJBRWI7SUFFRCxTQUFTLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQWMzQjtDQUNGIn0=
@@ -1 +1 @@
1
- {"version":3,"file":"mock_l1_to_l2_message_source.d.ts","sourceRoot":"","sources":["../../src/test/mock_l1_to_l2_message_source.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAC9C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAEnE;;GAEG;AACH,qBAAa,uBAAwB,YAAW,mBAAmB;IAGrD,OAAO,CAAC,WAAW;IAF/B,OAAO,CAAC,gBAAgB,CAA2B;gBAE/B,WAAW,EAAE,MAAM;IAEhC,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE;IAIjD,cAAc,CAAC,WAAW,EAAE,MAAM;IAIzC,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,EAAE,EAAE,CAAC;IAIrD,qBAAqB,CAAC,cAAc,EAAE,EAAE,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAItE,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC;IAIjC,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC;CAS7B"}
1
+ {"version":3,"file":"mock_l1_to_l2_message_source.d.ts","sourceRoot":"","sources":["../../src/test/mock_l1_to_l2_message_source.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAChF,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AACpD,OAAO,KAAK,EAAoC,MAAM,EAAE,MAAM,qBAAqB,CAAC;AACpF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAEnE;;GAEG;AACH,qBAAa,uBAAwB,YAAW,mBAAmB;IAGrD,OAAO,CAAC,WAAW;IAF/B,OAAO,CAAC,qBAAqB,CAAqC;IAElE,YAAoB,WAAW,EAAE,MAAM,EAAI;IAEpC,iBAAiB,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,IAAI,EAAE,EAAE,EAAE,QAEtE;IAEM,cAAc,CAAC,WAAW,EAAE,MAAM,QAExC;IAED,iBAAiB,CAAC,gBAAgB,EAAE,gBAAgB,GAAG,OAAO,CAAC,EAAE,EAAE,CAAC,CAEnE;IAED,qBAAqB,CAAC,cAAc,EAAE,EAAE,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAErE;IAED,cAAc,yBAEb;IAED,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,CAc3B;CACF"}
@@ -1,36 +1,46 @@
1
- import { Fr } from '@aztec/foundation/fields';
1
+ import { BlockNumber, CheckpointNumber } from '@aztec/foundation/branded-types';
2
+ import { Fr } from '@aztec/foundation/curves/bn254';
2
3
  /**
3
4
  * A mocked implementation of L1ToL2MessageSource to be used in tests.
4
5
  */ export class MockL1ToL2MessageSource {
5
6
  blockNumber;
6
- messagesPerBlock;
7
+ messagesPerCheckpoint;
7
8
  constructor(blockNumber){
8
9
  this.blockNumber = blockNumber;
9
- this.messagesPerBlock = new Map();
10
+ this.messagesPerCheckpoint = new Map();
10
11
  }
11
- setL1ToL2Messages(blockNumber, msgs) {
12
- this.messagesPerBlock.set(blockNumber, msgs);
12
+ setL1ToL2Messages(checkpointNumber, msgs) {
13
+ this.messagesPerCheckpoint.set(checkpointNumber, msgs);
13
14
  }
14
15
  setBlockNumber(blockNumber) {
15
16
  this.blockNumber = blockNumber;
16
17
  }
17
- getL1ToL2Messages(blockNumber) {
18
- return Promise.resolve(this.messagesPerBlock.get(blockNumber) ?? []);
18
+ getL1ToL2Messages(checkpointNumber) {
19
+ return Promise.resolve(this.messagesPerCheckpoint.get(checkpointNumber) ?? []);
19
20
  }
20
21
  getL1ToL2MessageIndex(_l1ToL2Message) {
21
22
  throw new Error('Method not implemented.');
22
23
  }
23
24
  getBlockNumber() {
24
- return Promise.resolve(this.blockNumber);
25
+ return Promise.resolve(BlockNumber(this.blockNumber));
25
26
  }
26
27
  getL2Tips() {
27
28
  const number = this.blockNumber;
28
- const tip = {
29
- number,
29
+ const blockId = {
30
+ number: BlockNumber(number),
30
31
  hash: new Fr(number).toString()
31
32
  };
33
+ const checkpointId = {
34
+ number: CheckpointNumber(number),
35
+ hash: new Fr(number + 1).toString()
36
+ };
37
+ const tip = {
38
+ block: blockId,
39
+ checkpoint: checkpointId
40
+ };
32
41
  return Promise.resolve({
33
- latest: tip,
42
+ proposed: blockId,
43
+ checkpointed: tip,
34
44
  proven: tip,
35
45
  finalized: tip
36
46
  });
@@ -1,8 +1,10 @@
1
+ import { BlockNumber, CheckpointNumber, EpochNumber, SlotNumber } from '@aztec/foundation/branded-types';
2
+ import { Fr } from '@aztec/foundation/curves/bn254';
1
3
  import { EthAddress } from '@aztec/foundation/eth-address';
2
- import { Fr } from '@aztec/foundation/fields';
3
4
  import type { FunctionSelector } from '@aztec/stdlib/abi';
4
5
  import type { AztecAddress } from '@aztec/stdlib/aztec-address';
5
- import { L2Block, L2BlockHash, type L2BlockSource, type L2Tips, PublishedL2Block, type ValidateBlockResult } from '@aztec/stdlib/block';
6
+ import { CheckpointedL2Block, L2BlockHash, L2BlockNew, type L2BlockSource, type L2Tips, type ValidateCheckpointResult } from '@aztec/stdlib/block';
7
+ import { Checkpoint, PublishedCheckpoint } from '@aztec/stdlib/checkpoint';
6
8
  import type { ContractClassPublic, ContractDataSource, ContractInstanceWithAddress } from '@aztec/stdlib/contract';
7
9
  import { type L1RollupConstants } from '@aztec/stdlib/epoch-helpers';
8
10
  import { type BlockHeader, TxHash, TxReceipt } from '@aztec/stdlib/tx';
@@ -11,15 +13,17 @@ import type { UInt64 } from '@aztec/stdlib/types';
11
13
  * A mocked implementation of L2BlockSource to be used in tests.
12
14
  */
13
15
  export declare class MockL2BlockSource implements L2BlockSource, ContractDataSource {
14
- protected l2Blocks: L2Block[];
16
+ protected l2Blocks: L2BlockNew[];
15
17
  private provenBlockNumber;
16
18
  private finalizedBlockNumber;
19
+ private checkpointedBlockNumber;
17
20
  private log;
18
21
  createBlocks(numBlocks: number): Promise<void>;
19
- addBlocks(blocks: L2Block[]): void;
22
+ addBlocks(blocks: L2BlockNew[]): void;
20
23
  removeBlocks(numBlocks: number): void;
21
24
  setProvenBlockNumber(provenBlockNumber: number): void;
22
25
  setFinalizedBlockNumber(finalizedBlockNumber: number): void;
26
+ setCheckpointedBlockNumber(checkpointedBlockNumber: number): void;
23
27
  /**
24
28
  * Method to fetch the rollup contract address at the base-layer.
25
29
  * @returns The rollup address.
@@ -34,29 +38,44 @@ export declare class MockL2BlockSource implements L2BlockSource, ContractDataSou
34
38
  * Gets the number of the latest L2 block processed by the block source implementation.
35
39
  * @returns In this mock instance, returns the number of L2 blocks that we've mocked.
36
40
  */
37
- getBlockNumber(): Promise<number>;
38
- getProvenBlockNumber(): Promise<number>;
41
+ getBlockNumber(): Promise<BlockNumber>;
42
+ getProvenBlockNumber(): Promise<BlockNumber>;
43
+ getCheckpointedBlock(number: BlockNumber): Promise<CheckpointedL2Block | undefined>;
44
+ getCheckpointedBlocks(from: BlockNumber, limit: number, _proven?: boolean): Promise<CheckpointedL2Block[]>;
39
45
  /**
40
46
  * Gets an l2 block.
41
47
  * @param number - The block number to return (inclusive).
42
48
  * @returns The requested L2 block.
43
49
  */
44
- getBlock(number: number): Promise<L2Block>;
50
+ getBlock(number: number): Promise<L2BlockNew | undefined>;
51
+ /**
52
+ * Gets an L2 block (new format).
53
+ * @param number - The block number to return.
54
+ * @returns The requested L2 block.
55
+ */
56
+ getL2BlockNew(number: BlockNumber): Promise<L2BlockNew | undefined>;
45
57
  /**
46
58
  * Gets up to `limit` amount of L2 blocks starting from `from`.
47
59
  * @param from - Number of the first block to return (inclusive).
48
60
  * @param limit - The maximum number of blocks to return.
49
61
  * @returns The requested mocked L2 blocks.
50
62
  */
51
- getBlocks(from: number, limit: number, proven?: boolean): Promise<L2Block[]>;
52
- getPublishedBlocks(from: number, limit: number, proven?: boolean): Promise<PublishedL2Block[]>;
53
- getPublishedBlockByHash(blockHash: Fr): Promise<PublishedL2Block | undefined>;
54
- getPublishedBlockByArchive(archive: Fr): Promise<PublishedL2Block | undefined>;
63
+ getBlocks(from: number, limit: number, proven?: boolean): Promise<L2BlockNew[]>;
64
+ getPublishedCheckpoints(from: CheckpointNumber, limit: number): Promise<PublishedCheckpoint[]>;
65
+ getCheckpointByArchive(archive: Fr): Promise<Checkpoint | undefined>;
66
+ getPublishedBlocks(from: number, limit: number, proven?: boolean): Promise<CheckpointedL2Block[]>;
67
+ getL2BlocksNew(from: BlockNumber, limit: number, proven?: boolean): Promise<L2BlockNew[]>;
68
+ getPublishedBlockByHash(blockHash: Fr): Promise<CheckpointedL2Block | undefined>;
69
+ getPublishedBlockByArchive(archive: Fr): Promise<CheckpointedL2Block | undefined>;
70
+ getL2BlockNewByHash(blockHash: Fr): Promise<L2BlockNew | undefined>;
71
+ getL2BlockNewByArchive(archive: Fr): Promise<L2BlockNew | undefined>;
55
72
  getBlockHeaderByHash(blockHash: Fr): Promise<BlockHeader | undefined>;
56
73
  getBlockHeaderByArchive(archive: Fr): Promise<BlockHeader | undefined>;
57
74
  getBlockHeader(number: number | 'latest'): Promise<BlockHeader | undefined>;
58
- getBlocksForEpoch(epochNumber: bigint): Promise<L2Block[]>;
59
- getBlockHeadersForEpoch(epochNumber: bigint): Promise<BlockHeader[]>;
75
+ getCheckpointsForEpoch(epochNumber: EpochNumber): Promise<Checkpoint[]>;
76
+ getBlocksForEpoch(epochNumber: EpochNumber): Promise<L2BlockNew[]>;
77
+ getBlocksForSlot(slotNumber: SlotNumber): Promise<L2BlockNew[]>;
78
+ getBlockHeadersForEpoch(epochNumber: EpochNumber): Promise<BlockHeader[]>;
60
79
  /**
61
80
  * Gets a tx effect.
62
81
  * @param txHash - The hash of the tx corresponding to the tx effect.
@@ -64,7 +83,7 @@ export declare class MockL2BlockSource implements L2BlockSource, ContractDataSou
64
83
  */
65
84
  getTxEffect(txHash: TxHash): Promise<{
66
85
  data: import("@aztec/stdlib/tx").TxEffect;
67
- l2BlockNumber: number;
86
+ l2BlockNumber: BlockNumber;
68
87
  l2BlockHash: L2BlockHash;
69
88
  txIndexInBlock: number;
70
89
  } | undefined>;
@@ -75,9 +94,9 @@ export declare class MockL2BlockSource implements L2BlockSource, ContractDataSou
75
94
  */
76
95
  getSettledTxReceipt(txHash: TxHash): Promise<TxReceipt | undefined>;
77
96
  getL2Tips(): Promise<L2Tips>;
78
- getL2EpochNumber(): Promise<bigint>;
79
- getL2SlotNumber(): Promise<bigint>;
80
- isEpochComplete(_epochNumber: bigint): Promise<boolean>;
97
+ getL2EpochNumber(): Promise<EpochNumber>;
98
+ getL2SlotNumber(): Promise<SlotNumber>;
99
+ isEpochComplete(_epochNumber: EpochNumber): Promise<boolean>;
81
100
  getL1Constants(): Promise<L1RollupConstants>;
82
101
  getGenesisValues(): Promise<{
83
102
  genesisArchiveRoot: Fr;
@@ -101,6 +120,6 @@ export declare class MockL2BlockSource implements L2BlockSource, ContractDataSou
101
120
  registerContractFunctionSignatures(_signatures: string[]): Promise<void>;
102
121
  syncImmediate(): Promise<void>;
103
122
  isPendingChainInvalid(): Promise<boolean>;
104
- getPendingChainValidationStatus(): Promise<ValidateBlockResult>;
123
+ getPendingChainValidationStatus(): Promise<ValidateCheckpointResult>;
105
124
  }
106
- //# sourceMappingURL=mock_l2_block_source.d.ts.map
125
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ja19sMl9ibG9ja19zb3VyY2UuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZXN0L21vY2tfbDJfYmxvY2tfc291cmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRXpHLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNwRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFM0QsT0FBTyxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUMxRCxPQUFPLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNoRSxPQUFPLEVBQ0wsbUJBQW1CLEVBQ25CLFdBQVcsRUFDWCxVQUFVLEVBQ1YsS0FBSyxhQUFhLEVBQ2xCLEtBQUssTUFBTSxFQUNYLEtBQUssd0JBQXdCLEVBQzlCLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLFVBQVUsRUFBbUIsbUJBQW1CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM1RixPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxrQkFBa0IsRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ25ILE9BQU8sRUFBMEIsS0FBSyxpQkFBaUIsRUFBd0IsTUFBTSw2QkFBNkIsQ0FBQztBQUNuSCxPQUFPLEVBQUUsS0FBSyxXQUFXLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBWSxNQUFNLGtCQUFrQixDQUFDO0FBQ2pGLE9BQU8sS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRWxEOztHQUVHO0FBQ0gscUJBQWEsaUJBQWtCLFlBQVcsYUFBYSxFQUFFLGtCQUFrQjtJQUN6RSxTQUFTLENBQUMsUUFBUSxFQUFFLFVBQVUsRUFBRSxD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
@@ -1 +1 @@
1
- {"version":3,"file":"mock_l2_block_source.d.ts","sourceRoot":"","sources":["../../src/test/mock_l2_block_source.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mock_l2_block_source.d.ts","sourceRoot":"","sources":["../../src/test/mock_l2_block_source.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,12 @@
1
1
  import { GENESIS_ARCHIVE_ROOT } from '@aztec/constants';
2
- import { DefaultL1ContractsConfig } from '@aztec/ethereum';
2
+ import { DefaultL1ContractsConfig } from '@aztec/ethereum/config';
3
+ import { BlockNumber, CheckpointNumber, SlotNumber } from '@aztec/foundation/branded-types';
3
4
  import { Buffer32 } from '@aztec/foundation/buffer';
5
+ import { Fr } from '@aztec/foundation/curves/bn254';
4
6
  import { EthAddress } from '@aztec/foundation/eth-address';
5
- import { Fr } from '@aztec/foundation/fields';
6
7
  import { createLogger } from '@aztec/foundation/log';
7
- import { L2Block, L2BlockHash, PublishedL2Block } from '@aztec/stdlib/block';
8
+ import { CheckpointedL2Block, L2BlockHash, L2BlockNew } from '@aztec/stdlib/block';
9
+ import { Checkpoint, L1PublishedData, PublishedCheckpoint } from '@aztec/stdlib/checkpoint';
8
10
  import { EmptyL1RollupConstants, getSlotRangeForEpoch } from '@aztec/stdlib/epoch-helpers';
9
11
  import { TxReceipt, TxStatus } from '@aztec/stdlib/tx';
10
12
  /**
@@ -13,11 +15,14 @@ import { TxReceipt, TxStatus } from '@aztec/stdlib/tx';
13
15
  l2Blocks = [];
14
16
  provenBlockNumber = 0;
15
17
  finalizedBlockNumber = 0;
18
+ checkpointedBlockNumber = 0;
16
19
  log = createLogger('archiver:mock_l2_block_source');
17
20
  async createBlocks(numBlocks) {
18
21
  for(let i = 0; i < numBlocks; i++){
19
22
  const blockNum = this.l2Blocks.length + 1;
20
- const block = await L2Block.random(blockNum);
23
+ const block = await L2BlockNew.random(BlockNumber(blockNum), {
24
+ slotNumber: SlotNumber(blockNum)
25
+ });
21
26
  this.l2Blocks.push(block);
22
27
  }
23
28
  this.log.verbose(`Created ${numBlocks} blocks in the mock L2 block source`);
@@ -39,6 +44,9 @@ import { TxReceipt, TxStatus } from '@aztec/stdlib/tx';
39
44
  }
40
45
  this.finalizedBlockNumber = finalizedBlockNumber;
41
46
  }
47
+ setCheckpointedBlockNumber(checkpointedBlockNumber) {
48
+ this.checkpointedBlockNumber = checkpointedBlockNumber;
49
+ }
42
50
  /**
43
51
  * Method to fetch the rollup contract address at the base-layer.
44
52
  * @returns The rollup address.
@@ -55,17 +63,51 @@ import { TxReceipt, TxStatus } from '@aztec/stdlib/tx';
55
63
  * Gets the number of the latest L2 block processed by the block source implementation.
56
64
  * @returns In this mock instance, returns the number of L2 blocks that we've mocked.
57
65
  */ getBlockNumber() {
58
- return Promise.resolve(this.l2Blocks.length);
66
+ return Promise.resolve(BlockNumber(this.l2Blocks.length));
59
67
  }
60
68
  getProvenBlockNumber() {
61
- return Promise.resolve(this.provenBlockNumber);
69
+ return Promise.resolve(BlockNumber(this.provenBlockNumber));
70
+ }
71
+ getCheckpointedBlock(number) {
72
+ if (number > this.checkpointedBlockNumber) {
73
+ return Promise.resolve(undefined);
74
+ }
75
+ const block = this.l2Blocks[number - 1];
76
+ if (!block) {
77
+ return Promise.resolve(undefined);
78
+ }
79
+ const checkpointedBlock = new CheckpointedL2Block(CheckpointNumber(number), block, new L1PublishedData(BigInt(number), BigInt(number), `0x${number.toString(16).padStart(64, '0')}`), []);
80
+ return Promise.resolve(checkpointedBlock);
81
+ }
82
+ async getCheckpointedBlocks(from, limit, _proven) {
83
+ const result = [];
84
+ for(let i = 0; i < limit; i++){
85
+ const blockNum = from + i;
86
+ if (blockNum > this.checkpointedBlockNumber) {
87
+ break;
88
+ }
89
+ const block = await this.getCheckpointedBlock(BlockNumber(blockNum));
90
+ if (block) {
91
+ result.push(block);
92
+ }
93
+ }
94
+ return result;
62
95
  }
63
96
  /**
64
97
  * Gets an l2 block.
65
98
  * @param number - The block number to return (inclusive).
66
99
  * @returns The requested L2 block.
67
100
  */ getBlock(number) {
68
- return Promise.resolve(this.l2Blocks[number - 1]);
101
+ const block = this.l2Blocks[number - 1];
102
+ return Promise.resolve(block);
103
+ }
104
+ /**
105
+ * Gets an L2 block (new format).
106
+ * @param number - The block number to return.
107
+ * @returns The requested L2 block.
108
+ */ getL2BlockNew(number) {
109
+ const block = this.l2Blocks[number - 1];
110
+ return Promise.resolve(block);
69
111
  }
70
112
  /**
71
113
  * Gets up to `limit` amount of L2 blocks starting from `from`.
@@ -75,29 +117,56 @@ import { TxReceipt, TxStatus } from '@aztec/stdlib/tx';
75
117
  */ getBlocks(from, limit, proven) {
76
118
  return Promise.resolve(this.l2Blocks.slice(from - 1, from - 1 + limit).filter((b)=>!proven || this.provenBlockNumber === undefined || b.number <= this.provenBlockNumber));
77
119
  }
78
- async getPublishedBlocks(from, limit, proven) {
79
- const blocks = await this.getBlocks(from, limit, proven);
80
- return blocks.map((block)=>PublishedL2Block.fromFields({
120
+ getPublishedCheckpoints(from, limit) {
121
+ // TODO(mbps): Implement this properly. This only works when we have one block per checkpoint.
122
+ const blocks = this.l2Blocks.slice(from - 1, from - 1 + limit);
123
+ return Promise.all(blocks.map(async (block)=>{
124
+ // Create a checkpoint from the block - manually construct since L2BlockNew doesn't have toCheckpoint()
125
+ const checkpoint = await Checkpoint.random(block.checkpointNumber, {
126
+ numBlocks: 1
127
+ });
128
+ checkpoint.blocks = [
129
+ block
130
+ ];
131
+ return new PublishedCheckpoint(checkpoint, new L1PublishedData(BigInt(block.number), BigInt(block.number), Buffer32.random().toString()), []);
132
+ }));
133
+ }
134
+ async getCheckpointByArchive(archive) {
135
+ // TODO(mbps): Implement this properly. This only works when we have one block per checkpoint.
136
+ const block = this.l2Blocks.find((b)=>b.archive.root.equals(archive));
137
+ if (!block) {
138
+ return undefined;
139
+ }
140
+ // Create a checkpoint from the block - manually construct since L2BlockNew doesn't have toCheckpoint()
141
+ const checkpoint = await Checkpoint.random(block.checkpointNumber, {
142
+ numBlocks: 1
143
+ });
144
+ checkpoint.blocks = [
145
+ block
146
+ ];
147
+ return checkpoint;
148
+ }
149
+ getPublishedBlocks(from, limit, proven) {
150
+ const blocks = this.l2Blocks.slice(from - 1, from - 1 + limit).filter((b)=>!proven || this.provenBlockNumber === undefined || b.number <= this.provenBlockNumber);
151
+ return Promise.resolve(blocks.map((block)=>CheckpointedL2Block.fromFields({
152
+ checkpointNumber: CheckpointNumber(block.number),
81
153
  block,
82
- l1: {
83
- blockNumber: BigInt(block.number),
84
- blockHash: Buffer32.random().toString(),
85
- timestamp: BigInt(block.number)
86
- },
154
+ l1: new L1PublishedData(BigInt(block.number), BigInt(block.number), Buffer32.random().toString()),
87
155
  attestations: []
88
- }));
156
+ })));
157
+ }
158
+ getL2BlocksNew(from, limit, proven) {
159
+ // getBlocks already returns L2BlockNew[], so just return directly
160
+ return this.getBlocks(from, limit, proven);
89
161
  }
90
162
  async getPublishedBlockByHash(blockHash) {
91
163
  for (const block of this.l2Blocks){
92
164
  const hash = await block.hash();
93
165
  if (hash.equals(blockHash)) {
94
- return PublishedL2Block.fromFields({
166
+ return CheckpointedL2Block.fromFields({
167
+ checkpointNumber: CheckpointNumber(block.number),
95
168
  block,
96
- l1: {
97
- blockNumber: BigInt(block.number),
98
- blockHash: Buffer32.random().toString(),
99
- timestamp: BigInt(block.number)
100
- },
169
+ l1: new L1PublishedData(BigInt(block.number), BigInt(block.number), Buffer32.random().toString()),
101
170
  attestations: []
102
171
  });
103
172
  }
@@ -109,31 +178,62 @@ import { TxReceipt, TxStatus } from '@aztec/stdlib/tx';
109
178
  if (!block) {
110
179
  return Promise.resolve(undefined);
111
180
  }
112
- return Promise.resolve(PublishedL2Block.fromFields({
181
+ return Promise.resolve(CheckpointedL2Block.fromFields({
182
+ checkpointNumber: CheckpointNumber(block.number),
113
183
  block,
114
- l1: {
115
- blockNumber: BigInt(block.number),
116
- blockHash: Buffer32.random().toString(),
117
- timestamp: BigInt(block.number)
118
- },
184
+ l1: new L1PublishedData(BigInt(block.number), BigInt(block.number), Buffer32.random().toString()),
119
185
  attestations: []
120
186
  }));
121
187
  }
188
+ async getL2BlockNewByHash(blockHash) {
189
+ for (const block of this.l2Blocks){
190
+ const hash = await block.hash();
191
+ if (hash.equals(blockHash)) {
192
+ return block;
193
+ }
194
+ }
195
+ return undefined;
196
+ }
197
+ getL2BlockNewByArchive(archive) {
198
+ const block = this.l2Blocks.find((b)=>b.archive.root.equals(archive));
199
+ return Promise.resolve(block);
200
+ }
122
201
  async getBlockHeaderByHash(blockHash) {
123
202
  for (const block of this.l2Blocks){
124
203
  const hash = await block.hash();
125
204
  if (hash.equals(blockHash)) {
126
- return block.getBlockHeader();
205
+ return block.header;
127
206
  }
128
207
  }
129
208
  return undefined;
130
209
  }
131
210
  getBlockHeaderByArchive(archive) {
132
211
  const block = this.l2Blocks.find((b)=>b.archive.root.equals(archive));
133
- return Promise.resolve(block?.getBlockHeader());
212
+ return Promise.resolve(block?.header);
134
213
  }
135
214
  getBlockHeader(number) {
136
- return Promise.resolve(this.l2Blocks.at(typeof number === 'number' ? number - 1 : -1)?.getBlockHeader());
215
+ return Promise.resolve(this.l2Blocks.at(typeof number === 'number' ? number - 1 : -1)?.header);
216
+ }
217
+ getCheckpointsForEpoch(epochNumber) {
218
+ // TODO(mbps): Implement this properly. This only works when we have one block per checkpoint.
219
+ const epochDuration = DefaultL1ContractsConfig.aztecEpochDuration;
220
+ const [start, end] = getSlotRangeForEpoch(epochNumber, {
221
+ epochDuration
222
+ });
223
+ const blocks = this.l2Blocks.filter((b)=>{
224
+ const slot = b.header.globalVariables.slotNumber;
225
+ return slot >= start && slot <= end;
226
+ });
227
+ // Create checkpoints from blocks - manually construct since L2BlockNew doesn't have toCheckpoint()
228
+ return Promise.all(blocks.map(async (block)=>{
229
+ const checkpoint = await Checkpoint.random(block.checkpointNumber, {
230
+ numBlocks: 1
231
+ });
232
+ checkpoint.blocks = [
233
+ block
234
+ ];
235
+ return checkpoint;
236
+ }));
137
237
  }
138
238
  getBlocksForEpoch(epochNumber) {
139
239
  const epochDuration = DefaultL1ContractsConfig.aztecEpochDuration;
@@ -141,14 +241,18 @@ import { TxReceipt, TxStatus } from '@aztec/stdlib/tx';
141
241
  epochDuration
142
242
  });
143
243
  const blocks = this.l2Blocks.filter((b)=>{
144
- const slot = b.header.globalVariables.slotNumber.toBigInt();
244
+ const slot = b.header.globalVariables.slotNumber;
145
245
  return slot >= start && slot <= end;
146
246
  });
147
247
  return Promise.resolve(blocks);
148
248
  }
249
+ getBlocksForSlot(slotNumber) {
250
+ const blocks = this.l2Blocks.filter((b)=>b.header.globalVariables.slotNumber === slotNumber);
251
+ return Promise.resolve(blocks);
252
+ }
149
253
  async getBlockHeadersForEpoch(epochNumber) {
150
254
  const blocks = await this.getBlocksForEpoch(epochNumber);
151
- return blocks.map((b)=>b.getBlockHeader());
255
+ return blocks.map((b)=>b.header);
152
256
  }
153
257
  /**
154
258
  * Gets a tx effect.
@@ -185,27 +289,44 @@ import { TxReceipt, TxStatus } from '@aztec/stdlib/tx';
185
289
  return undefined;
186
290
  }
187
291
  async getL2Tips() {
188
- const [latest, proven, finalized] = [
292
+ const [latest, proven, finalized, checkpointed] = [
189
293
  await this.getBlockNumber(),
190
294
  await this.getProvenBlockNumber(),
191
- this.finalizedBlockNumber
295
+ this.finalizedBlockNumber,
296
+ this.checkpointedBlockNumber
192
297
  ];
193
298
  const latestBlock = this.l2Blocks[latest - 1];
194
299
  const provenBlock = this.l2Blocks[proven - 1];
195
300
  const finalizedBlock = this.l2Blocks[finalized - 1];
301
+ const checkpointedBlock = this.l2Blocks[checkpointed - 1];
302
+ const latestBlockId = {
303
+ number: BlockNumber(latest),
304
+ hash: (await latestBlock?.hash())?.toString()
305
+ };
306
+ const provenBlockId = {
307
+ number: BlockNumber(proven),
308
+ hash: (await provenBlock?.hash())?.toString()
309
+ };
310
+ const finalizedBlockId = {
311
+ number: BlockNumber(finalized),
312
+ hash: (await finalizedBlock?.hash())?.toString()
313
+ };
314
+ const checkpointedBlockId = {
315
+ number: BlockNumber(checkpointed),
316
+ hash: (await checkpointedBlock?.hash())?.toString()
317
+ };
318
+ const makeTipId = (blockId)=>({
319
+ block: blockId,
320
+ checkpoint: {
321
+ number: CheckpointNumber(blockId.number),
322
+ hash: blockId.hash
323
+ }
324
+ });
196
325
  return {
197
- latest: {
198
- number: latest,
199
- hash: (await latestBlock?.hash())?.toString()
200
- },
201
- proven: {
202
- number: proven,
203
- hash: (await provenBlock?.hash())?.toString()
204
- },
205
- finalized: {
206
- number: finalized,
207
- hash: (await finalizedBlock?.hash())?.toString()
208
- }
326
+ proposed: latestBlockId,
327
+ checkpointed: makeTipId(checkpointedBlockId),
328
+ proven: makeTipId(provenBlockId),
329
+ finalized: makeTipId(finalizedBlockId)
209
330
  };
210
331
  }
211
332
  getL2EpochNumber() {