@aztec/archiver 4.0.0-nightly.20250907 → 4.0.0-nightly.20260107

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 (133) hide show
  1. package/README.md +27 -6
  2. package/dest/archiver/archiver.d.ts +127 -84
  3. package/dest/archiver/archiver.d.ts.map +1 -1
  4. package/dest/archiver/archiver.js +1128 -380
  5. package/dest/archiver/archiver_store.d.ts +122 -45
  6. package/dest/archiver/archiver_store.d.ts.map +1 -1
  7. package/dest/archiver/archiver_store_test_suite.d.ts +1 -1
  8. package/dest/archiver/archiver_store_test_suite.d.ts.map +1 -1
  9. package/dest/archiver/archiver_store_test_suite.js +2013 -343
  10. package/dest/archiver/config.d.ts +7 -20
  11. package/dest/archiver/config.d.ts.map +1 -1
  12. package/dest/archiver/config.js +21 -5
  13. package/dest/archiver/errors.d.ts +25 -1
  14. package/dest/archiver/errors.d.ts.map +1 -1
  15. package/dest/archiver/errors.js +37 -0
  16. package/dest/archiver/index.d.ts +2 -2
  17. package/dest/archiver/index.d.ts.map +1 -1
  18. package/dest/archiver/instrumentation.d.ts +5 -3
  19. package/dest/archiver/instrumentation.d.ts.map +1 -1
  20. package/dest/archiver/instrumentation.js +14 -0
  21. package/dest/archiver/kv_archiver_store/block_store.d.ts +83 -15
  22. package/dest/archiver/kv_archiver_store/block_store.d.ts.map +1 -1
  23. package/dest/archiver/kv_archiver_store/block_store.js +396 -73
  24. package/dest/archiver/kv_archiver_store/contract_class_store.d.ts +2 -2
  25. package/dest/archiver/kv_archiver_store/contract_class_store.d.ts.map +1 -1
  26. package/dest/archiver/kv_archiver_store/contract_class_store.js +1 -1
  27. package/dest/archiver/kv_archiver_store/contract_instance_store.d.ts +2 -2
  28. package/dest/archiver/kv_archiver_store/contract_instance_store.d.ts.map +1 -1
  29. package/dest/archiver/kv_archiver_store/kv_archiver_store.d.ts +51 -55
  30. package/dest/archiver/kv_archiver_store/kv_archiver_store.d.ts.map +1 -1
  31. package/dest/archiver/kv_archiver_store/kv_archiver_store.js +82 -46
  32. package/dest/archiver/kv_archiver_store/log_store.d.ts +12 -16
  33. package/dest/archiver/kv_archiver_store/log_store.d.ts.map +1 -1
  34. package/dest/archiver/kv_archiver_store/log_store.js +149 -84
  35. package/dest/archiver/kv_archiver_store/message_store.d.ts +6 -5
  36. package/dest/archiver/kv_archiver_store/message_store.d.ts.map +1 -1
  37. package/dest/archiver/kv_archiver_store/message_store.js +15 -14
  38. package/dest/archiver/l1/bin/retrieve-calldata.d.ts +3 -0
  39. package/dest/archiver/l1/bin/retrieve-calldata.d.ts.map +1 -0
  40. package/dest/archiver/l1/bin/retrieve-calldata.js +149 -0
  41. package/dest/archiver/l1/calldata_retriever.d.ts +112 -0
  42. package/dest/archiver/l1/calldata_retriever.d.ts.map +1 -0
  43. package/dest/archiver/l1/calldata_retriever.js +471 -0
  44. package/dest/archiver/l1/data_retrieval.d.ts +90 -0
  45. package/dest/archiver/l1/data_retrieval.d.ts.map +1 -0
  46. package/dest/archiver/l1/data_retrieval.js +331 -0
  47. package/dest/archiver/l1/debug_tx.d.ts +19 -0
  48. package/dest/archiver/l1/debug_tx.d.ts.map +1 -0
  49. package/dest/archiver/l1/debug_tx.js +73 -0
  50. package/dest/archiver/l1/spire_proposer.d.ts +70 -0
  51. package/dest/archiver/l1/spire_proposer.d.ts.map +1 -0
  52. package/dest/archiver/l1/spire_proposer.js +157 -0
  53. package/dest/archiver/l1/trace_tx.d.ts +97 -0
  54. package/dest/archiver/l1/trace_tx.d.ts.map +1 -0
  55. package/dest/archiver/l1/trace_tx.js +91 -0
  56. package/dest/archiver/l1/types.d.ts +12 -0
  57. package/dest/archiver/l1/types.d.ts.map +1 -0
  58. package/dest/archiver/l1/types.js +3 -0
  59. package/dest/archiver/l1/validate_trace.d.ts +29 -0
  60. package/dest/archiver/l1/validate_trace.d.ts.map +1 -0
  61. package/dest/archiver/l1/validate_trace.js +150 -0
  62. package/dest/archiver/structs/data_retrieval.d.ts +1 -1
  63. package/dest/archiver/structs/inbox_message.d.ts +4 -4
  64. package/dest/archiver/structs/inbox_message.d.ts.map +1 -1
  65. package/dest/archiver/structs/inbox_message.js +6 -5
  66. package/dest/archiver/structs/published.d.ts +2 -2
  67. package/dest/archiver/structs/published.d.ts.map +1 -1
  68. package/dest/archiver/validation.d.ts +10 -4
  69. package/dest/archiver/validation.d.ts.map +1 -1
  70. package/dest/archiver/validation.js +66 -44
  71. package/dest/factory.d.ts +4 -6
  72. package/dest/factory.d.ts.map +1 -1
  73. package/dest/factory.js +5 -4
  74. package/dest/index.d.ts +2 -2
  75. package/dest/index.d.ts.map +1 -1
  76. package/dest/index.js +1 -1
  77. package/dest/rpc/index.d.ts +2 -2
  78. package/dest/test/index.d.ts +1 -1
  79. package/dest/test/mock_archiver.d.ts +16 -8
  80. package/dest/test/mock_archiver.d.ts.map +1 -1
  81. package/dest/test/mock_archiver.js +19 -14
  82. package/dest/test/mock_l1_to_l2_message_source.d.ts +7 -6
  83. package/dest/test/mock_l1_to_l2_message_source.d.ts.map +1 -1
  84. package/dest/test/mock_l1_to_l2_message_source.js +10 -9
  85. package/dest/test/mock_l2_block_source.d.ts +31 -20
  86. package/dest/test/mock_l2_block_source.d.ts.map +1 -1
  87. package/dest/test/mock_l2_block_source.js +85 -18
  88. package/dest/test/mock_structs.d.ts +3 -2
  89. package/dest/test/mock_structs.d.ts.map +1 -1
  90. package/dest/test/mock_structs.js +9 -8
  91. package/package.json +18 -17
  92. package/src/archiver/archiver.ts +971 -475
  93. package/src/archiver/archiver_store.ts +141 -44
  94. package/src/archiver/archiver_store_test_suite.ts +2114 -331
  95. package/src/archiver/config.ts +30 -35
  96. package/src/archiver/errors.ts +64 -0
  97. package/src/archiver/index.ts +1 -1
  98. package/src/archiver/instrumentation.ts +19 -2
  99. package/src/archiver/kv_archiver_store/block_store.ts +541 -83
  100. package/src/archiver/kv_archiver_store/contract_class_store.ts +1 -1
  101. package/src/archiver/kv_archiver_store/contract_instance_store.ts +1 -1
  102. package/src/archiver/kv_archiver_store/kv_archiver_store.ts +107 -67
  103. package/src/archiver/kv_archiver_store/log_store.ts +209 -99
  104. package/src/archiver/kv_archiver_store/message_store.ts +21 -18
  105. package/src/archiver/l1/README.md +98 -0
  106. package/src/archiver/l1/bin/retrieve-calldata.ts +182 -0
  107. package/src/archiver/l1/calldata_retriever.ts +641 -0
  108. package/src/archiver/l1/data_retrieval.ts +512 -0
  109. package/src/archiver/l1/debug_tx.ts +99 -0
  110. package/src/archiver/l1/spire_proposer.ts +160 -0
  111. package/src/archiver/l1/trace_tx.ts +128 -0
  112. package/src/archiver/l1/types.ts +13 -0
  113. package/src/archiver/l1/validate_trace.ts +211 -0
  114. package/src/archiver/structs/inbox_message.ts +8 -8
  115. package/src/archiver/structs/published.ts +1 -1
  116. package/src/archiver/validation.ts +86 -32
  117. package/src/factory.ts +6 -7
  118. package/src/index.ts +1 -1
  119. package/src/test/fixtures/debug_traceTransaction-multicall3.json +88 -0
  120. package/src/test/fixtures/debug_traceTransaction-multiplePropose.json +153 -0
  121. package/src/test/fixtures/debug_traceTransaction-proxied.json +122 -0
  122. package/src/test/fixtures/trace_transaction-multicall3.json +65 -0
  123. package/src/test/fixtures/trace_transaction-multiplePropose.json +319 -0
  124. package/src/test/fixtures/trace_transaction-proxied.json +128 -0
  125. package/src/test/fixtures/trace_transaction-randomRevert.json +216 -0
  126. package/src/test/mock_archiver.ts +22 -16
  127. package/src/test/mock_l1_to_l2_message_source.ts +10 -9
  128. package/src/test/mock_l2_block_source.ts +114 -27
  129. package/src/test/mock_structs.ts +10 -9
  130. package/dest/archiver/data_retrieval.d.ts +0 -78
  131. package/dest/archiver/data_retrieval.d.ts.map +0 -1
  132. package/dest/archiver/data_retrieval.js +0 -354
  133. package/src/archiver/data_retrieval.ts +0 -535
@@ -0,0 +1,216 @@
1
+ [
2
+ {
3
+ "action": {
4
+ "from": "0x28c6c06298d514db089934071355e5743bf21d60",
5
+ "callType": "call",
6
+ "gas": "0x5f1fc",
7
+ "input": "0x34fcd5be0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000120000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044a9059cbb000000000000000000000000a587116d5cf08e53bd75f3a0a434bf06671098590000000000000000000000000000000000000000000000000000000029a6d78000000000000000000000000000000000000000000000000000000000000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044a9059cbb0000000000000000000000009f863dfdb5df33fe5f87601b8d2f23c816d5fde8000000000000000000000000000000000000000000000000000000000b7ff86f00000000000000000000000000000000000000000000000000000000",
8
+ "to": "0xee7ae85f2fe2239e27d9c1e23fffe168d63b4055",
9
+ "value": "0x0"
10
+ },
11
+ "blockHash": "0x5c463f21273435fbe71ab85a203ce4566e8f0d83deafcc757913ac2b5839367d",
12
+ "blockNumber": 23934803,
13
+ "result": {
14
+ "gasUsed": "0x15b9b",
15
+ "output": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000001"
16
+ },
17
+ "subtraces": 1,
18
+ "traceAddress": [],
19
+ "transactionHash": "0x622c1ca0d4c20a4d58f4111bf24cafa633318ededb24819ee3d977a73b1a1ff9",
20
+ "transactionPosition": 333,
21
+ "type": "call"
22
+ },
23
+ {
24
+ "action": {
25
+ "from": "0xee7ae85f2fe2239e27d9c1e23fffe168d63b4055",
26
+ "callType": "delegatecall",
27
+ "gas": "0x5c75c",
28
+ "input": "0x34fcd5be0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000120000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044a9059cbb000000000000000000000000a587116d5cf08e53bd75f3a0a434bf06671098590000000000000000000000000000000000000000000000000000000029a6d78000000000000000000000000000000000000000000000000000000000000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044a9059cbb0000000000000000000000009f863dfdb5df33fe5f87601b8d2f23c816d5fde8000000000000000000000000000000000000000000000000000000000b7ff86f00000000000000000000000000000000000000000000000000000000",
29
+ "to": "0xd206ac7fef53d83ed4563e770b28dba90d0d9ec8",
30
+ "value": "0x0"
31
+ },
32
+ "blockHash": "0x5c463f21273435fbe71ab85a203ce4566e8f0d83deafcc757913ac2b5839367d",
33
+ "blockNumber": 23934803,
34
+ "result": {
35
+ "gasUsed": "0x1483e",
36
+ "output": "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000001"
37
+ },
38
+ "subtraces": 4,
39
+ "traceAddress": [0],
40
+ "transactionHash": "0x622c1ca0d4c20a4d58f4111bf24cafa633318ededb24819ee3d977a73b1a1ff9",
41
+ "transactionPosition": 333,
42
+ "type": "call"
43
+ },
44
+ {
45
+ "action": {
46
+ "from": "0xee7ae85f2fe2239e27d9c1e23fffe168d63b4055",
47
+ "callType": "staticcall",
48
+ "gas": "0x7530",
49
+ "input": "0x01ffc9a701ffc9a700000000000000000000000000000000000000000000000000000000",
50
+ "to": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
51
+ "value": "0x0"
52
+ },
53
+ "blockHash": "0x5c463f21273435fbe71ab85a203ce4566e8f0d83deafcc757913ac2b5839367d",
54
+ "blockNumber": 23934803,
55
+ "error": "Reverted",
56
+ "result": {
57
+ "gasUsed": "0x1d64",
58
+ "output": "0x"
59
+ },
60
+ "subtraces": 1,
61
+ "traceAddress": [0, 0],
62
+ "transactionHash": "0x622c1ca0d4c20a4d58f4111bf24cafa633318ededb24819ee3d977a73b1a1ff9",
63
+ "transactionPosition": 333,
64
+ "type": "call"
65
+ },
66
+ {
67
+ "action": {
68
+ "from": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
69
+ "callType": "delegatecall",
70
+ "gas": "0x5783",
71
+ "input": "0x01ffc9a701ffc9a700000000000000000000000000000000000000000000000000000000",
72
+ "to": "0x43506849d7c04f9138d1a2050bbf3a0c054402dd",
73
+ "value": "0x0"
74
+ },
75
+ "blockHash": "0x5c463f21273435fbe71ab85a203ce4566e8f0d83deafcc757913ac2b5839367d",
76
+ "blockNumber": 23934803,
77
+ "error": "Reverted",
78
+ "result": {
79
+ "gasUsed": "0xf0",
80
+ "output": "0x"
81
+ },
82
+ "subtraces": 0,
83
+ "traceAddress": [0, 0, 0],
84
+ "transactionHash": "0x622c1ca0d4c20a4d58f4111bf24cafa633318ededb24819ee3d977a73b1a1ff9",
85
+ "transactionPosition": 333,
86
+ "type": "call"
87
+ },
88
+ {
89
+ "action": {
90
+ "from": "0xee7ae85f2fe2239e27d9c1e23fffe168d63b4055",
91
+ "callType": "call",
92
+ "gas": "0x541ba",
93
+ "input": "0xa9059cbb000000000000000000000000a587116d5cf08e53bd75f3a0a434bf06671098590000000000000000000000000000000000000000000000000000000029a6d780",
94
+ "to": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
95
+ "value": "0x0"
96
+ },
97
+ "blockHash": "0x5c463f21273435fbe71ab85a203ce4566e8f0d83deafcc757913ac2b5839367d",
98
+ "blockNumber": 23934803,
99
+ "result": {
100
+ "gasUsed": "0x9ecc",
101
+ "output": "0x0000000000000000000000000000000000000000000000000000000000000001"
102
+ },
103
+ "subtraces": 1,
104
+ "traceAddress": [0, 1],
105
+ "transactionHash": "0x622c1ca0d4c20a4d58f4111bf24cafa633318ededb24819ee3d977a73b1a1ff9",
106
+ "transactionPosition": 333,
107
+ "type": "call"
108
+ },
109
+ {
110
+ "action": {
111
+ "from": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
112
+ "callType": "delegatecall",
113
+ "gas": "0x510d8",
114
+ "input": "0xa9059cbb000000000000000000000000a587116d5cf08e53bd75f3a0a434bf06671098590000000000000000000000000000000000000000000000000000000029a6d780",
115
+ "to": "0x43506849d7c04f9138d1a2050bbf3a0c054402dd",
116
+ "value": "0x0"
117
+ },
118
+ "blockHash": "0x5c463f21273435fbe71ab85a203ce4566e8f0d83deafcc757913ac2b5839367d",
119
+ "blockNumber": 23934803,
120
+ "result": {
121
+ "gasUsed": "0x8253",
122
+ "output": "0x0000000000000000000000000000000000000000000000000000000000000001"
123
+ },
124
+ "subtraces": 0,
125
+ "traceAddress": [0, 1, 0],
126
+ "transactionHash": "0x622c1ca0d4c20a4d58f4111bf24cafa633318ededb24819ee3d977a73b1a1ff9",
127
+ "transactionPosition": 333,
128
+ "type": "call"
129
+ },
130
+ {
131
+ "action": {
132
+ "from": "0xee7ae85f2fe2239e27d9c1e23fffe168d63b4055",
133
+ "callType": "staticcall",
134
+ "gas": "0x7530",
135
+ "input": "0x01ffc9a701ffc9a700000000000000000000000000000000000000000000000000000000",
136
+ "to": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
137
+ "value": "0x0"
138
+ },
139
+ "blockHash": "0x5c463f21273435fbe71ab85a203ce4566e8f0d83deafcc757913ac2b5839367d",
140
+ "blockNumber": 23934803,
141
+ "error": "Reverted",
142
+ "result": {
143
+ "gasUsed": "0x400",
144
+ "output": "0x"
145
+ },
146
+ "subtraces": 1,
147
+ "traceAddress": [0, 2],
148
+ "transactionHash": "0x622c1ca0d4c20a4d58f4111bf24cafa633318ededb24819ee3d977a73b1a1ff9",
149
+ "transactionPosition": 333,
150
+ "type": "call"
151
+ },
152
+ {
153
+ "action": {
154
+ "from": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
155
+ "callType": "delegatecall",
156
+ "gas": "0x7081",
157
+ "input": "0x01ffc9a701ffc9a700000000000000000000000000000000000000000000000000000000",
158
+ "to": "0x43506849d7c04f9138d1a2050bbf3a0c054402dd",
159
+ "value": "0x0"
160
+ },
161
+ "blockHash": "0x5c463f21273435fbe71ab85a203ce4566e8f0d83deafcc757913ac2b5839367d",
162
+ "blockNumber": 23934803,
163
+ "error": "Reverted",
164
+ "result": {
165
+ "gasUsed": "0xf0",
166
+ "output": "0x"
167
+ },
168
+ "subtraces": 0,
169
+ "traceAddress": [0, 2, 0],
170
+ "transactionHash": "0x622c1ca0d4c20a4d58f4111bf24cafa633318ededb24819ee3d977a73b1a1ff9",
171
+ "transactionPosition": 333,
172
+ "type": "call"
173
+ },
174
+ {
175
+ "action": {
176
+ "from": "0xee7ae85f2fe2239e27d9c1e23fffe168d63b4055",
177
+ "callType": "call",
178
+ "gas": "0x4997e",
179
+ "input": "0xa9059cbb0000000000000000000000009f863dfdb5df33fe5f87601b8d2f23c816d5fde8000000000000000000000000000000000000000000000000000000000b7ff86f",
180
+ "to": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
181
+ "value": "0x0"
182
+ },
183
+ "blockHash": "0x5c463f21273435fbe71ab85a203ce4566e8f0d83deafcc757913ac2b5839367d",
184
+ "blockNumber": 23934803,
185
+ "result": {
186
+ "gasUsed": "0x280c",
187
+ "output": "0x0000000000000000000000000000000000000000000000000000000000000001"
188
+ },
189
+ "subtraces": 1,
190
+ "traceAddress": [0, 3],
191
+ "transactionHash": "0x622c1ca0d4c20a4d58f4111bf24cafa633318ededb24819ee3d977a73b1a1ff9",
192
+ "transactionPosition": 333,
193
+ "type": "call"
194
+ },
195
+ {
196
+ "action": {
197
+ "from": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
198
+ "callType": "delegatecall",
199
+ "gas": "0x4843b",
200
+ "input": "0xa9059cbb0000000000000000000000009f863dfdb5df33fe5f87601b8d2f23c816d5fde8000000000000000000000000000000000000000000000000000000000b7ff86f",
201
+ "to": "0x43506849d7c04f9138d1a2050bbf3a0c054402dd",
202
+ "value": "0x0"
203
+ },
204
+ "blockHash": "0x5c463f21273435fbe71ab85a203ce4566e8f0d83deafcc757913ac2b5839367d",
205
+ "blockNumber": 23934803,
206
+ "result": {
207
+ "gasUsed": "0x24f7",
208
+ "output": "0x0000000000000000000000000000000000000000000000000000000000000001"
209
+ },
210
+ "subtraces": 0,
211
+ "traceAddress": [0, 3, 0],
212
+ "transactionHash": "0x622c1ca0d4c20a4d58f4111bf24cafa633318ededb24819ee3d977a73b1a1ff9",
213
+ "transactionPosition": 333,
214
+ "type": "call"
215
+ }
216
+ ]
@@ -1,5 +1,7 @@
1
- import type { Fr } from '@aztec/foundation/fields';
2
- import type { L2Block, L2BlockSource } from '@aztec/stdlib/block';
1
+ import type { CheckpointNumber } from '@aztec/foundation/branded-types';
2
+ import type { Fr } from '@aztec/foundation/curves/bn254';
3
+ import { L2Block, type L2BlockSource } from '@aztec/stdlib/block';
4
+ import type { Checkpoint } from '@aztec/stdlib/checkpoint';
3
5
  import type { L1ToL2MessageSource } from '@aztec/stdlib/messaging';
4
6
 
5
7
  import { MockL1ToL2MessageSource } from './mock_l1_to_l2_message_source.js';
@@ -11,12 +13,12 @@ import { MockL2BlockSource } from './mock_l2_block_source.js';
11
13
  export class MockArchiver extends MockL2BlockSource implements L2BlockSource, L1ToL2MessageSource {
12
14
  private messageSource = new MockL1ToL2MessageSource(0);
13
15
 
14
- public setL1ToL2Messages(blockNumber: number, msgs: Fr[]) {
15
- this.messageSource.setL1ToL2Messages(blockNumber, msgs);
16
+ public setL1ToL2Messages(checkpointNumber: CheckpointNumber, msgs: Fr[]) {
17
+ this.messageSource.setL1ToL2Messages(checkpointNumber, msgs);
16
18
  }
17
19
 
18
- getL1ToL2Messages(blockNumber: number): Promise<Fr[]> {
19
- return this.messageSource.getL1ToL2Messages(blockNumber);
20
+ getL1ToL2Messages(checkpointNumber: CheckpointNumber): Promise<Fr[]> {
21
+ return this.messageSource.getL1ToL2Messages(checkpointNumber);
20
22
  }
21
23
 
22
24
  getL1ToL2MessageIndex(_l1ToL2Message: Fr): Promise<bigint | undefined> {
@@ -28,30 +30,34 @@ export class MockArchiver extends MockL2BlockSource implements L2BlockSource, L1
28
30
  * A mocked implementation of the archiver with a set of precomputed blocks and messages.
29
31
  */
30
32
  export class MockPrefilledArchiver extends MockArchiver {
31
- private precomputed: L2Block[];
33
+ private prefilled: Checkpoint[] = [];
32
34
 
33
- constructor(precomputed: L2Block[], messages: Fr[][]) {
35
+ constructor(prefilled: { checkpoint: Checkpoint; messages: Fr[] }[]) {
34
36
  super();
35
- this.precomputed = precomputed.slice();
36
- messages.forEach((msgs, i) => this.setL1ToL2Messages(i + 1, msgs));
37
+ this.setPrefilled(prefilled);
37
38
  }
38
39
 
39
- public setPrefilledBlocks(blocks: L2Block[], messages: Fr[][]) {
40
- for (const block of blocks) {
41
- this.precomputed[block.number - 1] = block;
40
+ public setPrefilled(prefilled: { checkpoint: Checkpoint; messages: Fr[] }[]) {
41
+ for (const { checkpoint, messages } of prefilled) {
42
+ this.prefilled[checkpoint.number - 1] = checkpoint;
43
+ if (checkpoint.blocks.length !== 1) {
44
+ throw new Error('Prefilled checkpoint must only have 1 block at the moment.');
45
+ }
46
+ this.setL1ToL2Messages(checkpoint.number, messages);
42
47
  }
43
- messages.forEach((msgs, i) => this.setL1ToL2Messages(blocks[i].number, msgs));
44
48
  }
45
49
 
46
50
  public override createBlocks(numBlocks: number) {
47
- if (this.l2Blocks.length + numBlocks > this.precomputed.length) {
51
+ const flattenedBlocks = this.prefilled.flatMap(c => c.blocks);
52
+ if (this.l2Blocks.length + numBlocks > flattenedBlocks.length) {
48
53
  throw new Error(
49
54
  `Not enough precomputed blocks to create ${numBlocks} more blocks (already at ${this.l2Blocks.length})`,
50
55
  );
51
56
  }
52
57
 
53
58
  const fromBlock = this.l2Blocks.length;
54
- this.addBlocks(this.precomputed.slice(fromBlock, fromBlock + numBlocks));
59
+ // TODO: Add L2 blocks and checkpoints separately once archiver has the apis for that.
60
+ this.addBlocks(this.prefilled.slice(fromBlock, fromBlock + numBlocks).map(c => L2Block.fromCheckpoint(c)));
55
61
  return Promise.resolve();
56
62
  }
57
63
  }
@@ -1,4 +1,5 @@
1
- import { Fr } from '@aztec/foundation/fields';
1
+ import { BlockNumber, type 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,33 +7,33 @@ import type { L1ToL2MessageSource } from '@aztec/stdlib/messaging';
6
7
  * A mocked implementation of L1ToL2MessageSource to be used in tests.
7
8
  */
8
9
  export class MockL1ToL2MessageSource implements L1ToL2MessageSource {
9
- private messagesPerBlock = new Map<number, Fr[]>();
10
+ private messagesPerCheckpoint = new Map<CheckpointNumber, Fr[]>();
10
11
 
11
12
  constructor(private blockNumber: number) {}
12
13
 
13
- public setL1ToL2Messages(blockNumber: number, msgs: Fr[]) {
14
- this.messagesPerBlock.set(blockNumber, msgs);
14
+ public setL1ToL2Messages(checkpointNumber: CheckpointNumber, msgs: Fr[]) {
15
+ this.messagesPerCheckpoint.set(checkpointNumber, msgs);
15
16
  }
16
17
 
17
18
  public setBlockNumber(blockNumber: number) {
18
19
  this.blockNumber = blockNumber;
19
20
  }
20
21
 
21
- getL1ToL2Messages(blockNumber: number): Promise<Fr[]> {
22
- return Promise.resolve(this.messagesPerBlock.get(blockNumber) ?? []);
22
+ getL1ToL2Messages(checkpointNumber: CheckpointNumber): Promise<Fr[]> {
23
+ return Promise.resolve(this.messagesPerCheckpoint.get(checkpointNumber) ?? []);
23
24
  }
24
25
 
25
26
  getL1ToL2MessageIndex(_l1ToL2Message: Fr): Promise<bigint | undefined> {
26
27
  throw new Error('Method not implemented.');
27
28
  }
28
29
 
29
- getBlockNumber(): Promise<number> {
30
- return Promise.resolve(this.blockNumber);
30
+ getBlockNumber() {
31
+ return Promise.resolve(BlockNumber(this.blockNumber));
31
32
  }
32
33
 
33
34
  getL2Tips(): Promise<L2Tips> {
34
35
  const number = this.blockNumber;
35
- const tip = { number, hash: new Fr(number).toString() };
36
+ const tip = { number: BlockNumber(number), hash: new Fr(number).toString() };
36
37
  return Promise.resolve({
37
38
  latest: tip,
38
39
  proven: tip,
@@ -1,11 +1,22 @@
1
- import { DefaultL1ContractsConfig } from '@aztec/ethereum';
1
+ import { GENESIS_ARCHIVE_ROOT } from '@aztec/constants';
2
+ import { DefaultL1ContractsConfig } from '@aztec/ethereum/config';
3
+ import { BlockNumber, CheckpointNumber, EpochNumber, SlotNumber } from '@aztec/foundation/branded-types';
2
4
  import { Buffer32 } from '@aztec/foundation/buffer';
5
+ import { Fr } from '@aztec/foundation/curves/bn254';
3
6
  import { EthAddress } from '@aztec/foundation/eth-address';
4
- import type { Fr } from '@aztec/foundation/fields';
5
7
  import { createLogger } from '@aztec/foundation/log';
6
8
  import type { FunctionSelector } from '@aztec/stdlib/abi';
7
9
  import type { AztecAddress } from '@aztec/stdlib/aztec-address';
8
- import { L2Block, L2BlockHash, type L2BlockSource, type L2Tips, type ValidateBlockResult } from '@aztec/stdlib/block';
10
+ import {
11
+ L2Block,
12
+ L2BlockHash,
13
+ L2BlockNew,
14
+ type L2BlockSource,
15
+ type L2Tips,
16
+ PublishedL2Block,
17
+ type ValidateBlockResult,
18
+ } from '@aztec/stdlib/block';
19
+ import { type Checkpoint, L1PublishedData } from '@aztec/stdlib/checkpoint';
9
20
  import type { ContractClassPublic, ContractDataSource, ContractInstanceWithAddress } from '@aztec/stdlib/contract';
10
21
  import { EmptyL1RollupConstants, type L1RollupConstants, getSlotRangeForEpoch } from '@aztec/stdlib/epoch-helpers';
11
22
  import { type BlockHeader, TxHash, TxReceipt, TxStatus } from '@aztec/stdlib/tx';
@@ -25,7 +36,7 @@ export class MockL2BlockSource implements L2BlockSource, ContractDataSource {
25
36
  public async createBlocks(numBlocks: number) {
26
37
  for (let i = 0; i < numBlocks; i++) {
27
38
  const blockNum = this.l2Blocks.length + 1;
28
- const block = await L2Block.random(blockNum);
39
+ const block = await L2Block.random(BlockNumber(blockNum));
29
40
  this.l2Blocks.push(block);
30
41
  }
31
42
 
@@ -74,11 +85,16 @@ export class MockL2BlockSource implements L2BlockSource, ContractDataSource {
74
85
  * @returns In this mock instance, returns the number of L2 blocks that we've mocked.
75
86
  */
76
87
  public getBlockNumber() {
77
- return Promise.resolve(this.l2Blocks.length);
88
+ return Promise.resolve(BlockNumber(this.l2Blocks.length));
78
89
  }
79
90
 
80
- public getProvenBlockNumber(): Promise<number> {
81
- return Promise.resolve(this.provenBlockNumber);
91
+ public getProvenBlockNumber() {
92
+ return Promise.resolve(BlockNumber(this.provenBlockNumber));
93
+ }
94
+
95
+ public getCheckpointedBlock(_number: BlockNumber) {
96
+ // In this mock, we don't track checkpointed blocks separately
97
+ return Promise.resolve(undefined);
82
98
  }
83
99
 
84
100
  /**
@@ -90,6 +106,16 @@ export class MockL2BlockSource implements L2BlockSource, ContractDataSource {
90
106
  return Promise.resolve(this.l2Blocks[number - 1]);
91
107
  }
92
108
 
109
+ /**
110
+ * Gets an L2 block (new format).
111
+ * @param number - The block number to return.
112
+ * @returns The requested L2 block.
113
+ */
114
+ public getL2BlockNew(number: BlockNumber): Promise<L2BlockNew | undefined> {
115
+ const block = this.l2Blocks[number - 1];
116
+ return Promise.resolve(block?.toL2Block());
117
+ }
118
+
93
119
  /**
94
120
  * Gets up to `limit` amount of L2 blocks starting from `from`.
95
121
  * @param from - Number of the first block to return (inclusive).
@@ -104,35 +130,92 @@ export class MockL2BlockSource implements L2BlockSource, ContractDataSource {
104
130
  );
105
131
  }
106
132
 
133
+ public async getPublishedCheckpoints(from: CheckpointNumber, limit: number) {
134
+ // TODO: Implement this properly. This only works when we have one block per checkpoint.
135
+ return (await this.getPublishedBlocks(from, limit)).map(block => block.toPublishedCheckpoint());
136
+ }
137
+
138
+ public async getCheckpointByArchive(archive: Fr): Promise<Checkpoint | undefined> {
139
+ // TODO: Implement this properly. This only works when we have one block per checkpoint.
140
+ return (await this.getPublishedBlockByArchive(archive))?.block.toCheckpoint();
141
+ }
142
+
107
143
  public async getPublishedBlocks(from: number, limit: number, proven?: boolean) {
108
144
  const blocks = await this.getBlocks(from, limit, proven);
109
- return blocks.map(block => ({
110
- block,
111
- l1: {
112
- blockNumber: BigInt(block.number),
113
- blockHash: Buffer32.random().toString(),
114
- timestamp: BigInt(block.number),
115
- },
116
- attestations: [],
117
- }));
145
+ return blocks.map(block =>
146
+ PublishedL2Block.fromFields({
147
+ block,
148
+ l1: new L1PublishedData(BigInt(block.number), BigInt(block.number), Buffer32.random().toString()),
149
+ attestations: [],
150
+ }),
151
+ );
152
+ }
153
+
154
+ public async getPublishedBlockByHash(blockHash: Fr): Promise<PublishedL2Block | undefined> {
155
+ for (const block of this.l2Blocks) {
156
+ const hash = await block.hash();
157
+ if (hash.equals(blockHash)) {
158
+ return PublishedL2Block.fromFields({
159
+ block,
160
+ l1: new L1PublishedData(BigInt(block.number), BigInt(block.number), Buffer32.random().toString()),
161
+ attestations: [],
162
+ });
163
+ }
164
+ }
165
+ return undefined;
166
+ }
167
+
168
+ public getPublishedBlockByArchive(archive: Fr): Promise<PublishedL2Block | undefined> {
169
+ const block = this.l2Blocks.find(b => b.archive.root.equals(archive));
170
+ if (!block) {
171
+ return Promise.resolve(undefined);
172
+ }
173
+ return Promise.resolve(
174
+ PublishedL2Block.fromFields({
175
+ block,
176
+ l1: new L1PublishedData(BigInt(block.number), BigInt(block.number), Buffer32.random().toString()),
177
+ attestations: [],
178
+ }),
179
+ );
180
+ }
181
+
182
+ public async getBlockHeaderByHash(blockHash: Fr): Promise<BlockHeader | undefined> {
183
+ for (const block of this.l2Blocks) {
184
+ const hash = await block.hash();
185
+ if (hash.equals(blockHash)) {
186
+ return block.getBlockHeader();
187
+ }
188
+ }
189
+ return undefined;
190
+ }
191
+
192
+ public getBlockHeaderByArchive(archive: Fr): Promise<BlockHeader | undefined> {
193
+ const block = this.l2Blocks.find(b => b.archive.root.equals(archive));
194
+ return Promise.resolve(block?.getBlockHeader());
118
195
  }
119
196
 
120
197
  getBlockHeader(number: number | 'latest'): Promise<BlockHeader | undefined> {
121
- return Promise.resolve(this.l2Blocks.at(typeof number === 'number' ? number - 1 : -1)?.header);
198
+ return Promise.resolve(this.l2Blocks.at(typeof number === 'number' ? number - 1 : -1)?.getBlockHeader());
122
199
  }
123
200
 
124
- getBlocksForEpoch(epochNumber: bigint): Promise<L2Block[]> {
201
+ getCheckpointsForEpoch(epochNumber: EpochNumber): Promise<Checkpoint[]> {
202
+ // TODO: Implement this properly. This only works when we have one block per checkpoint.
203
+ return this.getBlocksForEpoch(epochNumber).then(blocks => blocks.map(b => b.toCheckpoint()));
204
+ }
205
+
206
+ getBlocksForEpoch(epochNumber: EpochNumber): Promise<L2Block[]> {
125
207
  const epochDuration = DefaultL1ContractsConfig.aztecEpochDuration;
126
208
  const [start, end] = getSlotRangeForEpoch(epochNumber, { epochDuration });
127
209
  const blocks = this.l2Blocks.filter(b => {
128
- const slot = b.header.globalVariables.slotNumber.toBigInt();
210
+ const slot = b.header.globalVariables.slotNumber;
129
211
  return slot >= start && slot <= end;
130
212
  });
131
213
  return Promise.resolve(blocks);
132
214
  }
133
215
 
134
- getBlockHeadersForEpoch(epochNumber: bigint): Promise<BlockHeader[]> {
135
- return this.getBlocksForEpoch(epochNumber).then(blocks => blocks.map(b => b.header));
216
+ async getBlockHeadersForEpoch(epochNumber: EpochNumber): Promise<BlockHeader[]> {
217
+ const blocks = await this.getBlocksForEpoch(epochNumber);
218
+ return blocks.map(b => b.getBlockHeader());
136
219
  }
137
220
 
138
221
  /**
@@ -192,29 +275,29 @@ export class MockL2BlockSource implements L2BlockSource, ContractDataSource {
192
275
 
193
276
  return {
194
277
  latest: {
195
- number: latest,
278
+ number: BlockNumber(latest),
196
279
  hash: (await latestBlock?.hash())?.toString(),
197
280
  },
198
281
  proven: {
199
- number: proven,
282
+ number: BlockNumber(proven),
200
283
  hash: (await provenBlock?.hash())?.toString(),
201
284
  },
202
285
  finalized: {
203
- number: finalized,
286
+ number: BlockNumber(finalized),
204
287
  hash: (await finalizedBlock?.hash())?.toString(),
205
288
  },
206
289
  };
207
290
  }
208
291
 
209
- getL2EpochNumber(): Promise<bigint> {
292
+ getL2EpochNumber(): Promise<EpochNumber> {
210
293
  throw new Error('Method not implemented.');
211
294
  }
212
295
 
213
- getL2SlotNumber(): Promise<bigint> {
296
+ getL2SlotNumber(): Promise<SlotNumber> {
214
297
  throw new Error('Method not implemented.');
215
298
  }
216
299
 
217
- isEpochComplete(_epochNumber: bigint): Promise<boolean> {
300
+ isEpochComplete(_epochNumber: EpochNumber): Promise<boolean> {
218
301
  throw new Error('Method not implemented.');
219
302
  }
220
303
 
@@ -222,6 +305,10 @@ export class MockL2BlockSource implements L2BlockSource, ContractDataSource {
222
305
  return Promise.resolve(EmptyL1RollupConstants);
223
306
  }
224
307
 
308
+ getGenesisValues(): Promise<{ genesisArchiveRoot: Fr }> {
309
+ return Promise.resolve({ genesisArchiveRoot: new Fr(GENESIS_ARCHIVE_ROOT) });
310
+ }
311
+
225
312
  getL1Timestamp(): Promise<bigint> {
226
313
  throw new Error('Method not implemented.');
227
314
  }
@@ -1,6 +1,7 @@
1
+ import { CheckpointNumber } from '@aztec/foundation/branded-types';
1
2
  import { Buffer16, Buffer32 } from '@aztec/foundation/buffer';
2
- import { randomBigInt, randomInt } from '@aztec/foundation/crypto';
3
- import { Fr } from '@aztec/foundation/fields';
3
+ import { randomBigInt, randomInt } from '@aztec/foundation/crypto/random';
4
+ import { Fr } from '@aztec/foundation/curves/bn254';
4
5
  import { InboxLeaf } from '@aztec/stdlib/messaging';
5
6
 
6
7
  import { type InboxMessage, updateRollingHash } from '../archiver/structs/inbox_message.js';
@@ -9,17 +10,17 @@ export function makeInboxMessage(
9
10
  previousRollingHash = Buffer16.ZERO,
10
11
  overrides: Partial<InboxMessage> = {},
11
12
  ): InboxMessage {
12
- const { l2BlockNumber = randomInt(100) + 1 } = overrides;
13
+ const { checkpointNumber = CheckpointNumber(randomInt(100) + 1) } = overrides;
13
14
  const { l1BlockNumber = randomBigInt(100n) + 1n } = overrides;
14
15
  const { l1BlockHash = Buffer32.random() } = overrides;
15
16
  const { leaf = Fr.random() } = overrides;
16
17
  const { rollingHash = updateRollingHash(previousRollingHash, leaf) } = overrides;
17
- const { index = InboxLeaf.smallestIndexFromL2Block(l2BlockNumber) } = overrides;
18
+ const { index = InboxLeaf.smallestIndexForCheckpoint(checkpointNumber) } = overrides;
18
19
 
19
20
  return {
20
21
  index,
21
22
  leaf,
22
- l2BlockNumber,
23
+ checkpointNumber,
23
24
  l1BlockNumber,
24
25
  l1BlockHash,
25
26
  rollingHash,
@@ -30,17 +31,17 @@ export function makeInboxMessages(
30
31
  count: number,
31
32
  opts: {
32
33
  initialHash?: Buffer16;
33
- initialL2BlockNumber?: number;
34
+ initialCheckpointNumber?: CheckpointNumber;
34
35
  overrideFn?: (msg: InboxMessage, index: number) => InboxMessage;
35
36
  } = {},
36
37
  ): InboxMessage[] {
37
- const { initialHash = Buffer16.ZERO, overrideFn = msg => msg, initialL2BlockNumber = 1 } = opts;
38
+ const { initialHash = Buffer16.ZERO, overrideFn = msg => msg, initialCheckpointNumber = 1 } = opts;
38
39
  const messages: InboxMessage[] = [];
39
40
  let rollingHash = initialHash;
40
41
  for (let i = 0; i < count; i++) {
41
42
  const leaf = Fr.random();
42
- const l2BlockNumber = i + initialL2BlockNumber;
43
- const message = overrideFn(makeInboxMessage(rollingHash, { leaf, l2BlockNumber }), i);
43
+ const checkpointNumber = CheckpointNumber(i + initialCheckpointNumber);
44
+ const message = overrideFn(makeInboxMessage(rollingHash, { leaf, checkpointNumber }), i);
44
45
  rollingHash = message.rollingHash;
45
46
  messages.push(message);
46
47
  }