@aztec/archiver 0.0.1-commit.d3ec352c → 0.0.1-commit.d58ff9d0

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 (236) hide show
  1. package/README.md +164 -22
  2. package/dest/archiver.d.ts +194 -0
  3. package/dest/archiver.d.ts.map +1 -0
  4. package/dest/archiver.js +949 -0
  5. package/dest/config.d.ts +34 -0
  6. package/dest/config.d.ts.map +1 -0
  7. package/dest/config.js +95 -0
  8. package/dest/errors.d.ts +87 -0
  9. package/dest/errors.d.ts.map +1 -0
  10. package/dest/errors.js +129 -0
  11. package/dest/factory.d.ts +16 -10
  12. package/dest/factory.d.ts.map +1 -1
  13. package/dest/factory.js +117 -20
  14. package/dest/index.d.ts +19 -4
  15. package/dest/index.d.ts.map +1 -1
  16. package/dest/index.js +17 -3
  17. package/dest/interfaces.d.ts +9 -0
  18. package/dest/interfaces.d.ts.map +1 -0
  19. package/dest/interfaces.js +3 -0
  20. package/dest/l1/bin/retrieve-calldata.d.ts +3 -0
  21. package/dest/l1/bin/retrieve-calldata.d.ts.map +1 -0
  22. package/dest/l1/bin/retrieve-calldata.js +152 -0
  23. package/dest/l1/calldata_retriever.d.ts +143 -0
  24. package/dest/l1/calldata_retriever.d.ts.map +1 -0
  25. package/dest/l1/calldata_retriever.js +413 -0
  26. package/dest/l1/data_retrieval.d.ts +102 -0
  27. package/dest/l1/data_retrieval.d.ts.map +1 -0
  28. package/dest/{archiver → l1}/data_retrieval.js +85 -165
  29. package/dest/l1/debug_tx.d.ts +19 -0
  30. package/dest/l1/debug_tx.d.ts.map +1 -0
  31. package/dest/l1/debug_tx.js +73 -0
  32. package/dest/l1/spire_proposer.d.ts +70 -0
  33. package/dest/l1/spire_proposer.d.ts.map +1 -0
  34. package/dest/l1/spire_proposer.js +149 -0
  35. package/dest/l1/trace_tx.d.ts +43 -0
  36. package/dest/l1/trace_tx.d.ts.map +1 -0
  37. package/dest/l1/trace_tx.js +91 -0
  38. package/dest/l1/types.d.ts +12 -0
  39. package/dest/l1/types.d.ts.map +1 -0
  40. package/dest/l1/types.js +3 -0
  41. package/dest/l1/validate_historical_logs.d.ts +23 -0
  42. package/dest/l1/validate_historical_logs.d.ts.map +1 -0
  43. package/dest/l1/validate_historical_logs.js +108 -0
  44. package/dest/l1/validate_trace.d.ts +32 -0
  45. package/dest/l1/validate_trace.d.ts.map +1 -0
  46. package/dest/l1/validate_trace.js +154 -0
  47. package/dest/modules/contract_data_source_adapter.d.ts +25 -0
  48. package/dest/modules/contract_data_source_adapter.d.ts.map +1 -0
  49. package/dest/modules/contract_data_source_adapter.js +32 -0
  50. package/dest/modules/data_source_base.d.ts +112 -0
  51. package/dest/modules/data_source_base.d.ts.map +1 -0
  52. package/dest/modules/data_source_base.js +322 -0
  53. package/dest/modules/data_store_updater.d.ts +105 -0
  54. package/dest/modules/data_store_updater.d.ts.map +1 -0
  55. package/dest/modules/data_store_updater.js +393 -0
  56. package/dest/modules/instrumentation.d.ts +63 -0
  57. package/dest/modules/instrumentation.d.ts.map +1 -0
  58. package/dest/modules/instrumentation.js +166 -0
  59. package/dest/modules/l1_synchronizer.d.ts +77 -0
  60. package/dest/modules/l1_synchronizer.d.ts.map +1 -0
  61. package/dest/modules/l1_synchronizer.js +1381 -0
  62. package/dest/modules/outbox_trees_resolver.d.ts +62 -0
  63. package/dest/modules/outbox_trees_resolver.d.ts.map +1 -0
  64. package/dest/modules/outbox_trees_resolver.js +162 -0
  65. package/dest/modules/validation.d.ts +40 -0
  66. package/dest/modules/validation.d.ts.map +1 -0
  67. package/dest/{archiver → modules}/validation.js +41 -17
  68. package/dest/store/block_store.d.ts +303 -0
  69. package/dest/store/block_store.d.ts.map +1 -0
  70. package/dest/store/block_store.js +1206 -0
  71. package/dest/store/contract_class_store.d.ts +31 -0
  72. package/dest/store/contract_class_store.d.ts.map +1 -0
  73. package/dest/store/contract_class_store.js +98 -0
  74. package/dest/store/contract_instance_store.d.ts +51 -0
  75. package/dest/store/contract_instance_store.d.ts.map +1 -0
  76. package/dest/{archiver/kv_archiver_store → store}/contract_instance_store.js +55 -3
  77. package/dest/store/data_stores.d.ts +68 -0
  78. package/dest/store/data_stores.d.ts.map +1 -0
  79. package/dest/store/data_stores.js +54 -0
  80. package/dest/store/function_names_cache.d.ts +17 -0
  81. package/dest/store/function_names_cache.d.ts.map +1 -0
  82. package/dest/store/function_names_cache.js +30 -0
  83. package/dest/store/l2_tips_cache.d.ts +25 -0
  84. package/dest/store/l2_tips_cache.d.ts.map +1 -0
  85. package/dest/store/l2_tips_cache.js +26 -0
  86. package/dest/store/log_store.d.ts +59 -0
  87. package/dest/store/log_store.d.ts.map +1 -0
  88. package/dest/store/log_store.js +310 -0
  89. package/dest/store/log_store_codec.d.ts +78 -0
  90. package/dest/store/log_store_codec.d.ts.map +1 -0
  91. package/dest/store/log_store_codec.js +110 -0
  92. package/dest/store/message_store.d.ts +50 -0
  93. package/dest/store/message_store.d.ts.map +1 -0
  94. package/dest/{archiver/kv_archiver_store → store}/message_store.js +66 -23
  95. package/dest/{archiver/structs → structs}/data_retrieval.d.ts +1 -1
  96. package/dest/structs/data_retrieval.d.ts.map +1 -0
  97. package/dest/structs/inbox_message.d.ts +15 -0
  98. package/dest/structs/inbox_message.d.ts.map +1 -0
  99. package/dest/{archiver/structs → structs}/inbox_message.js +6 -6
  100. package/dest/structs/published.d.ts +2 -0
  101. package/dest/structs/published.d.ts.map +1 -0
  102. package/dest/test/fake_l1_state.d.ts +214 -0
  103. package/dest/test/fake_l1_state.d.ts.map +1 -0
  104. package/dest/test/fake_l1_state.js +517 -0
  105. package/dest/test/index.d.ts +2 -1
  106. package/dest/test/index.d.ts.map +1 -1
  107. package/dest/test/index.js +4 -1
  108. package/dest/test/mock_archiver.d.ts +5 -6
  109. package/dest/test/mock_archiver.d.ts.map +1 -1
  110. package/dest/test/mock_archiver.js +8 -12
  111. package/dest/test/mock_l1_to_l2_message_source.d.ts +6 -7
  112. package/dest/test/mock_l1_to_l2_message_source.d.ts.map +1 -1
  113. package/dest/test/mock_l1_to_l2_message_source.js +19 -14
  114. package/dest/test/mock_l2_block_source.d.ts +68 -40
  115. package/dest/test/mock_l2_block_source.d.ts.map +1 -1
  116. package/dest/test/mock_l2_block_source.js +347 -145
  117. package/dest/test/mock_structs.d.ts +83 -4
  118. package/dest/test/mock_structs.d.ts.map +1 -1
  119. package/dest/test/mock_structs.js +157 -12
  120. package/dest/test/noop_l1_archiver.d.ts +34 -0
  121. package/dest/test/noop_l1_archiver.d.ts.map +1 -0
  122. package/dest/test/noop_l1_archiver.js +88 -0
  123. package/package.json +18 -18
  124. package/src/archiver.ts +785 -0
  125. package/src/config.ts +125 -0
  126. package/src/errors.ts +203 -0
  127. package/src/factory.ts +185 -22
  128. package/src/index.ts +27 -3
  129. package/src/interfaces.ts +9 -0
  130. package/src/l1/README.md +55 -0
  131. package/src/l1/bin/retrieve-calldata.ts +194 -0
  132. package/src/l1/calldata_retriever.ts +529 -0
  133. package/src/{archiver → l1}/data_retrieval.ts +157 -243
  134. package/src/l1/debug_tx.ts +99 -0
  135. package/src/l1/spire_proposer.ts +152 -0
  136. package/src/l1/trace_tx.ts +128 -0
  137. package/src/l1/types.ts +13 -0
  138. package/src/l1/validate_historical_logs.ts +140 -0
  139. package/src/l1/validate_trace.ts +229 -0
  140. package/src/modules/contract_data_source_adapter.ts +46 -0
  141. package/src/modules/data_source_base.ts +466 -0
  142. package/src/modules/data_store_updater.ts +519 -0
  143. package/src/modules/instrumentation.ts +217 -0
  144. package/src/modules/l1_synchronizer.ts +1320 -0
  145. package/src/modules/outbox_trees_resolver.ts +199 -0
  146. package/src/modules/validation.ts +186 -0
  147. package/src/store/block_store.ts +1551 -0
  148. package/src/store/contract_class_store.ts +126 -0
  149. package/src/{archiver/kv_archiver_store → store}/contract_instance_store.ts +70 -7
  150. package/src/store/data_stores.ts +104 -0
  151. package/src/store/function_names_cache.ts +37 -0
  152. package/src/store/l2_tips_cache.ts +35 -0
  153. package/src/store/log_store.ts +380 -0
  154. package/src/store/log_store_codec.ts +143 -0
  155. package/src/{archiver/kv_archiver_store → store}/message_store.ts +81 -28
  156. package/src/{archiver/structs → structs}/inbox_message.ts +8 -9
  157. package/src/{archiver/structs → structs}/published.ts +0 -1
  158. package/src/test/fake_l1_state.ts +770 -0
  159. package/src/test/fixtures/debug_traceTransaction-multicall3.json +88 -0
  160. package/src/test/fixtures/debug_traceTransaction-multiplePropose.json +153 -0
  161. package/src/test/fixtures/debug_traceTransaction-proxied.json +122 -0
  162. package/src/test/fixtures/trace_transaction-multicall3.json +65 -0
  163. package/src/test/fixtures/trace_transaction-multiplePropose.json +319 -0
  164. package/src/test/fixtures/trace_transaction-proxied.json +128 -0
  165. package/src/test/fixtures/trace_transaction-randomRevert.json +216 -0
  166. package/src/test/index.ts +4 -0
  167. package/src/test/mock_archiver.ts +10 -14
  168. package/src/test/mock_l1_to_l2_message_source.ts +16 -15
  169. package/src/test/mock_l2_block_source.ts +416 -161
  170. package/src/test/mock_structs.ts +292 -14
  171. package/src/test/noop_l1_archiver.ts +158 -0
  172. package/dest/archiver/archiver.d.ts +0 -290
  173. package/dest/archiver/archiver.d.ts.map +0 -1
  174. package/dest/archiver/archiver.js +0 -1434
  175. package/dest/archiver/archiver_store.d.ts +0 -256
  176. package/dest/archiver/archiver_store.d.ts.map +0 -1
  177. package/dest/archiver/archiver_store.js +0 -4
  178. package/dest/archiver/archiver_store_test_suite.d.ts +0 -8
  179. package/dest/archiver/archiver_store_test_suite.d.ts.map +0 -1
  180. package/dest/archiver/archiver_store_test_suite.js +0 -1289
  181. package/dest/archiver/config.d.ts +0 -21
  182. package/dest/archiver/config.d.ts.map +0 -1
  183. package/dest/archiver/config.js +0 -55
  184. package/dest/archiver/data_retrieval.d.ts +0 -80
  185. package/dest/archiver/data_retrieval.d.ts.map +0 -1
  186. package/dest/archiver/errors.d.ts +0 -12
  187. package/dest/archiver/errors.d.ts.map +0 -1
  188. package/dest/archiver/errors.js +0 -17
  189. package/dest/archiver/index.d.ts +0 -7
  190. package/dest/archiver/index.d.ts.map +0 -1
  191. package/dest/archiver/index.js +0 -4
  192. package/dest/archiver/instrumentation.d.ts +0 -35
  193. package/dest/archiver/instrumentation.d.ts.map +0 -1
  194. package/dest/archiver/instrumentation.js +0 -140
  195. package/dest/archiver/kv_archiver_store/block_store.d.ts +0 -125
  196. package/dest/archiver/kv_archiver_store/block_store.d.ts.map +0 -1
  197. package/dest/archiver/kv_archiver_store/block_store.js +0 -371
  198. package/dest/archiver/kv_archiver_store/contract_class_store.d.ts +0 -18
  199. package/dest/archiver/kv_archiver_store/contract_class_store.d.ts.map +0 -1
  200. package/dest/archiver/kv_archiver_store/contract_class_store.js +0 -120
  201. package/dest/archiver/kv_archiver_store/contract_instance_store.d.ts +0 -24
  202. package/dest/archiver/kv_archiver_store/contract_instance_store.d.ts.map +0 -1
  203. package/dest/archiver/kv_archiver_store/kv_archiver_store.d.ts +0 -169
  204. package/dest/archiver/kv_archiver_store/kv_archiver_store.d.ts.map +0 -1
  205. package/dest/archiver/kv_archiver_store/kv_archiver_store.js +0 -296
  206. package/dest/archiver/kv_archiver_store/log_store.d.ts +0 -49
  207. package/dest/archiver/kv_archiver_store/log_store.d.ts.map +0 -1
  208. package/dest/archiver/kv_archiver_store/log_store.js +0 -337
  209. package/dest/archiver/kv_archiver_store/message_store.d.ts +0 -39
  210. package/dest/archiver/kv_archiver_store/message_store.d.ts.map +0 -1
  211. package/dest/archiver/structs/data_retrieval.d.ts.map +0 -1
  212. package/dest/archiver/structs/inbox_message.d.ts +0 -15
  213. package/dest/archiver/structs/inbox_message.d.ts.map +0 -1
  214. package/dest/archiver/structs/published.d.ts +0 -3
  215. package/dest/archiver/structs/published.d.ts.map +0 -1
  216. package/dest/archiver/validation.d.ts +0 -17
  217. package/dest/archiver/validation.d.ts.map +0 -1
  218. package/dest/rpc/index.d.ts +0 -9
  219. package/dest/rpc/index.d.ts.map +0 -1
  220. package/dest/rpc/index.js +0 -15
  221. package/src/archiver/archiver.ts +0 -1880
  222. package/src/archiver/archiver_store.ts +0 -310
  223. package/src/archiver/archiver_store_test_suite.ts +0 -1295
  224. package/src/archiver/config.ts +0 -79
  225. package/src/archiver/errors.ts +0 -26
  226. package/src/archiver/index.ts +0 -6
  227. package/src/archiver/instrumentation.ts +0 -187
  228. package/src/archiver/kv_archiver_store/block_store.ts +0 -482
  229. package/src/archiver/kv_archiver_store/contract_class_store.ts +0 -176
  230. package/src/archiver/kv_archiver_store/kv_archiver_store.ts +0 -423
  231. package/src/archiver/kv_archiver_store/log_store.ts +0 -407
  232. package/src/archiver/validation.ts +0 -124
  233. package/src/rpc/index.ts +0 -16
  234. /package/dest/{archiver/structs → structs}/data_retrieval.js +0 -0
  235. /package/dest/{archiver/structs → structs}/published.js +0 -0
  236. /package/src/{archiver/structs → structs}/data_retrieval.ts +0 -0
package/dest/index.js CHANGED
@@ -1,4 +1,18 @@
1
- export * from './archiver/index.js';
2
1
  export * from './factory.js';
3
- export * from './rpc/index.js';
4
- export { retrieveL2ProofVerifiedEvents } from './archiver/data_retrieval.js';
2
+ export * from './interfaces.js';
3
+ export * from './archiver.js';
4
+ export * from './modules/data_source_base.js';
5
+ export * from './modules/data_store_updater.js';
6
+ export * from './config.js';
7
+ export * from './errors.js';
8
+ export { ARCHIVER_DB_VERSION, backupArchiverDataStores, createArchiverDataStores, createContractDataSource, getArchiverSynchPoint } from './store/data_stores.js';
9
+ export { FunctionNamesCache } from './store/function_names_cache.js';
10
+ export { ArchiverContractDataSourceAdapter } from './modules/contract_data_source_adapter.js';
11
+ export { BlockStore } from './store/block_store.js';
12
+ export { LogStore } from './store/log_store.js';
13
+ export { MessageStore } from './store/message_store.js';
14
+ export { ContractClassStore } from './store/contract_class_store.js';
15
+ export { ContractInstanceStore } from './store/contract_instance_store.js';
16
+ export { L2TipsCache } from './store/l2_tips_cache.js';
17
+ export { retrieveL2ProofVerifiedEvents } from './l1/data_retrieval.js';
18
+ export { CalldataRetriever } from './l1/calldata_retriever.js';
@@ -0,0 +1,9 @@
1
+ import type { L2BlockSource } from '@aztec/stdlib/block';
2
+ import type { ContractDataSource } from '@aztec/stdlib/contract';
3
+ import type { L2LogsSource } from '@aztec/stdlib/interfaces/server';
4
+ import type { L1ToL2MessageSource } from '@aztec/stdlib/messaging';
5
+ /**
6
+ * Helper interface to combine all sources this archiver implementation provides.
7
+ */
8
+ export type ArchiverDataSource = L2BlockSource & L2LogsSource & ContractDataSource & L1ToL2MessageSource;
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJmYWNlcy5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2ludGVyZmFjZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsYUFBYSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDekQsT0FBTyxLQUFLLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNqRSxPQUFPLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNwRSxPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRW5FOztHQUVHO0FBQ0gsTUFBTSxNQUFNLGtCQUFrQixHQUFHLGFBQWEsR0FBRyxZQUFZLEdBQUcsa0JBQWtCLEdBQUcsbUJBQW1CLENBQUMifQ==
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../src/interfaces.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAEnE;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,aAAa,GAAG,YAAY,GAAG,kBAAkB,GAAG,mBAAmB,CAAC"}
@@ -0,0 +1,3 @@
1
+ /**
2
+ * Helper interface to combine all sources this archiver implementation provides.
3
+ */ export { };
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmV0cmlldmUtY2FsbGRhdGEuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9sMS9iaW4vcmV0cmlldmUtY2FsbGRhdGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiJ9
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retrieve-calldata.d.ts","sourceRoot":"","sources":["../../../src/l1/bin/retrieve-calldata.ts"],"names":[],"mappings":""}
@@ -0,0 +1,152 @@
1
+ #!/usr/bin/env node
2
+ import { CheckpointNumber } from '@aztec/foundation/branded-types';
3
+ import { EthAddress } from '@aztec/foundation/eth-address';
4
+ import { createLogger } from '@aztec/foundation/log';
5
+ import { RollupAbi } from '@aztec/l1-artifacts/RollupAbi';
6
+ import { createPublicClient, decodeEventLog, getAbiItem, http, toEventSelector } from 'viem';
7
+ import { mainnet } from 'viem/chains';
8
+ import { CalldataRetriever } from '../calldata_retriever.js';
9
+ const logger = createLogger('archiver:calldata-test');
10
+ function parseArgs() {
11
+ const args = process.argv.slice(2);
12
+ if (args.length < 2) {
13
+ // eslint-disable-next-line no-console
14
+ console.error('Usage: node index.js <rollup-address> <tx-hash> [target-committee-size]');
15
+ // eslint-disable-next-line no-console
16
+ console.error('');
17
+ // eslint-disable-next-line no-console
18
+ console.error('Environment variables:');
19
+ // eslint-disable-next-line no-console
20
+ console.error(' ETHEREUM_HOST or RPC_URL - Ethereum RPC endpoint');
21
+ // eslint-disable-next-line no-console
22
+ console.error('');
23
+ // eslint-disable-next-line no-console
24
+ console.error('Example:');
25
+ // eslint-disable-next-line no-console
26
+ console.error(' RPC_URL=https://eth-mainnet.g.alchemy.com/v2/YOUR-API-KEY \\');
27
+ // eslint-disable-next-line no-console
28
+ console.error(' node index.js 0x1234... 0xabcd... 32');
29
+ process.exit(1);
30
+ }
31
+ const rollupAddress = EthAddress.fromString(args[0]);
32
+ const txHash = args[1];
33
+ const targetCommitteeSize = args[2] ? parseInt(args[2], 10) : 24;
34
+ const rpcUrl = process.env.ETHEREUM_HOST || process.env.RPC_URL;
35
+ if (!rpcUrl) {
36
+ // eslint-disable-next-line no-console
37
+ console.error('Error: ETHEREUM_HOST or RPC_URL environment variable must be set');
38
+ process.exit(1);
39
+ }
40
+ if (targetCommitteeSize <= 0 || targetCommitteeSize > 256) {
41
+ // eslint-disable-next-line no-console
42
+ console.error('Error: target-committee-size must be between 1 and 256');
43
+ process.exit(1);
44
+ }
45
+ return {
46
+ rollupAddress,
47
+ txHash,
48
+ rpcUrl,
49
+ targetCommitteeSize
50
+ };
51
+ }
52
+ async function main() {
53
+ const { rollupAddress, txHash, rpcUrl, targetCommitteeSize } = parseArgs();
54
+ logger.info('Calldata Retriever Test Script');
55
+ logger.info('===============================');
56
+ logger.info(`Rollup Address: ${rollupAddress.toString()}`);
57
+ logger.info(`Transaction Hash: ${txHash}`);
58
+ logger.info(`RPC URL: ${rpcUrl}`);
59
+ logger.info(`Target Committee Size: ${targetCommitteeSize}`);
60
+ logger.info('');
61
+ try {
62
+ // Create viem public client
63
+ const publicClient = createPublicClient({
64
+ chain: mainnet,
65
+ transport: http(rpcUrl, {
66
+ batch: false
67
+ })
68
+ });
69
+ logger.info('Fetching transaction...');
70
+ const tx = await publicClient.getTransaction({
71
+ hash: txHash
72
+ });
73
+ if (!tx) {
74
+ throw new Error(`Transaction ${txHash} not found`);
75
+ }
76
+ logger.info(`Transaction found in block ${tx.blockNumber}`);
77
+ // Create CalldataRetriever
78
+ const retriever = new CalldataRetriever(publicClient, publicClient, targetCommitteeSize, undefined, logger, rollupAddress);
79
+ // Extract checkpoint number and hashes from transaction logs
80
+ logger.info('Decoding transaction to extract checkpoint number and hashes...');
81
+ const receipt = await publicClient.getTransactionReceipt({
82
+ hash: txHash
83
+ });
84
+ // Look for CheckpointProposed event
85
+ const checkpointProposedEventAbi = getAbiItem({
86
+ abi: RollupAbi,
87
+ name: 'CheckpointProposed'
88
+ });
89
+ const checkpointProposedLog = receipt.logs.find((log)=>{
90
+ try {
91
+ return log.address.toLowerCase() === rollupAddress.toString().toLowerCase() && log.topics[0] === toEventSelector(checkpointProposedEventAbi);
92
+ } catch {
93
+ return false;
94
+ }
95
+ });
96
+ if (!checkpointProposedLog || checkpointProposedLog.topics[1] === undefined) {
97
+ throw new Error(`Checkpoint proposed event not found`);
98
+ }
99
+ const checkpointNumber = CheckpointNumber.fromBigInt(BigInt(checkpointProposedLog.topics[1]));
100
+ // Decode the full event to extract attestationsHash and payloadDigest
101
+ const decodedEvent = decodeEventLog({
102
+ abi: RollupAbi,
103
+ data: checkpointProposedLog.data,
104
+ topics: checkpointProposedLog.topics
105
+ });
106
+ const eventArgs = decodedEvent.args;
107
+ if (!eventArgs.attestationsHash || !eventArgs.payloadDigest) {
108
+ throw new Error(`CheckpointProposed event missing attestationsHash or payloadDigest`);
109
+ }
110
+ const expectedHashes = {
111
+ attestationsHash: eventArgs.attestationsHash,
112
+ payloadDigest: eventArgs.payloadDigest
113
+ };
114
+ logger.info(`Checkpoint Number: ${checkpointNumber}`);
115
+ logger.info(`Attestations Hash: ${expectedHashes.attestationsHash}`);
116
+ logger.info(`Payload Digest: ${expectedHashes.payloadDigest}`);
117
+ logger.info('');
118
+ logger.info('Retrieving checkpoint from rollup transaction...');
119
+ logger.info('');
120
+ const result = await retriever.getCheckpointFromRollupTx(txHash, [], checkpointNumber, expectedHashes);
121
+ logger.info(' Successfully retrieved block header!');
122
+ logger.info('');
123
+ logger.info('Block Header Details:');
124
+ logger.info('====================');
125
+ logger.info(`Checkpoint Number: ${result.checkpointNumber}`);
126
+ logger.info(`Block Hash: ${result.blockHash}`);
127
+ logger.info(`Archive Root: ${result.archiveRoot.toString()}`);
128
+ logger.info('');
129
+ logger.info('Header:');
130
+ logger.info(` Slot Number: ${result.header.slotNumber.toString()}`);
131
+ logger.info(` Timestamp: ${result.header.timestamp.toString()}`);
132
+ logger.info(` Coinbase: ${result.header.coinbase.toString()}`);
133
+ logger.info(` Fee Recipient: ${result.header.feeRecipient.toString()}`);
134
+ logger.info(` Total Mana Used: ${result.header.totalManaUsed.toString()}`);
135
+ logger.info('');
136
+ logger.info('Attestations:');
137
+ logger.info(` Count: ${result.attestations.length}`);
138
+ logger.info(` Non-empty attestations: ${result.attestations.filter((a)=>!a.signature.isEmpty()).length}`);
139
+ process.exit(0);
140
+ } catch (error) {
141
+ logger.error('Error retrieving block header:');
142
+ logger.error(error instanceof Error ? error.message : String(error));
143
+ if (error instanceof Error && error.stack) {
144
+ logger.debug(error.stack);
145
+ }
146
+ process.exit(1);
147
+ }
148
+ }
149
+ // Only run if this is the main module
150
+ if (import.meta.url === `file://${process.argv[1]}`) {
151
+ void main();
152
+ }
@@ -0,0 +1,143 @@
1
+ import { type ViemCommitteeAttestations } from '@aztec/ethereum/contracts';
2
+ import type { ViemPublicClient, ViemPublicDebugClient } from '@aztec/ethereum/types';
3
+ import { CheckpointNumber } from '@aztec/foundation/branded-types';
4
+ import { Fr } from '@aztec/foundation/curves/bn254';
5
+ import { EthAddress } from '@aztec/foundation/eth-address';
6
+ import type { Logger } from '@aztec/foundation/log';
7
+ import { CommitteeAttestation } from '@aztec/stdlib/block';
8
+ import { CheckpointHeader } from '@aztec/stdlib/rollup';
9
+ import { type Hex, type Transaction } from 'viem';
10
+ import type { ArchiverInstrumentation } from '../modules/instrumentation.js';
11
+ /** Decoded checkpoint data from a propose calldata. */
12
+ type CheckpointData = {
13
+ checkpointNumber: CheckpointNumber;
14
+ archiveRoot: Fr;
15
+ header: CheckpointHeader;
16
+ attestations: CommitteeAttestation[];
17
+ /**
18
+ * The exact packed `CommitteeAttestations` tuple as it appears in the propose calldata, preserved
19
+ * verbatim (never re-derived from {@link attestations}) so invalidation evidence stays byte-faithful to
20
+ * the on-chain `attestationsHash`.
21
+ */
22
+ verbatimAttestations: ViemCommitteeAttestations;
23
+ blockHash: string;
24
+ feeAssetPriceModifier: bigint;
25
+ };
26
+ /**
27
+ * Extracts calldata to the `propose` method of the rollup contract from an L1 transaction
28
+ * in order to reconstruct an L2 block header. Uses hash matching against expected hashes
29
+ * from the CheckpointProposed event to verify the correct propose calldata.
30
+ */
31
+ export declare class CalldataRetriever {
32
+ private readonly publicClient;
33
+ private readonly debugClient;
34
+ private readonly targetCommitteeSize;
35
+ private readonly instrumentation;
36
+ private readonly logger;
37
+ private readonly rollupAddress;
38
+ /** Tx hashes we've already logged for trace+debug failure (log once per tx per process). */
39
+ private static readonly traceFailureWarnedTxHashes;
40
+ /** Clears the trace-failure warned set. For testing only. */
41
+ static resetTraceFailureWarnedForTesting(): void;
42
+ constructor(publicClient: ViemPublicClient, debugClient: ViemPublicDebugClient, targetCommitteeSize: number, instrumentation: ArchiverInstrumentation | undefined, logger: Logger, rollupAddress: EthAddress);
43
+ private getSignatureContext;
44
+ /**
45
+ * Gets checkpoint header and metadata from the calldata of an L1 transaction.
46
+ * Tries multicall3 decoding, falls back to trace-based extraction.
47
+ * @param txHash - Hash of the tx that published it.
48
+ * @param blobHashes - Blob hashes for the checkpoint.
49
+ * @param checkpointNumber - Checkpoint number.
50
+ * @param expectedHashes - Expected hashes from the CheckpointProposed event for validation
51
+ * @returns Checkpoint header and metadata from the calldata, deserialized
52
+ */
53
+ getCheckpointFromRollupTx(txHash: `0x${string}`, _blobHashes: Buffer[], checkpointNumber: CheckpointNumber, expectedHashes: {
54
+ attestationsHash: Hex;
55
+ payloadDigest: Hex;
56
+ }): Promise<CheckpointData>;
57
+ /** Gets checkpoint data from a transaction by trying decode strategies then falling back to trace. */
58
+ protected getCheckpointFromTx(tx: Transaction, checkpointNumber: CheckpointNumber, expectedHashes: {
59
+ attestationsHash: Hex;
60
+ payloadDigest: Hex;
61
+ }): Promise<CheckpointData>;
62
+ /**
63
+ * Attempts to decode a transaction as a Spire Proposer multicall wrapper.
64
+ * If successful, iterates all wrapped calls and validates each as either multicall3
65
+ * or direct propose, verifying against expected hashes.
66
+ * @param tx - The transaction to decode
67
+ * @param expectedHashes - Expected hashes for hash-verified matching
68
+ * @param checkpointNumber - The checkpoint number
69
+ * @param blockHash - The L1 block hash
70
+ * @returns The checkpoint data if successfully decoded and validated, undefined otherwise
71
+ */
72
+ protected tryDecodeSpireProposer(tx: Transaction, expectedHashes: {
73
+ attestationsHash: Hex;
74
+ payloadDigest: Hex;
75
+ }, checkpointNumber: CheckpointNumber, blockHash: Hex): Promise<CheckpointData | undefined>;
76
+ /**
77
+ * Attempts to decode transaction input as multicall3 and extract propose calldata.
78
+ * Finds all calls matching the rollup address and propose selector, then decodes
79
+ * and verifies each candidate against expected hashes from the CheckpointProposed event.
80
+ * @param tx - The transaction-like object with to, input, and hash
81
+ * @param expectedHashes - Expected hashes from CheckpointProposed event
82
+ * @param checkpointNumber - The checkpoint number
83
+ * @param blockHash - The L1 block hash
84
+ * @returns The checkpoint data if successfully validated, undefined otherwise
85
+ */
86
+ protected tryDecodeMulticall3(tx: {
87
+ to: Hex | null | undefined;
88
+ input: Hex;
89
+ hash: Hex;
90
+ }, expectedHashes: {
91
+ attestationsHash: Hex;
92
+ payloadDigest: Hex;
93
+ }, checkpointNumber: CheckpointNumber, blockHash: Hex): CheckpointData | undefined;
94
+ /**
95
+ * Attempts to decode transaction as a direct propose call to the rollup contract.
96
+ * Decodes, verifies hashes, and builds checkpoint data in a single pass.
97
+ * @param tx - The transaction-like object with to, input, and hash
98
+ * @param expectedHashes - Expected hashes from CheckpointProposed event
99
+ * @param checkpointNumber - The checkpoint number
100
+ * @param blockHash - The L1 block hash
101
+ * @returns The checkpoint data if successfully validated, undefined otherwise
102
+ */
103
+ protected tryDecodeDirectPropose(tx: {
104
+ to: Hex | null | undefined;
105
+ input: Hex;
106
+ hash: Hex;
107
+ }, expectedHashes: {
108
+ attestationsHash: Hex;
109
+ payloadDigest: Hex;
110
+ }, checkpointNumber: CheckpointNumber, blockHash: Hex): CheckpointData | undefined;
111
+ /**
112
+ * Uses debug/trace RPC to extract the actual calldata from the successful propose call.
113
+ * This is the definitive fallback that works for any transaction pattern.
114
+ * Tries trace_transaction first, then falls back to debug_traceTransaction.
115
+ * @param txHash - The transaction hash to trace
116
+ * @returns The propose calldata from the successful call
117
+ */
118
+ protected extractCalldataViaTrace(txHash: Hex): Promise<Hex>;
119
+ /**
120
+ * Decodes propose calldata, verifies against expected hashes, and builds checkpoint data.
121
+ * Returns undefined on decode errors or hash mismatches (soft failure for try-based callers).
122
+ * @param proposeCalldata - The propose function calldata
123
+ * @param expectedHashes - Expected hashes from the CheckpointProposed event
124
+ * @param checkpointNumber - The checkpoint number
125
+ * @param blockHash - The L1 block hash
126
+ * @returns The decoded checkpoint data, or undefined on failure
127
+ */
128
+ protected tryDecodeAndVerifyPropose(proposeCalldata: Hex, expectedHashes: {
129
+ attestationsHash: Hex;
130
+ payloadDigest: Hex;
131
+ }, checkpointNumber: CheckpointNumber, blockHash: Hex): CheckpointData | undefined;
132
+ /** Computes the keccak256 hash of ABI-encoded CommitteeAttestations. */
133
+ private computeAttestationsHash;
134
+ /** Computes the keccak256 payload digest from the checkpoint header, archive root, and fee asset price modifier. */
135
+ private computePayloadDigest;
136
+ /**
137
+ * Extracts the CommitteeAttestations struct definition from RollupAbi.
138
+ * Finds the _attestations parameter by name in the propose function.
139
+ */
140
+ private getCommitteeAttestationsStructDef;
141
+ }
142
+ export {};
143
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsbGRhdGFfcmV0cmlldmVyLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbDEvY2FsbGRhdGFfcmV0cmlldmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBd0IsS0FBSyx5QkFBeUIsRUFBbUIsTUFBTSwyQkFBMkIsQ0FBQztBQUNsSCxPQUFPLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRW5FLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNwRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDM0QsT0FBTyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFcEQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFM0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFeEQsT0FBTyxFQUVMLEtBQUssR0FBRyxFQUNSLEtBQUssV0FBVyxFQU9qQixNQUFNLE1BQU0sQ0FBQztBQUVkLE9BQU8sS0FBSyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFNN0UsdURBQXVEO0FBQ3ZELEtBQUssY0FBYyxHQUFHO0lBQ3BCLGdCQUFnQixFQUFFLGdCQUFnQixDQUFDO0lBQ25DLFdBQVcsRUFBRSxFQUFFLENBQUM7SUFDaEIsTUFBTSxFQUFFLGdCQUFnQixDQUFDO0lBQ3pCLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxDQUFDO0lBQ3JDOzs7O09BSUc7SUFDSCxvQkFBb0IsRUFBRSx5QkFBeUIsQ0FBQztJQUNoRCxTQUFTLEVBQUUsTUFBTSxDQUFDO0lBQ2xCLHFCQUFxQixFQUFFLE1BQU0sQ0FBQztDQUMvQixDQUFDO0FBRUY7Ozs7R0FJRztB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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"calldata_retriever.d.ts","sourceRoot":"","sources":["../../src/l1/calldata_retriever.ts"],"names":[],"mappings":"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"}