@aztec/ethereum 4.0.0-nightly.20250907 → 4.0.0-nightly.20260108

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 (226) hide show
  1. package/dest/account.d.ts +1 -1
  2. package/dest/chain.d.ts +1 -1
  3. package/dest/client.d.ts +2 -2
  4. package/dest/client.d.ts.map +1 -1
  5. package/dest/client.js +6 -2
  6. package/dest/config.d.ts +18 -46
  7. package/dest/config.d.ts.map +1 -1
  8. package/dest/config.js +40 -285
  9. package/dest/constants.d.ts +1 -1
  10. package/dest/contracts/empire_base.d.ts +8 -6
  11. package/dest/contracts/empire_base.d.ts.map +1 -1
  12. package/dest/contracts/empire_base.js +1 -1
  13. package/dest/contracts/empire_slashing_proposer.d.ts +8 -6
  14. package/dest/contracts/empire_slashing_proposer.d.ts.map +1 -1
  15. package/dest/contracts/empire_slashing_proposer.js +18 -3
  16. package/dest/contracts/errors.d.ts +1 -1
  17. package/dest/contracts/errors.d.ts.map +1 -1
  18. package/dest/contracts/fee_asset_handler.d.ts +4 -4
  19. package/dest/contracts/fee_asset_handler.d.ts.map +1 -1
  20. package/dest/contracts/fee_juice.d.ts +1 -1
  21. package/dest/contracts/fee_juice.d.ts.map +1 -1
  22. package/dest/contracts/governance.d.ts +16 -16
  23. package/dest/contracts/governance.d.ts.map +1 -1
  24. package/dest/contracts/governance.js +7 -3
  25. package/dest/contracts/governance_proposer.d.ts +7 -6
  26. package/dest/contracts/governance_proposer.d.ts.map +1 -1
  27. package/dest/contracts/governance_proposer.js +400 -12
  28. package/dest/contracts/gse.d.ts +1 -1
  29. package/dest/contracts/gse.d.ts.map +1 -1
  30. package/dest/contracts/inbox.d.ts +7 -3
  31. package/dest/contracts/inbox.d.ts.map +1 -1
  32. package/dest/contracts/inbox.js +4 -0
  33. package/dest/contracts/index.d.ts +1 -1
  34. package/dest/contracts/multicall.d.ts +5 -7
  35. package/dest/contracts/multicall.d.ts.map +1 -1
  36. package/dest/contracts/multicall.js +6 -4
  37. package/dest/contracts/registry.d.ts +1 -1
  38. package/dest/contracts/registry.d.ts.map +1 -1
  39. package/dest/contracts/rollup.d.ts +169 -118
  40. package/dest/contracts/rollup.d.ts.map +1 -1
  41. package/dest/contracts/rollup.js +714 -243
  42. package/dest/contracts/slasher_contract.d.ts +11 -1
  43. package/dest/contracts/slasher_contract.d.ts.map +1 -1
  44. package/dest/contracts/slasher_contract.js +18 -0
  45. package/dest/contracts/tally_slashing_proposer.d.ts +15 -7
  46. package/dest/contracts/tally_slashing_proposer.d.ts.map +1 -1
  47. package/dest/contracts/tally_slashing_proposer.js +15 -5
  48. package/dest/contracts/utils.d.ts +1 -1
  49. package/dest/deploy_aztec_l1_contracts.d.ts +247 -0
  50. package/dest/deploy_aztec_l1_contracts.d.ts.map +1 -0
  51. package/dest/deploy_aztec_l1_contracts.js +336 -0
  52. package/dest/deploy_l1_contract.d.ts +68 -0
  53. package/dest/deploy_l1_contract.d.ts.map +1 -0
  54. package/dest/deploy_l1_contract.js +312 -0
  55. package/dest/eth-signer/eth-signer.d.ts +1 -1
  56. package/dest/eth-signer/index.d.ts +1 -1
  57. package/dest/forwarder_proxy.d.ts +32 -0
  58. package/dest/forwarder_proxy.d.ts.map +1 -0
  59. package/dest/forwarder_proxy.js +93 -0
  60. package/dest/l1_artifacts.d.ts +17733 -6280
  61. package/dest/l1_artifacts.d.ts.map +1 -1
  62. package/dest/l1_artifacts.js +10 -5
  63. package/dest/l1_contract_addresses.d.ts +8 -4
  64. package/dest/l1_contract_addresses.d.ts.map +1 -1
  65. package/dest/l1_contract_addresses.js +5 -4
  66. package/dest/l1_reader.d.ts +4 -2
  67. package/dest/l1_reader.d.ts.map +1 -1
  68. package/dest/l1_reader.js +7 -1
  69. package/dest/l1_tx_utils/config.d.ts +59 -0
  70. package/dest/l1_tx_utils/config.d.ts.map +1 -0
  71. package/dest/l1_tx_utils/config.js +96 -0
  72. package/dest/l1_tx_utils/constants.d.ts +12 -0
  73. package/dest/l1_tx_utils/constants.d.ts.map +1 -0
  74. package/dest/l1_tx_utils/constants.js +39 -0
  75. package/dest/l1_tx_utils/factory.d.ts +24 -0
  76. package/dest/l1_tx_utils/factory.d.ts.map +1 -0
  77. package/dest/l1_tx_utils/factory.js +12 -0
  78. package/dest/l1_tx_utils/fee-strategies/index.d.ts +10 -0
  79. package/dest/l1_tx_utils/fee-strategies/index.d.ts.map +1 -0
  80. package/dest/l1_tx_utils/fee-strategies/index.js +12 -0
  81. package/dest/l1_tx_utils/fee-strategies/p75_competitive.d.ts +8 -0
  82. package/dest/l1_tx_utils/fee-strategies/p75_competitive.d.ts.map +1 -0
  83. package/dest/l1_tx_utils/fee-strategies/p75_competitive.js +129 -0
  84. package/dest/l1_tx_utils/fee-strategies/p75_competitive_blob_txs_only.d.ts +23 -0
  85. package/dest/l1_tx_utils/fee-strategies/p75_competitive_blob_txs_only.d.ts.map +1 -0
  86. package/dest/l1_tx_utils/fee-strategies/p75_competitive_blob_txs_only.js +191 -0
  87. package/dest/l1_tx_utils/fee-strategies/types.d.ts +51 -0
  88. package/dest/l1_tx_utils/fee-strategies/types.d.ts.map +1 -0
  89. package/dest/l1_tx_utils/fee-strategies/types.js +3 -0
  90. package/dest/l1_tx_utils/forwarder_l1_tx_utils.d.ts +41 -0
  91. package/dest/l1_tx_utils/forwarder_l1_tx_utils.d.ts.map +1 -0
  92. package/dest/l1_tx_utils/forwarder_l1_tx_utils.js +48 -0
  93. package/dest/l1_tx_utils/index-blobs.d.ts +3 -0
  94. package/dest/l1_tx_utils/index-blobs.d.ts.map +1 -0
  95. package/dest/l1_tx_utils/index-blobs.js +2 -0
  96. package/dest/l1_tx_utils/index.d.ts +12 -0
  97. package/dest/l1_tx_utils/index.d.ts.map +1 -0
  98. package/dest/l1_tx_utils/index.js +12 -0
  99. package/dest/l1_tx_utils/interfaces.d.ts +76 -0
  100. package/dest/l1_tx_utils/interfaces.d.ts.map +1 -0
  101. package/dest/l1_tx_utils/interfaces.js +4 -0
  102. package/dest/l1_tx_utils/l1_fee_analyzer.d.ts +233 -0
  103. package/dest/l1_tx_utils/l1_fee_analyzer.d.ts.map +1 -0
  104. package/dest/l1_tx_utils/l1_fee_analyzer.js +506 -0
  105. package/dest/l1_tx_utils/l1_tx_utils.d.ts +94 -0
  106. package/dest/l1_tx_utils/l1_tx_utils.d.ts.map +1 -0
  107. package/dest/l1_tx_utils/l1_tx_utils.js +623 -0
  108. package/dest/l1_tx_utils/l1_tx_utils_with_blobs.d.ts +26 -0
  109. package/dest/l1_tx_utils/l1_tx_utils_with_blobs.d.ts.map +1 -0
  110. package/dest/l1_tx_utils/l1_tx_utils_with_blobs.js +26 -0
  111. package/dest/l1_tx_utils/readonly_l1_tx_utils.d.ts +83 -0
  112. package/dest/l1_tx_utils/readonly_l1_tx_utils.d.ts.map +1 -0
  113. package/dest/l1_tx_utils/readonly_l1_tx_utils.js +323 -0
  114. package/dest/l1_tx_utils/signer.d.ts +4 -0
  115. package/dest/l1_tx_utils/signer.d.ts.map +1 -0
  116. package/dest/l1_tx_utils/signer.js +16 -0
  117. package/dest/l1_tx_utils/types.d.ts +67 -0
  118. package/dest/l1_tx_utils/types.d.ts.map +1 -0
  119. package/dest/l1_tx_utils/types.js +26 -0
  120. package/dest/l1_tx_utils/utils.d.ts +4 -0
  121. package/dest/l1_tx_utils/utils.d.ts.map +1 -0
  122. package/dest/l1_tx_utils/utils.js +14 -0
  123. package/dest/l1_types.d.ts +1 -1
  124. package/dest/publisher_manager.d.ts +8 -3
  125. package/dest/publisher_manager.d.ts.map +1 -1
  126. package/dest/publisher_manager.js +36 -8
  127. package/dest/queries.d.ts +1 -1
  128. package/dest/queries.d.ts.map +1 -1
  129. package/dest/queries.js +20 -14
  130. package/dest/test/chain_monitor.d.ts +29 -22
  131. package/dest/test/chain_monitor.d.ts.map +1 -1
  132. package/dest/test/chain_monitor.js +81 -38
  133. package/dest/test/delayed_tx_utils.d.ts +3 -3
  134. package/dest/test/delayed_tx_utils.d.ts.map +1 -1
  135. package/dest/test/delayed_tx_utils.js +2 -2
  136. package/dest/test/eth_cheat_codes.d.ts +36 -14
  137. package/dest/test/eth_cheat_codes.d.ts.map +1 -1
  138. package/dest/test/eth_cheat_codes.js +126 -31
  139. package/dest/test/eth_cheat_codes_with_state.d.ts +1 -1
  140. package/dest/test/eth_cheat_codes_with_state.d.ts.map +1 -1
  141. package/dest/test/index.d.ts +1 -1
  142. package/dest/test/rollup_cheat_codes.d.ts +23 -20
  143. package/dest/test/rollup_cheat_codes.d.ts.map +1 -1
  144. package/dest/test/rollup_cheat_codes.js +82 -43
  145. package/dest/test/start_anvil.d.ts +4 -1
  146. package/dest/test/start_anvil.d.ts.map +1 -1
  147. package/dest/test/start_anvil.js +2 -1
  148. package/dest/test/tx_delayer.d.ts +1 -1
  149. package/dest/test/tx_delayer.d.ts.map +1 -1
  150. package/dest/test/tx_delayer.js +4 -3
  151. package/dest/test/upgrade_utils.d.ts +1 -1
  152. package/dest/test/upgrade_utils.d.ts.map +1 -1
  153. package/dest/test/upgrade_utils.js +3 -2
  154. package/dest/types.d.ts +57 -2
  155. package/dest/types.d.ts.map +1 -1
  156. package/dest/utils.d.ts +15 -3
  157. package/dest/utils.d.ts.map +1 -1
  158. package/dest/utils.js +28 -161
  159. package/dest/zkPassportVerifierAddress.d.ts +1 -1
  160. package/dest/zkPassportVerifierAddress.js +1 -1
  161. package/package.json +33 -14
  162. package/src/client.ts +3 -3
  163. package/src/config.ts +49 -358
  164. package/src/contracts/empire_base.ts +7 -6
  165. package/src/contracts/empire_slashing_proposer.ts +23 -8
  166. package/src/contracts/fee_asset_handler.ts +1 -1
  167. package/src/contracts/governance.ts +3 -3
  168. package/src/contracts/governance_proposer.ts +19 -9
  169. package/src/contracts/inbox.ts +7 -2
  170. package/src/contracts/multicall.ts +12 -10
  171. package/src/contracts/rollup.ts +374 -236
  172. package/src/contracts/slasher_contract.ts +22 -0
  173. package/src/contracts/tally_slashing_proposer.ts +21 -9
  174. package/src/deploy_aztec_l1_contracts.ts +557 -0
  175. package/src/deploy_l1_contract.ts +362 -0
  176. package/src/forwarder_proxy.ts +108 -0
  177. package/src/l1_artifacts.ts +14 -6
  178. package/src/l1_contract_addresses.ts +24 -20
  179. package/src/l1_reader.ts +10 -2
  180. package/src/l1_tx_utils/README.md +177 -0
  181. package/src/l1_tx_utils/config.ts +161 -0
  182. package/src/l1_tx_utils/constants.ts +29 -0
  183. package/src/l1_tx_utils/factory.ts +64 -0
  184. package/src/l1_tx_utils/fee-strategies/index.ts +22 -0
  185. package/src/l1_tx_utils/fee-strategies/p75_competitive.ts +163 -0
  186. package/src/l1_tx_utils/fee-strategies/p75_competitive_blob_txs_only.ts +245 -0
  187. package/src/l1_tx_utils/fee-strategies/types.ts +56 -0
  188. package/src/l1_tx_utils/forwarder_l1_tx_utils.ts +119 -0
  189. package/src/l1_tx_utils/index-blobs.ts +2 -0
  190. package/src/l1_tx_utils/index.ts +14 -0
  191. package/src/l1_tx_utils/interfaces.ts +86 -0
  192. package/src/l1_tx_utils/l1_fee_analyzer.ts +803 -0
  193. package/src/l1_tx_utils/l1_tx_utils.ts +738 -0
  194. package/src/l1_tx_utils/l1_tx_utils_with_blobs.ts +77 -0
  195. package/src/l1_tx_utils/readonly_l1_tx_utils.ts +419 -0
  196. package/src/l1_tx_utils/signer.ts +28 -0
  197. package/src/l1_tx_utils/types.ts +85 -0
  198. package/src/l1_tx_utils/utils.ts +16 -0
  199. package/src/publisher_manager.ts +51 -9
  200. package/src/queries.ts +24 -10
  201. package/src/test/chain_monitor.ts +102 -44
  202. package/src/test/delayed_tx_utils.ts +2 -2
  203. package/src/test/eth_cheat_codes.ts +150 -31
  204. package/src/test/rollup_cheat_codes.ts +95 -53
  205. package/src/test/start_anvil.ts +4 -0
  206. package/src/test/tx_delayer.ts +5 -3
  207. package/src/test/upgrade_utils.ts +3 -2
  208. package/src/types.ts +62 -0
  209. package/src/utils.ts +41 -184
  210. package/src/zkPassportVerifierAddress.ts +1 -1
  211. package/dest/deploy_l1_contracts.d.ts +0 -211
  212. package/dest/deploy_l1_contracts.d.ts.map +0 -1
  213. package/dest/deploy_l1_contracts.js +0 -1267
  214. package/dest/index.d.ts +0 -18
  215. package/dest/index.d.ts.map +0 -1
  216. package/dest/index.js +0 -17
  217. package/dest/l1_tx_utils.d.ts +0 -250
  218. package/dest/l1_tx_utils.d.ts.map +0 -1
  219. package/dest/l1_tx_utils.js +0 -826
  220. package/dest/l1_tx_utils_with_blobs.d.ts +0 -19
  221. package/dest/l1_tx_utils_with_blobs.d.ts.map +0 -1
  222. package/dest/l1_tx_utils_with_blobs.js +0 -85
  223. package/src/deploy_l1_contracts.ts +0 -1596
  224. package/src/index.ts +0 -17
  225. package/src/l1_tx_utils.ts +0 -1105
  226. package/src/l1_tx_utils_with_blobs.ts +0 -144
@@ -0,0 +1,26 @@
1
+ import { Blob } from '@aztec/blob-lib';
2
+ import { EthAddress } from '@aztec/foundation/eth-address';
3
+ import { L1TxUtils } from './l1_tx_utils.js';
4
+ import { createViemSigner } from './signer.js';
5
+ /** Extends L1TxUtils with the capability to cancel blobs. This needs to be a separate class so we don't require a dependency on blob-lib unnecessarily. */ export class L1TxUtilsWithBlobs extends L1TxUtils {
6
+ /** Makes empty blob inputs for the cancellation tx. */ makeEmptyBlobInputs(maxFeePerBlobGas) {
7
+ const blobData = new Uint8Array(131072).fill(0);
8
+ const kzg = Blob.getViemKzgInstance();
9
+ return {
10
+ blobs: [
11
+ blobData
12
+ ],
13
+ kzg,
14
+ maxFeePerBlobGas
15
+ };
16
+ }
17
+ }
18
+ export function createL1TxUtilsWithBlobsFromViemWallet(client, deps = {}, config = {}, debugMaxGasLimit = false) {
19
+ return new L1TxUtilsWithBlobs(client, EthAddress.fromString(client.account.address), createViemSigner(client), deps.logger, deps.dateProvider, config, debugMaxGasLimit, deps.store, deps.metrics);
20
+ }
21
+ export function createL1TxUtilsWithBlobsFromEthSigner(client, signer, deps = {}, config = {}, debugMaxGasLimit = false) {
22
+ const callback = async (transaction, _signingAddress)=>{
23
+ return (await signer.signTransaction(transaction)).toViemTransactionSignature();
24
+ };
25
+ return new L1TxUtilsWithBlobs(client, signer.address, callback, deps.logger, deps.dateProvider, config, debugMaxGasLimit, deps.store, deps.metrics);
26
+ }
@@ -0,0 +1,83 @@
1
+ import type { EthAddress } from '@aztec/foundation/eth-address';
2
+ import { type Logger } from '@aztec/foundation/log';
3
+ import { DateProvider } from '@aztec/foundation/timer';
4
+ import { type Abi, type Account, type BlockOverrides, type GetCodeReturnType, type Hex, type StateOverride } from 'viem';
5
+ import type { ViemClient } from '../types.js';
6
+ import { type L1TxUtilsConfig } from './config.js';
7
+ import type { GasPrice, L1BlobInputs, L1TxRequest, TransactionStats } from './types.js';
8
+ export declare class ReadOnlyL1TxUtils {
9
+ client: ViemClient;
10
+ protected logger: Logger;
11
+ readonly dateProvider: DateProvider;
12
+ protected debugMaxGasLimit: boolean;
13
+ config: Required<L1TxUtilsConfig>;
14
+ protected interrupted: boolean;
15
+ constructor(client: ViemClient, logger: Logger | undefined, dateProvider: DateProvider, config?: Partial<L1TxUtilsConfig>, debugMaxGasLimit?: boolean);
16
+ interrupt(): void;
17
+ restart(): void;
18
+ getBlock(): Promise<{
19
+ baseFeePerGas: bigint | null;
20
+ blobGasUsed: bigint;
21
+ difficulty: bigint;
22
+ excessBlobGas: bigint;
23
+ extraData: `0x${string}`;
24
+ gasLimit: bigint;
25
+ gasUsed: bigint;
26
+ hash: `0x${string}`;
27
+ logsBloom: `0x${string}`;
28
+ miner: `0x${string}`;
29
+ mixHash: `0x${string}`;
30
+ nonce: `0x${string}`;
31
+ number: bigint;
32
+ parentBeaconBlockRoot?: `0x${string}` | undefined;
33
+ parentHash: `0x${string}`;
34
+ receiptsRoot: `0x${string}`;
35
+ sealFields: `0x${string}`[];
36
+ sha3Uncles: `0x${string}`;
37
+ size: bigint;
38
+ stateRoot: `0x${string}`;
39
+ timestamp: bigint;
40
+ totalDifficulty: bigint | null;
41
+ transactionsRoot: `0x${string}`;
42
+ uncles: `0x${string}`[];
43
+ withdrawals?: import("viem").Withdrawal[] | undefined;
44
+ withdrawalsRoot?: `0x${string}` | undefined;
45
+ transactions: `0x${string}`[];
46
+ }>;
47
+ getBlockNumber(): Promise<bigint>;
48
+ getCode(address: EthAddress): Promise<GetCodeReturnType>;
49
+ /**
50
+ * Gets the current gas price with bounds checking
51
+ */
52
+ getGasPrice(gasConfigOverrides?: L1TxUtilsConfig, isBlobTx?: boolean, attempt?: number, previousGasPrice?: typeof attempt extends 0 ? never : GasPrice): Promise<GasPrice>;
53
+ /**
54
+ * Estimates gas and adds buffer
55
+ */
56
+ estimateGas(account: Account | Hex, request: L1TxRequest, _gasConfig?: L1TxUtilsConfig, _blobInputs?: L1BlobInputs): Promise<bigint>;
57
+ getTransactionStats(txHash: string): Promise<TransactionStats | undefined>;
58
+ tryGetErrorFromRevertedTx(data: Hex, args: {
59
+ args: readonly any[];
60
+ functionName: string;
61
+ abi: Abi;
62
+ address: Hex;
63
+ }, blobInputs: (L1BlobInputs & {
64
+ maxFeePerBlobGas: bigint;
65
+ }) | undefined, stateOverride?: StateOverride): Promise<string | undefined>;
66
+ simulate(request: L1TxRequest & {
67
+ gas?: bigint;
68
+ from?: Hex;
69
+ }, blockOverrides?: BlockOverrides<bigint, number>, stateOverrides?: StateOverride, abi?: Abi, _gasConfig?: L1TxUtilsConfig & {
70
+ fallbackGasEstimate?: bigint;
71
+ }): Promise<{
72
+ gasUsed: bigint;
73
+ result: `0x${string}`;
74
+ }>;
75
+ protected _simulate(call: any, blockOverrides: BlockOverrides<bigint, number> | undefined, stateOverrides: StateOverride | undefined, gasConfig: L1TxUtilsConfig & {
76
+ fallbackGasEstimate?: bigint;
77
+ }, abi: Abi): Promise<{
78
+ gasUsed: bigint;
79
+ result: `0x${string}`;
80
+ }>;
81
+ bumpGasLimit(gasLimit: bigint, _gasConfig?: L1TxUtilsConfig): bigint;
82
+ }
83
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhZG9ubHlfbDFfdHhfdXRpbHMuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9sMV90eF91dGlscy9yZWFkb25seV9sMV90eF91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNoRSxPQUFPLEVBQUUsS0FBSyxNQUFNLEVBQWdCLE1BQU0sdUJBQXVCLENBQUM7QUFFbEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBSXZELE9BQU8sRUFDTCxLQUFLLEdBQUcsRUFDUixLQUFLLE9BQU8sRUFFWixLQUFLLGNBQWMsRUFFbkIsS0FBSyxpQkFBaUIsRUFDdEIsS0FBSyxHQUFHLEVBR1IsS0FBSyxhQUFhLEVBS25CLE1BQU0sTUFBTSxDQUFDO0FBRWQsT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzlDLE9BQU8sRUFBRSxLQUFLLGVBQWUsRUFBbUQsTUFBTSxhQUFhLENBQUM7QUFTcEcsT0FBTyxLQUFLLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFNeEYscUJBQWEsaUJBQWlCO0lBS25CLE1BQU0sRUFBRSxVQUFVO0lBQ3pCLFNBQVMsQ0FBQyxNQUFNLEVBQUUsTUFBTTthQUNSLFlBQVksRUFBRSxZQUFZO0lBRTFDLFNBQVMsQ0FBQyxnQkFBZ0IsRUFBRSxPQUFPO0lBUjlCLE1BQU0sRUFBRSxRQUFRLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDekMsU0FBUyxDQUFDLFdBQVcsVUFBUztJQUU5QixZQUNTLE1BQU0sRUFBRSxVQUFVLEVBQ2YsTUFBTSxvQkFBcUQsRUFDckQsWUFBWSxFQUFFLFlBQVksRUFDMUMsTUFBTSxDQUFDLEVBQUUsT0FBTyxDQUFDLGVBQWUsQ0FBQyxFQUN2QixnQkFBZ0IsR0FBRSxPQUFlLEVBRzVDO0lBRU0sU0FBUyxTQUVmO0lBRU0sT0FBTyxTQUViO0lBRU0sUUFBUTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQUVkO0lBRU0sY0FBYyxvQkFFcEI7SUFFTSxPQUFPLENBQUMsT0FBTyxFQUFFLFVBQVUsR0FBRyxPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FFOUQ7SUFFRDs7T0FFRztJQUNVLFdBQVcsQ0FDdEIsa0JBQWtCLENBQUMsRUFBRSxlQUFlLEVBQ3BDLFFBQVEsR0FBRSxPQUFlLEVBQ3pCLE9BQU8sR0FBRSxNQUFVLEVBQ25CLGdCQUFnQixDQUFDLEVBQUUsT0FBTyxPQUFPLFNBQVMsQ0FBQyxHQUFHLEtBQUssR0FBRyxRQUFRLEdBQzdELE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FtSm5CO0lBRUQ7O09BRUc7SUFDVSxXQUFXLENBQ3RCLE9BQU8sRUFBRSxPQUFPLEdBQUcsR0FBRyxFQUN0QixPQUFPLEVBQUUsV0FBVyxFQUNwQixVQUFVLENBQUMsRUFBRSxlQUFlLEVBQzVCLFdBQVcsQ0FBQyxFQUFFLFlBQVksR0FDekIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQThCakI7SUFFSyxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsTUFBTSxHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsR0FBRyxTQUFTLENBQUMsQ0FZL0U7SUFFWSx5QkFBeUIsQ0FDcEMsSUFBSSxFQUFFLEdBQUcsRUFDVCxJQUFJLEVBQUU7UUFDSixJQUFJLEVBQUUsU0FBUyxHQUFHLEVBQUUsQ0FBQztRQUNyQixZQUFZLEVBQUUsTUFBTSxDQUFDO1FBQ3JCLEdBQUcsRUFBRSxHQUFHLENBQUM7UUFDVCxPQUFPLEVBQUUsR0FBRyxDQUFDO0tBQ2QsRUFDRCxVQUFVLEVBQUUsQ0FBQyxZQUFZLEdBQUc7UUFBRSxnQkFBZ0IsRUFBRSxNQUFNLENBQUE7S0FBRSxDQUFDLEdBQUcsU0FBUyxFQUNyRSxhQUFhLEdBQUUsYUFBa0IsK0JBZ0RsQztJQUVZLFFBQVEsQ0FDbkIsT0FBTyxFQUFFLFdBQVcsR0FBRztRQUFFLEdBQUcsQ0FBQyxFQUFFLE1BQU0sQ0FBQztRQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQTtLQUFFLEVBQ25ELGNBQWMsR0FBRSxjQUFjLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBTSxFQUNuRCxjQUFjLEdBQUUsYUFBa0IsRUFDbEMsR0FBRyxHQUFFLEdBQWUsRUFDcEIsVUFBVSxDQUFDLEVBQUUsZUFBZSxHQUFHO1FBQUUsbUJBQW1CLENBQUMsRUFBRSxNQUFNLENBQUE7S0FBRSxHQUM5RCxPQUFPLENBQUM7UUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDO1FBQUMsTUFBTSxFQUFFLEtBQUssTUFBTSxFQUFFLENBQUE7S0FBRSxDQUFDLENBVXJEO0lBRUQsVUFBZ0IsU0FBUyxDQUN2QixJQUFJLEVBQUUsR0FBRyxFQUNULGNBQWMsNENBQXFDLEVBQ25ELGNBQWMsMkJBQW9CLEVBQ2xDLFNBQVMsRUFBRSxlQUFlLEdBQUc7UUFBRSxtQkFBbUIsQ0FBQyxFQUFFLE1BQU0sQ0FBQTtLQUFFLEVBQzdELEdBQUcsRUFBRSxHQUFHOzs7T0FvQ1Q7SUFFTSxZQUFZLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxVQUFVLENBQUMsRUFBRSxlQUFlLEdBQUcsTUFBTSxDQVcxRTtDQUNGIn0=
@@ -0,0 +1 @@
1
+ {"version":3,"file":"readonly_l1_tx_utils.d.ts","sourceRoot":"","sources":["../../src/l1_tx_utils/readonly_l1_tx_utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,323 @@
1
+ import { getKeys, merge, pick, times } from '@aztec/foundation/collection';
2
+ import { createLogger } from '@aztec/foundation/log';
3
+ import { makeBackoff, retry } from '@aztec/foundation/retry';
4
+ import { RollupAbi } from '@aztec/l1-artifacts/RollupAbi';
5
+ import pickBy from 'lodash.pickby';
6
+ import { MethodNotFoundRpcError, MethodNotSupportedRpcError, decodeErrorResult, formatGwei, getContractError, hexToBytes } from 'viem';
7
+ import { defaultL1TxUtilsConfig, l1TxUtilsConfigMappings } from './config.js';
8
+ import { BLOCK_TIME_MS, LARGE_GAS_LIMIT, MIN_BLOB_REPLACEMENT_BUMP_PERCENTAGE, MIN_REPLACEMENT_BUMP_PERCENTAGE, WEI_CONST } from './constants.js';
9
+ import { P75AllTxsPriorityFeeStrategy } from './fee-strategies/index.js';
10
+ import { getCalldataGasUsage, tryGetCustomErrorNameContractFunction } from './utils.js';
11
+ // Change this to the current strategy we want to use
12
+ const CurrentStrategy = P75AllTxsPriorityFeeStrategy;
13
+ export class ReadOnlyL1TxUtils {
14
+ client;
15
+ logger;
16
+ dateProvider;
17
+ debugMaxGasLimit;
18
+ config;
19
+ interrupted;
20
+ constructor(client, logger = createLogger('ethereum:readonly-l1-utils'), dateProvider, config, debugMaxGasLimit = false){
21
+ this.client = client;
22
+ this.logger = logger;
23
+ this.dateProvider = dateProvider;
24
+ this.debugMaxGasLimit = debugMaxGasLimit;
25
+ this.interrupted = false;
26
+ this.config = merge(defaultL1TxUtilsConfig, pick(config || {}, ...getKeys(l1TxUtilsConfigMappings)));
27
+ }
28
+ interrupt() {
29
+ this.interrupted = true;
30
+ }
31
+ restart() {
32
+ this.interrupted = false;
33
+ }
34
+ getBlock() {
35
+ return this.client.getBlock();
36
+ }
37
+ getBlockNumber() {
38
+ return this.client.getBlockNumber();
39
+ }
40
+ getCode(address) {
41
+ return this.client.getCode({
42
+ address: address.toString()
43
+ });
44
+ }
45
+ /**
46
+ * Gets the current gas price with bounds checking
47
+ */ async getGasPrice(gasConfigOverrides, isBlobTx = false, attempt = 0, previousGasPrice) {
48
+ const gasConfig = merge(this.config, gasConfigOverrides);
49
+ // Execute strategy - it handles all RPC calls internally and returns everything we need
50
+ const strategyResult = await retry(()=>CurrentStrategy.execute(this.client, {
51
+ gasConfig,
52
+ isBlobTx,
53
+ logger: this.logger
54
+ }), 'Executing priority fee strategy', makeBackoff(times(2, ()=>0)), this.logger, true);
55
+ const { latestBlock, blobBaseFee, priorityFee: strategyPriorityFee } = strategyResult;
56
+ // Extract base fee from latest block
57
+ const baseFee = latestBlock.baseFeePerGas ?? 0n;
58
+ // Handle blob base fee
59
+ if (isBlobTx && blobBaseFee === undefined) {
60
+ this.logger?.warn('Failed to get L1 blob base fee', attempt);
61
+ }
62
+ let priorityFee = strategyPriorityFee;
63
+ // Apply minimum priority fee floor if configured
64
+ if (gasConfig.minimumPriorityFeePerGas) {
65
+ const minimumPriorityFee = BigInt(Math.trunc(gasConfig.minimumPriorityFeePerGas * Number(WEI_CONST)));
66
+ if (priorityFee < minimumPriorityFee) {
67
+ this.logger?.debug('Applying minimum priority fee floor', {
68
+ calculatedPriorityFee: formatGwei(priorityFee),
69
+ minimumPriorityFeePerGas: gasConfig.minimumPriorityFeePerGas,
70
+ appliedFee: formatGwei(minimumPriorityFee)
71
+ });
72
+ priorityFee = minimumPriorityFee;
73
+ }
74
+ }
75
+ let maxFeePerGas = baseFee;
76
+ let maxFeePerBlobGas = blobBaseFee ?? 0n;
77
+ // Bump base fee so it's valid for next blocks if it stalls
78
+ const numBlocks = Math.ceil(gasConfig.stallTimeMs / BLOCK_TIME_MS);
79
+ for(let i = 0; i < numBlocks; i++){
80
+ // each block can go up 12.5% from previous baseFee
81
+ maxFeePerGas = maxFeePerGas * (1_000n + 125n) / 1_000n;
82
+ // same for blob gas fee
83
+ maxFeePerBlobGas = maxFeePerBlobGas * (1_000n + 125n) / 1_000n;
84
+ }
85
+ if (attempt > 0) {
86
+ const configBump = gasConfig.priorityFeeRetryBumpPercentage ?? defaultL1TxUtilsConfig.priorityFeeRetryBumpPercentage;
87
+ // if this is a blob tx, we have to use the blob bump percentage
88
+ const minBumpPercentage = isBlobTx ? MIN_BLOB_REPLACEMENT_BUMP_PERCENTAGE : MIN_REPLACEMENT_BUMP_PERCENTAGE;
89
+ const bumpPercentage = configBump > minBumpPercentage ? configBump : minBumpPercentage;
90
+ // Calculate minimum required fees based on previous attempt
91
+ // multiply by 100 & divide by 100 to maintain some precision
92
+ const minPriorityFee = previousGasPrice.maxPriorityFeePerGas * (100_00n + BigInt(bumpPercentage * 1_00)) / 100_00n;
93
+ const minMaxFee = previousGasPrice.maxFeePerGas * (100_00n + BigInt(bumpPercentage * 1_00)) / 100_00n;
94
+ // Apply bump percentage to competitive fee
95
+ const competitivePriorityFee = priorityFee * (100_00n + BigInt(configBump * 1_00)) / 100_00n;
96
+ this.logger?.debug(`Speed-up attempt ${attempt}: using competitive fee strategy`, {
97
+ networkEstimate: formatGwei(priorityFee),
98
+ competitiveFee: formatGwei(competitivePriorityFee),
99
+ minRequired: formatGwei(minPriorityFee),
100
+ bumpPercentage: configBump
101
+ });
102
+ // Use maximum between competitive fee and minimum required bump
103
+ const finalPriorityFee = competitivePriorityFee > minPriorityFee ? competitivePriorityFee : minPriorityFee;
104
+ const feeSource = finalPriorityFee === competitivePriorityFee ? 'competitive' : 'minimum-bump';
105
+ priorityFee = finalPriorityFee;
106
+ // Add the final priority fee to maxFeePerGas
107
+ maxFeePerGas += finalPriorityFee;
108
+ maxFeePerGas = maxFeePerGas > minMaxFee ? maxFeePerGas : minMaxFee;
109
+ this.logger?.debug(`Speed-up fee decision: using ${feeSource} fee`, {
110
+ finalPriorityFee: formatGwei(finalPriorityFee)
111
+ });
112
+ } else {
113
+ // First attempt: apply configured bump percentage to competitive fee
114
+ // multiply by 100 & divide by 100 to maintain some precision
115
+ priorityFee = priorityFee * (100_00n + BigInt((gasConfig.priorityFeeBumpPercentage || 0) * 1_00)) / 100_00n;
116
+ this.logger?.debug('Initial transaction: using competitive fee from market analysis', {
117
+ networkEstimate: formatGwei(priorityFee)
118
+ });
119
+ maxFeePerGas += priorityFee;
120
+ }
121
+ // maxGwei and maxBlobGwei are hard limits
122
+ const effectiveMaxGwei = BigInt(Math.trunc(gasConfig.maxGwei * Number(WEI_CONST)));
123
+ const effectiveMaxBlobGwei = BigInt(Math.trunc(gasConfig.maxBlobGwei * Number(WEI_CONST)));
124
+ // Ensure we don't exceed maxGwei
125
+ if (effectiveMaxGwei > 0n) {
126
+ maxFeePerGas = maxFeePerGas > effectiveMaxGwei ? effectiveMaxGwei : maxFeePerGas;
127
+ }
128
+ // Ensure we don't exceed maxBlobGwei
129
+ if (maxFeePerBlobGas && effectiveMaxBlobGwei > 0n) {
130
+ maxFeePerBlobGas = maxFeePerBlobGas > effectiveMaxBlobGwei ? effectiveMaxBlobGwei : maxFeePerBlobGas;
131
+ }
132
+ // Ensure priority fee doesn't exceed max fee
133
+ const maxPriorityFeePerGas = priorityFee > maxFeePerGas ? maxFeePerGas : priorityFee;
134
+ if (attempt > 0 && previousGasPrice?.maxFeePerBlobGas) {
135
+ const bumpPercentage = gasConfig.priorityFeeRetryBumpPercentage > MIN_BLOB_REPLACEMENT_BUMP_PERCENTAGE ? gasConfig.priorityFeeRetryBumpPercentage : MIN_BLOB_REPLACEMENT_BUMP_PERCENTAGE;
136
+ // calculate min blob fee based on previous attempt
137
+ const minBlobFee = previousGasPrice.maxFeePerBlobGas * (100_00n + BigInt(bumpPercentage * 1_00)) / 100_00n;
138
+ // use max between current network values and min required values
139
+ maxFeePerBlobGas = maxFeePerBlobGas > minBlobFee ? maxFeePerBlobGas : minBlobFee;
140
+ }
141
+ this.logger?.trace(`Computed L1 gas price max fee ${formatGwei(maxFeePerGas)} and max priority fee ${formatGwei(maxPriorityFeePerGas)}`, {
142
+ attempt,
143
+ baseFee: formatGwei(baseFee),
144
+ maxFeePerGas: formatGwei(maxFeePerGas),
145
+ maxPriorityFeePerGas: formatGwei(maxPriorityFeePerGas),
146
+ blobBaseFee: formatGwei(blobBaseFee ?? 0n),
147
+ maxFeePerBlobGas: formatGwei(maxFeePerBlobGas)
148
+ });
149
+ return {
150
+ maxFeePerGas,
151
+ maxPriorityFeePerGas,
152
+ ...maxFeePerBlobGas && {
153
+ maxFeePerBlobGas: maxFeePerBlobGas
154
+ }
155
+ };
156
+ }
157
+ /**
158
+ * Estimates gas and adds buffer
159
+ */ async estimateGas(account, request, _gasConfig, _blobInputs) {
160
+ const gasConfig = {
161
+ ...this.config,
162
+ ..._gasConfig
163
+ };
164
+ let initialEstimate = 0n;
165
+ if (_blobInputs) {
166
+ // @note requests with blobs also require maxFeePerBlobGas to be set
167
+ const gasPrice = await this.getGasPrice(gasConfig, true, 0);
168
+ initialEstimate = await this.client.estimateGas({
169
+ account,
170
+ ...request,
171
+ ..._blobInputs,
172
+ maxFeePerBlobGas: gasPrice.maxFeePerBlobGas,
173
+ gas: LARGE_GAS_LIMIT,
174
+ blockTag: 'latest'
175
+ });
176
+ this.logger?.trace(`Estimated gas for blob tx: ${initialEstimate}`);
177
+ } else {
178
+ initialEstimate = await this.client.estimateGas({
179
+ account,
180
+ ...request,
181
+ gas: LARGE_GAS_LIMIT,
182
+ blockTag: 'latest'
183
+ });
184
+ this.logger?.trace(`Estimated gas for non-blob tx: ${initialEstimate}`);
185
+ }
186
+ // Add buffer based on either fixed amount or percentage
187
+ const withBuffer = this.bumpGasLimit(initialEstimate, gasConfig);
188
+ return withBuffer;
189
+ }
190
+ async getTransactionStats(txHash) {
191
+ const tx = await this.client.getTransaction({
192
+ hash: txHash
193
+ });
194
+ if (!tx) {
195
+ return undefined;
196
+ }
197
+ const calldata = hexToBytes(tx.input);
198
+ return {
199
+ sender: tx.from.toString(),
200
+ transactionHash: tx.hash,
201
+ calldataSize: calldata.length,
202
+ calldataGas: getCalldataGasUsage(calldata)
203
+ };
204
+ }
205
+ async tryGetErrorFromRevertedTx(data, args, blobInputs, stateOverride = []) {
206
+ try {
207
+ await this.client.simulateContract({
208
+ ...args,
209
+ account: this.client.account,
210
+ stateOverride
211
+ });
212
+ this.logger?.trace('Simulated blob tx', {
213
+ blobInputs
214
+ });
215
+ // If the above passes, we have a blob error. We cannot simulate blob txs, and failed txs no longer throw errors.
216
+ // Strangely, the only way to throw the revert reason as an error and provide blobs is prepareTransactionRequest.
217
+ // See: https://github.com/wevm/viem/issues/2075
218
+ // This throws a EstimateGasExecutionError with the custom error information:
219
+ const request = blobInputs ? {
220
+ account: this.client.account,
221
+ to: args.address,
222
+ data,
223
+ blobs: blobInputs.blobs,
224
+ kzg: blobInputs.kzg,
225
+ maxFeePerBlobGas: blobInputs.maxFeePerBlobGas
226
+ } : {
227
+ account: this.client.account,
228
+ to: args.address,
229
+ data
230
+ };
231
+ this.logger?.trace('Preparing tx', {
232
+ request
233
+ });
234
+ await this.client.prepareTransactionRequest(request);
235
+ this.logger?.trace('Prepared tx');
236
+ return undefined;
237
+ } catch (simulationErr) {
238
+ // If we don't have a ContractFunctionExecutionError, we have a blob related error => use getContractError to get the error msg.
239
+ const contractErr = simulationErr.name === 'ContractFunctionExecutionError' ? simulationErr : getContractError(simulationErr, {
240
+ args: [],
241
+ abi: args.abi,
242
+ functionName: args.functionName,
243
+ address: args.address
244
+ });
245
+ if (contractErr.name === 'ContractFunctionExecutionError') {
246
+ const execErr = contractErr;
247
+ return tryGetCustomErrorNameContractFunction(execErr);
248
+ }
249
+ this.logger?.error(`Error getting error from simulation`, simulationErr);
250
+ }
251
+ }
252
+ async simulate(request, blockOverrides = {}, stateOverrides = [], abi = RollupAbi, _gasConfig) {
253
+ const gasConfig = {
254
+ ...this.config,
255
+ ..._gasConfig
256
+ };
257
+ const call = {
258
+ to: request.to,
259
+ data: request.data,
260
+ ...request.from && {
261
+ from: request.from
262
+ }
263
+ };
264
+ return await this._simulate(call, blockOverrides, stateOverrides, gasConfig, abi);
265
+ }
266
+ async _simulate(call, blockOverrides = {}, stateOverrides = [], gasConfig, abi) {
267
+ try {
268
+ const result = await this.client.simulateBlocks({
269
+ validation: false,
270
+ blocks: [
271
+ {
272
+ blockOverrides,
273
+ stateOverrides,
274
+ calls: [
275
+ call
276
+ ]
277
+ }
278
+ ]
279
+ });
280
+ if (result[0].calls[0].status === 'failure') {
281
+ this.logger?.error('L1 transaction simulation failed', result[0].calls[0].error);
282
+ const decodedError = decodeErrorResult({
283
+ abi,
284
+ data: result[0].calls[0].data
285
+ });
286
+ throw new Error(`L1 transaction simulation failed with error ${decodedError.errorName}(${decodedError.args?.join(',')})`);
287
+ }
288
+ this.logger?.debug(`L1 transaction simulation succeeded`, {
289
+ ...result[0].calls[0]
290
+ });
291
+ return {
292
+ gasUsed: result[0].gasUsed,
293
+ result: result[0].calls[0].data
294
+ };
295
+ } catch (err) {
296
+ if (err instanceof MethodNotFoundRpcError || err instanceof MethodNotSupportedRpcError) {
297
+ if (gasConfig.fallbackGasEstimate) {
298
+ this.logger?.warn(`Node does not support eth_simulateV1 API. Using fallback gas estimate: ${gasConfig.fallbackGasEstimate}`);
299
+ return {
300
+ gasUsed: gasConfig.fallbackGasEstimate,
301
+ result: '0x'
302
+ };
303
+ }
304
+ this.logger?.error('Node does not support eth_simulateV1 API');
305
+ }
306
+ throw err;
307
+ }
308
+ }
309
+ bumpGasLimit(gasLimit, _gasConfig) {
310
+ const gasConfig = {
311
+ ...this.config,
312
+ ..._gasConfig
313
+ };
314
+ const bumpedGasLimit = gasLimit + gasLimit * BigInt((gasConfig?.gasLimitBufferPercentage || 0) * 1_00) / 100_00n;
315
+ const cleanGasConfig = pickBy(gasConfig, (_, key)=>key in l1TxUtilsConfigMappings);
316
+ this.logger?.trace(`Bumping gas limit from ${gasLimit} to ${bumpedGasLimit}`, {
317
+ gasLimit,
318
+ gasConfig: cleanGasConfig,
319
+ bumpedGasLimit
320
+ });
321
+ return bumpedGasLimit;
322
+ }
323
+ }
@@ -0,0 +1,4 @@
1
+ import { type WalletClient } from 'viem';
2
+ import type { SigningCallback } from './types.js';
3
+ export declare function createViemSigner(client: WalletClient): SigningCallback;
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbmVyLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbDFfdHhfdXRpbHMvc2lnbmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sRUFBZ0MsS0FBSyxZQUFZLEVBQW9CLE1BQU0sTUFBTSxDQUFDO0FBRXpGLE9BQU8sS0FBSyxFQUFFLGVBQWUsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUVsRCx3QkFBZ0IsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLFlBQVksbUJBb0JwRCJ9
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signer.d.ts","sourceRoot":"","sources":["../../src/l1_tx_utils/signer.ts"],"names":[],"mappings":"AAGA,OAAO,EAAgC,KAAK,YAAY,EAAoB,MAAM,MAAM,CAAC;AAEzF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,YAAY,mBAoBpD"}
@@ -0,0 +1,16 @@
1
+ import { parseTransaction } from 'viem';
2
+ export function createViemSigner(client) {
3
+ const signer = async (tx, _address)=>{
4
+ const signedTx = await client.signTransaction(tx);
5
+ const parsed = parseTransaction(signedTx);
6
+ if (!parsed.r || !parsed.s || parsed.yParity !== 0 && parsed.yParity !== 1) {
7
+ throw new Error('Failed to extract signature from viem signed transaction');
8
+ }
9
+ return {
10
+ r: parsed.r,
11
+ s: parsed.s,
12
+ yParity: parsed.yParity
13
+ };
14
+ };
15
+ return signer;
16
+ }
@@ -0,0 +1,67 @@
1
+ import type { BlobKzgInstance } from '@aztec/blob-lib/types';
2
+ import { EthAddress } from '@aztec/foundation/eth-address';
3
+ import type { ViemTransactionSignature } from '@aztec/foundation/eth-signature';
4
+ import type { Abi, Address, Hex, TransactionReceipt, TransactionSerializable } from 'viem';
5
+ import type { L1TxUtilsConfig } from './config.js';
6
+ export interface L1TxRequest {
7
+ to: Address | null;
8
+ data?: Hex;
9
+ value?: bigint;
10
+ abi?: Abi;
11
+ }
12
+ export type L1TxConfig = Partial<L1TxUtilsConfig> & {
13
+ gasLimit?: bigint;
14
+ txTimeoutAt?: Date;
15
+ };
16
+ export interface L1BlobInputs {
17
+ blobs: Uint8Array[];
18
+ kzg: BlobKzgInstance;
19
+ maxFeePerBlobGas?: bigint;
20
+ }
21
+ export interface GasPrice {
22
+ maxFeePerGas: bigint;
23
+ maxPriorityFeePerGas: bigint;
24
+ maxFeePerBlobGas?: bigint;
25
+ }
26
+ export type TransactionStats = {
27
+ /** Address of the sender. */
28
+ sender: string;
29
+ /** Hash of the transaction. */
30
+ transactionHash: string;
31
+ /** Size in bytes of the tx calldata */
32
+ calldataSize: number;
33
+ /** Gas required to pay for the calldata inclusion (depends on size and number of zeros) */
34
+ calldataGas: number;
35
+ };
36
+ export declare enum TxUtilsState {
37
+ IDLE = 0,
38
+ SENT = 1,
39
+ SPEED_UP = 2,
40
+ CANCELLED = 3,
41
+ NOT_MINED = 4,
42
+ MINED = 5
43
+ }
44
+ export declare const TerminalTxUtilsState: TxUtilsState[];
45
+ export type L1TxState = {
46
+ id: number;
47
+ txHashes: Hex[];
48
+ cancelTxHashes: Hex[];
49
+ gasLimit: bigint;
50
+ gasPrice: GasPrice;
51
+ txConfigOverrides: L1TxConfig;
52
+ request: L1TxRequest;
53
+ status: TxUtilsState;
54
+ nonce: number;
55
+ sentAtL1Ts: Date;
56
+ lastSentAtL1Ts: Date;
57
+ receipt?: TransactionReceipt;
58
+ blobInputs: L1BlobInputs | undefined;
59
+ };
60
+ export type SigningCallback = (transaction: TransactionSerializable, signingAddress: EthAddress) => Promise<ViemTransactionSignature>;
61
+ export declare class UnknownMinedTxError extends Error {
62
+ constructor(nonce: number, account: string);
63
+ }
64
+ export declare class DroppedTransactionError extends Error {
65
+ constructor(nonce: number, account: string);
66
+ }
67
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9sMV90eF91dGlscy90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxlQUFlLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDM0QsT0FBTyxLQUFLLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUVoRixPQUFPLEtBQUssRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxrQkFBa0IsRUFBRSx1QkFBdUIsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUzRixPQUFPLEtBQUssRUFBRSxlQUFlLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFbkQsTUFBTSxXQUFXLFdBQVc7SUFDMUIsRUFBRSxFQUFFLE9BQU8sR0FBRyxJQUFJLENBQUM7SUFDbkIsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDO0lBQ1gsS0FBSyxDQUFDLEVBQUUsTUFBTSxDQUFDO0lBQ2YsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDO0NBQ1g7QUFFRCxNQUFNLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxlQUFlLENBQUMsR0FBRztJQUFFLFFBQVEsQ0FBQyxFQUFFLE1BQU0sQ0FBQztJQUFDLFdBQVcsQ0FBQyxFQUFFLElBQUksQ0FBQTtDQUFFLENBQUM7QUFFOUYsTUFBTSxXQUFXLFlBQVk7SUFDM0IsS0FBSyxFQUFFLFVBQVUsRUFBRSxDQUFDO0lBQ3BCLEdBQUcsRUFBRSxlQUFlLENBQUM7SUFDckIsZ0JBQWdCLENBQUMsRUFBRSxNQUFNLENBQUM7Q0FDM0I7QUFFRCxNQUFNLFdBQVcsUUFBUTtJQUN2QixZQUFZLEVBQUUsTUFBTSxDQUFDO0lBQ3JCLG9CQUFvQixFQUFFLE1BQU0sQ0FBQztJQUM3QixnQkFBZ0IsQ0FBQyxFQUFFLE1BQU0sQ0FBQztDQUMzQjtBQUVELE1BQU0sTUFBTSxnQkFBZ0IsR0FBRztJQUM3Qiw2QkFBNkI7SUFDN0IsTUFBTSxFQUFFLE1BQU0sQ0FBQztJQUNmLCtCQUErQjtJQUMvQixlQUFlLEVBQUUsTUFBTSxDQUFDO0lBQ3hCLHVDQUF1QztJQUN2QyxZQUFZLEVBQUUsTUFBTSxDQUFDO0lBQ3JCLDRGQUE0RjtJQUM1RixXQUFXLEVBQUUsTUFBTSxDQUFDO0NBQ3JCLENBQUM7QUFFRixvQkFBWSxZQUFZO0lBQ3RCLElBQUksSUFBQTtJQUNKLElBQUksSUFBQTtJQUNKLFFBQVEsSUFBQTtJQUNSLFNBQVMsSUFBQTtJQUNULFNBQVMsSUFBQTtJQUNULEtBQUssSUFBQTtDQUNOO0FBRUQsZUFBTyxNQUFNLG9CQUFvQixnQkFBa0UsQ0FBQztBQUVwRyxNQUFNLE1BQU0sU0FBUyxHQUFHO0lBQ3RCLEVBQUUsRUFBRSxNQUFNLENBQUM7SUFDWCxRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDaEIsY0FBYyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ3RCLFFBQVEsRUFBRSxNQUFNLENBQUM7SUFDakIsUUFBUSxFQUFFLFFBQVEsQ0FBQztJQUNuQixpQkFBaUIsRUFBRSxVQUFVLENBQUM7SUFDOUIsT0FBTyxFQUFFLFdBQVcsQ0FBQztJQUNyQixNQUFNLEVBQUUsWUFBWSxDQUFDO0lBQ3JCLEtBQUssRUFBRSxNQUFNLENBQUM7SUFDZCxVQUFVLEVBQUUsSUFBSSxDQUFDO0lBQ2pCLGNBQWMsRUFBRSxJQUFJLENBQUM7SUFDckIsT0FBTyxDQUFDLEVBQUUsa0JBQWtCLENBQUM7SUFDN0IsVUFBVSxFQUFFLFlBQVksR0FBRyxTQUFTLENBQUM7Q0FDdEMsQ0FBQztBQUVGLE1BQU0sTUFBTSxlQUFlLEdBQUcsQ0FDNUIsV0FBVyxFQUFFLHVCQUF1QixFQUNwQyxjQUFjLEVBQUUsVUFBVSxLQUN2QixPQUFPLENBQUMsd0JBQXdCLENBQUMsQ0FBQztBQUV2QyxxQkFBYSxtQkFBb0IsU0FBUSxLQUFLO0lBQzVDLFlBQVksS0FBSyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUd6QztDQUNGO0FBRUQscUJBQWEsdUJBQXdCLFNBQVEsS0FBSztJQUNoRCxZQUFZLEtBQUssRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFHekM7Q0FDRiJ9
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/l1_tx_utils/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAEhF,OAAO,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,MAAM,CAAC;AAE3F,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,OAAO,GAAG,IAAI,CAAC;IACnB,IAAI,CAAC,EAAE,GAAG,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,GAAG,CAAC;CACX;AAED,MAAM,MAAM,UAAU,GAAG,OAAO,CAAC,eAAe,CAAC,GAAG;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,IAAI,CAAA;CAAE,CAAC;AAE9F,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,GAAG,EAAE,eAAe,CAAC;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,QAAQ;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,6BAA6B;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,+BAA+B;IAC/B,eAAe,EAAE,MAAM,CAAC;IACxB,uCAAuC;IACvC,YAAY,EAAE,MAAM,CAAC;IACrB,4FAA4F;IAC5F,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,oBAAY,YAAY;IACtB,IAAI,IAAA;IACJ,IAAI,IAAA;IACJ,QAAQ,IAAA;IACR,SAAS,IAAA;IACT,SAAS,IAAA;IACT,KAAK,IAAA;CACN;AAED,eAAO,MAAM,oBAAoB,gBAAkE,CAAC;AAEpG,MAAM,MAAM,SAAS,GAAG;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,GAAG,EAAE,CAAC;IAChB,cAAc,EAAE,GAAG,EAAE,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,QAAQ,CAAC;IACnB,iBAAiB,EAAE,UAAU,CAAC;IAC9B,OAAO,EAAE,WAAW,CAAC;IACrB,MAAM,EAAE,YAAY,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,IAAI,CAAC;IACjB,cAAc,EAAE,IAAI,CAAC;IACrB,OAAO,CAAC,EAAE,kBAAkB,CAAC;IAC7B,UAAU,EAAE,YAAY,GAAG,SAAS,CAAC;CACtC,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,CAC5B,WAAW,EAAE,uBAAuB,EACpC,cAAc,EAAE,UAAU,KACvB,OAAO,CAAC,wBAAwB,CAAC,CAAC;AAEvC,qBAAa,mBAAoB,SAAQ,KAAK;IAC5C,YAAY,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAGzC;CACF;AAED,qBAAa,uBAAwB,SAAQ,KAAK;IAChD,YAAY,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAGzC;CACF"}
@@ -0,0 +1,26 @@
1
+ export var TxUtilsState = /*#__PURE__*/ function(TxUtilsState) {
2
+ TxUtilsState[TxUtilsState["IDLE"] = 0] = "IDLE";
3
+ TxUtilsState[TxUtilsState["SENT"] = 1] = "SENT";
4
+ TxUtilsState[TxUtilsState["SPEED_UP"] = 2] = "SPEED_UP";
5
+ TxUtilsState[TxUtilsState["CANCELLED"] = 3] = "CANCELLED";
6
+ TxUtilsState[TxUtilsState["NOT_MINED"] = 4] = "NOT_MINED";
7
+ TxUtilsState[TxUtilsState["MINED"] = 5] = "MINED";
8
+ return TxUtilsState;
9
+ }({});
10
+ export const TerminalTxUtilsState = [
11
+ 0,
12
+ 5,
13
+ 4
14
+ ];
15
+ export class UnknownMinedTxError extends Error {
16
+ constructor(nonce, account){
17
+ super(`Nonce ${nonce} from account ${account} is MINED but not by one of our expected transactions`);
18
+ this.name = 'UnknownMinedTxError';
19
+ }
20
+ }
21
+ export class DroppedTransactionError extends Error {
22
+ constructor(nonce, account){
23
+ super(`Transaction with nonce ${nonce} from account ${account} was dropped from the mempool`);
24
+ this.name = 'DroppedTransactionError';
25
+ }
26
+ }
@@ -0,0 +1,4 @@
1
+ import type { ContractFunctionExecutionError } from 'viem';
2
+ export declare function tryGetCustomErrorNameContractFunction(err: ContractFunctionExecutionError): string;
3
+ export declare function getCalldataGasUsage(data: Uint8Array): number;
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9sMV90eF91dGlscy91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEtBQUssRUFBRSw4QkFBOEIsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUzRCx3QkFBZ0IscUNBQXFDLENBQUMsR0FBRyxFQUFFLDhCQUE4QixVQUV4RjtBQU9ELHdCQUFnQixtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsVUFBVSxVQUVuRCJ9
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/l1_tx_utils/utils.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,MAAM,CAAC;AAE3D,wBAAgB,qCAAqC,CAAC,GAAG,EAAE,8BAA8B,UAExF;AAOD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,UAAU,UAEnD"}
@@ -0,0 +1,14 @@
1
+ import { compactArray } from '@aztec/foundation/collection';
2
+ export function tryGetCustomErrorNameContractFunction(err) {
3
+ return compactArray([
4
+ err.shortMessage,
5
+ ...(err.metaMessages ?? []).slice(0, 2).map((s)=>s.trim())
6
+ ]).join(' ');
7
+ }
8
+ /*
9
+ * Returns cost of calldata usage in Ethereum.
10
+ * @param data - Calldata.
11
+ * @returns 4 for each zero byte, 16 for each nonzero.
12
+ */ export function getCalldataGasUsage(data) {
13
+ return data.filter((byte)=>byte === 0).length * 4 + data.filter((byte)=>byte !== 0).length * 16;
14
+ }
@@ -3,4 +3,4 @@ export type L1BlockId = {
3
3
  l1BlockNumber: bigint;
4
4
  l1BlockHash: Buffer32;
5
5
  };
6
- //# sourceMappingURL=l1_types.d.ts.map
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibDFfdHlwZXMuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9sMV90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUV6RCxNQUFNLE1BQU0sU0FBUyxHQUFHO0lBQ3RCLGFBQWEsRUFBRSxNQUFNLENBQUM7SUFDdEIsV0FBVyxFQUFFLFFBQVEsQ0FBQztDQUN2QixDQUFDIn0=
@@ -1,10 +1,15 @@
1
- import { L1TxUtils } from './l1_tx_utils.js';
1
+ import { L1TxUtils } from './l1_tx_utils/index.js';
2
2
  export type PublisherFilter<UtilsType extends L1TxUtils> = (utils: UtilsType) => boolean;
3
3
  export declare class PublisherManager<UtilsType extends L1TxUtils = L1TxUtils> {
4
4
  private publishers;
5
5
  private log;
6
- constructor(publishers: UtilsType[]);
6
+ private config;
7
+ constructor(publishers: UtilsType[], config: {
8
+ publisherAllowInvalidStates?: boolean;
9
+ });
10
+ /** Loads the state of all publishers and resumes monitoring any pending txs */
11
+ loadState(): Promise<void>;
7
12
  getAvailablePublisher(filter?: PublisherFilter<UtilsType>): Promise<UtilsType>;
8
13
  interrupt(): void;
9
14
  }
10
- //# sourceMappingURL=publisher_manager.d.ts.map
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGlzaGVyX21hbmFnZXIuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9wdWJsaXNoZXJfbWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQUUsU0FBUyxFQUFnQixNQUFNLHdCQUF3QixDQUFDO0FBd0JqRSxNQUFNLE1BQU0sZUFBZSxDQUFDLFNBQVMsU0FBUyxTQUFTLElBQUksQ0FBQyxLQUFLLEVBQUUsU0FBUyxLQUFLLE9BQU8sQ0FBQztBQUV6RixxQkFBYSxnQkFBZ0IsQ0FBQyxTQUFTLFNBQVMsU0FBUyxHQUFHLFNBQVM7SUFLakUsT0FBTyxDQUFDLFVBQVU7SUFKcEIsT0FBTyxDQUFDLEdBQUcsQ0FBcUM7SUFDaEQsT0FBTyxDQUFDLE1BQU0sQ0FBNEM7SUFFMUQsWUFDVSxVQUFVLEVBQUUsU0FBUyxFQUFFLEVBQy9CLE1BQU0sRUFBRTtRQUFFLDJCQUEyQixDQUFDLEVBQUUsT0FBTyxDQUFBO0tBQUUsRUFLbEQ7SUFFRCwrRUFBK0U7SUFDbEUsU0FBUyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FFdEM7SUFRWSxxQkFBcUIsQ0FBQyxNQUFNLEdBQUUsZUFBZSxDQUFDLFNBQVMsQ0FBYyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0ErQ3RHO0lBRU0sU0FBUyxTQUVmO0NBQ0YifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"publisher_manager.d.ts","sourceRoot":"","sources":["../src/publisher_manager.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAgB,MAAM,kBAAkB,CAAC;AAK3D,MAAM,MAAM,eAAe,CAAC,SAAS,SAAS,SAAS,IAAI,CAAC,KAAK,EAAE,SAAS,KAAK,OAAO,CAAC;AAEzF,qBAAa,gBAAgB,CAAC,SAAS,SAAS,SAAS,GAAG,SAAS;IAGvD,OAAO,CAAC,UAAU;IAF9B,OAAO,CAAC,GAAG,CAAoC;gBAE3B,UAAU,EAAE,SAAS,EAAE;IAW9B,qBAAqB,CAAC,MAAM,GAAE,eAAe,CAAC,SAAS,CAAc,GAAG,OAAO,CAAC,SAAS,CAAC;IAqChG,SAAS;CAGjB"}
1
+ {"version":3,"file":"publisher_manager.d.ts","sourceRoot":"","sources":["../src/publisher_manager.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAgB,MAAM,wBAAwB,CAAC;AAwBjE,MAAM,MAAM,eAAe,CAAC,SAAS,SAAS,SAAS,IAAI,CAAC,KAAK,EAAE,SAAS,KAAK,OAAO,CAAC;AAEzF,qBAAa,gBAAgB,CAAC,SAAS,SAAS,SAAS,GAAG,SAAS;IAKjE,OAAO,CAAC,UAAU;IAJpB,OAAO,CAAC,GAAG,CAAqC;IAChD,OAAO,CAAC,MAAM,CAA4C;IAE1D,YACU,UAAU,EAAE,SAAS,EAAE,EAC/B,MAAM,EAAE;QAAE,2BAA2B,CAAC,EAAE,OAAO,CAAA;KAAE,EAKlD;IAED,+EAA+E;IAClE,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAEtC;IAQY,qBAAqB,CAAC,MAAM,GAAE,eAAe,CAAC,SAAS,CAAc,GAAG,OAAO,CAAC,SAAS,CAAC,CA+CtG;IAEM,SAAS,SAEf;CACF"}