@aztec/archiver 0.0.0-test.1 → 0.0.1-commit.03f7ef2

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 (151) hide show
  1. package/README.md +27 -6
  2. package/dest/archiver/archiver.d.ts +201 -94
  3. package/dest/archiver/archiver.d.ts.map +1 -1
  4. package/dest/archiver/archiver.js +1141 -396
  5. package/dest/archiver/archiver_store.d.ts +171 -83
  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 +2389 -393
  10. package/dest/archiver/config.d.ts +7 -22
  11. package/dest/archiver/config.d.ts.map +1 -1
  12. package/dest/archiver/config.js +30 -14
  13. package/dest/archiver/errors.d.ts +33 -1
  14. package/dest/archiver/errors.d.ts.map +1 -1
  15. package/dest/archiver/errors.js +49 -0
  16. package/dest/archiver/index.d.ts +3 -4
  17. package/dest/archiver/index.d.ts.map +1 -1
  18. package/dest/archiver/index.js +1 -2
  19. package/dest/archiver/instrumentation.d.ts +14 -6
  20. package/dest/archiver/instrumentation.d.ts.map +1 -1
  21. package/dest/archiver/instrumentation.js +69 -17
  22. package/dest/archiver/kv_archiver_store/block_store.d.ts +91 -21
  23. package/dest/archiver/kv_archiver_store/block_store.d.ts.map +1 -1
  24. package/dest/archiver/kv_archiver_store/block_store.js +476 -86
  25. package/dest/archiver/kv_archiver_store/contract_class_store.d.ts +4 -4
  26. package/dest/archiver/kv_archiver_store/contract_class_store.d.ts.map +1 -1
  27. package/dest/archiver/kv_archiver_store/contract_class_store.js +13 -19
  28. package/dest/archiver/kv_archiver_store/contract_instance_store.d.ts +12 -9
  29. package/dest/archiver/kv_archiver_store/contract_instance_store.d.ts.map +1 -1
  30. package/dest/archiver/kv_archiver_store/contract_instance_store.js +30 -16
  31. package/dest/archiver/kv_archiver_store/kv_archiver_store.d.ts +80 -75
  32. package/dest/archiver/kv_archiver_store/kv_archiver_store.d.ts.map +1 -1
  33. package/dest/archiver/kv_archiver_store/kv_archiver_store.js +142 -83
  34. package/dest/archiver/kv_archiver_store/log_store.d.ts +12 -16
  35. package/dest/archiver/kv_archiver_store/log_store.d.ts.map +1 -1
  36. package/dest/archiver/kv_archiver_store/log_store.js +153 -113
  37. package/dest/archiver/kv_archiver_store/message_store.d.ts +25 -18
  38. package/dest/archiver/kv_archiver_store/message_store.d.ts.map +1 -1
  39. package/dest/archiver/kv_archiver_store/message_store.js +152 -49
  40. package/dest/archiver/l1/bin/retrieve-calldata.d.ts +3 -0
  41. package/dest/archiver/l1/bin/retrieve-calldata.d.ts.map +1 -0
  42. package/dest/archiver/l1/bin/retrieve-calldata.js +149 -0
  43. package/dest/archiver/l1/calldata_retriever.d.ts +112 -0
  44. package/dest/archiver/l1/calldata_retriever.d.ts.map +1 -0
  45. package/dest/archiver/l1/calldata_retriever.js +471 -0
  46. package/dest/archiver/l1/data_retrieval.d.ts +90 -0
  47. package/dest/archiver/l1/data_retrieval.d.ts.map +1 -0
  48. package/dest/archiver/l1/data_retrieval.js +331 -0
  49. package/dest/archiver/l1/debug_tx.d.ts +19 -0
  50. package/dest/archiver/l1/debug_tx.d.ts.map +1 -0
  51. package/dest/archiver/l1/debug_tx.js +73 -0
  52. package/dest/archiver/l1/spire_proposer.d.ts +70 -0
  53. package/dest/archiver/l1/spire_proposer.d.ts.map +1 -0
  54. package/dest/archiver/l1/spire_proposer.js +157 -0
  55. package/dest/archiver/l1/trace_tx.d.ts +97 -0
  56. package/dest/archiver/l1/trace_tx.d.ts.map +1 -0
  57. package/dest/archiver/l1/trace_tx.js +91 -0
  58. package/dest/archiver/l1/types.d.ts +12 -0
  59. package/dest/archiver/l1/types.d.ts.map +1 -0
  60. package/dest/archiver/l1/types.js +3 -0
  61. package/dest/archiver/l1/validate_trace.d.ts +29 -0
  62. package/dest/archiver/l1/validate_trace.d.ts.map +1 -0
  63. package/dest/archiver/l1/validate_trace.js +150 -0
  64. package/dest/archiver/structs/data_retrieval.d.ts +1 -1
  65. package/dest/archiver/structs/inbox_message.d.ts +15 -0
  66. package/dest/archiver/structs/inbox_message.d.ts.map +1 -0
  67. package/dest/archiver/structs/inbox_message.js +39 -0
  68. package/dest/archiver/structs/published.d.ts +2 -11
  69. package/dest/archiver/structs/published.d.ts.map +1 -1
  70. package/dest/archiver/structs/published.js +1 -1
  71. package/dest/archiver/validation.d.ts +17 -0
  72. package/dest/archiver/validation.d.ts.map +1 -0
  73. package/dest/archiver/validation.js +98 -0
  74. package/dest/factory.d.ts +9 -14
  75. package/dest/factory.d.ts.map +1 -1
  76. package/dest/factory.js +22 -52
  77. package/dest/index.d.ts +2 -2
  78. package/dest/index.d.ts.map +1 -1
  79. package/dest/index.js +1 -1
  80. package/dest/rpc/index.d.ts +2 -3
  81. package/dest/rpc/index.d.ts.map +1 -1
  82. package/dest/rpc/index.js +1 -4
  83. package/dest/test/index.d.ts +1 -1
  84. package/dest/test/mock_archiver.d.ts +16 -8
  85. package/dest/test/mock_archiver.d.ts.map +1 -1
  86. package/dest/test/mock_archiver.js +19 -14
  87. package/dest/test/mock_l1_to_l2_message_source.d.ts +9 -6
  88. package/dest/test/mock_l1_to_l2_message_source.d.ts.map +1 -1
  89. package/dest/test/mock_l1_to_l2_message_source.js +21 -7
  90. package/dest/test/mock_l2_block_source.d.ts +52 -13
  91. package/dest/test/mock_l2_block_source.d.ts.map +1 -1
  92. package/dest/test/mock_l2_block_source.js +140 -15
  93. package/dest/test/mock_structs.d.ts +10 -0
  94. package/dest/test/mock_structs.d.ts.map +1 -0
  95. package/dest/test/mock_structs.js +38 -0
  96. package/package.json +29 -30
  97. package/src/archiver/archiver.ts +1477 -501
  98. package/src/archiver/archiver_store.ts +197 -88
  99. package/src/archiver/archiver_store_test_suite.ts +2403 -350
  100. package/src/archiver/config.ts +38 -46
  101. package/src/archiver/errors.ts +85 -0
  102. package/src/archiver/index.ts +2 -3
  103. package/src/archiver/instrumentation.ts +91 -22
  104. package/src/archiver/kv_archiver_store/block_store.ts +640 -101
  105. package/src/archiver/kv_archiver_store/contract_class_store.ts +14 -24
  106. package/src/archiver/kv_archiver_store/contract_instance_store.ts +36 -28
  107. package/src/archiver/kv_archiver_store/kv_archiver_store.ts +193 -113
  108. package/src/archiver/kv_archiver_store/log_store.ts +205 -127
  109. package/src/archiver/kv_archiver_store/message_store.ts +213 -54
  110. package/src/archiver/l1/README.md +98 -0
  111. package/src/archiver/l1/bin/retrieve-calldata.ts +182 -0
  112. package/src/archiver/l1/calldata_retriever.ts +641 -0
  113. package/src/archiver/l1/data_retrieval.ts +512 -0
  114. package/src/archiver/l1/debug_tx.ts +99 -0
  115. package/src/archiver/l1/spire_proposer.ts +160 -0
  116. package/src/archiver/l1/trace_tx.ts +128 -0
  117. package/src/archiver/l1/types.ts +13 -0
  118. package/src/archiver/l1/validate_trace.ts +211 -0
  119. package/src/archiver/structs/inbox_message.ts +41 -0
  120. package/src/archiver/structs/published.ts +1 -11
  121. package/src/archiver/validation.ts +124 -0
  122. package/src/factory.ts +28 -69
  123. package/src/index.ts +1 -1
  124. package/src/rpc/index.ts +1 -5
  125. package/src/test/fixtures/debug_traceTransaction-multicall3.json +88 -0
  126. package/src/test/fixtures/debug_traceTransaction-multiplePropose.json +153 -0
  127. package/src/test/fixtures/debug_traceTransaction-proxied.json +122 -0
  128. package/src/test/fixtures/trace_transaction-multicall3.json +65 -0
  129. package/src/test/fixtures/trace_transaction-multiplePropose.json +319 -0
  130. package/src/test/fixtures/trace_transaction-proxied.json +128 -0
  131. package/src/test/fixtures/trace_transaction-randomRevert.json +216 -0
  132. package/src/test/mock_archiver.ts +22 -16
  133. package/src/test/mock_l1_to_l2_message_source.ts +20 -8
  134. package/src/test/mock_l2_block_source.ts +186 -21
  135. package/src/test/mock_structs.ts +50 -0
  136. package/dest/archiver/data_retrieval.d.ts +0 -74
  137. package/dest/archiver/data_retrieval.d.ts.map +0 -1
  138. package/dest/archiver/data_retrieval.js +0 -283
  139. package/dest/archiver/kv_archiver_store/nullifier_store.d.ts +0 -12
  140. package/dest/archiver/kv_archiver_store/nullifier_store.d.ts.map +0 -1
  141. package/dest/archiver/kv_archiver_store/nullifier_store.js +0 -73
  142. package/dest/archiver/memory_archiver_store/l1_to_l2_message_store.d.ts +0 -23
  143. package/dest/archiver/memory_archiver_store/l1_to_l2_message_store.d.ts.map +0 -1
  144. package/dest/archiver/memory_archiver_store/l1_to_l2_message_store.js +0 -49
  145. package/dest/archiver/memory_archiver_store/memory_archiver_store.d.ts +0 -175
  146. package/dest/archiver/memory_archiver_store/memory_archiver_store.d.ts.map +0 -1
  147. package/dest/archiver/memory_archiver_store/memory_archiver_store.js +0 -636
  148. package/src/archiver/data_retrieval.ts +0 -422
  149. package/src/archiver/kv_archiver_store/nullifier_store.ts +0 -97
  150. package/src/archiver/memory_archiver_store/l1_to_l2_message_store.ts +0 -61
  151. package/src/archiver/memory_archiver_store/memory_archiver_store.ts +0 -801
@@ -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: bigint): 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,31 +1,43 @@
1
- import type { Fr } from '@aztec/foundation/fields';
1
+ import { BlockNumber, type CheckpointNumber } from '@aztec/foundation/branded-types';
2
+ import { Fr } from '@aztec/foundation/curves/bn254';
3
+ import type { L2Tips } from '@aztec/stdlib/block';
2
4
  import type { L1ToL2MessageSource } from '@aztec/stdlib/messaging';
3
5
 
4
6
  /**
5
7
  * A mocked implementation of L1ToL2MessageSource to be used in tests.
6
8
  */
7
9
  export class MockL1ToL2MessageSource implements L1ToL2MessageSource {
8
- private messagesPerBlock = new Map<number, Fr[]>();
10
+ private messagesPerCheckpoint = new Map<CheckpointNumber, Fr[]>();
9
11
 
10
12
  constructor(private blockNumber: number) {}
11
13
 
12
- public setL1ToL2Messages(blockNumber: number, msgs: Fr[]) {
13
- this.messagesPerBlock.set(blockNumber, msgs);
14
+ public setL1ToL2Messages(checkpointNumber: CheckpointNumber, msgs: Fr[]) {
15
+ this.messagesPerCheckpoint.set(checkpointNumber, msgs);
14
16
  }
15
17
 
16
18
  public setBlockNumber(blockNumber: number) {
17
19
  this.blockNumber = blockNumber;
18
20
  }
19
21
 
20
- getL1ToL2Messages(blockNumber: bigint): Promise<Fr[]> {
21
- return Promise.resolve(this.messagesPerBlock.get(Number(blockNumber)) ?? []);
22
+ getL1ToL2Messages(checkpointNumber: CheckpointNumber): Promise<Fr[]> {
23
+ return Promise.resolve(this.messagesPerCheckpoint.get(checkpointNumber) ?? []);
22
24
  }
23
25
 
24
26
  getL1ToL2MessageIndex(_l1ToL2Message: Fr): Promise<bigint | undefined> {
25
27
  throw new Error('Method not implemented.');
26
28
  }
27
29
 
28
- getBlockNumber(): Promise<number> {
29
- return Promise.resolve(this.blockNumber);
30
+ getBlockNumber() {
31
+ return Promise.resolve(BlockNumber(this.blockNumber));
32
+ }
33
+
34
+ getL2Tips(): Promise<L2Tips> {
35
+ const number = this.blockNumber;
36
+ const tip = { number: BlockNumber(number), hash: new Fr(number).toString() };
37
+ return Promise.resolve({
38
+ latest: tip,
39
+ proven: tip,
40
+ finalized: tip,
41
+ });
30
42
  }
31
43
  }
@@ -1,24 +1,42 @@
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';
4
+ import { Buffer32 } from '@aztec/foundation/buffer';
5
+ import { Fr } from '@aztec/foundation/curves/bn254';
2
6
  import { EthAddress } from '@aztec/foundation/eth-address';
3
7
  import { createLogger } from '@aztec/foundation/log';
4
- import { L2Block, L2BlockHash, type L2BlockSource, type L2Tips } from '@aztec/stdlib/block';
5
- import { type L1RollupConstants, getSlotRangeForEpoch } from '@aztec/stdlib/epoch-helpers';
8
+ import type { FunctionSelector } from '@aztec/stdlib/abi';
9
+ import type { AztecAddress } from '@aztec/stdlib/aztec-address';
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';
20
+ import type { ContractClassPublic, ContractDataSource, ContractInstanceWithAddress } from '@aztec/stdlib/contract';
21
+ import { EmptyL1RollupConstants, type L1RollupConstants, getSlotRangeForEpoch } from '@aztec/stdlib/epoch-helpers';
6
22
  import { type BlockHeader, TxHash, TxReceipt, TxStatus } from '@aztec/stdlib/tx';
23
+ import type { UInt64 } from '@aztec/stdlib/types';
7
24
 
8
25
  /**
9
26
  * A mocked implementation of L2BlockSource to be used in tests.
10
27
  */
11
- export class MockL2BlockSource implements L2BlockSource {
28
+ export class MockL2BlockSource implements L2BlockSource, ContractDataSource {
12
29
  protected l2Blocks: L2Block[] = [];
13
30
 
14
31
  private provenBlockNumber: number = 0;
32
+ private finalizedBlockNumber: number = 0;
15
33
 
16
34
  private log = createLogger('archiver:mock_l2_block_source');
17
35
 
18
36
  public async createBlocks(numBlocks: number) {
19
37
  for (let i = 0; i < numBlocks; i++) {
20
38
  const blockNum = this.l2Blocks.length + 1;
21
- const block = await L2Block.random(blockNum);
39
+ const block = await L2Block.random(BlockNumber(blockNum));
22
40
  this.l2Blocks.push(block);
23
41
  }
24
42
 
@@ -39,6 +57,13 @@ export class MockL2BlockSource implements L2BlockSource {
39
57
  this.provenBlockNumber = provenBlockNumber;
40
58
  }
41
59
 
60
+ public setFinalizedBlockNumber(finalizedBlockNumber: number) {
61
+ if (finalizedBlockNumber > this.provenBlockNumber) {
62
+ this.provenBlockNumber = finalizedBlockNumber;
63
+ }
64
+ this.finalizedBlockNumber = finalizedBlockNumber;
65
+ }
66
+
42
67
  /**
43
68
  * Method to fetch the rollup contract address at the base-layer.
44
69
  * @returns The rollup address.
@@ -60,11 +85,16 @@ export class MockL2BlockSource implements L2BlockSource {
60
85
  * @returns In this mock instance, returns the number of L2 blocks that we've mocked.
61
86
  */
62
87
  public getBlockNumber() {
63
- return Promise.resolve(this.l2Blocks.length);
88
+ return Promise.resolve(BlockNumber(this.l2Blocks.length));
89
+ }
90
+
91
+ public getProvenBlockNumber() {
92
+ return Promise.resolve(BlockNumber(this.provenBlockNumber));
64
93
  }
65
94
 
66
- public getProvenBlockNumber(): Promise<number> {
67
- return Promise.resolve(this.provenBlockNumber);
95
+ public getCheckpointedBlock(_number: BlockNumber) {
96
+ // In this mock, we don't track checkpointed blocks separately
97
+ return Promise.resolve(undefined);
68
98
  }
69
99
 
70
100
  /**
@@ -76,6 +106,16 @@ export class MockL2BlockSource implements L2BlockSource {
76
106
  return Promise.resolve(this.l2Blocks[number - 1]);
77
107
  }
78
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
+
79
119
  /**
80
120
  * Gets up to `limit` amount of L2 blocks starting from `from`.
81
121
  * @param from - Number of the first block to return (inclusive).
@@ -90,24 +130,98 @@ export class MockL2BlockSource implements L2BlockSource {
90
130
  );
91
131
  }
92
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
+
143
+ public async getPublishedBlocks(from: number, limit: number, proven?: boolean) {
144
+ const blocks = await this.getBlocks(from, limit, proven);
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());
195
+ }
196
+
93
197
  getBlockHeader(number: number | 'latest'): Promise<BlockHeader | undefined> {
94
- 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());
199
+ }
200
+
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()));
95
204
  }
96
205
 
97
- getBlocksForEpoch(epochNumber: bigint): Promise<L2Block[]> {
206
+ getBlocksForEpoch(epochNumber: EpochNumber): Promise<L2Block[]> {
98
207
  const epochDuration = DefaultL1ContractsConfig.aztecEpochDuration;
99
208
  const [start, end] = getSlotRangeForEpoch(epochNumber, { epochDuration });
100
209
  const blocks = this.l2Blocks.filter(b => {
101
- const slot = b.header.globalVariables.slotNumber.toBigInt();
210
+ const slot = b.header.globalVariables.slotNumber;
102
211
  return slot >= start && slot <= end;
103
212
  });
104
213
  return Promise.resolve(blocks);
105
214
  }
106
215
 
216
+ async getBlockHeadersForEpoch(epochNumber: EpochNumber): Promise<BlockHeader[]> {
217
+ const blocks = await this.getBlocksForEpoch(epochNumber);
218
+ return blocks.map(b => b.getBlockHeader());
219
+ }
220
+
107
221
  /**
108
222
  * Gets a tx effect.
109
- * @param txHash - The hash of a transaction which resulted in the returned tx effect.
110
- * @returns The requested tx effect.
223
+ * @param txHash - The hash of the tx corresponding to the tx effect.
224
+ * @returns The requested tx effect with block info (or undefined if not found).
111
225
  */
112
226
  public async getTxEffect(txHash: TxHash) {
113
227
  const match = this.l2Blocks
@@ -117,7 +231,12 @@ export class MockL2BlockSource implements L2BlockSource {
117
231
  return Promise.resolve(undefined);
118
232
  }
119
233
  const [txEffect, block] = match;
120
- return { data: txEffect, l2BlockNumber: block.number, l2BlockHash: (await block.hash()).toString() };
234
+ return {
235
+ data: txEffect,
236
+ l2BlockNumber: block.number,
237
+ l2BlockHash: L2BlockHash.fromField(await block.hash()),
238
+ txIndexInBlock: block.body.txEffects.indexOf(txEffect),
239
+ };
121
240
  }
122
241
 
123
242
  /**
@@ -147,7 +266,7 @@ export class MockL2BlockSource implements L2BlockSource {
147
266
  const [latest, proven, finalized] = [
148
267
  await this.getBlockNumber(),
149
268
  await this.getProvenBlockNumber(),
150
- await this.getProvenBlockNumber(),
269
+ this.finalizedBlockNumber,
151
270
  ] as const;
152
271
 
153
272
  const latestBlock = this.l2Blocks[latest - 1];
@@ -156,33 +275,41 @@ export class MockL2BlockSource implements L2BlockSource {
156
275
 
157
276
  return {
158
277
  latest: {
159
- number: latest,
278
+ number: BlockNumber(latest),
160
279
  hash: (await latestBlock?.hash())?.toString(),
161
280
  },
162
281
  proven: {
163
- number: proven,
282
+ number: BlockNumber(proven),
164
283
  hash: (await provenBlock?.hash())?.toString(),
165
284
  },
166
285
  finalized: {
167
- number: finalized,
286
+ number: BlockNumber(finalized),
168
287
  hash: (await finalizedBlock?.hash())?.toString(),
169
288
  },
170
289
  };
171
290
  }
172
291
 
173
- getL2EpochNumber(): Promise<bigint> {
292
+ getL2EpochNumber(): Promise<EpochNumber> {
174
293
  throw new Error('Method not implemented.');
175
294
  }
176
295
 
177
- getL2SlotNumber(): Promise<bigint> {
296
+ getL2SlotNumber(): Promise<SlotNumber> {
178
297
  throw new Error('Method not implemented.');
179
298
  }
180
299
 
181
- isEpochComplete(_epochNumber: bigint): Promise<boolean> {
300
+ isEpochComplete(_epochNumber: EpochNumber): Promise<boolean> {
182
301
  throw new Error('Method not implemented.');
183
302
  }
184
303
 
185
304
  getL1Constants(): Promise<L1RollupConstants> {
305
+ return Promise.resolve(EmptyL1RollupConstants);
306
+ }
307
+
308
+ getGenesisValues(): Promise<{ genesisArchiveRoot: Fr }> {
309
+ return Promise.resolve({ genesisArchiveRoot: new Fr(GENESIS_ARCHIVE_ROOT) });
310
+ }
311
+
312
+ getL1Timestamp(): Promise<bigint> {
186
313
  throw new Error('Method not implemented.');
187
314
  }
188
315
 
@@ -191,6 +318,7 @@ export class MockL2BlockSource implements L2BlockSource {
191
318
  * @returns A promise that signals the initialization of the l2 block source on completion.
192
319
  */
193
320
  public start(): Promise<void> {
321
+ this.log.verbose('Starting mock L2 block source');
194
322
  return Promise.resolve();
195
323
  }
196
324
 
@@ -199,6 +327,43 @@ export class MockL2BlockSource implements L2BlockSource {
199
327
  * @returns A promise that signals the l2 block source is now stopped.
200
328
  */
201
329
  public stop(): Promise<void> {
330
+ this.log.verbose('Stopping mock L2 block source');
331
+ return Promise.resolve();
332
+ }
333
+
334
+ getContractClass(_id: Fr): Promise<ContractClassPublic | undefined> {
335
+ return Promise.resolve(undefined);
336
+ }
337
+
338
+ getBytecodeCommitment(_id: Fr): Promise<Fr | undefined> {
339
+ return Promise.resolve(undefined);
340
+ }
341
+
342
+ getContract(_address: AztecAddress, _timestamp?: UInt64): Promise<ContractInstanceWithAddress | undefined> {
343
+ return Promise.resolve(undefined);
344
+ }
345
+
346
+ getContractClassIds(): Promise<Fr[]> {
347
+ return Promise.resolve([]);
348
+ }
349
+
350
+ getDebugFunctionName(_address: AztecAddress, _selector: FunctionSelector): Promise<string | undefined> {
351
+ return Promise.resolve(undefined);
352
+ }
353
+
354
+ registerContractFunctionSignatures(_signatures: string[]): Promise<void> {
355
+ return Promise.resolve();
356
+ }
357
+
358
+ syncImmediate(): Promise<void> {
202
359
  return Promise.resolve();
203
360
  }
361
+
362
+ isPendingChainInvalid(): Promise<boolean> {
363
+ return Promise.resolve(false);
364
+ }
365
+
366
+ getPendingChainValidationStatus(): Promise<ValidateBlockResult> {
367
+ return Promise.resolve({ valid: true });
368
+ }
204
369
  }