@aztec/ethereum 0.0.1-commit.fce3e4f → 0.0.1-commit.ff7989d6c

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 (199) hide show
  1. package/dest/client.js +6 -2
  2. package/dest/config.d.ts +19 -68
  3. package/dest/config.d.ts.map +1 -1
  4. package/dest/config.js +55 -380
  5. package/dest/contracts/empire_base.d.ts +4 -1
  6. package/dest/contracts/empire_base.d.ts.map +1 -1
  7. package/dest/contracts/empire_slashing_proposer.d.ts +4 -1
  8. package/dest/contracts/empire_slashing_proposer.d.ts.map +1 -1
  9. package/dest/contracts/empire_slashing_proposer.js +31 -15
  10. package/dest/contracts/fee_asset_handler.d.ts +6 -5
  11. package/dest/contracts/fee_asset_handler.d.ts.map +1 -1
  12. package/dest/contracts/fee_asset_handler.js +11 -9
  13. package/dest/contracts/fee_asset_price_oracle.d.ts +101 -0
  14. package/dest/contracts/fee_asset_price_oracle.d.ts.map +1 -0
  15. package/dest/contracts/fee_asset_price_oracle.js +651 -0
  16. package/dest/contracts/governance.d.ts +3 -1
  17. package/dest/contracts/governance.d.ts.map +1 -1
  18. package/dest/contracts/governance.js +14 -4
  19. package/dest/contracts/governance_proposer.d.ts +4 -1
  20. package/dest/contracts/governance_proposer.d.ts.map +1 -1
  21. package/dest/contracts/governance_proposer.js +404 -9
  22. package/dest/contracts/inbox.d.ts +24 -3
  23. package/dest/contracts/inbox.d.ts.map +1 -1
  24. package/dest/contracts/inbox.js +36 -1
  25. package/dest/contracts/index.d.ts +4 -1
  26. package/dest/contracts/index.d.ts.map +1 -1
  27. package/dest/contracts/index.js +3 -0
  28. package/dest/contracts/log.d.ts +13 -0
  29. package/dest/contracts/log.d.ts.map +1 -0
  30. package/dest/contracts/log.js +1 -0
  31. package/dest/contracts/multicall.d.ts +1 -1
  32. package/dest/contracts/multicall.d.ts.map +1 -1
  33. package/dest/contracts/multicall.js +2 -1
  34. package/dest/contracts/outbox.d.ts +41 -0
  35. package/dest/contracts/outbox.d.ts.map +1 -0
  36. package/dest/contracts/outbox.js +86 -0
  37. package/dest/contracts/rollup.d.ts +177 -96
  38. package/dest/contracts/rollup.d.ts.map +1 -1
  39. package/dest/contracts/rollup.js +707 -144
  40. package/dest/contracts/tally_slashing_proposer.d.ts +3 -2
  41. package/dest/contracts/tally_slashing_proposer.d.ts.map +1 -1
  42. package/dest/contracts/tally_slashing_proposer.js +8 -1
  43. package/dest/deploy_aztec_l1_contracts.d.ts +259 -0
  44. package/dest/deploy_aztec_l1_contracts.d.ts.map +1 -0
  45. package/dest/deploy_aztec_l1_contracts.js +413 -0
  46. package/dest/deploy_l1_contract.d.ts +68 -0
  47. package/dest/deploy_l1_contract.d.ts.map +1 -0
  48. package/dest/deploy_l1_contract.js +312 -0
  49. package/dest/forwarder_proxy.d.ts +32 -0
  50. package/dest/forwarder_proxy.d.ts.map +1 -0
  51. package/dest/forwarder_proxy.js +93 -0
  52. package/dest/generated/l1-contracts-defaults.d.ts +30 -0
  53. package/dest/generated/l1-contracts-defaults.d.ts.map +1 -0
  54. package/dest/generated/l1-contracts-defaults.js +30 -0
  55. package/dest/l1_artifacts.d.ts +5975 -1575
  56. package/dest/l1_artifacts.d.ts.map +1 -1
  57. package/dest/l1_contract_addresses.d.ts +1 -1
  58. package/dest/l1_contract_addresses.d.ts.map +1 -1
  59. package/dest/l1_contract_addresses.js +3 -3
  60. package/dest/l1_reader.d.ts +3 -1
  61. package/dest/l1_reader.d.ts.map +1 -1
  62. package/dest/l1_reader.js +6 -0
  63. package/dest/l1_tx_utils/config.d.ts +9 -3
  64. package/dest/l1_tx_utils/config.d.ts.map +1 -1
  65. package/dest/l1_tx_utils/config.js +31 -4
  66. package/dest/l1_tx_utils/constants.d.ts +8 -2
  67. package/dest/l1_tx_utils/constants.d.ts.map +1 -1
  68. package/dest/l1_tx_utils/constants.js +27 -2
  69. package/dest/l1_tx_utils/factory.d.ts +18 -10
  70. package/dest/l1_tx_utils/factory.d.ts.map +1 -1
  71. package/dest/l1_tx_utils/factory.js +17 -7
  72. package/dest/l1_tx_utils/fee-strategies/index.d.ts +10 -0
  73. package/dest/l1_tx_utils/fee-strategies/index.d.ts.map +1 -0
  74. package/dest/l1_tx_utils/fee-strategies/index.js +12 -0
  75. package/dest/l1_tx_utils/fee-strategies/p75_competitive.d.ts +8 -0
  76. package/dest/l1_tx_utils/fee-strategies/p75_competitive.d.ts.map +1 -0
  77. package/dest/l1_tx_utils/fee-strategies/p75_competitive.js +129 -0
  78. package/dest/l1_tx_utils/fee-strategies/p75_competitive_blob_txs_only.d.ts +23 -0
  79. package/dest/l1_tx_utils/fee-strategies/p75_competitive_blob_txs_only.d.ts.map +1 -0
  80. package/dest/l1_tx_utils/fee-strategies/p75_competitive_blob_txs_only.js +191 -0
  81. package/dest/l1_tx_utils/fee-strategies/types.d.ts +51 -0
  82. package/dest/l1_tx_utils/fee-strategies/types.d.ts.map +1 -0
  83. package/dest/l1_tx_utils/fee-strategies/types.js +3 -0
  84. package/dest/l1_tx_utils/forwarder_l1_tx_utils.d.ts +41 -0
  85. package/dest/l1_tx_utils/forwarder_l1_tx_utils.d.ts.map +1 -0
  86. package/dest/l1_tx_utils/forwarder_l1_tx_utils.js +42 -0
  87. package/dest/l1_tx_utils/index-blobs.d.ts +3 -0
  88. package/dest/l1_tx_utils/index-blobs.d.ts.map +1 -0
  89. package/dest/l1_tx_utils/index-blobs.js +2 -0
  90. package/dest/l1_tx_utils/index.d.ts +4 -1
  91. package/dest/l1_tx_utils/index.d.ts.map +1 -1
  92. package/dest/l1_tx_utils/index.js +3 -0
  93. package/dest/l1_tx_utils/interfaces.d.ts +2 -2
  94. package/dest/l1_tx_utils/interfaces.d.ts.map +1 -1
  95. package/dest/l1_tx_utils/l1_fee_analyzer.d.ts +233 -0
  96. package/dest/l1_tx_utils/l1_fee_analyzer.d.ts.map +1 -0
  97. package/dest/l1_tx_utils/l1_fee_analyzer.js +506 -0
  98. package/dest/l1_tx_utils/l1_tx_utils.d.ts +15 -5
  99. package/dest/l1_tx_utils/l1_tx_utils.d.ts.map +1 -1
  100. package/dest/l1_tx_utils/l1_tx_utils.js +64 -17
  101. package/dest/l1_tx_utils/readonly_l1_tx_utils.d.ts +4 -15
  102. package/dest/l1_tx_utils/readonly_l1_tx_utils.d.ts.map +1 -1
  103. package/dest/l1_tx_utils/readonly_l1_tx_utils.js +53 -160
  104. package/dest/l1_tx_utils/tx_delayer.d.ts +56 -0
  105. package/dest/l1_tx_utils/tx_delayer.d.ts.map +1 -0
  106. package/dest/{test → l1_tx_utils}/tx_delayer.js +65 -36
  107. package/dest/publisher_manager.d.ts +3 -2
  108. package/dest/publisher_manager.d.ts.map +1 -1
  109. package/dest/publisher_manager.js +2 -2
  110. package/dest/queries.d.ts +2 -2
  111. package/dest/queries.d.ts.map +1 -1
  112. package/dest/queries.js +12 -4
  113. package/dest/test/chain_monitor.d.ts +15 -13
  114. package/dest/test/chain_monitor.d.ts.map +1 -1
  115. package/dest/test/chain_monitor.js +7 -9
  116. package/dest/test/eth_cheat_codes.d.ts +13 -1
  117. package/dest/test/eth_cheat_codes.d.ts.map +1 -1
  118. package/dest/test/eth_cheat_codes.js +4 -2
  119. package/dest/test/index.d.ts +1 -3
  120. package/dest/test/index.d.ts.map +1 -1
  121. package/dest/test/index.js +0 -2
  122. package/dest/test/rollup_cheat_codes.d.ts +9 -6
  123. package/dest/test/rollup_cheat_codes.d.ts.map +1 -1
  124. package/dest/test/rollup_cheat_codes.js +32 -6
  125. package/dest/test/start_anvil.d.ts +3 -1
  126. package/dest/test/start_anvil.d.ts.map +1 -1
  127. package/dest/test/start_anvil.js +1 -1
  128. package/dest/test/upgrade_utils.js +2 -2
  129. package/dest/types.d.ts +57 -2
  130. package/dest/types.d.ts.map +1 -1
  131. package/dest/utils.d.ts +16 -3
  132. package/dest/utils.d.ts.map +1 -1
  133. package/dest/utils.js +64 -0
  134. package/package.json +33 -14
  135. package/src/client.ts +2 -2
  136. package/src/config.ts +65 -459
  137. package/src/contracts/README.md +157 -0
  138. package/src/contracts/empire_base.ts +3 -1
  139. package/src/contracts/empire_slashing_proposer.ts +28 -28
  140. package/src/contracts/fee_asset_handler.ts +10 -7
  141. package/src/contracts/fee_asset_price_oracle.ts +280 -0
  142. package/src/contracts/governance.ts +13 -4
  143. package/src/contracts/governance_proposer.ts +16 -2
  144. package/src/contracts/inbox.ts +55 -3
  145. package/src/contracts/index.ts +3 -0
  146. package/src/contracts/log.ts +13 -0
  147. package/src/contracts/multicall.ts +5 -2
  148. package/src/contracts/outbox.ts +98 -0
  149. package/src/contracts/rollup.ts +390 -118
  150. package/src/contracts/tally_slashing_proposer.ts +7 -1
  151. package/src/deploy_aztec_l1_contracts.ts +650 -0
  152. package/src/deploy_l1_contract.ts +362 -0
  153. package/src/forwarder_proxy.ts +108 -0
  154. package/src/generated/l1-contracts-defaults.ts +32 -0
  155. package/src/l1_contract_addresses.ts +22 -20
  156. package/src/l1_reader.ts +8 -0
  157. package/src/l1_tx_utils/config.ts +44 -6
  158. package/src/l1_tx_utils/constants.ts +13 -2
  159. package/src/l1_tx_utils/factory.ts +31 -31
  160. package/src/l1_tx_utils/fee-strategies/index.ts +22 -0
  161. package/src/l1_tx_utils/fee-strategies/p75_competitive.ts +163 -0
  162. package/src/l1_tx_utils/fee-strategies/p75_competitive_blob_txs_only.ts +245 -0
  163. package/src/l1_tx_utils/fee-strategies/types.ts +56 -0
  164. package/src/l1_tx_utils/forwarder_l1_tx_utils.ts +108 -0
  165. package/src/l1_tx_utils/index-blobs.ts +2 -0
  166. package/src/l1_tx_utils/index.ts +3 -0
  167. package/src/l1_tx_utils/interfaces.ts +1 -1
  168. package/src/l1_tx_utils/l1_fee_analyzer.ts +803 -0
  169. package/src/l1_tx_utils/l1_tx_utils.ts +76 -21
  170. package/src/l1_tx_utils/readonly_l1_tx_utils.ts +67 -206
  171. package/src/{test → l1_tx_utils}/tx_delayer.ts +82 -52
  172. package/src/publisher_manager.ts +4 -2
  173. package/src/queries.ts +11 -3
  174. package/src/test/chain_monitor.ts +18 -16
  175. package/src/test/eth_cheat_codes.ts +2 -2
  176. package/src/test/index.ts +0 -2
  177. package/src/test/rollup_cheat_codes.ts +32 -9
  178. package/src/test/start_anvil.ts +3 -1
  179. package/src/test/upgrade_utils.ts +2 -2
  180. package/src/types.ts +62 -0
  181. package/src/utils.ts +83 -1
  182. package/dest/deploy_l1_contracts.d.ts +0 -673
  183. package/dest/deploy_l1_contracts.d.ts.map +0 -1
  184. package/dest/deploy_l1_contracts.js +0 -1491
  185. package/dest/index.d.ts +0 -18
  186. package/dest/index.d.ts.map +0 -1
  187. package/dest/index.js +0 -17
  188. package/dest/l1_tx_utils/l1_tx_utils_with_blobs.d.ts +0 -26
  189. package/dest/l1_tx_utils/l1_tx_utils_with_blobs.d.ts.map +0 -1
  190. package/dest/l1_tx_utils/l1_tx_utils_with_blobs.js +0 -26
  191. package/dest/test/delayed_tx_utils.d.ts +0 -13
  192. package/dest/test/delayed_tx_utils.d.ts.map +0 -1
  193. package/dest/test/delayed_tx_utils.js +0 -28
  194. package/dest/test/tx_delayer.d.ts +0 -36
  195. package/dest/test/tx_delayer.d.ts.map +0 -1
  196. package/src/deploy_l1_contracts.ts +0 -1869
  197. package/src/index.ts +0 -17
  198. package/src/l1_tx_utils/l1_tx_utils_with_blobs.ts +0 -77
  199. package/src/test/delayed_tx_utils.ts +0 -52
@@ -11,8 +11,9 @@ import { createNonceManager, formatGwei, serializeTransaction } from 'viem';
11
11
  import { jsonRpc } from 'viem/nonce';
12
12
  import { formatViemError } from '../utils.js';
13
13
  import { l1TxUtilsConfigMappings } from './config.js';
14
- import { LARGE_GAS_LIMIT } from './constants.js';
14
+ import { MAX_L1_TX_LIMIT } from './constants.js';
15
15
  import { ReadOnlyL1TxUtils } from './readonly_l1_tx_utils.js';
16
+ import { createDelayer, wrapClientWithDelayer } from './tx_delayer.js';
16
17
  import { DroppedTransactionError, TerminalTxUtilsState, TxUtilsState, UnknownMinedTxError } from './types.js';
17
18
  const MAX_L1_TX_STATES = 32;
18
19
  export class L1TxUtils extends ReadOnlyL1TxUtils {
@@ -23,11 +24,28 @@ export class L1TxUtils extends ReadOnlyL1TxUtils {
23
24
  metrics;
24
25
  nonceManager;
25
26
  txs;
26
- constructor(client, address, signer, logger = createLogger('ethereum:publisher'), dateProvider = new DateProvider(), config, debugMaxGasLimit = false, store, metrics){
27
+ /** Tx delayer for testing. Only set when enableDelayer config is true. */ delayer;
28
+ /** KZG instance for blob operations. */ kzg;
29
+ constructor(client, address, signer, logger = createLogger('ethereum:publisher'), dateProvider = new DateProvider(), config, debugMaxGasLimit = false, store, metrics, kzg, delayer){
27
30
  super(client, logger, dateProvider, config, debugMaxGasLimit), this.client = client, this.address = address, this.signer = signer, this.store = store, this.metrics = metrics, this.txs = [];
28
31
  this.nonceManager = createNonceManager({
29
32
  source: jsonRpc()
30
33
  });
34
+ this.kzg = kzg;
35
+ // Set up delayer: use provided one or create new
36
+ if (config?.enableDelayer && config?.ethereumSlotDuration) {
37
+ this.delayer = delayer ?? this.createDelayer({
38
+ ethereumSlotDuration: config.ethereumSlotDuration
39
+ }, logger.getBindings());
40
+ this.client = wrapClientWithDelayer(this.client, this.delayer);
41
+ if (config.txDelayerMaxInclusionTimeIntoSlot !== undefined) {
42
+ this.delayer.setMaxInclusionTimeIntoSlot(config.txDelayerMaxInclusionTimeIntoSlot);
43
+ }
44
+ } else if (delayer) {
45
+ // Delayer provided but enableDelayer not set — just store it without wrapping
46
+ logger.warn('Delayer provided but enableDelayer config is not set; delayer will not be used');
47
+ this.delayer = delayer;
48
+ }
31
49
  }
32
50
  get state() {
33
51
  return this.txs.at(-1)?.status ?? TxUtilsState.IDLE;
@@ -75,11 +93,24 @@ export class L1TxUtils extends ReadOnlyL1TxUtils {
75
93
  this.logger.debug(`No states to rehydrate for account ${account}`);
76
94
  return;
77
95
  }
78
- // Convert loaded states (which have id) to the txs format
79
- this.txs = loadedStates;
80
- this.logger.info(`Rehydrated ${loadedStates.length} tx states for account ${account}`);
96
+ // Clean up excess states if we have more than MAX_L1_TX_STATES
97
+ if (loadedStates.length > MAX_L1_TX_STATES) {
98
+ this.logger.warn(`Found ${loadedStates.length} tx states for account ${account}, pruning to most recent ${MAX_L1_TX_STATES}`);
99
+ // Keep only the most recent MAX_L1_TX_STATES
100
+ const statesToKeep = loadedStates.slice(-MAX_L1_TX_STATES);
101
+ const statesToDelete = loadedStates.slice(0, -MAX_L1_TX_STATES);
102
+ // Batch delete old states in a transaction for efficiency
103
+ const idsToDelete = statesToDelete.map((s)=>s.id);
104
+ await this.store.deleteState(account, ...idsToDelete);
105
+ this.txs = statesToKeep;
106
+ this.logger.info(`Cleaned up ${statesToDelete.length} old tx states, kept ${statesToKeep.length} for account ${account}`);
107
+ } else {
108
+ // Convert loaded states (which have id) to the txs format
109
+ this.txs = loadedStates;
110
+ this.logger.info(`Rehydrated ${loadedStates.length} tx states for account ${account}`);
111
+ }
81
112
  // Find all pending states and resume monitoring
82
- const pendingStates = loadedStates.filter((state)=>!TerminalTxUtilsState.includes(state.status));
113
+ const pendingStates = this.txs.filter((state)=>!TerminalTxUtilsState.includes(state.status));
83
114
  if (pendingStates.length === 0) {
84
115
  return;
85
116
  }
@@ -121,7 +152,7 @@ export class L1TxUtils extends ReadOnlyL1TxUtils {
121
152
  const account = this.getSenderAddress().toString();
122
153
  let gasLimit;
123
154
  if (this.debugMaxGasLimit) {
124
- gasLimit = LARGE_GAS_LIMIT;
155
+ gasLimit = MAX_L1_TX_LIMIT;
125
156
  } else if (gasConfig.gasLimit) {
126
157
  gasLimit = gasConfig.gasLimit;
127
158
  } else {
@@ -135,6 +166,13 @@ export class L1TxUtils extends ReadOnlyL1TxUtils {
135
166
  if (this.interrupted) {
136
167
  throw new InterruptError(`Transaction sending is interrupted`);
137
168
  }
169
+ // Check timeout before consuming nonce to avoid leaking a nonce that was never sent.
170
+ // A leaked nonce creates a gap (e.g. nonce 107 consumed but unsent), so all subsequent
171
+ // transactions (108, 109, ...) can never be mined since the chain expects 107 first.
172
+ const now = new Date(await this.getL1Timestamp());
173
+ if (gasConfig.txTimeoutAt && now > gasConfig.txTimeoutAt) {
174
+ throw new TimeoutError(`Transaction timed out before sending (now ${now.toISOString()} > timeoutAt ${gasConfig.txTimeoutAt.toISOString()})`);
175
+ }
138
176
  const nonce = await this.nonceManager.consume({
139
177
  client: this.client,
140
178
  address: account,
@@ -150,10 +188,6 @@ export class L1TxUtils extends ReadOnlyL1TxUtils {
150
188
  const txData = this.makeTxData(baseState, {
151
189
  isCancelTx: false
152
190
  });
153
- const now = new Date(await this.getL1Timestamp());
154
- if (gasConfig.txTimeoutAt && now > gasConfig.txTimeoutAt) {
155
- throw new TimeoutError(`Transaction timed out before sending (now ${now.toISOString()} > timeoutAt ${gasConfig.txTimeoutAt.toISOString()})`);
156
- }
157
191
  // Send the new tx
158
192
  const signedRequest = await this.prepareSignedTransaction(txData);
159
193
  const txHash = await this.client.sendRawTransaction({
@@ -204,7 +238,7 @@ export class L1TxUtils extends ReadOnlyL1TxUtils {
204
238
  };
205
239
  } catch (err) {
206
240
  const viemError = formatViemError(err, request.abi);
207
- this.logger.error(`Failed to send L1 transaction`, viemError, {
241
+ this.logger.error(`Failed to send L1 transaction: ${viemError.message}`, viemError, {
208
242
  request: pick(request, 'to', 'value')
209
243
  });
210
244
  throw viemError;
@@ -509,11 +543,11 @@ export class L1TxUtils extends ReadOnlyL1TxUtils {
509
543
  from: request.from ?? this.getSenderAddress().toString(),
510
544
  maxFeePerGas: gasPrice.maxFeePerGas,
511
545
  maxPriorityFeePerGas: gasPrice.maxPriorityFeePerGas,
512
- gas: request.gas ?? LARGE_GAS_LIMIT
546
+ gas: request.gas ?? MAX_L1_TX_LIMIT
513
547
  };
514
548
  if (!request.gas && !gasConfig.ignoreBlockGasLimit) {
515
- // LARGE_GAS_LIMIT is set as call.gas, increase block gasLimit
516
- blockOverrides.gasLimit = LARGE_GAS_LIMIT * 2n;
549
+ // MAX_L1_TX_LIMIT is set as call.gas, ensure block gasLimit is sufficient
550
+ blockOverrides.gasLimit = MAX_L1_TX_LIMIT;
517
551
  }
518
552
  return this._simulate(call, blockOverrides, stateOverrides, gasConfig, abi);
519
553
  }
@@ -604,7 +638,20 @@ export class L1TxUtils extends ReadOnlyL1TxUtils {
604
638
  });
605
639
  return Number(timestamp) * 1000;
606
640
  }
607
- /** Makes empty blob inputs for the cancellation tx. To be overridden in L1TxUtilsWithBlobs. */ makeEmptyBlobInputs(_maxFeePerBlobGas) {
608
- throw new Error('Cannot make empty blob inputs for cancellation');
641
+ /** Makes empty blob inputs for the cancellation tx. */ makeEmptyBlobInputs(maxFeePerBlobGas) {
642
+ if (!this.kzg) {
643
+ throw new Error('Cannot make empty blob inputs for cancellation without kzg');
644
+ }
645
+ const blobData = new Uint8Array(131072).fill(0);
646
+ return {
647
+ blobs: [
648
+ blobData
649
+ ],
650
+ kzg: this.kzg,
651
+ maxFeePerBlobGas
652
+ };
653
+ }
654
+ /** Creates a new delayer instance. */ createDelayer(opts, bindings) {
655
+ return createDelayer(this.dateProvider, opts, bindings);
609
656
  }
610
657
  }
@@ -1,6 +1,7 @@
1
+ import type { EthAddress } from '@aztec/foundation/eth-address';
1
2
  import { type Logger } from '@aztec/foundation/log';
2
3
  import { DateProvider } from '@aztec/foundation/timer';
3
- import { type Abi, type Account, type BlockOverrides, type Hex, type StateOverride } from 'viem';
4
+ import { type Abi, type Account, type BlockOverrides, type GetCodeReturnType, type Hex, type StateOverride } from 'viem';
4
5
  import type { ViemClient } from '../types.js';
5
6
  import { type L1TxUtilsConfig } from './config.js';
6
7
  import type { GasPrice, L1BlobInputs, L1TxRequest, TransactionStats } from './types.js';
@@ -44,15 +45,7 @@ export declare class ReadOnlyL1TxUtils {
44
45
  transactions: `0x${string}`[];
45
46
  }>;
46
47
  getBlockNumber(): Promise<bigint>;
47
- /**
48
- * Analyzes pending transactions and recent fee history to determine a competitive priority fee.
49
- * Falls back to network estimate if data is unavailable or fails.
50
- * @param networkEstimateResult - Result from estimateMaxPriorityFeePerGas RPC call
51
- * @param pendingBlockResult - Result from getBlock with pending tag RPC call
52
- * @param feeHistoryResult - Result from getFeeHistory RPC call
53
- * @returns A competitive priority fee based on pending txs and recent block history
54
- */
55
- protected getCompetitivePriorityFee(networkEstimateResult: PromiseSettledResult<bigint | null>, pendingBlockResult: PromiseSettledResult<Awaited<ReturnType<ViemClient['getBlock']>> | null>, feeHistoryResult: PromiseSettledResult<Awaited<ReturnType<ViemClient['getFeeHistory']>> | null>): bigint;
48
+ getCode(address: EthAddress): Promise<GetCodeReturnType>;
56
49
  /**
57
50
  * Gets the current gas price with bounds checking
58
51
  */
@@ -86,9 +79,5 @@ export declare class ReadOnlyL1TxUtils {
86
79
  result: `0x${string}`;
87
80
  }>;
88
81
  bumpGasLimit(gasLimit: bigint, _gasConfig?: L1TxUtilsConfig): bigint;
89
- /**
90
- * Helper function to retry RPC calls twice
91
- */
92
- private tryTwice;
93
82
  }
94
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhZG9ubHlfbDFfdHhfdXRpbHMuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9sMV90eF91dGlscy9yZWFkb25seV9sMV90eF91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsS0FBSyxNQUFNLEVBQWdCLE1BQU0sdUJBQXVCLENBQUM7QUFFbEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBSXZELE9BQU8sRUFDTCxLQUFLLEdBQUcsRUFDUixLQUFLLE9BQU8sRUFFWixLQUFLLGNBQWMsRUFFbkIsS0FBSyxHQUFHLEVBR1IsS0FBSyxhQUFhLEVBS25CLE1BQU0sTUFBTSxDQUFDO0FBRWQsT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzlDLE9BQU8sRUFBRSxLQUFLLGVBQWUsRUFBbUQsTUFBTSxhQUFhLENBQUM7QUFRcEcsT0FBTyxLQUFLLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFLeEYscUJBQWEsaUJBQWlCO0lBS25CLE1BQU0sRUFBRSxVQUFVO0lBQ3pCLFNBQVMsQ0FBQyxNQUFNLEVBQUUsTUFBTTthQUNSLFlBQVksRUFBRSxZQUFZO0lBRTFDLFNBQVMsQ0FBQyxnQkFBZ0IsRUFBRSxPQUFPO0lBUjlCLE1BQU0sRUFBRSxRQUFRLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDekMsU0FBUyxDQUFDLFdBQVcsVUFBUztJQUU5QixZQUNTLE1BQU0sRUFBRSxVQUFVLEVBQ2YsTUFBTSxvQkFBcUQsRUFDckQsWUFBWSxFQUFFLFlBQVksRUFDMUMsTUFBTSxDQUFDLEVBQUUsT0FBTyxDQUFDLGVBQWUsQ0FBQyxFQUN2QixnQkFBZ0IsR0FBRSxPQUFlLEVBRzVDO0lBRU0sU0FBUyxTQUVmO0lBRU0sT0FBTyxTQUViO0lBRU0sUUFBUTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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
83
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhZG9ubHlfbDFfdHhfdXRpbHMuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9sMV90eF91dGlscy9yZWFkb25seV9sMV90eF91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNoRSxPQUFPLEVBQUUsS0FBSyxNQUFNLEVBQWdCLE1BQU0sdUJBQXVCLENBQUM7QUFFbEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBSXZELE9BQU8sRUFDTCxLQUFLLEdBQUcsRUFDUixLQUFLLE9BQU8sRUFFWixLQUFLLGNBQWMsRUFFbkIsS0FBSyxpQkFBaUIsRUFDdEIsS0FBSyxHQUFHLEVBR1IsS0FBSyxhQUFhLEVBS25CLE1BQU0sTUFBTSxDQUFDO0FBRWQsT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzlDLE9BQU8sRUFBRSxLQUFLLGVBQWUsRUFBbUQsTUFBTSxhQUFhLENBQUM7QUFTcEcsT0FBTyxLQUFLLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFNeEYscUJBQWEsaUJBQWlCO0lBS25CLE1BQU0sRUFBRSxVQUFVO0lBQ3pCLFNBQVMsQ0FBQyxNQUFNLEVBQUUsTUFBTTthQUNSLFlBQVksRUFBRSxZQUFZO0lBRTFDLFNBQVMsQ0FBQyxnQkFBZ0IsRUFBRSxPQUFPO0lBUjlCLE1BQU0sRUFBRSxRQUFRLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDekMsU0FBUyxDQUFDLFdBQVcsVUFBUztJQUU5QixZQUNTLE1BQU0sRUFBRSxVQUFVLEVBQ2YsTUFBTSxvQkFBcUQsRUFDckQsWUFBWSxFQUFFLFlBQVksRUFDMUMsTUFBTSxDQUFDLEVBQUUsT0FBTyxDQUFDLGVBQWUsQ0FBQyxFQUN2QixnQkFBZ0IsR0FBRSxPQUFlLEVBRzVDO0lBRU0sU0FBUyxTQUVmO0lBRU0sT0FBTyxTQUViO0lBRU0sUUFBUTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQUVkO0lBRU0sY0FBYyxvQkFFcEI7SUFFTSxPQUFPLENBQUMsT0FBTyxFQUFFLFVBQVUsR0FBRyxPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FFOUQ7SUFFRDs7T0FFRztJQUNVLFdBQVcsQ0FDdEIsa0JBQWtCLENBQUMsRUFBRSxlQUFlLEVBQ3BDLFFBQVEsR0FBRSxPQUFlLEVBQ3pCLE9BQU8sR0FBRSxNQUFVLEVBQ25CLGdCQUFnQixDQUFDLEVBQUUsT0FBTyxPQUFPLFNBQVMsQ0FBQyxHQUFHLEtBQUssR0FBRyxRQUFRLEdBQzdELE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FtSm5CO0lBRUQ7O09BRUc7SUFDVSxXQUFXLENBQ3RCLE9BQU8sRUFBRSxPQUFPLEdBQUcsR0FBRyxFQUN0QixPQUFPLEVBQUUsV0FBVyxFQUNwQixVQUFVLENBQUMsRUFBRSxlQUFlLEVBQzVCLFdBQVcsQ0FBQyxFQUFFLFlBQVksR0FDekIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQThCakI7SUFFSyxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsTUFBTSxHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsR0FBRyxTQUFTLENBQUMsQ0FZL0U7SUFFWSx5QkFBeUIsQ0FDcEMsSUFBSSxFQUFFLEdBQUcsRUFDVCxJQUFJLEVBQUU7UUFDSixJQUFJLEVBQUUsU0FBUyxHQUFHLEVBQUUsQ0FBQztRQUNyQixZQUFZLEVBQUUsTUFBTSxDQUFDO1FBQ3JCLEdBQUcsRUFBRSxHQUFHLENBQUM7UUFDVCxPQUFPLEVBQUUsR0FBRyxDQUFDO0tBQ2QsRUFDRCxVQUFVLEVBQUUsQ0FBQyxZQUFZLEdBQUc7UUFBRSxnQkFBZ0IsRUFBRSxNQUFNLENBQUE7S0FBRSxDQUFDLEdBQUcsU0FBUyxFQUNyRSxhQUFhLEdBQUUsYUFBa0IsK0JBZ0RsQztJQUVZLFFBQVEsQ0FDbkIsT0FBTyxFQUFFLFdBQVcsR0FBRztRQUFFLEdBQUcsQ0FBQyxFQUFFLE1BQU0sQ0FBQztRQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQTtLQUFFLEVBQ25ELGNBQWMsR0FBRSxjQUFjLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBTSxFQUNuRCxjQUFjLEdBQUUsYUFBa0IsRUFDbEMsR0FBRyxHQUFFLEdBQWUsRUFDcEIsVUFBVSxDQUFDLEVBQUUsZUFBZSxHQUFHO1FBQUUsbUJBQW1CLENBQUMsRUFBRSxNQUFNLENBQUE7S0FBRSxHQUM5RCxPQUFPLENBQUM7UUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDO1FBQUMsTUFBTSxFQUFFLEtBQUssTUFBTSxFQUFFLENBQUE7S0FBRSxDQUFDLENBVXJEO0lBRUQsVUFBZ0IsU0FBUyxDQUN2QixJQUFJLEVBQUUsR0FBRyxFQUNULGNBQWMsNENBQXFDLEVBQ25ELGNBQWMsMkJBQW9CLEVBQ2xDLFNBQVMsRUFBRSxlQUFlLEdBQUc7UUFBRSxtQkFBbUIsQ0FBQyxFQUFFLE1BQU0sQ0FBQTtLQUFFLEVBQzdELEdBQUcsRUFBRSxHQUFHOzs7T0FvQ1Q7SUFFTSxZQUFZLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxVQUFVLENBQUMsRUFBRSxlQUFlLEdBQUcsTUFBTSxDQVcxRTtDQUNGIn0=
@@ -1 +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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"}
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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"}
@@ -1,13 +1,15 @@
1
- import { getKeys, median, merge, pick, times } from '@aztec/foundation/collection';
1
+ import { getKeys, merge, pick, times } from '@aztec/foundation/collection';
2
2
  import { createLogger } from '@aztec/foundation/log';
3
3
  import { makeBackoff, retry } from '@aztec/foundation/retry';
4
4
  import { RollupAbi } from '@aztec/l1-artifacts/RollupAbi';
5
5
  import pickBy from 'lodash.pickby';
6
6
  import { MethodNotFoundRpcError, MethodNotSupportedRpcError, decodeErrorResult, formatGwei, getContractError, hexToBytes } from 'viem';
7
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';
8
+ import { BLOCK_TIME_MS, MAX_L1_TX_LIMIT, MIN_BLOB_REPLACEMENT_BUMP_PERCENTAGE, MIN_REPLACEMENT_BUMP_PERCENTAGE, WEI_CONST } from './constants.js';
9
+ import { P75AllTxsPriorityFeeStrategy } from './fee-strategies/index.js';
9
10
  import { getCalldataGasUsage, tryGetCustomErrorNameContractFunction } from './utils.js';
10
- const HISTORICAL_BLOCK_COUNT = 5;
11
+ // Change this to the current strategy we want to use
12
+ const CurrentStrategy = P75AllTxsPriorityFeeStrategy;
11
13
  export class ReadOnlyL1TxUtils {
12
14
  client;
13
15
  logger;
@@ -35,142 +37,43 @@ export class ReadOnlyL1TxUtils {
35
37
  getBlockNumber() {
36
38
  return this.client.getBlockNumber();
37
39
  }
38
- /**
39
- * Analyzes pending transactions and recent fee history to determine a competitive priority fee.
40
- * Falls back to network estimate if data is unavailable or fails.
41
- * @param networkEstimateResult - Result from estimateMaxPriorityFeePerGas RPC call
42
- * @param pendingBlockResult - Result from getBlock with pending tag RPC call
43
- * @param feeHistoryResult - Result from getFeeHistory RPC call
44
- * @returns A competitive priority fee based on pending txs and recent block history
45
- */ getCompetitivePriorityFee(networkEstimateResult, pendingBlockResult, feeHistoryResult) {
46
- const networkEstimate = networkEstimateResult.status === 'fulfilled' && typeof networkEstimateResult.value === 'bigint' ? networkEstimateResult.value : 0n;
47
- let competitiveFee = networkEstimate;
48
- if (pendingBlockResult.status === 'fulfilled' && pendingBlockResult.value !== null && pendingBlockResult.value.transactions && pendingBlockResult.value.transactions.length > 0) {
49
- const pendingBlock = pendingBlockResult.value;
50
- // Extract priority fees from pending transactions
51
- const pendingFees = pendingBlock.transactions.map((tx)=>{
52
- // Transaction can be just a hash string, so we need to check if it's an object
53
- if (typeof tx === 'string') {
54
- return 0n;
55
- }
56
- const fee = tx.maxPriorityFeePerGas || 0n;
57
- // Debug: Log suspicious fees
58
- if (fee > 100n * WEI_CONST) {
59
- this.logger?.warn('Suspicious high priority fee in pending tx', {
60
- txHash: tx.hash,
61
- maxPriorityFeePerGas: formatGwei(fee),
62
- maxFeePerGas: formatGwei(tx.maxFeePerGas || 0n),
63
- maxFeePerBlobGas: tx.maxFeePerBlobGas ? formatGwei(tx.maxFeePerBlobGas) : 'N/A'
64
- });
65
- }
66
- return fee;
67
- }).filter((fee)=>fee > 0n);
68
- if (pendingFees.length > 0) {
69
- // Use 75th percentile of pending fees to be competitive
70
- const sortedPendingFees = [
71
- ...pendingFees
72
- ].sort((a, b)=>a < b ? -1 : a > b ? 1 : 0);
73
- const percentile75Index = Math.floor((sortedPendingFees.length - 1) * 0.75);
74
- const pendingCompetitiveFee = sortedPendingFees[percentile75Index];
75
- if (pendingCompetitiveFee > competitiveFee) {
76
- competitiveFee = pendingCompetitiveFee;
77
- }
78
- this.logger?.debug('Analyzed pending transactions for competitive pricing', {
79
- pendingTxCount: pendingFees.length,
80
- pendingP75: formatGwei(pendingCompetitiveFee)
81
- });
82
- }
83
- }
84
- if (feeHistoryResult.status === 'fulfilled' && feeHistoryResult.value !== null && feeHistoryResult.value.reward && feeHistoryResult.value.reward.length > 0) {
85
- const feeHistory = feeHistoryResult.value;
86
- // Extract 75th percentile fees from each block
87
- const percentile75Fees = feeHistory.reward.map((rewards)=>rewards[0] || 0n).filter((fee)=>fee > 0n);
88
- if (percentile75Fees.length > 0) {
89
- // Calculate median of the 75th percentile fees across blocks
90
- const medianHistoricalFee = median(percentile75Fees) ?? 0n;
91
- // Debug: Log suspicious fees from history
92
- if (medianHistoricalFee > 100n * WEI_CONST) {
93
- this.logger?.warn('Suspicious high fee in history', {
94
- historicalMedian: formatGwei(medianHistoricalFee),
95
- allP75Fees: percentile75Fees.map((f)=>formatGwei(f))
96
- });
97
- }
98
- if (medianHistoricalFee > competitiveFee) {
99
- competitiveFee = medianHistoricalFee;
100
- }
101
- this.logger?.debug('Analyzed fee history for competitive pricing', {
102
- historicalMedian: formatGwei(medianHistoricalFee)
103
- });
104
- }
105
- }
106
- // Sanity check: cap competitive fee at 100x network estimate to avoid using unrealistic fees
107
- // (e.g., Anvil returns inflated historical fees that don't reflect actual network conditions)
108
- const maxReasonableFee = networkEstimate * 100n;
109
- if (competitiveFee > maxReasonableFee) {
110
- this.logger?.warn('Competitive fee exceeds sanity cap, using capped value', {
111
- competitiveFee: formatGwei(competitiveFee),
112
- networkEstimate: formatGwei(networkEstimate),
113
- cappedTo: formatGwei(maxReasonableFee)
114
- });
115
- competitiveFee = maxReasonableFee;
116
- }
117
- // Log final decision
118
- if (competitiveFee > networkEstimate) {
119
- this.logger?.debug('Using competitive fee from market analysis', {
120
- networkEstimate: formatGwei(networkEstimate),
121
- competitive: formatGwei(competitiveFee)
122
- });
123
- }
124
- return competitiveFee;
40
+ getCode(address) {
41
+ return this.client.getCode({
42
+ address: address.toString()
43
+ });
125
44
  }
126
45
  /**
127
46
  * Gets the current gas price with bounds checking
128
47
  */ async getGasPrice(gasConfigOverrides, isBlobTx = false, attempt = 0, previousGasPrice) {
129
48
  const gasConfig = merge(this.config, gasConfigOverrides);
130
- // Make all RPC calls in parallel upfront with retry logic
131
- const latestBlockPromise = this.tryTwice(()=>this.client.getBlock({
132
- blockTag: 'latest'
133
- }), 'Getting latest block');
134
- const networkEstimatePromise = gasConfig.fixedPriorityFeePerGas ? null : this.tryTwice(()=>this.client.estimateMaxPriorityFeePerGas(), 'Estimating max priority fee per gas');
135
- const pendingBlockPromise = gasConfig.fixedPriorityFeePerGas ? null : this.tryTwice(()=>this.client.getBlock({
136
- blockTag: 'pending',
137
- includeTransactions: true
138
- }), 'Getting pending block');
139
- const feeHistoryPromise = gasConfig.fixedPriorityFeePerGas ? null : this.tryTwice(()=>this.client.getFeeHistory({
140
- blockCount: HISTORICAL_BLOCK_COUNT,
141
- rewardPercentiles: [
142
- 75
143
- ]
144
- }), 'Getting fee history');
145
- const blobBaseFeePromise = isBlobTx ? this.tryTwice(()=>this.client.getBlobBaseFee(), 'Getting blob base fee') : null;
146
- const [latestBlockResult, networkEstimateResult, pendingBlockResult, feeHistoryResult, blobBaseFeeResult] = await Promise.allSettled([
147
- latestBlockPromise,
148
- networkEstimatePromise ?? Promise.resolve(0n),
149
- pendingBlockPromise ?? Promise.resolve(null),
150
- feeHistoryPromise ?? Promise.resolve(null),
151
- blobBaseFeePromise ?? Promise.resolve(0n)
152
- ]);
153
- // Extract results
154
- const baseFee = latestBlockResult.status === 'fulfilled' && typeof latestBlockResult.value === 'object' && latestBlockResult.value.baseFeePerGas ? latestBlockResult.value.baseFeePerGas : 0n;
155
- // Get blob base fee if available
156
- let blobBaseFee = 0n;
157
- if (isBlobTx && blobBaseFeeResult.status === 'fulfilled' && typeof blobBaseFeeResult.value === 'bigint') {
158
- blobBaseFee = blobBaseFeeResult.value;
159
- } else if (isBlobTx) {
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) {
160
60
  this.logger?.warn('Failed to get L1 blob base fee', attempt);
161
61
  }
162
- let priorityFee;
163
- if (gasConfig.fixedPriorityFeePerGas) {
164
- this.logger?.debug('Using fixed priority fee per L1 gas', {
165
- fixedPriorityFeePerGas: gasConfig.fixedPriorityFeePerGas
166
- });
167
- priorityFee = BigInt(Math.trunc(gasConfig.fixedPriorityFeePerGas * Number(WEI_CONST)));
168
- } else {
169
- // Get competitive priority fee (includes network estimate + analysis)
170
- priorityFee = this.getCompetitivePriorityFee(networkEstimateResult, pendingBlockResult, feeHistoryResult);
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
+ }
171
74
  }
172
75
  let maxFeePerGas = baseFee;
173
- let maxFeePerBlobGas = blobBaseFee;
76
+ let maxFeePerBlobGas = blobBaseFee ?? 0n;
174
77
  // Bump base fee so it's valid for next blocks if it stalls
175
78
  const numBlocks = Math.ceil(gasConfig.stallTimeMs / BLOCK_TIME_MS);
176
79
  for(let i = 0; i < numBlocks; i++){
@@ -188,17 +91,14 @@ export class ReadOnlyL1TxUtils {
188
91
  // multiply by 100 & divide by 100 to maintain some precision
189
92
  const minPriorityFee = previousGasPrice.maxPriorityFeePerGas * (100_00n + BigInt(bumpPercentage * 1_00)) / 100_00n;
190
93
  const minMaxFee = previousGasPrice.maxFeePerGas * (100_00n + BigInt(bumpPercentage * 1_00)) / 100_00n;
191
- let competitivePriorityFee = priorityFee;
192
- if (!gasConfig.fixedPriorityFeePerGas) {
193
- // Apply bump percentage to competitive fee
194
- competitivePriorityFee = priorityFee * (100_00n + BigInt(configBump * 1_00)) / 100_00n;
195
- this.logger?.debug(`Speed-up attempt ${attempt}: using competitive fee strategy`, {
196
- networkEstimate: formatGwei(priorityFee),
197
- competitiveFee: formatGwei(competitivePriorityFee),
198
- minRequired: formatGwei(minPriorityFee),
199
- bumpPercentage: configBump
200
- });
201
- }
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
+ });
202
102
  // Use maximum between competitive fee and minimum required bump
203
103
  const finalPriorityFee = competitivePriorityFee > minPriorityFee ? competitivePriorityFee : minPriorityFee;
204
104
  const feeSource = finalPriorityFee === competitivePriorityFee ? 'competitive' : 'minimum-bump';
@@ -206,20 +106,16 @@ export class ReadOnlyL1TxUtils {
206
106
  // Add the final priority fee to maxFeePerGas
207
107
  maxFeePerGas += finalPriorityFee;
208
108
  maxFeePerGas = maxFeePerGas > minMaxFee ? maxFeePerGas : minMaxFee;
209
- if (!gasConfig.fixedPriorityFeePerGas) {
210
- this.logger?.debug(`Speed-up fee decision: using ${feeSource} fee`, {
211
- finalPriorityFee: formatGwei(finalPriorityFee)
212
- });
213
- }
109
+ this.logger?.debug(`Speed-up fee decision: using ${feeSource} fee`, {
110
+ finalPriorityFee: formatGwei(finalPriorityFee)
111
+ });
214
112
  } else {
215
113
  // First attempt: apply configured bump percentage to competitive fee
216
114
  // multiply by 100 & divide by 100 to maintain some precision
217
- if (!gasConfig.fixedPriorityFeePerGas) {
218
- priorityFee = priorityFee * (100_00n + BigInt((gasConfig.priorityFeeBumpPercentage || 0) * 1_00)) / 100_00n;
219
- this.logger?.debug('Initial transaction: using competitive fee from market analysis', {
220
- networkEstimate: formatGwei(priorityFee)
221
- });
222
- }
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
+ });
223
119
  maxFeePerGas += priorityFee;
224
120
  }
225
121
  // maxGwei and maxBlobGwei are hard limits
@@ -247,7 +143,7 @@ export class ReadOnlyL1TxUtils {
247
143
  baseFee: formatGwei(baseFee),
248
144
  maxFeePerGas: formatGwei(maxFeePerGas),
249
145
  maxPriorityFeePerGas: formatGwei(maxPriorityFeePerGas),
250
- blobBaseFee: formatGwei(blobBaseFee),
146
+ blobBaseFee: formatGwei(blobBaseFee ?? 0n),
251
147
  maxFeePerBlobGas: formatGwei(maxFeePerBlobGas)
252
148
  });
253
149
  return {
@@ -274,14 +170,16 @@ export class ReadOnlyL1TxUtils {
274
170
  ...request,
275
171
  ..._blobInputs,
276
172
  maxFeePerBlobGas: gasPrice.maxFeePerBlobGas,
277
- gas: LARGE_GAS_LIMIT
173
+ gas: MAX_L1_TX_LIMIT,
174
+ blockTag: 'latest'
278
175
  });
279
176
  this.logger?.trace(`Estimated gas for blob tx: ${initialEstimate}`);
280
177
  } else {
281
178
  initialEstimate = await this.client.estimateGas({
282
179
  account,
283
180
  ...request,
284
- gas: LARGE_GAS_LIMIT
181
+ gas: MAX_L1_TX_LIMIT,
182
+ blockTag: 'latest'
285
183
  });
286
184
  this.logger?.trace(`Estimated gas for non-blob tx: ${initialEstimate}`);
287
185
  }
@@ -422,9 +320,4 @@ export class ReadOnlyL1TxUtils {
422
320
  });
423
321
  return bumpedGasLimit;
424
322
  }
425
- /**
426
- * Helper function to retry RPC calls twice
427
- */ tryTwice(fn, description) {
428
- return retry(fn, description, makeBackoff(times(2, ()=>0)), this.logger, true);
429
- }
430
323
  }
@@ -0,0 +1,56 @@
1
+ import { type Logger, type LoggerBindings } from '@aztec/foundation/log';
2
+ import type { DateProvider } from '@aztec/foundation/timer';
3
+ import { type Client, type Hex } from 'viem';
4
+ import type { ViemClient } from '../types.js';
5
+ export declare function waitUntilBlock<T extends Client>(client: T, blockNumber: number | bigint, logger?: Logger, timeout?: number): Promise<boolean>;
6
+ export declare function waitUntilL1Timestamp<T extends Client>(client: T, timestamp: number | bigint, logger?: Logger, timeout?: number): Promise<boolean>;
7
+ /** Manages tx delaying for testing, intercepting sendRawTransaction calls to delay or cancel them. */
8
+ export declare class Delayer {
9
+ dateProvider: DateProvider;
10
+ private logger;
11
+ maxInclusionTimeIntoSlot: number | undefined;
12
+ ethereumSlotDuration: bigint;
13
+ nextWait: {
14
+ l1Timestamp: bigint;
15
+ } | {
16
+ l1BlockNumber: bigint;
17
+ } | {
18
+ indefinitely: true;
19
+ } | undefined;
20
+ sentTxHashes: Hex[];
21
+ cancelledTxs: Hex[];
22
+ constructor(dateProvider: DateProvider, opts: {
23
+ ethereumSlotDuration: bigint | number;
24
+ }, bindings: LoggerBindings);
25
+ /** Returns the logger instance used by this delayer. */
26
+ getLogger(): Logger;
27
+ /** Returns the hashes of all effectively sent txs. */
28
+ getSentTxHashes(): `0x${string}`[];
29
+ /** Returns the raw hex for all cancelled txs. */
30
+ getCancelledTxs(): Hex[];
31
+ /** Delays the next tx to be sent so it lands on the given L1 block number. */
32
+ pauseNextTxUntilBlock(l1BlockNumber: number | bigint): void;
33
+ /** Delays the next tx to be sent so it lands on the given timestamp. */
34
+ pauseNextTxUntilTimestamp(l1Timestamp: number | bigint): void;
35
+ /** Delays the next tx to be sent indefinitely. */
36
+ cancelNextTx(): void;
37
+ /**
38
+ * Sets max inclusion time into slot. If more than this many seconds have passed
39
+ * since the last L1 block was mined, then any tx will not be mined in the current
40
+ * L1 slot but will be deferred for the next one.
41
+ */
42
+ setMaxInclusionTimeIntoSlot(seconds: number | undefined): void;
43
+ }
44
+ /**
45
+ * Creates a new Delayer instance. Exposed so callers can create a single shared delayer
46
+ * and pass it to multiple `wrapClientWithDelayer` calls.
47
+ */
48
+ export declare function createDelayer(dateProvider: DateProvider, opts: {
49
+ ethereumSlotDuration: bigint | number;
50
+ }, bindings: LoggerBindings): Delayer;
51
+ /**
52
+ * Wraps a viem client with tx delaying logic. Returns the wrapped client.
53
+ * The delayer intercepts sendRawTransaction calls and delays them based on the delayer's state.
54
+ */
55
+ export declare function wrapClientWithDelayer<T extends ViemClient>(client: T, delayer: Delayer): T;
56
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHhfZGVsYXllci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2wxX3R4X3V0aWxzL3R4X2RlbGF5ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLEtBQUssTUFBTSxFQUFFLEtBQUssY0FBYyxFQUFnQixNQUFNLHVCQUF1QixDQUFDO0FBRXZGLE9BQU8sS0FBSyxFQUFFLFlBQVksRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRzVELE9BQU8sRUFDTCxLQUFLLE1BQU0sRUFDWCxLQUFLLEdBQUcsRUFVVCxNQUFNLE1BQU0sQ0FBQztBQUVkLE9BQU8sS0FBSyxFQUE0QixVQUFVLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFJeEUsd0JBQWdCLGNBQWMsQ0FBQyxDQUFDLFNBQVMsTUFBTSxFQUM3QyxNQUFNLEVBQUUsQ0FBQyxFQUNULFdBQVcsRUFBRSxNQUFNLEdBQUcsTUFBTSxFQUM1QixNQUFNLENBQUMsRUFBRSxNQUFNLEVBQ2YsT0FBTyxDQUFDLEVBQUUsTUFBTSxvQkFpQmpCO0FBRUQsd0JBQWdCLG9CQUFvQixDQUFDLENBQUMsU0FBUyxNQUFNLEVBQ25ELE1BQU0sRUFBRSxDQUFDLEVBQ1QsU0FBUyxFQUFFLE1BQU0sR0FBRyxNQUFNLEVBQzFCLE1BQU0sQ0FBQyxFQUFFLE1BQU0sRUFDZixPQUFPLENBQUMsRUFBRSxNQUFNLG9CQXdCakI7QUFFRCxzR0FBc0c7QUFDdEcscUJBQWEsT0FBTztJQVVULFlBQVksRUFBRSxZQUFZO0lBVG5DLE9BQU8sQ0FBQyxNQUFNLENBQVM7SUFFaEIsd0JBQXdCLEVBQUUsTUFBTSxHQUFHLFNBQVMsQ0FBYTtJQUN6RCxvQkFBb0IsRUFBRSxNQUFNLENBQUM7SUFDN0IsUUFBUSxFQUFFO1FBQUUsV0FBVyxFQUFFLE1BQU0sQ0FBQTtLQUFFLEdBQUc7UUFBRSxhQUFhLEVBQUUsTUFBTSxDQUFBO0tBQUUsR0FBRztRQUFFLFlBQVksRUFBRSxJQUFJLENBQUE7S0FBRSxHQUFHLFNBQVMsQ0FBYTtJQUMvRyxZQUFZLEVBQUUsR0FBRyxFQUFFLENBQU07SUFDekIsWUFBWSxFQUFFLEdBQUcsRUFBRSxDQUFNO0lBRWhDLFlBQ1MsWUFBWSxFQUFFLFlBQVksRUFDakMsSUFBSSxFQUFFO1FBQUUsb0JBQW9CLEVBQUUsTUFBTSxHQUFHLE1BQU0sQ0FBQTtLQUFFLEVBQy9DLFFBQVEsRUFBRSxjQUFjLEVBSXpCO0lBRUQsd0RBQXdEO0lBQ3hELFNBQVMsSUFBSSxNQUFNLENBRWxCO0lBRUQsc0RBQXNEO0lBQ3RELGVBQWUsb0JBRWQ7SUFFRCxpREFBaUQ7SUFDakQsZUFBZSxJQUFJLEdBQUcsRUFBRSxDQUV2QjtJQUVELDhFQUE4RTtJQUM5RSxxQkFBcUIsQ0FBQyxhQUFhLEVBQUUsTUFBTSxHQUFHLE1BQU0sUUFFbkQ7SUFFRCx3RUFBd0U7SUFDeEUseUJBQXlCLENBQUMsV0FBVyxFQUFFLE1BQU0sR0FBRyxNQUFNLFFBRXJEO0lBRUQsa0RBQWtEO0lBQ2xELFlBQVksU0FFWDtJQUVEOzs7O09BSUc7SUFDSCwyQkFBMkIsQ0FBQyxPQUFPLEVBQUUsTUFBTSxHQUFHLFNBQVMsUUFFdEQ7Q0FDRjtBQUVEOzs7R0FHRztBQUNILHdCQUFnQixhQUFhLENBQzNCLFlBQVksRUFBRSxZQUFZLEVBQzFCLElBQUksRUFBRTtJQUFFLG9CQUFvQixFQUFFLE1BQU0sR0FBRyxNQUFNLENBQUE7Q0FBRSxFQUMvQyxRQUFRLEVBQUUsY0FBYyxHQUN2QixPQUFPLENBRVQ7QUFhRDs7O0dBR0c7QUFDSCx3QkFBZ0IscUJBQXFCLENBQUMsQ0FBQyxTQUFTLFVBQVUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEdBQUcsQ0FBQyxDQWtIMUYifQ==
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tx_delayer.d.ts","sourceRoot":"","sources":["../../src/l1_tx_utils/tx_delayer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,MAAM,EAAE,KAAK,cAAc,EAAgB,MAAM,uBAAuB,CAAC;AAEvF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAG5D,OAAO,EACL,KAAK,MAAM,EACX,KAAK,GAAG,EAUT,MAAM,MAAM,CAAC;AAEd,OAAO,KAAK,EAA4B,UAAU,EAAE,MAAM,aAAa,CAAC;AAIxE,wBAAgB,cAAc,CAAC,CAAC,SAAS,MAAM,EAC7C,MAAM,EAAE,CAAC,EACT,WAAW,EAAE,MAAM,GAAG,MAAM,EAC5B,MAAM,CAAC,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,MAAM,oBAiBjB;AAED,wBAAgB,oBAAoB,CAAC,CAAC,SAAS,MAAM,EACnD,MAAM,EAAE,CAAC,EACT,SAAS,EAAE,MAAM,GAAG,MAAM,EAC1B,MAAM,CAAC,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,MAAM,oBAwBjB;AAED,sGAAsG;AACtG,qBAAa,OAAO;IAUT,YAAY,EAAE,YAAY;IATnC,OAAO,CAAC,MAAM,CAAS;IAEhB,wBAAwB,EAAE,MAAM,GAAG,SAAS,CAAa;IACzD,oBAAoB,EAAE,MAAM,CAAC;IAC7B,QAAQ,EAAE;QAAE,WAAW,EAAE,MAAM,CAAA;KAAE,GAAG;QAAE,aAAa,EAAE,MAAM,CAAA;KAAE,GAAG;QAAE,YAAY,EAAE,IAAI,CAAA;KAAE,GAAG,SAAS,CAAa;IAC/G,YAAY,EAAE,GAAG,EAAE,CAAM;IACzB,YAAY,EAAE,GAAG,EAAE,CAAM;IAEhC,YACS,YAAY,EAAE,YAAY,EACjC,IAAI,EAAE;QAAE,oBAAoB,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,EAC/C,QAAQ,EAAE,cAAc,EAIzB;IAED,wDAAwD;IACxD,SAAS,IAAI,MAAM,CAElB;IAED,sDAAsD;IACtD,eAAe,oBAEd;IAED,iDAAiD;IACjD,eAAe,IAAI,GAAG,EAAE,CAEvB;IAED,8EAA8E;IAC9E,qBAAqB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,QAEnD;IAED,wEAAwE;IACxE,yBAAyB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,QAErD;IAED,kDAAkD;IAClD,YAAY,SAEX;IAED;;;;OAIG;IACH,2BAA2B,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,QAEtD;CACF;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,YAAY,EAAE,YAAY,EAC1B,IAAI,EAAE;IAAE,oBAAoB,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,EAC/C,QAAQ,EAAE,cAAc,GACvB,OAAO,CAET;AAaD;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,CAAC,SAAS,UAAU,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,GAAG,CAAC,CAkH1F"}