@aztec/ethereum 0.0.0-test.0 → 0.0.1-commit.001888fc

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 (289) hide show
  1. package/dest/account.d.ts +2 -0
  2. package/dest/account.d.ts.map +1 -0
  3. package/dest/account.js +4 -0
  4. package/dest/chain.d.ts +1 -1
  5. package/dest/client.d.ts +14 -4
  6. package/dest/client.d.ts.map +1 -1
  7. package/dest/client.js +27 -3
  8. package/dest/config.d.ts +70 -23
  9. package/dest/config.d.ts.map +1 -1
  10. package/dest/config.js +155 -34
  11. package/dest/constants.d.ts +1 -1
  12. package/dest/contracts/empire_base.d.ts +27 -8
  13. package/dest/contracts/empire_base.d.ts.map +1 -1
  14. package/dest/contracts/empire_base.js +75 -2
  15. package/dest/contracts/empire_slashing_proposer.d.ts +69 -0
  16. package/dest/contracts/empire_slashing_proposer.d.ts.map +1 -0
  17. package/dest/contracts/empire_slashing_proposer.js +216 -0
  18. package/dest/contracts/errors.d.ts +7 -0
  19. package/dest/contracts/errors.d.ts.map +1 -0
  20. package/dest/contracts/errors.js +12 -0
  21. package/dest/contracts/fee_asset_handler.d.ts +20 -0
  22. package/dest/contracts/fee_asset_handler.d.ts.map +1 -0
  23. package/dest/contracts/fee_asset_handler.js +59 -0
  24. package/dest/contracts/fee_asset_price_oracle.d.ts +101 -0
  25. package/dest/contracts/fee_asset_price_oracle.d.ts.map +1 -0
  26. package/dest/contracts/fee_asset_price_oracle.js +651 -0
  27. package/dest/contracts/fee_juice.d.ts +6 -7
  28. package/dest/contracts/fee_juice.d.ts.map +1 -1
  29. package/dest/contracts/fee_juice.js +27 -20
  30. package/dest/contracts/governance.d.ts +45 -32
  31. package/dest/contracts/governance.d.ts.map +1 -1
  32. package/dest/contracts/governance.js +98 -85
  33. package/dest/contracts/governance_proposer.d.ts +19 -13
  34. package/dest/contracts/governance_proposer.d.ts.map +1 -1
  35. package/dest/contracts/governance_proposer.js +441 -26
  36. package/dest/contracts/gse.d.ts +32 -0
  37. package/dest/contracts/gse.d.ts.map +1 -0
  38. package/dest/contracts/gse.js +72 -0
  39. package/dest/contracts/inbox.d.ts +47 -0
  40. package/dest/contracts/inbox.d.ts.map +1 -0
  41. package/dest/contracts/inbox.js +80 -0
  42. package/dest/contracts/index.d.ts +12 -3
  43. package/dest/contracts/index.d.ts.map +1 -1
  44. package/dest/contracts/index.js +11 -2
  45. package/dest/contracts/log.d.ts +13 -0
  46. package/dest/contracts/log.d.ts.map +1 -0
  47. package/dest/contracts/log.js +1 -0
  48. package/dest/contracts/multicall.d.ts +21 -0
  49. package/dest/contracts/multicall.d.ts.map +1 -0
  50. package/dest/contracts/multicall.js +157 -0
  51. package/dest/contracts/outbox.d.ts +41 -0
  52. package/dest/contracts/outbox.d.ts.map +1 -0
  53. package/dest/contracts/outbox.js +86 -0
  54. package/dest/contracts/registry.d.ts +12 -5
  55. package/dest/contracts/registry.d.ts.map +1 -1
  56. package/dest/contracts/registry.js +74 -17
  57. package/dest/contracts/rollup.d.ts +311 -53
  58. package/dest/contracts/rollup.d.ts.map +1 -1
  59. package/dest/contracts/rollup.js +1180 -116
  60. package/dest/contracts/slasher_contract.d.ts +44 -0
  61. package/dest/contracts/slasher_contract.d.ts.map +1 -0
  62. package/dest/contracts/slasher_contract.js +75 -0
  63. package/dest/contracts/tally_slashing_proposer.d.ts +140 -0
  64. package/dest/contracts/tally_slashing_proposer.d.ts.map +1 -0
  65. package/dest/contracts/tally_slashing_proposer.js +320 -0
  66. package/dest/contracts/utils.d.ts +3 -0
  67. package/dest/contracts/utils.d.ts.map +1 -0
  68. package/dest/contracts/utils.js +11 -0
  69. package/dest/deploy_aztec_l1_contracts.d.ts +259 -0
  70. package/dest/deploy_aztec_l1_contracts.d.ts.map +1 -0
  71. package/dest/deploy_aztec_l1_contracts.js +413 -0
  72. package/dest/deploy_l1_contract.d.ts +68 -0
  73. package/dest/deploy_l1_contract.d.ts.map +1 -0
  74. package/dest/deploy_l1_contract.js +312 -0
  75. package/dest/eth-signer/eth-signer.d.ts +21 -0
  76. package/dest/eth-signer/eth-signer.d.ts.map +1 -0
  77. package/dest/eth-signer/eth-signer.js +5 -0
  78. package/dest/eth-signer/index.d.ts +2 -0
  79. package/dest/eth-signer/index.d.ts.map +1 -0
  80. package/dest/eth-signer/index.js +1 -0
  81. package/dest/forwarder_proxy.d.ts +32 -0
  82. package/dest/forwarder_proxy.d.ts.map +1 -0
  83. package/dest/forwarder_proxy.js +93 -0
  84. package/dest/generated/l1-contracts-defaults.d.ts +30 -0
  85. package/dest/generated/l1-contracts-defaults.d.ts.map +1 -0
  86. package/dest/generated/l1-contracts-defaults.js +30 -0
  87. package/dest/l1_artifacts.d.ts +81744 -0
  88. package/dest/l1_artifacts.d.ts.map +1 -0
  89. package/dest/l1_artifacts.js +166 -0
  90. package/dest/l1_contract_addresses.d.ts +24 -4
  91. package/dest/l1_contract_addresses.d.ts.map +1 -1
  92. package/dest/l1_contract_addresses.js +25 -21
  93. package/dest/l1_reader.d.ts +6 -2
  94. package/dest/l1_reader.d.ts.map +1 -1
  95. package/dest/l1_reader.js +20 -9
  96. package/dest/l1_tx_utils/config.d.ts +65 -0
  97. package/dest/l1_tx_utils/config.d.ts.map +1 -0
  98. package/dest/l1_tx_utils/config.js +109 -0
  99. package/dest/l1_tx_utils/constants.d.ts +12 -0
  100. package/dest/l1_tx_utils/constants.d.ts.map +1 -0
  101. package/dest/l1_tx_utils/constants.js +39 -0
  102. package/dest/l1_tx_utils/factory.d.ts +32 -0
  103. package/dest/l1_tx_utils/factory.d.ts.map +1 -0
  104. package/dest/l1_tx_utils/factory.js +22 -0
  105. package/dest/l1_tx_utils/fee-strategies/index.d.ts +10 -0
  106. package/dest/l1_tx_utils/fee-strategies/index.d.ts.map +1 -0
  107. package/dest/l1_tx_utils/fee-strategies/index.js +12 -0
  108. package/dest/l1_tx_utils/fee-strategies/p75_competitive.d.ts +8 -0
  109. package/dest/l1_tx_utils/fee-strategies/p75_competitive.d.ts.map +1 -0
  110. package/dest/l1_tx_utils/fee-strategies/p75_competitive.js +129 -0
  111. package/dest/l1_tx_utils/fee-strategies/p75_competitive_blob_txs_only.d.ts +23 -0
  112. package/dest/l1_tx_utils/fee-strategies/p75_competitive_blob_txs_only.d.ts.map +1 -0
  113. package/dest/l1_tx_utils/fee-strategies/p75_competitive_blob_txs_only.js +191 -0
  114. package/dest/l1_tx_utils/fee-strategies/types.d.ts +51 -0
  115. package/dest/l1_tx_utils/fee-strategies/types.d.ts.map +1 -0
  116. package/dest/l1_tx_utils/fee-strategies/types.js +3 -0
  117. package/dest/l1_tx_utils/forwarder_l1_tx_utils.d.ts +41 -0
  118. package/dest/l1_tx_utils/forwarder_l1_tx_utils.d.ts.map +1 -0
  119. package/dest/l1_tx_utils/forwarder_l1_tx_utils.js +42 -0
  120. package/dest/l1_tx_utils/index-blobs.d.ts +3 -0
  121. package/dest/l1_tx_utils/index-blobs.d.ts.map +1 -0
  122. package/dest/l1_tx_utils/index-blobs.js +2 -0
  123. package/dest/l1_tx_utils/index.d.ts +13 -0
  124. package/dest/l1_tx_utils/index.d.ts.map +1 -0
  125. package/dest/l1_tx_utils/index.js +13 -0
  126. package/dest/l1_tx_utils/interfaces.d.ts +76 -0
  127. package/dest/l1_tx_utils/interfaces.d.ts.map +1 -0
  128. package/dest/l1_tx_utils/interfaces.js +4 -0
  129. package/dest/l1_tx_utils/l1_fee_analyzer.d.ts +233 -0
  130. package/dest/l1_tx_utils/l1_fee_analyzer.d.ts.map +1 -0
  131. package/dest/l1_tx_utils/l1_fee_analyzer.js +506 -0
  132. package/dest/l1_tx_utils/l1_tx_utils.d.ts +105 -0
  133. package/dest/l1_tx_utils/l1_tx_utils.d.ts.map +1 -0
  134. package/dest/l1_tx_utils/l1_tx_utils.js +639 -0
  135. package/dest/l1_tx_utils/readonly_l1_tx_utils.d.ts +83 -0
  136. package/dest/l1_tx_utils/readonly_l1_tx_utils.d.ts.map +1 -0
  137. package/dest/l1_tx_utils/readonly_l1_tx_utils.js +327 -0
  138. package/dest/l1_tx_utils/signer.d.ts +4 -0
  139. package/dest/l1_tx_utils/signer.d.ts.map +1 -0
  140. package/dest/l1_tx_utils/signer.js +16 -0
  141. package/dest/l1_tx_utils/tx_delayer.d.ts +56 -0
  142. package/dest/l1_tx_utils/tx_delayer.d.ts.map +1 -0
  143. package/dest/l1_tx_utils/tx_delayer.js +221 -0
  144. package/dest/l1_tx_utils/types.d.ts +67 -0
  145. package/dest/l1_tx_utils/types.d.ts.map +1 -0
  146. package/dest/l1_tx_utils/types.js +26 -0
  147. package/dest/l1_tx_utils/utils.d.ts +4 -0
  148. package/dest/l1_tx_utils/utils.d.ts.map +1 -0
  149. package/dest/l1_tx_utils/utils.js +14 -0
  150. package/dest/l1_types.d.ts +6 -0
  151. package/dest/l1_types.d.ts.map +1 -0
  152. package/dest/l1_types.js +1 -0
  153. package/dest/publisher_manager.d.ts +16 -0
  154. package/dest/publisher_manager.d.ts.map +1 -0
  155. package/dest/publisher_manager.js +88 -0
  156. package/dest/queries.d.ts +5 -3
  157. package/dest/queries.d.ts.map +1 -1
  158. package/dest/queries.js +61 -12
  159. package/dest/test/chain_monitor.d.ts +94 -0
  160. package/dest/test/chain_monitor.d.ts.map +1 -0
  161. package/dest/test/chain_monitor.js +244 -0
  162. package/dest/test/eth_cheat_codes.d.ts +229 -0
  163. package/dest/test/eth_cheat_codes.d.ts.map +1 -0
  164. package/dest/test/eth_cheat_codes.js +560 -0
  165. package/dest/test/eth_cheat_codes_with_state.d.ts +2 -2
  166. package/dest/test/eth_cheat_codes_with_state.d.ts.map +1 -1
  167. package/dest/test/eth_cheat_codes_with_state.js +1 -1
  168. package/dest/test/index.d.ts +4 -3
  169. package/dest/test/index.d.ts.map +1 -1
  170. package/dest/test/index.js +3 -2
  171. package/dest/test/rollup_cheat_codes.d.ts +90 -0
  172. package/dest/test/rollup_cheat_codes.d.ts.map +1 -0
  173. package/dest/test/rollup_cheat_codes.js +292 -0
  174. package/dest/test/start_anvil.d.ts +23 -2
  175. package/dest/test/start_anvil.d.ts.map +1 -1
  176. package/dest/test/start_anvil.js +133 -24
  177. package/dest/test/upgrade_utils.d.ts +6 -5
  178. package/dest/test/upgrade_utils.d.ts.map +1 -1
  179. package/dest/test/upgrade_utils.js +23 -16
  180. package/dest/types.d.ts +62 -8
  181. package/dest/types.d.ts.map +1 -1
  182. package/dest/types.js +3 -1
  183. package/dest/utils.d.ts +17 -3
  184. package/dest/utils.d.ts.map +1 -1
  185. package/dest/utils.js +111 -88
  186. package/dest/zkPassportVerifierAddress.d.ts +15 -0
  187. package/dest/zkPassportVerifierAddress.d.ts.map +1 -0
  188. package/dest/zkPassportVerifierAddress.js +11 -0
  189. package/package.json +51 -25
  190. package/src/account.ts +5 -0
  191. package/src/client.ts +51 -5
  192. package/src/config.ts +222 -43
  193. package/src/contracts/README.md +157 -0
  194. package/src/contracts/empire_base.ts +79 -7
  195. package/src/contracts/empire_slashing_proposer.ts +265 -0
  196. package/src/contracts/errors.ts +13 -0
  197. package/src/contracts/fee_asset_handler.ts +66 -0
  198. package/src/contracts/fee_asset_price_oracle.ts +280 -0
  199. package/src/contracts/fee_juice.ts +29 -15
  200. package/src/contracts/governance.ts +90 -78
  201. package/src/contracts/governance_proposer.ts +81 -25
  202. package/src/contracts/gse.ts +88 -0
  203. package/src/contracts/inbox.ts +115 -0
  204. package/src/contracts/index.ts +11 -2
  205. package/src/contracts/log.ts +13 -0
  206. package/src/contracts/multicall.ts +158 -0
  207. package/src/contracts/outbox.ts +98 -0
  208. package/src/contracts/registry.ts +81 -26
  209. package/src/contracts/rollup.ts +940 -89
  210. package/src/contracts/slasher_contract.ts +89 -0
  211. package/src/contracts/tally_slashing_proposer.ts +322 -0
  212. package/src/contracts/utils.ts +14 -0
  213. package/src/deploy_aztec_l1_contracts.ts +650 -0
  214. package/src/deploy_l1_contract.ts +362 -0
  215. package/src/eth-signer/eth-signer.ts +25 -0
  216. package/src/eth-signer/index.ts +1 -0
  217. package/src/forwarder_proxy.ts +108 -0
  218. package/src/generated/l1-contracts-defaults.ts +32 -0
  219. package/src/l1_artifacts.ts +254 -0
  220. package/src/l1_contract_addresses.ts +49 -34
  221. package/src/l1_reader.ts +30 -10
  222. package/src/l1_tx_utils/README.md +177 -0
  223. package/src/l1_tx_utils/config.ts +181 -0
  224. package/src/l1_tx_utils/constants.ts +29 -0
  225. package/src/l1_tx_utils/factory.ts +64 -0
  226. package/src/l1_tx_utils/fee-strategies/index.ts +22 -0
  227. package/src/l1_tx_utils/fee-strategies/p75_competitive.ts +163 -0
  228. package/src/l1_tx_utils/fee-strategies/p75_competitive_blob_txs_only.ts +245 -0
  229. package/src/l1_tx_utils/fee-strategies/types.ts +56 -0
  230. package/src/l1_tx_utils/forwarder_l1_tx_utils.ts +108 -0
  231. package/src/l1_tx_utils/index-blobs.ts +2 -0
  232. package/src/l1_tx_utils/index.ts +15 -0
  233. package/src/l1_tx_utils/interfaces.ts +86 -0
  234. package/src/l1_tx_utils/l1_fee_analyzer.ts +803 -0
  235. package/src/l1_tx_utils/l1_tx_utils.ts +766 -0
  236. package/src/l1_tx_utils/readonly_l1_tx_utils.ts +423 -0
  237. package/src/l1_tx_utils/signer.ts +28 -0
  238. package/src/l1_tx_utils/tx_delayer.ts +294 -0
  239. package/src/l1_tx_utils/types.ts +85 -0
  240. package/src/l1_tx_utils/utils.ts +16 -0
  241. package/src/l1_types.ts +6 -0
  242. package/src/publisher_manager.ts +108 -0
  243. package/src/queries.ts +82 -16
  244. package/src/test/chain_monitor.ts +302 -0
  245. package/src/test/eth_cheat_codes.ts +588 -0
  246. package/src/test/eth_cheat_codes_with_state.ts +1 -1
  247. package/src/test/index.ts +3 -2
  248. package/src/test/rollup_cheat_codes.ts +330 -0
  249. package/src/test/start_anvil.ts +166 -22
  250. package/src/test/upgrade_utils.ts +30 -21
  251. package/src/types.ts +71 -7
  252. package/src/utils.ts +137 -93
  253. package/src/zkPassportVerifierAddress.ts +15 -0
  254. package/dest/contracts/forwarder.d.ts +0 -24
  255. package/dest/contracts/forwarder.d.ts.map +0 -1
  256. package/dest/contracts/forwarder.js +0 -101
  257. package/dest/contracts/slashing_proposer.d.ts +0 -21
  258. package/dest/contracts/slashing_proposer.d.ts.map +0 -1
  259. package/dest/contracts/slashing_proposer.js +0 -47
  260. package/dest/deploy_l1_contracts.d.ts +0 -21210
  261. package/dest/deploy_l1_contracts.d.ts.map +0 -1
  262. package/dest/deploy_l1_contracts.js +0 -687
  263. package/dest/eth_cheat_codes.d.ts +0 -147
  264. package/dest/eth_cheat_codes.d.ts.map +0 -1
  265. package/dest/eth_cheat_codes.js +0 -303
  266. package/dest/index.d.ts +0 -14
  267. package/dest/index.d.ts.map +0 -1
  268. package/dest/index.js +0 -13
  269. package/dest/l1_tx_utils.d.ts +0 -192
  270. package/dest/l1_tx_utils.d.ts.map +0 -1
  271. package/dest/l1_tx_utils.js +0 -641
  272. package/dest/l1_tx_utils_with_blobs.d.ts +0 -12
  273. package/dest/l1_tx_utils_with_blobs.d.ts.map +0 -1
  274. package/dest/l1_tx_utils_with_blobs.js +0 -64
  275. package/dest/test/delayed_tx_utils.d.ts +0 -8
  276. package/dest/test/delayed_tx_utils.d.ts.map +0 -1
  277. package/dest/test/delayed_tx_utils.js +0 -21
  278. package/dest/test/tx_delayer.d.ts +0 -25
  279. package/dest/test/tx_delayer.d.ts.map +0 -1
  280. package/dest/test/tx_delayer.js +0 -116
  281. package/src/contracts/forwarder.ts +0 -132
  282. package/src/contracts/slashing_proposer.ts +0 -51
  283. package/src/deploy_l1_contracts.ts +0 -948
  284. package/src/eth_cheat_codes.ts +0 -314
  285. package/src/index.ts +0 -13
  286. package/src/l1_tx_utils.ts +0 -847
  287. package/src/l1_tx_utils_with_blobs.ts +0 -86
  288. package/src/test/delayed_tx_utils.ts +0 -24
  289. package/src/test/tx_delayer.ts +0 -163
package/src/types.ts CHANGED
@@ -1,21 +1,82 @@
1
1
  import type {
2
+ Abi,
2
3
  Account,
3
4
  Chain,
4
5
  Client,
5
6
  FallbackTransport,
7
+ GetContractReturnType,
8
+ Hex,
6
9
  HttpTransport,
7
10
  PublicActions,
8
11
  PublicClient,
9
12
  PublicRpcSchema,
10
13
  WalletActions,
11
- WalletClient,
12
14
  WalletRpcSchema,
13
15
  } from 'viem';
14
16
 
15
17
  /** Type for a viem public client */
16
18
  export type ViemPublicClient = PublicClient<FallbackTransport<HttpTransport[]>, Chain>;
17
19
 
18
- export type SimpleViemWalletClient = WalletClient<FallbackTransport<HttpTransport[]>, Chain, Account>;
20
+ export type PublicRpcDebugSchema = [
21
+ {
22
+ Method: 'debug_traceTransaction';
23
+ Parameters: [txHash: `0x${string}`, options: { tracer: 'callTracer' }];
24
+ ReturnType: DebugCallTrace;
25
+ },
26
+ {
27
+ Method: 'trace_transaction';
28
+ Parameters: [txHash: `0x${string}`];
29
+ ReturnType: TraceTransactionResponse[];
30
+ },
31
+ ];
32
+
33
+ /** Return type for a debug_traceTransaction call */
34
+ export type DebugCallTrace = {
35
+ from: Hex;
36
+ to?: Hex;
37
+ type: string;
38
+ input?: Hex;
39
+ output?: Hex;
40
+ gas?: Hex;
41
+ gasUsed?: Hex;
42
+ value?: Hex;
43
+ error?: string;
44
+ calls?: DebugCallTrace[];
45
+ };
46
+
47
+ /** Action object for a trace_transaction call */
48
+ export type TraceAction = {
49
+ from: Hex;
50
+ to?: Hex;
51
+ callType: string;
52
+ gas?: Hex;
53
+ input?: Hex;
54
+ value?: Hex;
55
+ };
56
+
57
+ /** Result object for a trace_transaction call */
58
+ export type TraceResult = {
59
+ gasUsed?: Hex;
60
+ output?: Hex;
61
+ };
62
+
63
+ /** Return type for a single trace in trace_transaction response */
64
+ export type TraceTransactionResponse = {
65
+ action: TraceAction;
66
+ result?: TraceResult;
67
+ error?: string;
68
+ subtraces: number;
69
+ traceAddress: number[];
70
+ type: string;
71
+ };
72
+
73
+ /** Type for a viem public client with support for debug methods */
74
+ export type ViemPublicDebugClient = PublicClient<
75
+ FallbackTransport<HttpTransport[]>,
76
+ Chain,
77
+ undefined,
78
+ [...PublicRpcSchema, ...PublicRpcDebugSchema]
79
+ >;
19
80
 
20
81
  export type ExtendedViemWalletClient = Client<
21
82
  FallbackTransport<readonly HttpTransport[]>,
@@ -25,9 +86,12 @@ export type ExtendedViemWalletClient = Client<
25
86
  PublicActions<FallbackTransport<readonly HttpTransport[]>, Chain> & WalletActions<Chain, Account>
26
87
  >;
27
88
 
28
- export type ViemWalletClient = SimpleViemWalletClient | ExtendedViemWalletClient;
89
+ /** Type for a viem client that can be either public or extended with wallet capabilities */
90
+ export type ViemClient = ViemPublicClient | ExtendedViemWalletClient;
29
91
 
30
- export type L1Clients = {
31
- publicClient: ViemPublicClient;
32
- walletClient: ExtendedViemWalletClient;
33
- };
92
+ /** Type for a viem contract that can be used with an extended viem client */
93
+ export type ViemContract<TAbi extends Abi> = GetContractReturnType<TAbi, ExtendedViemWalletClient>;
94
+
95
+ export function isExtendedClient(client: ViemClient): client is ExtendedViemWalletClient {
96
+ return 'account' in client && client.account !== undefined;
97
+ }
package/src/utils.ts CHANGED
@@ -1,18 +1,21 @@
1
- import type { Fr } from '@aztec/foundation/fields';
1
+ import type { Fr } from '@aztec/foundation/curves/bn254';
2
2
  import type { Logger } from '@aztec/foundation/log';
3
- import { ErrorsAbi } from '@aztec/l1-artifacts';
3
+ import { ErrorsAbi } from '@aztec/l1-artifacts/ErrorsAbi';
4
4
 
5
5
  import {
6
6
  type Abi,
7
+ type AbiItem,
7
8
  BaseError,
8
9
  type ContractEventName,
9
10
  ContractFunctionRevertedError,
10
11
  type DecodeEventLogReturnType,
12
+ type FormattedTransaction,
11
13
  type Hex,
12
14
  type Log,
13
15
  decodeErrorResult,
14
16
  decodeEventLog,
15
17
  } from 'viem';
18
+ import { formatAbiItem, formatAbiParams } from 'viem/utils';
16
19
 
17
20
  export interface L2Claim {
18
21
  claimSecret: Fr;
@@ -50,7 +53,7 @@ export function extractEvent<
50
53
  return event;
51
54
  }
52
55
 
53
- function tryExtractEvent<
56
+ export function tryExtractEvent<
54
57
  const TAbi extends Abi | readonly unknown[],
55
58
  TEventName extends ContractEventName<TAbi>,
56
59
  TEventType = DecodeEventLogReturnType<TAbi, TEventName, Hex[], undefined, true>,
@@ -92,6 +95,57 @@ export function prettyLogViemErrorMsg(err: any) {
92
95
  return err?.message ?? err;
93
96
  }
94
97
 
98
+ export function mergeAbis(abis: Abi[]): Abi {
99
+ let merged: Abi = [];
100
+ const seen = new Set<string>();
101
+
102
+ for (const abi of abis) {
103
+ for (const item of abi) {
104
+ const key = getAbiItemKey(item);
105
+ if (!seen.has(key)) {
106
+ seen.add(key);
107
+ merged = [...merged, item];
108
+ }
109
+ }
110
+ }
111
+
112
+ return merged;
113
+ }
114
+
115
+ function getAbiItemKey(item: AbiItem): string {
116
+ if (item.type === 'function') {
117
+ const signature = formatAbiItem(item);
118
+ const outputs = formatAbiParams(item.outputs);
119
+ const stateMutability = typeof item.stateMutability === 'string' ? item.stateMutability : '';
120
+ return `function:${signature}:${outputs}:${stateMutability}`;
121
+ }
122
+
123
+ if (item.type === 'event') {
124
+ const signature = formatAbiItem(item);
125
+ const indexed = (item.inputs ?? []).map(input => ((input as { indexed?: boolean }).indexed ? '1' : '0')).join('');
126
+ const anonymous = item.anonymous ? 'anonymous' : 'not-anonymous';
127
+ return `event:${signature}:${indexed}:${anonymous}`;
128
+ }
129
+
130
+ if (item.type === 'error') {
131
+ const signature = formatAbiItem(item);
132
+ return `error:${signature}`;
133
+ }
134
+
135
+ if (item.type === 'constructor') {
136
+ const inputs = formatAbiParams(item.inputs);
137
+ const stateMutability = typeof item.stateMutability === 'string' ? item.stateMutability : '';
138
+ return `constructor::${inputs}:${stateMutability}`;
139
+ }
140
+
141
+ if (item.type === 'fallback' || item.type === 'receive') {
142
+ const stateMutability = typeof item.stateMutability === 'string' ? item.stateMutability : '';
143
+ return `${item.type}:::${stateMutability}`;
144
+ }
145
+
146
+ return 'unknown';
147
+ }
148
+
95
149
  function getNestedErrorData(error: unknown): string | undefined {
96
150
  // If nothing, bail
97
151
  if (!error) {
@@ -116,6 +170,21 @@ function getNestedErrorData(error: unknown): string | undefined {
116
170
  return undefined;
117
171
  }
118
172
 
173
+ /**
174
+ * Truncates an error message to a safe length for log renderers.
175
+ * LogExplorer can only render up to 2500 characters in its summary view.
176
+ * We cap at 2000 to leave room for decorating context added by callers.
177
+ */
178
+ function truncateErrorMessage(message: string): string {
179
+ const MAX = 2000;
180
+ const CHUNK = 950;
181
+ if (message.length <= MAX) {
182
+ return message;
183
+ }
184
+ const truncated = message.length - 2 * CHUNK;
185
+ return message.slice(0, CHUNK) + `...${truncated} characters truncated...` + message.slice(-CHUNK);
186
+ }
187
+
119
188
  /**
120
189
  * Formats a Viem error into a FormattedViemError instance.
121
190
  * @param error - The error to format.
@@ -158,106 +227,53 @@ export function formatViemError(error: any, abi: Abi = ErrorsAbi): FormattedViem
158
227
  return new FormattedViemError(`${errorName}${args}`, error?.metaMessages);
159
228
  }
160
229
  }
161
- } catch (decodeErr) {
230
+ } catch {
162
231
  // If decoding fails, we fall back to the original formatting
163
232
  }
164
233
 
234
+ // Strip ABI from the error object before formatting
235
+ if (error && typeof error === 'object') {
236
+ // Create a clone to avoid modifying the original
237
+ const errorClone = structuredClone(error);
238
+
239
+ // Helper function to recursively remove ABI properties
240
+
241
+ // Strip ABIs from the clone
242
+ stripAbis(errorClone);
243
+
244
+ // Use the cleaned clone for further processing
245
+ error = errorClone;
246
+ }
247
+
165
248
  // If it's a regular Error instance, return it with its message
166
249
  if (error instanceof Error) {
167
- return error;
250
+ return new FormattedViemError(truncateErrorMessage(error.message), (error as any)?.metaMessages);
168
251
  }
169
252
 
170
- // Original formatting logic for non-custom errors
171
- const truncateHex = (hex: string, length = 100) => {
172
- if (!hex || typeof hex !== 'string') {
173
- return hex;
174
- }
175
- if (!hex.startsWith('0x')) {
176
- return hex;
177
- }
178
- if (hex.length <= length * 2) {
179
- return hex;
180
- }
181
- return `${hex.slice(0, length)}...${hex.slice(-length)}`;
182
- };
183
-
184
- const formatRequestBody = (body: string) => {
185
- try {
186
- const parsed = JSON.parse(body);
187
-
188
- // Recursively process all parameters that might contain hex strings
189
- const processParams = (obj: any): any => {
190
- if (Array.isArray(obj)) {
191
- return obj.map(item => processParams(item));
192
- }
193
- if (typeof obj === 'object' && obj !== null) {
194
- const result: any = {};
195
- for (const [key, value] of Object.entries(obj)) {
196
- result[key] = processParams(value);
197
- }
198
- return result;
199
- }
200
- if (typeof obj === 'string') {
201
- if (obj.startsWith('0x')) {
202
- return truncateHex(obj);
203
- }
204
- }
205
- return obj;
206
- };
207
-
208
- // Process the entire request body
209
- const processed = processParams(parsed);
210
- return JSON.stringify(processed, null, 2);
211
- } catch {
212
- return body;
213
- }
214
- };
215
-
216
- const truncateHexStringsInText = (text: string): string => {
217
- const hexRegex = /\b0x[a-fA-F0-9]{10,}/g;
218
- return text.replace(hexRegex, hex => truncateHex(hex));
219
- };
220
-
221
- const extractAndFormatRequestBody = (message: string): string => {
222
- // First handle Request body JSON
223
- const requestBodyRegex = /Request body: ({[\s\S]*?})\n/g;
224
- let result = message.replace(requestBodyRegex, (match, body) => {
225
- return `Request body: ${formatRequestBody(body)}\n`;
226
- });
227
-
228
- // Then handle Arguments section
229
- const argsRegex = /((?:Request |Estimate Gas )?Arguments:[\s\S]*?(?=\n\n|$))/g;
230
- result = result.replace(argsRegex, section => {
231
- const lines = section.split('\n');
232
- const processedLines = lines.map(line => {
233
- // Check if line contains a colon followed by content
234
- const colonIndex = line.indexOf(':');
235
- if (colonIndex !== -1) {
236
- const [prefix, content] = [line.slice(0, colonIndex + 1), line.slice(colonIndex + 1).trim()];
237
- // If content contains a hex string, truncate it
238
- if (content.includes('0x')) {
239
- const hexMatches = content.match(/0x[a-fA-F0-9]+/g) || [];
240
- let processedContent = content;
241
- hexMatches.forEach(hex => {
242
- processedContent = processedContent.replace(hex, truncateHex(hex));
243
- });
244
- return `${prefix} ${processedContent}`;
245
- }
246
- }
247
- return line;
248
- });
249
- return processedLines.join('\n');
250
- });
253
+ return new FormattedViemError(truncateErrorMessage(String(error)));
254
+ }
251
255
 
252
- // Finally, catch any remaining hex strings in the message
253
- result = truncateHexStringsInText(result);
256
+ function stripAbis(obj: any) {
257
+ if (!obj || typeof obj !== 'object') {
258
+ return;
259
+ }
254
260
 
255
- return result;
256
- };
261
+ // Delete ABI property at current level
262
+ if ('abi' in obj) {
263
+ delete obj.abi;
264
+ }
257
265
 
258
- const formattedRes = extractAndFormatRequestBody(error?.message || String(error));
266
+ // Process cause property
267
+ if (obj.cause) {
268
+ stripAbis(obj.cause);
269
+ }
259
270
 
260
- return new FormattedViemError(formattedRes.replace(/\\n/g, '\n'), error?.metaMessages);
271
+ // Process arrays and objects
272
+ Object.values(obj).forEach(value => {
273
+ if (value && typeof value === 'object') {
274
+ stripAbis(value);
275
+ }
276
+ });
261
277
  }
262
278
 
263
279
  export function tryGetCustomErrorName(err: any) {
@@ -270,7 +286,35 @@ export function tryGetCustomErrorName(err: any) {
270
286
  return (revertError as ContractFunctionRevertedError).data?.errorName;
271
287
  }
272
288
  }
273
- } catch (_e) {
289
+ } catch {
274
290
  return undefined;
275
291
  }
276
292
  }
293
+
294
+ /**
295
+ * Type guard to check if a transaction is a blob transaction (EIP-4844).
296
+ * Blob transactions have maxFeePerBlobGas and blobVersionedHashes fields.
297
+ */
298
+ export function isBlobTransaction(tx: FormattedTransaction): tx is FormattedTransaction & {
299
+ maxFeePerBlobGas: bigint;
300
+ blobVersionedHashes: readonly Hex[];
301
+ } {
302
+ return (
303
+ 'maxFeePerBlobGas' in tx &&
304
+ tx.maxFeePerBlobGas !== undefined &&
305
+ 'blobVersionedHashes' in tx &&
306
+ tx.blobVersionedHashes !== undefined
307
+ );
308
+ }
309
+
310
+ /**
311
+ * Calculates a percentile from an array of bigints
312
+ */
313
+ export function calculatePercentile(values: bigint[], percentile: number): bigint {
314
+ if (values.length === 0) {
315
+ return 0n;
316
+ }
317
+ const sorted = [...values].sort((a, b) => (a < b ? -1 : a > b ? 1 : 0));
318
+ const index = Math.ceil((sorted.length - 1) * (percentile / 100));
319
+ return sorted[index];
320
+ }
@@ -0,0 +1,15 @@
1
+ import { EthAddress } from '@aztec/foundation/eth-address';
2
+
3
+ /**
4
+ * The address of the zk passport verifier on sepolia
5
+ * get address from: ROOT/l1-contracts/lib/circuits/src/solidity/deployments/deployment-11155111.json
6
+ */
7
+ export const ZK_PASSPORT_VERIFIER_ADDRESS = EthAddress.fromString('0x3101Bad9eA5fACadA5554844a1a88F7Fe48D4DE0');
8
+ /**
9
+ * The default domain of the zk passport site
10
+ */
11
+ export const ZK_PASSPORT_DOMAIN = 'testnet.aztec.network';
12
+ /**
13
+ * The default scope of the zk passport proofs
14
+ */
15
+ export const ZK_PASSPORT_SCOPE = 'personhood';
@@ -1,24 +0,0 @@
1
- import type { Logger } from '@aztec/foundation/log';
2
- import { type Hex } from 'viem';
3
- import type { L1BlobInputs, L1GasConfig, L1TxRequest, L1TxUtils } from '../l1_tx_utils.js';
4
- import type { L1Clients, ViemPublicClient, ViemWalletClient } from '../types.js';
5
- export declare class ForwarderContract {
6
- readonly client: L1Clients['publicClient'];
7
- readonly rollupAddress: Hex;
8
- private readonly forwarder;
9
- constructor(client: L1Clients['publicClient'], address: Hex, rollupAddress: Hex);
10
- static create(owner: Hex, walletClient: ViemWalletClient, publicClient: ViemPublicClient, logger: Logger, rollupAddress: Hex): Promise<ForwarderContract>;
11
- getAddress(): `0x${string}`;
12
- forward(requests: L1TxRequest[], l1TxUtils: L1TxUtils, gasConfig: L1GasConfig | undefined, blobConfig: L1BlobInputs | undefined, logger: Logger): Promise<{
13
- receipt: import("viem").TransactionReceipt;
14
- gasPrice: import("../l1_tx_utils.js").GasPrice;
15
- stats: import("../l1_tx_utils.js").TransactionStats | undefined;
16
- errorMsg?: undefined;
17
- } | {
18
- receipt: import("viem").TransactionReceipt;
19
- gasPrice: import("../l1_tx_utils.js").GasPrice;
20
- errorMsg: string | undefined;
21
- stats?: undefined;
22
- }>;
23
- }
24
- //# sourceMappingURL=forwarder.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"forwarder.d.ts","sourceRoot":"","sources":["../../src/contracts/forwarder.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAGpD,OAAO,EAGL,KAAK,GAAG,EAGT,MAAM,MAAM,CAAC;AAGd,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC3F,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAGjF,qBAAa,iBAAiB;aAGA,MAAM,EAAE,SAAS,CAAC,cAAc,CAAC;aAAgC,aAAa,EAAE,GAAG;IAF/G,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA+D;gBAE7D,MAAM,EAAE,SAAS,CAAC,cAAc,CAAC,EAAE,OAAO,EAAE,GAAG,EAAkB,aAAa,EAAE,GAAG;WAIlG,MAAM,CACjB,KAAK,EAAE,GAAG,EACV,YAAY,EAAE,gBAAgB,EAC9B,YAAY,EAAE,gBAAgB,EAC9B,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,GAAG;IAwBb,UAAU;IAIJ,OAAO,CAClB,QAAQ,EAAE,WAAW,EAAE,EACvB,SAAS,EAAE,SAAS,EACpB,SAAS,EAAE,WAAW,GAAG,SAAS,EAClC,UAAU,EAAE,YAAY,GAAG,SAAS,EACpC,MAAM,EAAE,MAAM;;;;;;;;;;;CAqEjB"}
@@ -1,101 +0,0 @@
1
- import { toHex } from '@aztec/foundation/bigint-buffer';
2
- import { ForwarderAbi, ForwarderBytecode } from '@aztec/l1-artifacts';
3
- import { encodeFunctionData, getContract } from 'viem';
4
- import { deployL1Contract } from '../deploy_l1_contracts.js';
5
- import { RollupContract } from './rollup.js';
6
- export class ForwarderContract {
7
- client;
8
- rollupAddress;
9
- forwarder;
10
- constructor(client, address, rollupAddress){
11
- this.client = client;
12
- this.rollupAddress = rollupAddress;
13
- this.forwarder = getContract({
14
- address,
15
- abi: ForwarderAbi,
16
- client
17
- });
18
- }
19
- static async create(owner, walletClient, publicClient, logger, rollupAddress) {
20
- logger.info('Deploying forwarder contract');
21
- const { address, txHash } = await deployL1Contract(walletClient, publicClient, ForwarderAbi, ForwarderBytecode, [
22
- owner
23
- ], owner, undefined, logger);
24
- if (txHash) {
25
- await publicClient.waitForTransactionReceipt({
26
- hash: txHash
27
- });
28
- }
29
- logger.info(`Forwarder contract deployed at ${address} with owner ${owner}`);
30
- return new ForwarderContract(publicClient, address.toString(), rollupAddress);
31
- }
32
- getAddress() {
33
- return this.forwarder.address;
34
- }
35
- async forward(requests, l1TxUtils, gasConfig, blobConfig, logger) {
36
- requests = requests.filter((request)=>request.to !== null);
37
- const toArgs = requests.map((request)=>request.to);
38
- const dataArgs = requests.map((request)=>request.data);
39
- const forwarderFunctionData = {
40
- abi: ForwarderAbi,
41
- functionName: 'forward',
42
- args: [
43
- toArgs,
44
- dataArgs
45
- ]
46
- };
47
- const encodedForwarderData = encodeFunctionData(forwarderFunctionData);
48
- const { receipt, gasPrice } = await l1TxUtils.sendAndMonitorTransaction({
49
- to: this.forwarder.address,
50
- data: encodedForwarderData
51
- }, gasConfig, blobConfig);
52
- if (receipt.status === 'success') {
53
- const stats = await l1TxUtils.getTransactionStats(receipt.transactionHash);
54
- return {
55
- receipt,
56
- gasPrice,
57
- stats
58
- };
59
- } else {
60
- logger.error('Forwarder transaction failed', undefined, {
61
- receipt
62
- });
63
- const args = {
64
- ...forwarderFunctionData,
65
- address: this.forwarder.address
66
- };
67
- let errorMsg;
68
- if (blobConfig) {
69
- const maxFeePerBlobGas = blobConfig.maxFeePerBlobGas ?? gasPrice.maxFeePerBlobGas;
70
- if (maxFeePerBlobGas === undefined) {
71
- errorMsg = 'maxFeePerBlobGas is required to get the error message';
72
- } else {
73
- logger.debug('Trying to get error from reverted tx with blob config');
74
- errorMsg = await l1TxUtils.tryGetErrorFromRevertedTx(encodedForwarderData, args, {
75
- blobs: blobConfig.blobs,
76
- kzg: blobConfig.kzg,
77
- maxFeePerBlobGas
78
- }, [
79
- {
80
- address: this.rollupAddress,
81
- stateDiff: [
82
- {
83
- slot: toHex(RollupContract.checkBlobStorageSlot, true),
84
- value: toHex(0n, true)
85
- }
86
- ]
87
- }
88
- ]);
89
- }
90
- } else {
91
- logger.debug('Trying to get error from reverted tx without blob config');
92
- errorMsg = await l1TxUtils.tryGetErrorFromRevertedTx(encodedForwarderData, args, undefined, []);
93
- }
94
- return {
95
- receipt,
96
- gasPrice,
97
- errorMsg
98
- };
99
- }
100
- }
101
- }
@@ -1,21 +0,0 @@
1
- import { EthAddress } from '@aztec/foundation/eth-address';
2
- import { type Hex } from 'viem';
3
- import type { L1TxRequest } from '../l1_tx_utils.js';
4
- import type { ViemPublicClient } from '../types.js';
5
- import { type IEmpireBase } from './empire_base.js';
6
- export declare class SlashingProposerContract implements IEmpireBase {
7
- readonly client: ViemPublicClient;
8
- private readonly proposer;
9
- constructor(client: ViemPublicClient, address: Hex);
10
- get address(): EthAddress;
11
- getQuorumSize(): Promise<bigint>;
12
- getRoundSize(): Promise<bigint>;
13
- computeRound(slot: bigint): Promise<bigint>;
14
- getRoundInfo(rollupAddress: Hex, round: bigint): Promise<{
15
- lastVote: bigint;
16
- leader: Hex;
17
- executed: boolean;
18
- }>;
19
- createVoteRequest(payload: Hex): L1TxRequest;
20
- }
21
- //# sourceMappingURL=slashing_proposer.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"slashing_proposer.d.ts","sourceRoot":"","sources":["../../src/contracts/slashing_proposer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAG3D,OAAO,EAA8B,KAAK,GAAG,EAAe,MAAM,MAAM,CAAC;AAEzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,KAAK,WAAW,EAAc,MAAM,kBAAkB,CAAC;AAEhE,qBAAa,wBAAyB,YAAW,WAAW;aAG9B,MAAM,EAAE,gBAAgB;IAFpD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAsE;gBAEnE,MAAM,EAAE,gBAAgB,EAAE,OAAO,EAAE,GAAG;IAIlE,IAAW,OAAO,eAEjB;IAEM,aAAa;IAIb,YAAY;IAIZ,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAIrC,YAAY,CACvB,aAAa,EAAE,GAAG,EAClB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,GAAG,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAA;KAAE,CAAC;IASzD,iBAAiB,CAAC,OAAO,EAAE,GAAG,GAAG,WAAW;CAMpD"}
@@ -1,47 +0,0 @@
1
- import { EthAddress } from '@aztec/foundation/eth-address';
2
- import { SlashingProposerAbi } from '@aztec/l1-artifacts';
3
- import { getContract } from 'viem';
4
- import { encodeVote } from './empire_base.js';
5
- export class SlashingProposerContract {
6
- client;
7
- proposer;
8
- constructor(client, address){
9
- this.client = client;
10
- this.proposer = getContract({
11
- address,
12
- abi: SlashingProposerAbi,
13
- client
14
- });
15
- }
16
- get address() {
17
- return EthAddress.fromString(this.proposer.address);
18
- }
19
- getQuorumSize() {
20
- return this.proposer.read.N();
21
- }
22
- getRoundSize() {
23
- return this.proposer.read.M();
24
- }
25
- computeRound(slot) {
26
- return this.proposer.read.computeRound([
27
- slot
28
- ]);
29
- }
30
- async getRoundInfo(rollupAddress, round) {
31
- const roundInfo = await this.proposer.read.rounds([
32
- rollupAddress,
33
- round
34
- ]);
35
- return {
36
- lastVote: roundInfo[0],
37
- leader: roundInfo[1],
38
- executed: roundInfo[2]
39
- };
40
- }
41
- createVoteRequest(payload) {
42
- return {
43
- to: this.address.toString(),
44
- data: encodeVote(payload)
45
- };
46
- }
47
- }