@aztec/archiver 3.0.3 → 3.9.9-nightly.20260312

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