@aztec/ethereum 3.0.0-canary.a9708bd → 3.0.0-devnet.2

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 (144) hide show
  1. package/dest/client.d.ts +1 -1
  2. package/dest/client.d.ts.map +1 -1
  3. package/dest/config.d.ts +11 -6
  4. package/dest/config.d.ts.map +1 -1
  5. package/dest/config.js +124 -64
  6. package/dest/contracts/empire_base.d.ts +1 -1
  7. package/dest/contracts/empire_base.d.ts.map +1 -1
  8. package/dest/contracts/empire_slashing_proposer.d.ts +2 -2
  9. package/dest/contracts/empire_slashing_proposer.d.ts.map +1 -1
  10. package/dest/contracts/empire_slashing_proposer.js +1 -1
  11. package/dest/contracts/fee_asset_handler.d.ts +3 -3
  12. package/dest/contracts/fee_asset_handler.d.ts.map +1 -1
  13. package/dest/contracts/governance.js +7 -3
  14. package/dest/contracts/governance_proposer.d.ts +1 -2
  15. package/dest/contracts/governance_proposer.d.ts.map +1 -1
  16. package/dest/contracts/governance_proposer.js +1 -2
  17. package/dest/contracts/multicall.d.ts +3 -5
  18. package/dest/contracts/multicall.d.ts.map +1 -1
  19. package/dest/contracts/multicall.js +6 -4
  20. package/dest/contracts/rollup.d.ts +39 -19
  21. package/dest/contracts/rollup.d.ts.map +1 -1
  22. package/dest/contracts/rollup.js +84 -88
  23. package/dest/contracts/slasher_contract.d.ts +10 -0
  24. package/dest/contracts/slasher_contract.d.ts.map +1 -1
  25. package/dest/contracts/slasher_contract.js +18 -0
  26. package/dest/contracts/tally_slashing_proposer.d.ts +22 -3
  27. package/dest/contracts/tally_slashing_proposer.d.ts.map +1 -1
  28. package/dest/contracts/tally_slashing_proposer.js +55 -5
  29. package/dest/deploy_l1_contracts.d.ts +22 -7
  30. package/dest/deploy_l1_contracts.d.ts.map +1 -1
  31. package/dest/deploy_l1_contracts.js +555 -362
  32. package/dest/index.d.ts +1 -1
  33. package/dest/index.d.ts.map +1 -1
  34. package/dest/index.js +1 -1
  35. package/dest/l1_artifacts.d.ts +8729 -6014
  36. package/dest/l1_artifacts.d.ts.map +1 -1
  37. package/dest/l1_artifacts.js +10 -5
  38. package/dest/l1_contract_addresses.d.ts +5 -1
  39. package/dest/l1_contract_addresses.d.ts.map +1 -1
  40. package/dest/l1_contract_addresses.js +16 -26
  41. package/dest/l1_reader.d.ts +1 -1
  42. package/dest/l1_reader.d.ts.map +1 -1
  43. package/dest/l1_reader.js +8 -8
  44. package/dest/l1_tx_utils/config.d.ts +59 -0
  45. package/dest/l1_tx_utils/config.d.ts.map +1 -0
  46. package/dest/l1_tx_utils/config.js +73 -0
  47. package/dest/l1_tx_utils/constants.d.ts +6 -0
  48. package/dest/l1_tx_utils/constants.d.ts.map +1 -0
  49. package/dest/l1_tx_utils/constants.js +14 -0
  50. package/dest/l1_tx_utils/factory.d.ts +24 -0
  51. package/dest/l1_tx_utils/factory.d.ts.map +1 -0
  52. package/dest/l1_tx_utils/factory.js +12 -0
  53. package/dest/l1_tx_utils/index.d.ts +10 -0
  54. package/dest/l1_tx_utils/index.d.ts.map +1 -0
  55. package/dest/l1_tx_utils/index.js +10 -0
  56. package/dest/l1_tx_utils/interfaces.d.ts +76 -0
  57. package/dest/l1_tx_utils/interfaces.d.ts.map +1 -0
  58. package/dest/l1_tx_utils/interfaces.js +4 -0
  59. package/dest/l1_tx_utils/l1_tx_utils.d.ts +95 -0
  60. package/dest/l1_tx_utils/l1_tx_utils.d.ts.map +1 -0
  61. package/dest/l1_tx_utils/l1_tx_utils.js +610 -0
  62. package/dest/l1_tx_utils/l1_tx_utils_with_blobs.d.ts +26 -0
  63. package/dest/l1_tx_utils/l1_tx_utils_with_blobs.d.ts.map +1 -0
  64. package/dest/l1_tx_utils/l1_tx_utils_with_blobs.js +26 -0
  65. package/dest/l1_tx_utils/readonly_l1_tx_utils.d.ts +81 -0
  66. package/dest/l1_tx_utils/readonly_l1_tx_utils.d.ts.map +1 -0
  67. package/dest/l1_tx_utils/readonly_l1_tx_utils.js +294 -0
  68. package/dest/l1_tx_utils/signer.d.ts +4 -0
  69. package/dest/l1_tx_utils/signer.d.ts.map +1 -0
  70. package/dest/l1_tx_utils/signer.js +16 -0
  71. package/dest/l1_tx_utils/types.d.ts +67 -0
  72. package/dest/l1_tx_utils/types.d.ts.map +1 -0
  73. package/dest/l1_tx_utils/types.js +26 -0
  74. package/dest/l1_tx_utils/utils.d.ts +4 -0
  75. package/dest/l1_tx_utils/utils.d.ts.map +1 -0
  76. package/dest/l1_tx_utils/utils.js +14 -0
  77. package/dest/publisher_manager.d.ts +7 -2
  78. package/dest/publisher_manager.d.ts.map +1 -1
  79. package/dest/publisher_manager.js +36 -8
  80. package/dest/queries.d.ts.map +1 -1
  81. package/dest/queries.js +11 -12
  82. package/dest/test/chain_monitor.d.ts +11 -0
  83. package/dest/test/chain_monitor.d.ts.map +1 -1
  84. package/dest/test/chain_monitor.js +81 -12
  85. package/dest/test/delayed_tx_utils.d.ts +2 -2
  86. package/dest/test/delayed_tx_utils.d.ts.map +1 -1
  87. package/dest/test/delayed_tx_utils.js +2 -2
  88. package/dest/test/eth_cheat_codes.d.ts +32 -6
  89. package/dest/test/eth_cheat_codes.d.ts.map +1 -1
  90. package/dest/test/eth_cheat_codes.js +115 -28
  91. package/dest/test/rollup_cheat_codes.d.ts +11 -9
  92. package/dest/test/rollup_cheat_codes.d.ts.map +1 -1
  93. package/dest/test/rollup_cheat_codes.js +38 -6
  94. package/dest/test/upgrade_utils.d.ts.map +1 -1
  95. package/dest/test/upgrade_utils.js +3 -2
  96. package/dest/utils.d.ts.map +1 -1
  97. package/dest/utils.js +10 -161
  98. package/dest/zkPassportVerifierAddress.js +1 -1
  99. package/package.json +7 -7
  100. package/src/client.ts +1 -1
  101. package/src/config.ts +136 -68
  102. package/src/contracts/empire_base.ts +1 -1
  103. package/src/contracts/empire_slashing_proposer.ts +7 -3
  104. package/src/contracts/fee_asset_handler.ts +1 -1
  105. package/src/contracts/governance.ts +3 -3
  106. package/src/contracts/governance_proposer.ts +3 -4
  107. package/src/contracts/multicall.ts +12 -10
  108. package/src/contracts/rollup.ts +104 -106
  109. package/src/contracts/slasher_contract.ts +22 -0
  110. package/src/contracts/tally_slashing_proposer.ts +54 -6
  111. package/src/deploy_l1_contracts.ts +570 -328
  112. package/src/index.ts +1 -1
  113. package/src/l1_artifacts.ts +14 -6
  114. package/src/l1_contract_addresses.ts +17 -26
  115. package/src/l1_reader.ts +9 -9
  116. package/src/l1_tx_utils/README.md +177 -0
  117. package/src/l1_tx_utils/config.ts +140 -0
  118. package/src/l1_tx_utils/constants.ts +18 -0
  119. package/src/l1_tx_utils/factory.ts +64 -0
  120. package/src/l1_tx_utils/index.ts +12 -0
  121. package/src/l1_tx_utils/interfaces.ts +86 -0
  122. package/src/l1_tx_utils/l1_tx_utils.ts +718 -0
  123. package/src/l1_tx_utils/l1_tx_utils_with_blobs.ts +77 -0
  124. package/src/l1_tx_utils/readonly_l1_tx_utils.ts +372 -0
  125. package/src/l1_tx_utils/signer.ts +28 -0
  126. package/src/l1_tx_utils/types.ts +85 -0
  127. package/src/l1_tx_utils/utils.ts +16 -0
  128. package/src/publisher_manager.ts +51 -9
  129. package/src/queries.ts +13 -8
  130. package/src/test/chain_monitor.ts +89 -9
  131. package/src/test/delayed_tx_utils.ts +2 -2
  132. package/src/test/eth_cheat_codes.ts +142 -29
  133. package/src/test/rollup_cheat_codes.ts +54 -14
  134. package/src/test/upgrade_utils.ts +3 -2
  135. package/src/utils.ts +13 -185
  136. package/src/zkPassportVerifierAddress.ts +1 -1
  137. package/dest/l1_tx_utils.d.ts +0 -250
  138. package/dest/l1_tx_utils.d.ts.map +0 -1
  139. package/dest/l1_tx_utils.js +0 -826
  140. package/dest/l1_tx_utils_with_blobs.d.ts +0 -19
  141. package/dest/l1_tx_utils_with_blobs.d.ts.map +0 -1
  142. package/dest/l1_tx_utils_with_blobs.js +0 -85
  143. package/src/l1_tx_utils.ts +0 -1105
  144. package/src/l1_tx_utils_with_blobs.ts +0 -144
@@ -0,0 +1,73 @@
1
+ import { bigintConfigHelper, booleanConfigHelper, getConfigFromMappings, getDefaultConfig, numberConfigHelper } from '@aztec/foundation/config';
2
+ export const l1TxUtilsConfigMappings = {
3
+ gasLimitBufferPercentage: {
4
+ description: 'How much to increase calculated gas limit by (percentage)',
5
+ env: 'L1_GAS_LIMIT_BUFFER_PERCENTAGE',
6
+ ...numberConfigHelper(20)
7
+ },
8
+ maxGwei: {
9
+ description: 'Maximum gas price in gwei',
10
+ env: 'L1_GAS_PRICE_MAX',
11
+ ...bigintConfigHelper(500n)
12
+ },
13
+ maxBlobGwei: {
14
+ description: 'Maximum blob fee per gas in gwei',
15
+ env: 'L1_BLOB_FEE_PER_GAS_MAX',
16
+ ...bigintConfigHelper(1_500n)
17
+ },
18
+ priorityFeeBumpPercentage: {
19
+ description: 'How much to increase priority fee by each attempt (percentage)',
20
+ env: 'L1_PRIORITY_FEE_BUMP_PERCENTAGE',
21
+ ...numberConfigHelper(20)
22
+ },
23
+ priorityFeeRetryBumpPercentage: {
24
+ description: 'How much to increase priority fee by each retry attempt (percentage)',
25
+ env: 'L1_PRIORITY_FEE_RETRY_BUMP_PERCENTAGE',
26
+ ...numberConfigHelper(50)
27
+ },
28
+ fixedPriorityFeePerGas: {
29
+ description: 'Fixed priority fee per gas in Gwei. Overrides any priority fee bump percentage',
30
+ env: 'L1_FIXED_PRIORITY_FEE_PER_GAS',
31
+ ...numberConfigHelper(0)
32
+ },
33
+ maxSpeedUpAttempts: {
34
+ description: 'Maximum number of speed-up attempts',
35
+ env: 'L1_TX_MONITOR_MAX_ATTEMPTS',
36
+ ...numberConfigHelper(3)
37
+ },
38
+ checkIntervalMs: {
39
+ description: 'How often to check tx status',
40
+ env: 'L1_TX_MONITOR_CHECK_INTERVAL_MS',
41
+ ...numberConfigHelper(1_000)
42
+ },
43
+ stallTimeMs: {
44
+ description: 'How long before considering tx stalled',
45
+ env: 'L1_TX_MONITOR_STALL_TIME_MS',
46
+ ...numberConfigHelper(24_000)
47
+ },
48
+ txTimeoutMs: {
49
+ description: 'How long to wait for a tx to be mined before giving up. Set to 0 to disable.',
50
+ env: 'L1_TX_MONITOR_TX_TIMEOUT_MS',
51
+ ...numberConfigHelper(120_000)
52
+ },
53
+ cancelTxOnTimeout: {
54
+ description: "Whether to attempt to cancel a tx if it's not mined after txTimeoutMs",
55
+ env: 'L1_TX_MONITOR_CANCEL_TX_ON_TIMEOUT',
56
+ ...booleanConfigHelper(true)
57
+ },
58
+ txCancellationFinalTimeoutMs: {
59
+ description: 'How long to wait for a cancellation tx after its last attempt before giving up',
60
+ env: 'L1_TX_MONITOR_TX_CANCELLATION_TIMEOUT_MS',
61
+ ...numberConfigHelper(24 * 12 * 1000)
62
+ },
63
+ txUnseenConsideredDroppedMs: {
64
+ description: 'How long a tx nonce can be unseen in the mempool before considering it dropped',
65
+ env: 'L1_TX_MONITOR_TX_UNSEEN_CONSIDERED_DROPPED_MS',
66
+ ...numberConfigHelper(6 * 12 * 1000)
67
+ }
68
+ };
69
+ // We abuse the fact that all mappings above have a non null default value and force-type this to Required
70
+ export const defaultL1TxUtilsConfig = getDefaultConfig(l1TxUtilsConfigMappings);
71
+ export function getL1TxUtilsConfigEnvVars() {
72
+ return getConfigFromMappings(l1TxUtilsConfigMappings);
73
+ }
@@ -0,0 +1,6 @@
1
+ export declare const WEI_CONST = 1000000000n;
2
+ export declare const LARGE_GAS_LIMIT = 12000000n;
3
+ export declare const MIN_REPLACEMENT_BUMP_PERCENTAGE = 10;
4
+ export declare const MIN_BLOB_REPLACEMENT_BUMP_PERCENTAGE = 100;
5
+ export declare const BLOCK_TIME_MS = 12000;
6
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/l1_tx_utils/constants.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,SAAS,cAAiB,CAAC;AAGxC,eAAO,MAAM,eAAe,YAAc,CAAC;AAI3C,eAAO,MAAM,+BAA+B,KAAK,CAAC;AAIlD,eAAO,MAAM,oCAAoC,MAAM,CAAC;AAGxD,eAAO,MAAM,aAAa,QAAS,CAAC"}
@@ -0,0 +1,14 @@
1
+ // 1_000_000_000 Gwei = 1 ETH
2
+ // 1_000_000_000 Wei = 1 Gwei
3
+ // 1_000_000_000_000_000_000 Wei = 1 ETH
4
+ export const WEI_CONST = 1_000_000_000n;
5
+ // @note using this large gas limit to avoid the issue of `gas limit too low` when estimating gas in reth
6
+ export const LARGE_GAS_LIMIT = 12_000_000n;
7
+ // setting a minimum bump percentage to 10% due to geth's implementation
8
+ // https://github.com/ethereum/go-ethereum/blob/e3d61e6db028c412f74bc4d4c7e117a9e29d0de0/core/txpool/legacypool/list.go#L298
9
+ export const MIN_REPLACEMENT_BUMP_PERCENTAGE = 10;
10
+ // setting a minimum bump percentage to 100% due to geth's implementation
11
+ // https://github.com/ethereum/go-ethereum/blob/e3d61e6db028c412f74bc4d4c7e117a9e29d0de0/core/txpool/blobpool/config.go#L34
12
+ export const MIN_BLOB_REPLACEMENT_BUMP_PERCENTAGE = 100;
13
+ // Avg ethereum block time is ~12s
14
+ export const BLOCK_TIME_MS = 12_000;
@@ -0,0 +1,24 @@
1
+ import type { Logger } from '@aztec/foundation/log';
2
+ import { DateProvider } from '@aztec/foundation/timer';
3
+ import type { EthSigner } from '../eth-signer/eth-signer.js';
4
+ import type { ExtendedViemWalletClient, ViemClient } from '../types.js';
5
+ import type { L1TxUtilsConfig } from './config.js';
6
+ import type { IL1TxMetrics, IL1TxStore } from './interfaces.js';
7
+ import { L1TxUtils } from './l1_tx_utils.js';
8
+ export declare function createL1TxUtilsFromViemWallet(client: ExtendedViemWalletClient, deps?: {
9
+ logger?: Logger;
10
+ dateProvider?: DateProvider;
11
+ store?: IL1TxStore;
12
+ metrics?: IL1TxMetrics;
13
+ }, config?: Partial<L1TxUtilsConfig> & {
14
+ debugMaxGasLimit?: boolean;
15
+ }): L1TxUtils;
16
+ export declare function createL1TxUtilsFromEthSigner(client: ViemClient, signer: EthSigner, deps?: {
17
+ logger?: Logger;
18
+ dateProvider?: DateProvider;
19
+ store?: IL1TxStore;
20
+ metrics?: IL1TxMetrics;
21
+ }, config?: Partial<L1TxUtilsConfig> & {
22
+ debugMaxGasLimit?: boolean;
23
+ }): L1TxUtils;
24
+ //# sourceMappingURL=factory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/l1_tx_utils/factory.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAIvD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,KAAK,EAAE,wBAAwB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACxE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAI7C,wBAAgB,6BAA6B,CAC3C,MAAM,EAAE,wBAAwB,EAChC,IAAI,CAAC,EAAE;IACL,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,OAAO,CAAC,EAAE,YAAY,CAAC;CACxB,EACD,MAAM,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG;IAAE,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAAE,GACjE,SAAS,CAYX;AAED,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,UAAU,EAClB,MAAM,EAAE,SAAS,EACjB,IAAI,CAAC,EAAE;IACL,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,OAAO,CAAC,EAAE,YAAY,CAAC;CACxB,EACD,MAAM,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG;IAAE,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAAE,GACjE,SAAS,CAgBX"}
@@ -0,0 +1,12 @@
1
+ import { EthAddress } from '@aztec/foundation/eth-address';
2
+ import { L1TxUtils } from './l1_tx_utils.js';
3
+ import { createViemSigner } from './signer.js';
4
+ export function createL1TxUtilsFromViemWallet(client, deps, config) {
5
+ return new L1TxUtils(client, EthAddress.fromString(client.account.address), createViemSigner(client), deps?.logger, deps?.dateProvider, config, config?.debugMaxGasLimit ?? false, deps?.store, deps?.metrics);
6
+ }
7
+ export function createL1TxUtilsFromEthSigner(client, signer, deps, config) {
8
+ const callback = async (transaction, _signingAddress)=>{
9
+ return (await signer.signTransaction(transaction)).toViemTransactionSignature();
10
+ };
11
+ return new L1TxUtils(client, signer.address, callback, deps?.logger, deps?.dateProvider, config, config?.debugMaxGasLimit ?? false, deps?.store, deps?.metrics);
12
+ }
@@ -0,0 +1,10 @@
1
+ export * from './config.js';
2
+ export * from './constants.js';
3
+ export * from './factory.js';
4
+ export * from './interfaces.js';
5
+ export * from './l1_tx_utils.js';
6
+ export * from './readonly_l1_tx_utils.js';
7
+ export * from './signer.js';
8
+ export * from './types.js';
9
+ export * from './utils.js';
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/l1_tx_utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC"}
@@ -0,0 +1,10 @@
1
+ export * from './config.js';
2
+ export * from './constants.js';
3
+ export * from './factory.js';
4
+ export * from './interfaces.js';
5
+ export * from './l1_tx_utils.js';
6
+ export * from './readonly_l1_tx_utils.js';
7
+ export * from './signer.js';
8
+ export * from './types.js';
9
+ export * from './utils.js'; // Note: We intentionally do not export l1_tx_utils_with_blobs.js
10
+ // to avoid accidentally importing blob-lib dependency.
@@ -0,0 +1,76 @@
1
+ import type { L1BlobInputs, L1TxState } from './types.js';
2
+ /**
3
+ * Interface for L1 transaction state storage.
4
+ * Implementations handle persistence of transaction states across restarts.
5
+ */
6
+ export interface IL1TxStore {
7
+ /**
8
+ * Gets the next available state ID for an account.
9
+ */
10
+ consumeNextStateId(account: string): Promise<number>;
11
+ /**
12
+ * Saves a single transaction state for a specific account.
13
+ * Does not save blob data (see saveBlobs).
14
+ * @param account - The sender account address
15
+ * @param state - Transaction state to save
16
+ */
17
+ saveState(account: string, state: L1TxState): Promise<L1TxState>;
18
+ /**
19
+ * Saves blobs for a given state.
20
+ * @param account - The sender account address
21
+ * @param stateId - The state ID
22
+ * @param blobInputs - Blob inputs to save
23
+ */
24
+ saveBlobs(account: string, stateId: number, blobInputs: L1BlobInputs | undefined): Promise<void>;
25
+ /**
26
+ * Loads all transaction states for a specific account.
27
+ * @param account - The sender account address
28
+ * @returns Array of transaction states with their IDs
29
+ */
30
+ loadStates(account: string): Promise<L1TxState[]>;
31
+ /**
32
+ * Loads a single state by ID.
33
+ * @param account - The sender account address
34
+ * @param stateId - The state ID
35
+ * @returns The transaction state or undefined if not found
36
+ */
37
+ loadState(account: string, stateId: number): Promise<L1TxState | undefined>;
38
+ /**
39
+ * Deletes a specific state and its associated blobs.
40
+ * @param account - The sender account address
41
+ * @param stateId - The state ID to delete
42
+ */
43
+ deleteState(account: string, stateId: number): Promise<void>;
44
+ /**
45
+ * Clears all transaction states for a specific account.
46
+ * @param account - The sender account address
47
+ */
48
+ clearStates(account: string): Promise<void>;
49
+ /**
50
+ * Gets all accounts that have stored states.
51
+ * @returns Array of account addresses
52
+ */
53
+ getAllAccounts(): Promise<string[]>;
54
+ /**
55
+ * Closes the store.
56
+ */
57
+ close(): Promise<void>;
58
+ }
59
+ /**
60
+ * Interface for L1 transaction metrics recording.
61
+ * Implementations handle tracking of transaction lifecycle and gas costs.
62
+ */
63
+ export interface IL1TxMetrics {
64
+ /**
65
+ * Records metrics when a transaction is mined
66
+ * @param state - The L1 transaction state
67
+ * @param l1Timestamp - The current L1 timestamp
68
+ */
69
+ recordMinedTx(state: L1TxState, l1Timestamp: Date): void;
70
+ /**
71
+ * Records metrics when a transaction is dropped
72
+ * @param state - The L1 transaction state
73
+ */
74
+ recordDroppedTx(state: L1TxState): void;
75
+ }
76
+ //# sourceMappingURL=interfaces.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../../src/l1_tx_utils/interfaces.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE1D;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB;;OAEG;IACH,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAErD;;;;;OAKG;IACH,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IAEjE;;;;;OAKG;IACH,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,YAAY,GAAG,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjG;;;;OAIG;IACH,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;IAElD;;;;;OAKG;IACH,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC,CAAC;IAE5E;;;;OAIG;IACH,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE7D;;;OAGG;IACH,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE5C;;;OAGG;IACH,cAAc,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAEpC;;OAEG;IACH,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B;;;;OAIG;IACH,aAAa,CAAC,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,IAAI,GAAG,IAAI,CAAC;IAEzD;;;OAGG;IACH,eAAe,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,CAAC;CACzC"}
@@ -0,0 +1,4 @@
1
+ /**
2
+ * Interface for L1 transaction metrics recording.
3
+ * Implementations handle tracking of transaction lifecycle and gas costs.
4
+ */ export { };
@@ -0,0 +1,95 @@
1
+ import { 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 BlockOverrides, type Hex, type NonceManager, type PrepareTransactionRequestRequest, type StateOverride, type TransactionReceipt } from 'viem';
5
+ import type { ViemClient } from '../types.js';
6
+ import { type L1TxUtilsConfig } from './config.js';
7
+ import type { IL1TxMetrics, IL1TxStore } from './interfaces.js';
8
+ import { ReadOnlyL1TxUtils } from './readonly_l1_tx_utils.js';
9
+ import { type L1BlobInputs, type L1TxConfig, type L1TxRequest, type L1TxState, type SigningCallback, TxUtilsState } from './types.js';
10
+ export declare class L1TxUtils extends ReadOnlyL1TxUtils {
11
+ client: ViemClient;
12
+ address: EthAddress;
13
+ protected signer: SigningCallback;
14
+ protected store?: IL1TxStore | undefined;
15
+ protected metrics?: IL1TxMetrics | undefined;
16
+ protected nonceManager: NonceManager;
17
+ protected txs: L1TxState[];
18
+ constructor(client: ViemClient, address: EthAddress, signer: SigningCallback, logger?: Logger, dateProvider?: DateProvider, config?: Partial<L1TxUtilsConfig>, debugMaxGasLimit?: boolean, store?: IL1TxStore | undefined, metrics?: IL1TxMetrics | undefined);
19
+ get state(): TxUtilsState;
20
+ get lastMinedAtBlockNumber(): bigint | undefined;
21
+ protected updateState(l1TxState: L1TxState, newState: TxUtilsState.MINED, l1Timestamp: number): Promise<void>;
22
+ protected updateState(l1TxState: L1TxState, newState: TxUtilsState, l1Timestamp?: undefined): Promise<void>;
23
+ updateConfig(newConfig: Partial<L1TxUtilsConfig>): void;
24
+ getSenderAddress(): EthAddress;
25
+ getSenderBalance(): Promise<bigint>;
26
+ /**
27
+ * Rehydrates transaction states from the store and resumes monitoring for pending transactions.
28
+ * This should be called on startup to restore state and resume monitoring of any in-flight transactions.
29
+ */
30
+ loadStateAndResumeMonitoring(): Promise<void>;
31
+ private signTransaction;
32
+ protected prepareSignedTransaction(txData: PrepareTransactionRequestRequest): Promise<`0x${string}`>;
33
+ /**
34
+ * Sends a transaction with gas estimation and pricing
35
+ * @param request - The transaction request (to, data, value)
36
+ * @param gasConfig - Optional gas configuration
37
+ * @returns The transaction hash and parameters used
38
+ */
39
+ sendTransaction(request: L1TxRequest, gasConfigOverrides?: L1TxConfig, blobInputs?: L1BlobInputs, stateChange?: TxUtilsState): Promise<{
40
+ txHash: Hex;
41
+ state: L1TxState;
42
+ }>;
43
+ private tryGetTxReceipt;
44
+ /**
45
+ * Returns whether a given tx should be considered as timed out and no longer monitored.
46
+ * Relies on the txTimeout setting for user txs, and on the txCancellationTimeout for cancel txs.
47
+ * @remarks We check against the latestBlockTimestamp as opposed to the current time to avoid a race condition where
48
+ * the tx is mined in a block with the same timestamp as txTimeoutAt, but our execution node has not yet processed it,
49
+ * or the loop here has not yet checked the tx before that timeout.
50
+ */
51
+ private isTxTimedOut;
52
+ /**
53
+ * Monitors a transaction until completion, handling speed-ups if needed
54
+ */
55
+ protected monitorTransaction(state: L1TxState): Promise<TransactionReceipt>;
56
+ /**
57
+ * Creates tx data to be signed by viem signTransaction method, using the state as input.
58
+ * If isCancelTx is true, creates a 0-value tx to self with 21k gas and no data instead,
59
+ * and an empty blob input if the original tx also had blobs.
60
+ */
61
+ private makeTxData;
62
+ /** Returns when all monitor loops have stopped. */
63
+ waitMonitoringStopped(timeoutSeconds?: number): Promise<void>;
64
+ /**
65
+ * Sends a transaction and monitors it until completion
66
+ * @param request - The transaction request (to, data, value)
67
+ * @param gasConfig - Optional gas configuration
68
+ * @returns The receipt of the successful transaction
69
+ */
70
+ sendAndMonitorTransaction(request: L1TxRequest, gasConfig?: L1TxConfig, blobInputs?: L1BlobInputs): Promise<{
71
+ receipt: TransactionReceipt;
72
+ state: L1TxState;
73
+ }>;
74
+ simulate(request: L1TxRequest & {
75
+ gas?: bigint;
76
+ from?: Hex;
77
+ }, _blockOverrides?: BlockOverrides<bigint, number>, stateOverrides?: StateOverride, abi?: Abi, _gasConfig?: L1TxUtilsConfig & {
78
+ fallbackGasEstimate?: bigint;
79
+ ignoreBlockGasLimit?: boolean;
80
+ }): Promise<{
81
+ gasUsed: bigint;
82
+ result: `0x${string}`;
83
+ }>;
84
+ /**
85
+ * Attempts to cancel a transaction by sending a 0-value tx to self with same nonce but higher gas prices
86
+ * Only sends the cancellation if the original tx is still pending, not if it was dropped
87
+ * @returns The hash of the cancellation transaction
88
+ */
89
+ protected attemptTxCancellation(state: L1TxState): Promise<void>;
90
+ /** Returns L1 timestamps in milliseconds */
91
+ private getL1Timestamp;
92
+ /** Makes empty blob inputs for the cancellation tx. To be overridden in L1TxUtilsWithBlobs. */
93
+ protected makeEmptyBlobInputs(_maxFeePerBlobGas: bigint): Required<L1BlobInputs>;
94
+ }
95
+ //# sourceMappingURL=l1_tx_utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"l1_tx_utils.d.ts","sourceRoot":"","sources":["../../src/l1_tx_utils/l1_tx_utils.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,uBAAuB,CAAC;AAGlE,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAIvD,OAAO,EACL,KAAK,GAAG,EACR,KAAK,cAAc,EACnB,KAAK,GAAG,EACR,KAAK,YAAY,EACjB,KAAK,gCAAgC,EACrC,KAAK,aAAa,EAClB,KAAK,kBAAkB,EAKxB,MAAM,MAAM,CAAC;AAGd,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,OAAO,EAAE,KAAK,eAAe,EAA2B,MAAM,aAAa,CAAC;AAE5E,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAEL,KAAK,YAAY,EACjB,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,KAAK,SAAS,EACd,KAAK,eAAe,EAEpB,YAAY,EAEb,MAAM,YAAY,CAAC;AAIpB,qBAAa,SAAU,SAAQ,iBAAiB;IAK5B,MAAM,EAAE,UAAU;IAC3B,OAAO,EAAE,UAAU;IAC1B,SAAS,CAAC,MAAM,EAAE,eAAe;IAKjC,SAAS,CAAC,KAAK,CAAC,EAAE,UAAU;IAC5B,SAAS,CAAC,OAAO,CAAC,EAAE,YAAY;IAZlC,SAAS,CAAC,YAAY,EAAE,YAAY,CAAC;IACrC,SAAS,CAAC,GAAG,EAAE,SAAS,EAAE,CAAM;gBAGd,MAAM,EAAE,UAAU,EAC3B,OAAO,EAAE,UAAU,EAChB,MAAM,EAAE,eAAe,EACjC,MAAM,GAAE,MAA2C,EACnD,YAAY,GAAE,YAAiC,EAC/C,MAAM,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,EACjC,gBAAgB,GAAE,OAAe,EACvB,KAAK,CAAC,EAAE,UAAU,YAAA,EAClB,OAAO,CAAC,EAAE,YAAY,YAAA;IAMlC,IAAW,KAAK,iBAEf;IAED,IAAW,sBAAsB,uBAGhC;cAEe,WAAW,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;cACnG,WAAW,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,WAAW,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAsB1G,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,eAAe,CAAC;IAQhD,gBAAgB;IAIhB,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC;IAM1C;;;OAGG;IACU,4BAA4B,IAAI,OAAO,CAAC,IAAI,CAAC;YAsC5C,eAAe;cAKb,wBAAwB,CAAC,MAAM,EAAE,gCAAgC;IAKjF;;;;;OAKG;IACU,eAAe,CAC1B,OAAO,EAAE,WAAW,EACpB,kBAAkB,CAAC,EAAE,UAAU,EAC/B,UAAU,CAAC,EAAE,YAAY,EACzB,WAAW,GAAE,YAAgC,GAC5C,OAAO,CAAC;QAAE,MAAM,EAAE,GAAG,CAAC;QAAC,KAAK,EAAE,SAAS,CAAA;KAAE,CAAC;YA8F/B,eAAe;IA6B7B;;;;;;OAMG;IACH,OAAO,CAAC,YAAY;IAyCpB;;OAEG;cACa,kBAAkB,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAsLjF;;;;OAIG;IACH,OAAO,CAAC,UAAU;IA8BlB,mDAAmD;IACtC,qBAAqB,CAAC,cAAc,SAAK;IAUtD;;;;;OAKG;IACU,yBAAyB,CACpC,OAAO,EAAE,WAAW,EACpB,SAAS,CAAC,EAAE,UAAU,EACtB,UAAU,CAAC,EAAE,YAAY,GACxB,OAAO,CAAC;QAAE,OAAO,EAAE,kBAAkB,CAAC;QAAC,KAAK,EAAE,SAAS,CAAA;KAAE,CAAC;IAMvC,QAAQ,CAC5B,OAAO,EAAE,WAAW,GAAG;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,GAAG,CAAA;KAAE,EACnD,eAAe,GAAE,cAAc,CAAC,MAAM,EAAE,MAAM,CAAM,EACpD,cAAc,GAAE,aAAkB,EAClC,GAAG,GAAE,GAAe,EACpB,UAAU,CAAC,EAAE,eAAe,GAAG;QAAE,mBAAmB,CAAC,EAAE,MAAM,CAAC;QAAC,mBAAmB,CAAC,EAAE,OAAO,CAAA;KAAE,GAC7F,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,KAAK,MAAM,EAAE,CAAA;KAAE,CAAC;IAsBtD;;;;OAIG;cACa,qBAAqB,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IA8EtE,4CAA4C;YAC9B,cAAc;IAK5B,+FAA+F;IAC/F,SAAS,CAAC,mBAAmB,CAAC,iBAAiB,EAAE,MAAM,GAAG,QAAQ,CAAC,YAAY,CAAC;CAGjF"}