@aztec/archiver 0.0.1-commit.fce3e4f → 0.0.1-commit.ff7989d6c

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 (209) hide show
  1. package/README.md +156 -22
  2. package/dest/archiver.d.ts +139 -0
  3. package/dest/archiver.d.ts.map +1 -0
  4. package/dest/archiver.js +699 -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} +21 -5
  8. package/dest/errors.d.ts +41 -0
  9. package/dest/errors.d.ts.map +1 -0
  10. package/dest/errors.js +62 -0
  11. package/dest/factory.d.ts +9 -7
  12. package/dest/factory.d.ts.map +1 -1
  13. package/dest/factory.js +97 -13
  14. package/dest/index.d.ts +11 -4
  15. package/dest/index.d.ts.map +1 -1
  16. package/dest/index.js +9 -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 +148 -0
  23. package/dest/l1/calldata_retriever.d.ts +118 -0
  24. package/dest/l1/calldata_retriever.d.ts.map +1 -0
  25. package/dest/l1/calldata_retriever.js +484 -0
  26. package/dest/l1/data_retrieval.d.ts +89 -0
  27. package/dest/l1/data_retrieval.d.ts.map +1 -0
  28. package/dest/{archiver → l1}/data_retrieval.js +80 -153
  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 +32 -0
  42. package/dest/l1/validate_trace.d.ts.map +1 -0
  43. package/dest/l1/validate_trace.js +154 -0
  44. package/dest/modules/data_source_base.d.ts +89 -0
  45. package/dest/modules/data_source_base.d.ts.map +1 -0
  46. package/dest/modules/data_source_base.js +216 -0
  47. package/dest/modules/data_store_updater.d.ts +80 -0
  48. package/dest/modules/data_store_updater.d.ts.map +1 -0
  49. package/dest/modules/data_store_updater.js +323 -0
  50. package/dest/modules/instrumentation.d.ts +39 -0
  51. package/dest/modules/instrumentation.d.ts.map +1 -0
  52. package/dest/{archiver → modules}/instrumentation.js +39 -62
  53. package/dest/modules/l1_synchronizer.d.ts +76 -0
  54. package/dest/modules/l1_synchronizer.d.ts.map +1 -0
  55. package/dest/modules/l1_synchronizer.js +1112 -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 +7 -1
  59. package/dest/store/block_store.d.ts +196 -0
  60. package/dest/store/block_store.d.ts.map +1 -0
  61. package/dest/store/block_store.js +773 -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 +13 -9
  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 +354 -0
  69. package/dest/store/kv_archiver_store.d.ts.map +1 -0
  70. package/dest/store/kv_archiver_store.js +464 -0
  71. package/dest/store/l2_tips_cache.d.ts +19 -0
  72. package/dest/store/l2_tips_cache.d.ts.map +1 -0
  73. package/dest/store/l2_tips_cache.js +89 -0
  74. package/dest/store/log_store.d.ts +54 -0
  75. package/dest/store/log_store.d.ts.map +1 -0
  76. package/dest/store/log_store.js +456 -0
  77. package/dest/store/message_store.d.ts +40 -0
  78. package/dest/store/message_store.d.ts.map +1 -0
  79. package/dest/{archiver/kv_archiver_store → store}/message_store.js +15 -14
  80. package/dest/{archiver/structs → structs}/data_retrieval.d.ts +1 -1
  81. package/dest/structs/data_retrieval.d.ts.map +1 -0
  82. package/dest/structs/inbox_message.d.ts +15 -0
  83. package/dest/structs/inbox_message.d.ts.map +1 -0
  84. package/dest/{archiver/structs → structs}/inbox_message.js +6 -5
  85. package/dest/structs/published.d.ts +2 -0
  86. package/dest/structs/published.d.ts.map +1 -0
  87. package/dest/test/fake_l1_state.d.ts +193 -0
  88. package/dest/test/fake_l1_state.d.ts.map +1 -0
  89. package/dest/test/fake_l1_state.js +389 -0
  90. package/dest/test/index.d.ts +2 -1
  91. package/dest/test/index.d.ts.map +1 -1
  92. package/dest/test/index.js +4 -1
  93. package/dest/test/mock_archiver.d.ts +16 -8
  94. package/dest/test/mock_archiver.d.ts.map +1 -1
  95. package/dest/test/mock_archiver.js +19 -14
  96. package/dest/test/mock_l1_to_l2_message_source.d.ts +7 -6
  97. package/dest/test/mock_l1_to_l2_message_source.d.ts.map +1 -1
  98. package/dest/test/mock_l1_to_l2_message_source.js +21 -11
  99. package/dest/test/mock_l2_block_source.d.ts +51 -18
  100. package/dest/test/mock_l2_block_source.d.ts.map +1 -1
  101. package/dest/test/mock_l2_block_source.js +245 -82
  102. package/dest/test/mock_structs.d.ts +80 -4
  103. package/dest/test/mock_structs.d.ts.map +1 -1
  104. package/dest/test/mock_structs.js +145 -11
  105. package/dest/test/noop_l1_archiver.d.ts +23 -0
  106. package/dest/test/noop_l1_archiver.d.ts.map +1 -0
  107. package/dest/test/noop_l1_archiver.js +68 -0
  108. package/package.json +20 -20
  109. package/src/archiver.ts +443 -0
  110. package/src/{archiver/config.ts → config.ts} +28 -12
  111. package/src/errors.ts +102 -0
  112. package/src/factory.ts +143 -13
  113. package/src/index.ts +11 -3
  114. package/src/interfaces.ts +9 -0
  115. package/src/l1/README.md +98 -0
  116. package/src/l1/bin/retrieve-calldata.ts +181 -0
  117. package/src/l1/calldata_retriever.ts +663 -0
  118. package/src/{archiver → l1}/data_retrieval.ts +146 -224
  119. package/src/l1/debug_tx.ts +99 -0
  120. package/src/l1/spire_proposer.ts +160 -0
  121. package/src/l1/trace_tx.ts +128 -0
  122. package/src/l1/types.ts +13 -0
  123. package/src/l1/validate_trace.ts +229 -0
  124. package/src/modules/data_source_base.ts +328 -0
  125. package/src/modules/data_store_updater.ts +448 -0
  126. package/src/{archiver → modules}/instrumentation.ts +43 -66
  127. package/src/modules/l1_synchronizer.ts +932 -0
  128. package/src/{archiver → modules}/validation.ts +11 -6
  129. package/src/store/block_store.ts +1015 -0
  130. package/src/{archiver/kv_archiver_store → store}/contract_class_store.ts +13 -9
  131. package/src/{archiver/kv_archiver_store → store}/contract_instance_store.ts +2 -2
  132. package/src/store/kv_archiver_store.ts +671 -0
  133. package/src/store/l2_tips_cache.ts +89 -0
  134. package/src/store/log_store.ts +637 -0
  135. package/src/{archiver/kv_archiver_store → store}/message_store.ts +21 -18
  136. package/src/{archiver/structs → structs}/inbox_message.ts +8 -8
  137. package/src/{archiver/structs → structs}/published.ts +0 -1
  138. package/src/test/fake_l1_state.ts +607 -0
  139. package/src/test/fixtures/debug_traceTransaction-multicall3.json +88 -0
  140. package/src/test/fixtures/debug_traceTransaction-multiplePropose.json +153 -0
  141. package/src/test/fixtures/debug_traceTransaction-proxied.json +122 -0
  142. package/src/test/fixtures/trace_transaction-multicall3.json +65 -0
  143. package/src/test/fixtures/trace_transaction-multiplePropose.json +319 -0
  144. package/src/test/fixtures/trace_transaction-proxied.json +128 -0
  145. package/src/test/fixtures/trace_transaction-randomRevert.json +216 -0
  146. package/src/test/index.ts +4 -0
  147. package/src/test/mock_archiver.ts +23 -16
  148. package/src/test/mock_l1_to_l2_message_source.ts +18 -11
  149. package/src/test/mock_l2_block_source.ts +296 -90
  150. package/src/test/mock_structs.ts +275 -13
  151. package/src/test/noop_l1_archiver.ts +109 -0
  152. package/dest/archiver/archiver.d.ts +0 -287
  153. package/dest/archiver/archiver.d.ts.map +0 -1
  154. package/dest/archiver/archiver.js +0 -1408
  155. package/dest/archiver/archiver_store.d.ts +0 -255
  156. package/dest/archiver/archiver_store.d.ts.map +0 -1
  157. package/dest/archiver/archiver_store.js +0 -4
  158. package/dest/archiver/archiver_store_test_suite.d.ts +0 -8
  159. package/dest/archiver/archiver_store_test_suite.d.ts.map +0 -1
  160. package/dest/archiver/archiver_store_test_suite.js +0 -1289
  161. package/dest/archiver/config.d.ts +0 -21
  162. package/dest/archiver/config.d.ts.map +0 -1
  163. package/dest/archiver/data_retrieval.d.ts +0 -79
  164. package/dest/archiver/data_retrieval.d.ts.map +0 -1
  165. package/dest/archiver/errors.d.ts +0 -12
  166. package/dest/archiver/errors.d.ts.map +0 -1
  167. package/dest/archiver/errors.js +0 -17
  168. package/dest/archiver/index.d.ts +0 -7
  169. package/dest/archiver/index.d.ts.map +0 -1
  170. package/dest/archiver/index.js +0 -4
  171. package/dest/archiver/instrumentation.d.ts +0 -35
  172. package/dest/archiver/instrumentation.d.ts.map +0 -1
  173. package/dest/archiver/kv_archiver_store/block_store.d.ts +0 -124
  174. package/dest/archiver/kv_archiver_store/block_store.d.ts.map +0 -1
  175. package/dest/archiver/kv_archiver_store/block_store.js +0 -370
  176. package/dest/archiver/kv_archiver_store/contract_class_store.d.ts +0 -18
  177. package/dest/archiver/kv_archiver_store/contract_class_store.d.ts.map +0 -1
  178. package/dest/archiver/kv_archiver_store/contract_instance_store.d.ts +0 -24
  179. package/dest/archiver/kv_archiver_store/contract_instance_store.d.ts.map +0 -1
  180. package/dest/archiver/kv_archiver_store/kv_archiver_store.d.ts +0 -168
  181. package/dest/archiver/kv_archiver_store/kv_archiver_store.d.ts.map +0 -1
  182. package/dest/archiver/kv_archiver_store/kv_archiver_store.js +0 -296
  183. package/dest/archiver/kv_archiver_store/log_store.d.ts +0 -49
  184. package/dest/archiver/kv_archiver_store/log_store.d.ts.map +0 -1
  185. package/dest/archiver/kv_archiver_store/log_store.js +0 -336
  186. package/dest/archiver/kv_archiver_store/message_store.d.ts +0 -39
  187. package/dest/archiver/kv_archiver_store/message_store.d.ts.map +0 -1
  188. package/dest/archiver/structs/data_retrieval.d.ts.map +0 -1
  189. package/dest/archiver/structs/inbox_message.d.ts +0 -15
  190. package/dest/archiver/structs/inbox_message.d.ts.map +0 -1
  191. package/dest/archiver/structs/published.d.ts +0 -3
  192. package/dest/archiver/structs/published.d.ts.map +0 -1
  193. package/dest/archiver/validation.d.ts +0 -17
  194. package/dest/archiver/validation.d.ts.map +0 -1
  195. package/dest/rpc/index.d.ts +0 -9
  196. package/dest/rpc/index.d.ts.map +0 -1
  197. package/dest/rpc/index.js +0 -15
  198. package/src/archiver/archiver.ts +0 -1858
  199. package/src/archiver/archiver_store.ts +0 -305
  200. package/src/archiver/archiver_store_test_suite.ts +0 -1264
  201. package/src/archiver/errors.ts +0 -26
  202. package/src/archiver/index.ts +0 -6
  203. package/src/archiver/kv_archiver_store/block_store.ts +0 -481
  204. package/src/archiver/kv_archiver_store/kv_archiver_store.ts +0 -422
  205. package/src/archiver/kv_archiver_store/log_store.ts +0 -406
  206. package/src/rpc/index.ts +0 -16
  207. /package/dest/{archiver/structs → structs}/data_retrieval.js +0 -0
  208. /package/dest/{archiver/structs → structs}/published.js +0 -0
  209. /package/src/{archiver/structs → structs}/data_retrieval.ts +0 -0
@@ -1,33 +1,60 @@
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 } from '@aztec/stdlib/block';
9
+ import { Checkpoint, L1PublishedData, PublishedCheckpoint } from '@aztec/stdlib/checkpoint';
8
10
  import { EmptyL1RollupConstants, getSlotRangeForEpoch } from '@aztec/stdlib/epoch-helpers';
9
- import { TxReceipt, TxStatus } from '@aztec/stdlib/tx';
11
+ import { computeCheckpointOutHash } from '@aztec/stdlib/messaging';
12
+ import { CheckpointHeader } from '@aztec/stdlib/rollup';
13
+ import { TxExecutionResult, TxReceipt, TxStatus } from '@aztec/stdlib/tx';
10
14
  /**
11
15
  * A mocked implementation of L2BlockSource to be used in tests.
12
16
  */ export class MockL2BlockSource {
13
17
  l2Blocks = [];
18
+ checkpointList = [];
14
19
  provenBlockNumber = 0;
15
20
  finalizedBlockNumber = 0;
21
+ checkpointedBlockNumber = 0;
16
22
  log = createLogger('archiver:mock_l2_block_source');
17
- async createBlocks(numBlocks) {
18
- for(let i = 0; i < numBlocks; i++){
19
- const blockNum = this.l2Blocks.length + 1;
20
- const block = await L2Block.random(blockNum);
21
- this.l2Blocks.push(block);
23
+ /** Creates blocks grouped into single-block checkpoints. */ async createBlocks(numBlocks) {
24
+ await this.createCheckpoints(numBlocks, 1);
25
+ }
26
+ /** Creates checkpoints, each containing `blocksPerCheckpoint` blocks. */ async createCheckpoints(numCheckpoints, blocksPerCheckpoint = 1) {
27
+ for(let c = 0; c < numCheckpoints; c++){
28
+ const checkpointNum = CheckpointNumber(this.checkpointList.length + 1);
29
+ const startBlockNum = this.l2Blocks.length + 1;
30
+ const slotNumber = SlotNumber(Number(checkpointNum));
31
+ const checkpoint = await Checkpoint.random(checkpointNum, {
32
+ numBlocks: blocksPerCheckpoint,
33
+ startBlockNumber: startBlockNum,
34
+ slotNumber,
35
+ checkpointNumber: checkpointNum
36
+ });
37
+ this.checkpointList.push(checkpoint);
38
+ this.l2Blocks.push(...checkpoint.blocks);
22
39
  }
23
- this.log.verbose(`Created ${numBlocks} blocks in the mock L2 block source`);
40
+ this.log.verbose(`Created ${numCheckpoints} checkpoints with ${blocksPerCheckpoint} blocks each in the mock L2 block source`);
24
41
  }
25
- addBlocks(blocks) {
42
+ addProposedBlocks(blocks) {
26
43
  this.l2Blocks.push(...blocks);
27
- this.log.verbose(`Added ${blocks.length} blocks to the mock L2 block source`);
44
+ this.log.verbose(`Added ${blocks.length} proposed blocks to the mock L2 block source`);
28
45
  }
29
46
  removeBlocks(numBlocks) {
30
47
  this.l2Blocks = this.l2Blocks.slice(0, -numBlocks);
48
+ const maxBlockNum = this.l2Blocks.length;
49
+ // Remove any checkpoint whose last block is beyond the remaining blocks.
50
+ this.checkpointList = this.checkpointList.filter((c)=>{
51
+ const lastBlockNum = c.blocks[0].number + c.blocks.length - 1;
52
+ return lastBlockNum <= maxBlockNum;
53
+ });
54
+ // Keep tip numbers consistent with remaining blocks.
55
+ this.checkpointedBlockNumber = Math.min(this.checkpointedBlockNumber, maxBlockNum);
56
+ this.provenBlockNumber = Math.min(this.provenBlockNumber, maxBlockNum);
57
+ this.finalizedBlockNumber = Math.min(this.finalizedBlockNumber, maxBlockNum);
31
58
  this.log.verbose(`Removed ${numBlocks} blocks from the mock L2 block source`);
32
59
  }
33
60
  setProvenBlockNumber(provenBlockNumber) {
@@ -39,6 +66,34 @@ import { TxReceipt, TxStatus } from '@aztec/stdlib/tx';
39
66
  }
40
67
  this.finalizedBlockNumber = finalizedBlockNumber;
41
68
  }
69
+ setCheckpointedBlockNumber(checkpointedBlockNumber) {
70
+ const prevCheckpointed = this.checkpointedBlockNumber;
71
+ this.checkpointedBlockNumber = checkpointedBlockNumber;
72
+ // Auto-create single-block checkpoints for newly checkpointed blocks that don't have one yet.
73
+ // This handles blocks added via addProposedBlocks that are now being marked as checkpointed.
74
+ const newCheckpoints = [];
75
+ for(let blockNum = prevCheckpointed + 1; blockNum <= checkpointedBlockNumber; blockNum++){
76
+ const block = this.l2Blocks[blockNum - 1];
77
+ if (!block) {
78
+ continue;
79
+ }
80
+ if (this.checkpointList.some((c)=>c.blocks.some((b)=>b.number === block.number))) {
81
+ continue;
82
+ }
83
+ const checkpointNum = CheckpointNumber(this.checkpointList.length + newCheckpoints.length + 1);
84
+ const checkpoint = new Checkpoint(block.archive, CheckpointHeader.random({
85
+ slotNumber: block.header.globalVariables.slotNumber
86
+ }), [
87
+ block
88
+ ], checkpointNum);
89
+ newCheckpoints.push(checkpoint);
90
+ }
91
+ // Insert new checkpoints in order by number.
92
+ if (newCheckpoints.length > 0) {
93
+ this.checkpointList.push(...newCheckpoints);
94
+ this.checkpointList.sort((a, b)=>a.number - b.number);
95
+ }
96
+ }
42
97
  /**
43
98
  * Method to fetch the rollup contract address at the base-layer.
44
99
  * @returns The rollup address.
@@ -55,100 +110,171 @@ import { TxReceipt, TxStatus } from '@aztec/stdlib/tx';
55
110
  * Gets the number of the latest L2 block processed by the block source implementation.
56
111
  * @returns In this mock instance, returns the number of L2 blocks that we've mocked.
57
112
  */ getBlockNumber() {
58
- return Promise.resolve(this.l2Blocks.length);
113
+ return Promise.resolve(BlockNumber(this.l2Blocks.length));
59
114
  }
60
115
  getProvenBlockNumber() {
61
- return Promise.resolve(this.provenBlockNumber);
116
+ return Promise.resolve(BlockNumber(this.provenBlockNumber));
117
+ }
118
+ getCheckpointedL2BlockNumber() {
119
+ return Promise.resolve(BlockNumber(this.checkpointedBlockNumber));
120
+ }
121
+ getFinalizedL2BlockNumber() {
122
+ return Promise.resolve(BlockNumber(this.finalizedBlockNumber));
123
+ }
124
+ getCheckpointedBlock(number) {
125
+ if (number > this.checkpointedBlockNumber) {
126
+ return Promise.resolve(undefined);
127
+ }
128
+ const block = this.l2Blocks[number - 1];
129
+ if (!block) {
130
+ return Promise.resolve(undefined);
131
+ }
132
+ return Promise.resolve(this.toCheckpointedBlock(block));
133
+ }
134
+ async getCheckpointedBlocks(from, limit) {
135
+ const result = [];
136
+ for(let i = 0; i < limit; i++){
137
+ const blockNum = from + i;
138
+ if (blockNum > this.checkpointedBlockNumber) {
139
+ break;
140
+ }
141
+ const block = await this.getCheckpointedBlock(BlockNumber(blockNum));
142
+ if (block) {
143
+ result.push(block);
144
+ }
145
+ }
146
+ return result;
62
147
  }
63
148
  /**
64
149
  * Gets an l2 block.
65
150
  * @param number - The block number to return (inclusive).
66
151
  * @returns The requested L2 block.
67
152
  */ getBlock(number) {
68
- return Promise.resolve(this.l2Blocks[number - 1]);
153
+ const block = this.l2Blocks[number - 1];
154
+ return Promise.resolve(block);
155
+ }
156
+ /**
157
+ * Gets an L2 block (new format).
158
+ * @param number - The block number to return.
159
+ * @returns The requested L2 block.
160
+ */ getL2Block(number) {
161
+ const block = this.l2Blocks[number - 1];
162
+ return Promise.resolve(block);
69
163
  }
70
164
  /**
71
165
  * Gets up to `limit` amount of L2 blocks starting from `from`.
72
166
  * @param from - Number of the first block to return (inclusive).
73
167
  * @param limit - The maximum number of blocks to return.
74
168
  * @returns The requested mocked L2 blocks.
75
- */ getBlocks(from, limit, proven) {
76
- return Promise.resolve(this.l2Blocks.slice(from - 1, from - 1 + limit).filter((b)=>!proven || this.provenBlockNumber === undefined || b.number <= this.provenBlockNumber));
77
- }
78
- async getPublishedBlocks(from, limit, proven) {
79
- const blocks = await this.getBlocks(from, limit, proven);
80
- return blocks.map((block)=>PublishedL2Block.fromFields({
81
- block,
82
- l1: {
83
- blockNumber: BigInt(block.number),
84
- blockHash: Buffer32.random().toString(),
85
- timestamp: BigInt(block.number)
86
- },
87
- attestations: []
88
- }));
89
- }
90
- async getPublishedBlockByHash(blockHash) {
169
+ */ getBlocks(from, limit) {
170
+ return Promise.resolve(this.l2Blocks.slice(from - 1, from - 1 + limit));
171
+ }
172
+ getCheckpoints(from, limit) {
173
+ const checkpoints = this.checkpointList.slice(from - 1, from - 1 + limit);
174
+ return Promise.resolve(checkpoints.map((checkpoint)=>new PublishedCheckpoint(checkpoint, this.mockL1DataForCheckpoint(checkpoint), [])));
175
+ }
176
+ getCheckpointByArchive(archive) {
177
+ const checkpoint = this.checkpointList.find((c)=>c.archive.root.equals(archive));
178
+ return Promise.resolve(checkpoint);
179
+ }
180
+ async getCheckpointedBlockByHash(blockHash) {
91
181
  for (const block of this.l2Blocks){
92
182
  const hash = await block.hash();
93
183
  if (hash.equals(blockHash)) {
94
- return PublishedL2Block.fromFields({
95
- block,
96
- l1: {
97
- blockNumber: BigInt(block.number),
98
- blockHash: Buffer32.random().toString(),
99
- timestamp: BigInt(block.number)
100
- },
101
- attestations: []
102
- });
184
+ return this.toCheckpointedBlock(block);
103
185
  }
104
186
  }
105
187
  return undefined;
106
188
  }
107
- getPublishedBlockByArchive(archive) {
189
+ getCheckpointedBlockByArchive(archive) {
108
190
  const block = this.l2Blocks.find((b)=>b.archive.root.equals(archive));
109
191
  if (!block) {
110
192
  return Promise.resolve(undefined);
111
193
  }
112
- return Promise.resolve(PublishedL2Block.fromFields({
113
- block,
114
- l1: {
115
- blockNumber: BigInt(block.number),
116
- blockHash: Buffer32.random().toString(),
117
- timestamp: BigInt(block.number)
118
- },
119
- attestations: []
120
- }));
194
+ return Promise.resolve(this.toCheckpointedBlock(block));
195
+ }
196
+ async getL2BlockByHash(blockHash) {
197
+ for (const block of this.l2Blocks){
198
+ const hash = await block.hash();
199
+ if (hash.equals(blockHash)) {
200
+ return block;
201
+ }
202
+ }
203
+ return undefined;
204
+ }
205
+ getL2BlockByArchive(archive) {
206
+ const block = this.l2Blocks.find((b)=>b.archive.root.equals(archive));
207
+ return Promise.resolve(block);
121
208
  }
122
209
  async getBlockHeaderByHash(blockHash) {
123
210
  for (const block of this.l2Blocks){
124
211
  const hash = await block.hash();
125
212
  if (hash.equals(blockHash)) {
126
- return block.getBlockHeader();
213
+ return block.header;
127
214
  }
128
215
  }
129
216
  return undefined;
130
217
  }
131
218
  getBlockHeaderByArchive(archive) {
132
219
  const block = this.l2Blocks.find((b)=>b.archive.root.equals(archive));
133
- return Promise.resolve(block?.getBlockHeader());
220
+ return Promise.resolve(block?.header);
134
221
  }
135
- getBlockHeader(number) {
136
- return Promise.resolve(this.l2Blocks.at(typeof number === 'number' ? number - 1 : -1)?.getBlockHeader());
222
+ async getBlockData(number) {
223
+ const block = this.l2Blocks[number - 1];
224
+ if (!block) {
225
+ return undefined;
226
+ }
227
+ return {
228
+ header: block.header,
229
+ archive: block.archive,
230
+ blockHash: await block.hash(),
231
+ checkpointNumber: block.checkpointNumber,
232
+ indexWithinCheckpoint: block.indexWithinCheckpoint
233
+ };
137
234
  }
138
- getBlocksForEpoch(epochNumber) {
139
- const epochDuration = DefaultL1ContractsConfig.aztecEpochDuration;
140
- const [start, end] = getSlotRangeForEpoch(epochNumber, {
141
- epochDuration
142
- });
143
- const blocks = this.l2Blocks.filter((b)=>{
144
- const slot = b.header.globalVariables.slotNumber;
145
- return slot >= start && slot <= end;
146
- });
235
+ async getBlockDataByArchive(archive) {
236
+ const block = this.l2Blocks.find((b)=>b.archive.root.equals(archive));
237
+ if (!block) {
238
+ return undefined;
239
+ }
240
+ return {
241
+ header: block.header,
242
+ archive: block.archive,
243
+ blockHash: await block.hash(),
244
+ checkpointNumber: block.checkpointNumber,
245
+ indexWithinCheckpoint: block.indexWithinCheckpoint
246
+ };
247
+ }
248
+ getBlockHeader(number) {
249
+ return Promise.resolve(this.l2Blocks.at(typeof number === 'number' ? number - 1 : -1)?.header);
250
+ }
251
+ getCheckpointsForEpoch(epochNumber) {
252
+ return Promise.resolve(this.getCheckpointsInEpoch(epochNumber));
253
+ }
254
+ getCheckpointsDataForEpoch(epochNumber) {
255
+ const checkpoints = this.getCheckpointsInEpoch(epochNumber);
256
+ return Promise.resolve(checkpoints.map((checkpoint)=>({
257
+ checkpointNumber: checkpoint.number,
258
+ header: checkpoint.header,
259
+ archive: checkpoint.archive,
260
+ checkpointOutHash: computeCheckpointOutHash(checkpoint.blocks.map((b)=>b.body.txEffects.map((tx)=>tx.l2ToL1Msgs))),
261
+ startBlock: checkpoint.blocks[0].number,
262
+ blockCount: checkpoint.blocks.length,
263
+ attestations: [],
264
+ l1: this.mockL1DataForCheckpoint(checkpoint)
265
+ })));
266
+ }
267
+ getCheckpointedBlocksForEpoch(epochNumber) {
268
+ const checkpoints = this.getCheckpointsInEpoch(epochNumber);
269
+ return Promise.resolve(checkpoints.flatMap((checkpoint)=>checkpoint.blocks.map((block)=>this.toCheckpointedBlock(block))));
270
+ }
271
+ getBlocksForSlot(slotNumber) {
272
+ const blocks = this.l2Blocks.filter((b)=>b.header.globalVariables.slotNumber === slotNumber);
147
273
  return Promise.resolve(blocks);
148
274
  }
149
- async getBlockHeadersForEpoch(epochNumber) {
150
- const blocks = await this.getBlocksForEpoch(epochNumber);
151
- return blocks.map((b)=>b.getBlockHeader());
275
+ async getCheckpointedBlockHeadersForEpoch(epochNumber) {
276
+ const checkpointedBlocks = await this.getCheckpointedBlocksForEpoch(epochNumber);
277
+ return checkpointedBlocks.map((b)=>b.block.header);
152
278
  }
153
279
  /**
154
280
  * Gets a tx effect.
@@ -166,7 +292,7 @@ import { TxReceipt, TxStatus } from '@aztec/stdlib/tx';
166
292
  return {
167
293
  data: txEffect,
168
294
  l2BlockNumber: block.number,
169
- l2BlockHash: L2BlockHash.fromField(await block.hash()),
295
+ l2BlockHash: await block.hash(),
170
296
  txIndexInBlock: block.body.txEffects.indexOf(txEffect)
171
297
  };
172
298
  }
@@ -178,34 +304,52 @@ import { TxReceipt, TxStatus } from '@aztec/stdlib/tx';
178
304
  for (const block of this.l2Blocks){
179
305
  for (const txEffect of block.body.txEffects){
180
306
  if (txEffect.txHash.equals(txHash)) {
181
- return new TxReceipt(txHash, TxStatus.SUCCESS, '', txEffect.transactionFee.toBigInt(), L2BlockHash.fromField(await block.hash()), block.number);
307
+ // In mock, assume all txs are checkpointed with successful execution
308
+ return new TxReceipt(txHash, TxStatus.CHECKPOINTED, TxExecutionResult.SUCCESS, undefined, txEffect.transactionFee.toBigInt(), await block.hash(), block.number);
182
309
  }
183
310
  }
184
311
  }
185
312
  return undefined;
186
313
  }
187
314
  async getL2Tips() {
188
- const [latest, proven, finalized] = [
315
+ const [latest, proven, finalized, checkpointed] = [
189
316
  await this.getBlockNumber(),
190
317
  await this.getProvenBlockNumber(),
191
- this.finalizedBlockNumber
318
+ this.finalizedBlockNumber,
319
+ this.checkpointedBlockNumber
192
320
  ];
193
321
  const latestBlock = this.l2Blocks[latest - 1];
194
322
  const provenBlock = this.l2Blocks[proven - 1];
195
323
  const finalizedBlock = this.l2Blocks[finalized - 1];
324
+ const checkpointedBlock = this.l2Blocks[checkpointed - 1];
325
+ const latestBlockId = {
326
+ number: BlockNumber(latest),
327
+ hash: (await latestBlock?.hash())?.toString()
328
+ };
329
+ const provenBlockId = {
330
+ number: BlockNumber(proven),
331
+ hash: (await provenBlock?.hash())?.toString()
332
+ };
333
+ const finalizedBlockId = {
334
+ number: BlockNumber(finalized),
335
+ hash: (await finalizedBlock?.hash())?.toString()
336
+ };
337
+ const checkpointedBlockId = {
338
+ number: BlockNumber(checkpointed),
339
+ hash: (await checkpointedBlock?.hash())?.toString()
340
+ };
341
+ const makeTipId = (blockId)=>({
342
+ block: blockId,
343
+ checkpoint: {
344
+ number: this.findCheckpointNumberForBlock(blockId.number) ?? CheckpointNumber(0),
345
+ hash: blockId.hash
346
+ }
347
+ });
196
348
  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
- }
349
+ proposed: latestBlockId,
350
+ checkpointed: makeTipId(checkpointedBlockId),
351
+ proven: makeTipId(provenBlockId),
352
+ finalized: makeTipId(finalizedBlockId)
209
353
  };
210
354
  }
211
355
  getL2EpochNumber() {
@@ -271,4 +415,23 @@ import { TxReceipt, TxStatus } from '@aztec/stdlib/tx';
271
415
  valid: true
272
416
  });
273
417
  }
418
+ /** Returns checkpoints whose slot falls within the given epoch. */ getCheckpointsInEpoch(epochNumber) {
419
+ const epochDuration = DefaultL1ContractsConfig.aztecEpochDuration;
420
+ const [start, end] = getSlotRangeForEpoch(epochNumber, {
421
+ epochDuration
422
+ });
423
+ return this.checkpointList.filter((c)=>c.header.slotNumber >= start && c.header.slotNumber <= end);
424
+ }
425
+ /** Creates a mock L1PublishedData for a checkpoint. */ mockL1DataForCheckpoint(checkpoint) {
426
+ return new L1PublishedData(BigInt(checkpoint.number), BigInt(checkpoint.number), Buffer32.random().toString());
427
+ }
428
+ /** Creates a CheckpointedL2Block from a block using stored checkpoint info. */ toCheckpointedBlock(block) {
429
+ const checkpoint = this.checkpointList.find((c)=>c.blocks.some((b)=>b.number === block.number));
430
+ const checkpointNumber = checkpoint?.number ?? block.checkpointNumber;
431
+ return new CheckpointedL2Block(checkpointNumber, block, new L1PublishedData(BigInt(block.number), BigInt(block.number), `0x${block.number.toString(16).padStart(64, '0')}`), []);
432
+ }
433
+ /** Finds the checkpoint number for a block, or undefined if the block is not in any checkpoint. */ findCheckpointNumberForBlock(blockNumber) {
434
+ const checkpoint = this.checkpointList.find((c)=>c.blocks.some((b)=>b.number === blockNumber));
435
+ return checkpoint?.number;
436
+ }
274
437
  }
@@ -1,9 +1,85 @@
1
+ import { CheckpointNumber } from '@aztec/foundation/branded-types';
1
2
  import { Buffer16 } from '@aztec/foundation/buffer';
2
- import { type InboxMessage } from '../archiver/structs/inbox_message.js';
3
+ import type { Secp256k1Signer } from '@aztec/foundation/crypto/secp256k1-signer';
4
+ import { EthAddress } from '@aztec/foundation/eth-address';
5
+ import { AztecAddress } from '@aztec/stdlib/aztec-address';
6
+ import { Checkpoint, L1PublishedData, PublishedCheckpoint } from '@aztec/stdlib/checkpoint';
7
+ import { PrivateLog, PublicLog, SiloedTag, Tag } from '@aztec/stdlib/logs';
8
+ import { AppendOnlyTreeSnapshot } from '@aztec/stdlib/trees';
9
+ import { StateReference } from '@aztec/stdlib/tx';
10
+ import { type InboxMessage } from '../structs/inbox_message.js';
3
11
  export declare function makeInboxMessage(previousRollingHash?: Buffer16, overrides?: Partial<InboxMessage>): InboxMessage;
4
- export declare function makeInboxMessages(count: number, opts?: {
12
+ export declare function makeInboxMessages(totalCount: number, opts?: {
5
13
  initialHash?: Buffer16;
6
- initialL2BlockNumber?: number;
14
+ initialCheckpointNumber?: CheckpointNumber;
15
+ messagesPerCheckpoint?: number;
7
16
  overrideFn?: (msg: InboxMessage, index: number) => InboxMessage;
8
17
  }): InboxMessage[];
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ja19zdHJ1Y3RzLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVzdC9tb2NrX3N0cnVjdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBWSxNQUFNLDBCQUEwQixDQUFDO0FBSzlELE9BQU8sRUFBRSxLQUFLLFlBQVksRUFBcUIsTUFBTSxzQ0FBc0MsQ0FBQztBQUU1Rix3QkFBZ0IsZ0JBQWdCLENBQzlCLG1CQUFtQixXQUFnQixFQUNuQyxTQUFTLEdBQUUsT0FBTyxDQUFDLFlBQVksQ0FBTSxHQUNwQyxZQUFZLENBZ0JkO0FBRUQsd0JBQWdCLGlCQUFpQixDQUMvQixLQUFLLEVBQUUsTUFBTSxFQUNiLElBQUksR0FBRTtJQUNKLFdBQVcsQ0FBQyxFQUFFLFFBQVEsQ0FBQztJQUN2QixvQkFBb0IsQ0FBQyxFQUFFLE1BQU0sQ0FBQztJQUM5QixVQUFVLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sS0FBSyxZQUFZLENBQUM7Q0FDNUQsR0FDTCxZQUFZLEVBQUUsQ0FhaEIifQ==
18
+ /** Creates inbox messages distributed across multiple blocks with proper checkpoint numbering. */
19
+ export declare function makeInboxMessagesWithFullBlocks(blockCount: number, opts?: {
20
+ initialCheckpointNumber?: CheckpointNumber;
21
+ }): InboxMessage[];
22
+ /** Creates a deterministic block hash from a block number. */
23
+ export declare function makeBlockHash(blockNumber: number): `0x${string}`;
24
+ /**
25
+ * Creates a StateReference with properly calculated noteHashTree.nextAvailableLeafIndex.
26
+ * This ensures LogStore's dataStartIndexForBlock calculation doesn't produce negative values.
27
+ */
28
+ export declare function makeStateForBlock(blockNumber: number, txsPerBlock: number): StateReference;
29
+ /** Creates L1PublishedData with deterministic values based on l1BlockNumber. */
30
+ export declare function makeL1PublishedData(l1BlockNumber: number): L1PublishedData;
31
+ /** Wraps a Checkpoint with L1 published data and random attestations. */
32
+ export declare function makePublishedCheckpoint(checkpoint: Checkpoint, l1BlockNumber: number, attestationCount?: number): PublishedCheckpoint;
33
+ export interface MakeChainedCheckpointsOptions {
34
+ /** Number of L2 blocks per checkpoint. Default: 1 */
35
+ blocksPerCheckpoint?: number;
36
+ /** Number of transactions per block. Default: 4 */
37
+ txsPerBlock?: number;
38
+ /** Starting checkpoint number. Default: CheckpointNumber(1) */
39
+ startCheckpointNumber?: CheckpointNumber;
40
+ /** Starting block number. Default: 1 */
41
+ startBlockNumber?: number;
42
+ /** Starting L1 block number. Default: 10 */
43
+ startL1BlockNumber?: number;
44
+ /** Previous archive to chain from. Default: undefined */
45
+ previousArchive?: AppendOnlyTreeSnapshot;
46
+ /** Optional function to provide per-checkpoint overrides */
47
+ makeCheckpointOptions?: (cpNumber: CheckpointNumber) => Partial<Parameters<typeof Checkpoint.random>[1]>;
48
+ }
49
+ /**
50
+ * Creates multiple checkpoints with properly chained archives.
51
+ * Each checkpoint's blocks have their lastArchive set to the previous block's archive,
52
+ * ensuring archive chain continuity for testing.
53
+ */
54
+ export declare function makeChainedCheckpoints(count: number, options?: MakeChainedCheckpointsOptions): Promise<PublishedCheckpoint[]>;
55
+ /**
56
+ * Creates a PublishedCheckpoint with attestations signed by the provided signers.
57
+ * Useful for testing attestation validation.
58
+ */
59
+ export declare function makeSignedPublishedCheckpoint(checkpoint: Checkpoint, signers: Secp256k1Signer[], committee: EthAddress[], l1BlockNumber?: number): PublishedCheckpoint;
60
+ /** Creates a deterministic SiloedTag for private log testing. */
61
+ export declare function makePrivateLogTag(blockNumber: number, txIndex: number, logIndex: number): SiloedTag;
62
+ /** Creates a PrivateLog with fields derived from the tag. */
63
+ export declare function makePrivateLog(tag: SiloedTag): PrivateLog;
64
+ /** Creates multiple private logs for a transaction. */
65
+ export declare function mockPrivateLogs(blockNumber: number, txIndex: number, numLogsPerTx: number): PrivateLog[];
66
+ /** Creates a deterministic Tag for public log testing. */
67
+ export declare function makePublicLogTag(blockNumber: number, txIndex: number, logIndex: number): Tag;
68
+ /** Creates a PublicLog with fields derived from the tag. */
69
+ export declare function makePublicLog(tag: Tag, contractAddress?: AztecAddress): PublicLog;
70
+ /** Creates multiple public logs for a transaction. */
71
+ export declare function makePublicLogs(blockNumber: number, txIndex: number, numLogsPerTx: number, contractAddress?: AztecAddress): PublicLog[];
72
+ export interface MockCheckpointWithLogsOptions {
73
+ previousArchive?: AppendOnlyTreeSnapshot;
74
+ numTxsPerBlock?: number;
75
+ privateLogs?: {
76
+ numLogsPerTx: number;
77
+ };
78
+ publicLogs?: {
79
+ numLogsPerTx: number;
80
+ contractAddress?: AztecAddress;
81
+ };
82
+ }
83
+ /** Creates a checkpoint with specified logs on each tx effect. */
84
+ export declare function makeCheckpointWithLogs(blockNumber: number, options?: MockCheckpointWithLogsOptions): Promise<PublishedCheckpoint>;
85
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ja19zdHJ1Y3RzLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVzdC9tb2NrX3N0cnVjdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBTUEsT0FBTyxFQUFlLGdCQUFnQixFQUF5QixNQUFNLGlDQUFpQyxDQUFDO0FBQ3ZHLE9BQU8sRUFBRSxRQUFRLEVBQVksTUFBTSwwQkFBMEIsQ0FBQztBQUc5RCxPQUFPLEtBQUssRUFBRSxlQUFlLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUVqRixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRTNELE9BQU8sRUFBRSxVQUFVLEVBQUUsZUFBZSxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDNUYsT0FBTyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBSzNFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzdELE9BQU8sRUFBeUIsY0FBYyxFQUFZLE1BQU0sa0JBQWtCLENBQUM7QUFFbkYsT0FBTyxFQUFFLEtBQUssWUFBWSxFQUFxQixNQUFNLDZCQUE2QixDQUFDO0FBRW5GLHdCQUFnQixnQkFBZ0IsQ0FDOUIsbUJBQW1CLFdBQWdCLEVBQ25DLFNBQVMsR0FBRSxPQUFPLENBQUMsWUFBWSxDQUFNLEdBQ3BDLFlBQVksQ0FnQmQ7QUFFRCx3QkFBZ0IsaUJBQWlCLENBQy9CLFVBQVUsRUFBRSxNQUFNLEVBQ2xCLElBQUksR0FBRTtJQUNKLFdBQVcsQ0FBQyxFQUFFLFFBQVEsQ0FBQztJQUN2Qix1QkFBdUIsQ0FBQyxFQUFFLGdCQUFnQixDQUFDO0lBQzNDLHFCQUFxQixDQUFDLEVBQUUsTUFBTSxDQUFDO0lBQy9CLFVBQVUsQ0FBQyxFQUFFLENBQUMsR0FBRyxF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
@@ -1 +1 @@
1
- {"version":3,"file":"mock_structs.d.ts","sourceRoot":"","sources":["../../src/test/mock_structs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAY,MAAM,0BAA0B,CAAC;AAK9D,OAAO,EAAE,KAAK,YAAY,EAAqB,MAAM,sCAAsC,CAAC;AAE5F,wBAAgB,gBAAgB,CAC9B,mBAAmB,WAAgB,EACnC,SAAS,GAAE,OAAO,CAAC,YAAY,CAAM,GACpC,YAAY,CAgBd;AAED,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,MAAM,EACb,IAAI,GAAE;IACJ,WAAW,CAAC,EAAE,QAAQ,CAAC;IACvB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,KAAK,YAAY,CAAC;CAC5D,GACL,YAAY,EAAE,CAahB"}
1
+ {"version":3,"file":"mock_structs.d.ts","sourceRoot":"","sources":["../../src/test/mock_structs.ts"],"names":[],"mappings":"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"}