@aztec/ethereum 0.0.1-commit.a5db02d → 0.0.1-commit.aa0c64f
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.
- package/dest/config.d.ts +13 -3
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +30 -3
- package/dest/contracts/multicall.d.ts +5 -3
- package/dest/contracts/multicall.d.ts.map +1 -1
- package/dest/contracts/multicall.js +7 -5
- package/dest/deploy_aztec_l1_contracts.d.ts +15 -4
- package/dest/deploy_aztec_l1_contracts.d.ts.map +1 -1
- package/dest/deploy_aztec_l1_contracts.js +13 -9
- package/dest/l1_tx_utils/l1_fee_analyzer.d.ts +23 -4
- package/dest/l1_tx_utils/l1_fee_analyzer.d.ts.map +1 -1
- package/dest/l1_tx_utils/l1_fee_analyzer.js +65 -3
- package/dest/l1_tx_utils/l1_tx_utils.d.ts +1 -1
- package/dest/l1_tx_utils/l1_tx_utils.d.ts.map +1 -1
- package/dest/l1_tx_utils/l1_tx_utils.js +27 -7
- package/dest/l1_tx_utils/types.d.ts +27 -1
- package/dest/l1_tx_utils/types.d.ts.map +1 -1
- package/dest/l1_tx_utils/types.js +10 -0
- package/dest/queries.d.ts +1 -1
- package/dest/queries.d.ts.map +1 -1
- package/dest/queries.js +7 -1
- package/dest/test/eth_cheat_codes.d.ts +7 -1
- package/dest/test/eth_cheat_codes.d.ts.map +1 -1
- package/dest/test/eth_cheat_codes.js +29 -4
- package/dest/utils.js +8 -11
- package/package.json +5 -6
- package/src/config.ts +38 -3
- package/src/contracts/multicall.ts +8 -5
- package/src/deploy_aztec_l1_contracts.ts +13 -8
- package/src/l1_tx_utils/l1_fee_analyzer.ts +75 -3
- package/src/l1_tx_utils/l1_tx_utils.ts +19 -2
- package/src/l1_tx_utils/types.ts +32 -0
- package/src/queries.ts +6 -0
- package/src/test/eth_cheat_codes.ts +23 -2
- package/src/utils.ts +11 -11
- package/dest/generated/l1-contracts-defaults.d.ts +0 -30
- package/dest/generated/l1-contracts-defaults.d.ts.map +0 -1
- package/dest/generated/l1-contracts-defaults.js +0 -30
- package/src/generated/l1-contracts-defaults.ts +0 -32
|
@@ -14,7 +14,7 @@ import { l1TxUtilsConfigMappings } from './config.js';
|
|
|
14
14
|
import { MAX_L1_TX_LIMIT } from './constants.js';
|
|
15
15
|
import { ReadOnlyL1TxUtils } from './readonly_l1_tx_utils.js';
|
|
16
16
|
import { createDelayer, wrapClientWithDelayer } from './tx_delayer.js';
|
|
17
|
-
import { DroppedTransactionError, TerminalTxUtilsState, TxUtilsState, UnknownMinedTxError } from './types.js';
|
|
17
|
+
import { DroppedTransactionError, L1TxTimeoutError, TerminalTxUtilsState, TxUtilsState, UnknownMinedTxError } from './types.js';
|
|
18
18
|
const MAX_L1_TX_STATES = 32;
|
|
19
19
|
// Backoff (in seconds) for retrying the read-only RPC calls that prepare a tx cancellation. A
|
|
20
20
|
// cancellation is fired in the background after a tx times out and is important (it frees the stuck
|
|
@@ -234,7 +234,10 @@ export class L1TxUtils extends ReadOnlyL1TxUtils {
|
|
|
234
234
|
status: TxUtilsState.IDLE,
|
|
235
235
|
txConfigOverrides: gasConfigOverrides ?? {},
|
|
236
236
|
sentAtL1Ts: now,
|
|
237
|
-
lastSentAtL1Ts: now
|
|
237
|
+
lastSentAtL1Ts: now,
|
|
238
|
+
gasPriceHistory: [
|
|
239
|
+
baseState.gasPrice
|
|
240
|
+
]
|
|
238
241
|
};
|
|
239
242
|
// And persist it
|
|
240
243
|
await this.updateState(l1TxState, stateChange);
|
|
@@ -424,6 +427,7 @@ export class L1TxUtils extends ReadOnlyL1TxUtils {
|
|
|
424
427
|
if (timePassed >= stallTimeMs && attempts <= maxSpeedUpAttempts) {
|
|
425
428
|
const newGasPrice = await this.getGasPrice(gasConfig, isBlobTx, attempts, state.gasPrice);
|
|
426
429
|
state.gasPrice = newGasPrice;
|
|
430
|
+
state.gasPriceHistory?.push(newGasPrice);
|
|
427
431
|
this.logger.debug(`Tx ${currentTxHash} with nonce ${nonce} from ${account} appears stuck. ` + `Attempting speed-up ${attempts}/${maxSpeedUpAttempts} ` + `with new priority fee ${formatGwei(newGasPrice.maxPriorityFeePerGas)} gwei.`, {
|
|
428
432
|
account,
|
|
429
433
|
nonce,
|
|
@@ -559,11 +563,27 @@ export class L1TxUtils extends ReadOnlyL1TxUtils {
|
|
|
559
563
|
* @returns The receipt of the successful transaction
|
|
560
564
|
*/ async sendAndMonitorTransaction(request, gasConfig, blobInputs) {
|
|
561
565
|
const { state } = await this.sendTransaction(request, gasConfig, blobInputs);
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
566
|
+
try {
|
|
567
|
+
const receipt = await this.monitorTransaction(state);
|
|
568
|
+
return {
|
|
569
|
+
receipt,
|
|
570
|
+
state
|
|
571
|
+
};
|
|
572
|
+
} catch (err) {
|
|
573
|
+
if (err instanceof TimeoutError) {
|
|
574
|
+
// Snapshot the ladder now: the fire-and-forget cancellation mutates state.gasPrice moments later.
|
|
575
|
+
throw new L1TxTimeoutError(err.message, {
|
|
576
|
+
gasPriceHistory: state.gasPriceHistory ? [
|
|
577
|
+
...state.gasPriceHistory
|
|
578
|
+
] : undefined,
|
|
579
|
+
finalGasPrice: state.gasPrice,
|
|
580
|
+
attempts: state.txHashes.length,
|
|
581
|
+
nonce: state.nonce,
|
|
582
|
+
gasLimit: state.gasLimit
|
|
583
|
+
});
|
|
584
|
+
}
|
|
585
|
+
throw err;
|
|
586
|
+
}
|
|
567
587
|
}
|
|
568
588
|
async simulate(request, _blockOverrides = {}, stateOverrides = [], abi = RollupAbi, _gasConfig) {
|
|
569
589
|
const blockOverrides = {
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { BlobKzgInstance } from '@aztec/blob-lib/types';
|
|
2
|
+
import { TimeoutError } from '@aztec/foundation/error';
|
|
2
3
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
3
4
|
import type { ViemTransactionSignature } from '@aztec/foundation/eth-signature';
|
|
4
5
|
import type { Abi, Address, Hex, TransactionReceipt, TransactionSerializable } from 'viem';
|
|
@@ -48,6 +49,12 @@ export type L1TxState = {
|
|
|
48
49
|
cancelTxHashes: Hex[];
|
|
49
50
|
gasLimit: bigint;
|
|
50
51
|
gasPrice: GasPrice;
|
|
52
|
+
/**
|
|
53
|
+
* Prices used for each attempt (initial send followed by each speed-up), in order. Always set on
|
|
54
|
+
* newly sent txs; optional because states restored from the state store predate the field.
|
|
55
|
+
* In-memory only — not persisted by the state store.
|
|
56
|
+
*/
|
|
57
|
+
gasPriceHistory?: GasPrice[];
|
|
51
58
|
txConfigOverrides: L1TxConfig;
|
|
52
59
|
request: L1TxRequest;
|
|
53
60
|
status: TxUtilsState;
|
|
@@ -64,4 +71,23 @@ export declare class UnknownMinedTxError extends Error {
|
|
|
64
71
|
export declare class DroppedTransactionError extends Error {
|
|
65
72
|
constructor(nonce: number, account: string);
|
|
66
73
|
}
|
|
67
|
-
|
|
74
|
+
/** Snapshot of what a timed-out L1 tx tried to pay, taken when the timeout is raised. */
|
|
75
|
+
export type TimedOutTxState = {
|
|
76
|
+
/** Prices used across the initial send and each speed-up, in order (undefined only for restored states). */
|
|
77
|
+
gasPriceHistory?: GasPrice[];
|
|
78
|
+
/** The last price the tx was sent at before timing out. */
|
|
79
|
+
finalGasPrice: GasPrice;
|
|
80
|
+
/** Number of send attempts (initial + speed-ups). */
|
|
81
|
+
attempts: number;
|
|
82
|
+
nonce: number;
|
|
83
|
+
gasLimit: bigint;
|
|
84
|
+
};
|
|
85
|
+
/**
|
|
86
|
+
* Thrown by sendAndMonitorTransaction when a tx times out. Subclasses TimeoutError so existing
|
|
87
|
+
* `instanceof TimeoutError` checks keep working, while carrying the gas-price ladder for diagnostics.
|
|
88
|
+
*/
|
|
89
|
+
export declare class L1TxTimeoutError extends TimeoutError {
|
|
90
|
+
readonly txState: TimedOutTxState;
|
|
91
|
+
constructor(message: string, txState: TimedOutTxState);
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9sMV90eF91dGlscy90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxlQUFlLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzNELE9BQU8sS0FBSyxFQUFFLHdCQUF3QixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFaEYsT0FBTyxLQUFLLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsa0JBQWtCLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFM0YsT0FBTyxLQUFLLEVBQUUsZUFBZSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRW5ELE1BQU0sV0FBVyxXQUFXO0lBQzFCLEVBQUUsRUFBRSxPQUFPLEdBQUcsSUFBSSxDQUFDO0lBQ25CLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQztJQUNYLEtBQUssQ0FBQyxFQUFFLE1BQU0sQ0FBQztJQUNmLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQztDQUNYO0FBRUQsTUFBTSxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsZUFBZSxDQUFDLEdBQUc7SUFBRSxRQUFRLENBQUMsRUFBRSxNQUFNLENBQUM7SUFBQyxXQUFXLENBQUMsRUFBRSxJQUFJLENBQUE7Q0FBRSxDQUFDO0FBRTlGLE1BQU0sV0FBVyxZQUFZO0lBQzNCLEtBQUssRUFBRSxVQUFVLEVBQUUsQ0FBQztJQUNwQixHQUFHLEVBQUUsZUFBZSxDQUFDO0lBQ3JCLGdCQUFnQixDQUFDLEVBQUUsTUFBTSxDQUFDO0NBQzNCO0FBRUQsTUFBTSxXQUFXLFFBQVE7SUFDdkIsWUFBWSxFQUFFLE1BQU0sQ0FBQztJQUNyQixvQkFBb0IsRUFBRSxNQUFNLENBQUM7SUFDN0IsZ0JBQWdCLENBQUMsRUFBRSxNQUFNLENBQUM7Q0FDM0I7QUFFRCxNQUFNLE1BQU0sZ0JBQWdCLEdBQUc7SUFDN0IsNkJBQTZCO0lBQzdCLE1BQU0sRUFBRSxNQUFNLENBQUM7SUFDZiwrQkFBK0I7SUFDL0IsZUFBZSxFQUFFLE1BQU0sQ0FBQztJQUN4Qix1Q0FBdUM7SUFDdkMsWUFBWSxFQUFFLE1BQU0sQ0FBQztJQUNyQiw0RkFBNEY7SUFDNUYsV0FBVyxFQUFFLE1BQU0sQ0FBQztDQUNyQixDQUFDO0FBRUYsb0JBQVksWUFBWTtJQUN0QixJQUFJLElBQUE7SUFDSixJQUFJLElBQUE7SUFDSixRQUFRLElBQUE7SUFDUixTQUFTLElBQUE7SUFDVCxTQUFTLElBQUE7SUFDVCxLQUFLLElBQUE7Q0FDTjtBQUVELGVBQU8sTUFBTSxvQkFBb0IsZ0JBQWtFLENBQUM7QUFFcEcsTUFBTSxNQUFNLFNBQVMsR0FBRztJQUN0QixFQUFFLEVBQUUsTUFBTSxDQUFDO0lBQ1gsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2hCLGNBQWMsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUN0QixRQUFRLEVBQUUsTUFBTSxDQUFDO0lBQ2pCLFFBQVEsRUFBRSxRQUFRLENBQUM7SUFDbkI7Ozs7T0FJRztJQUNILGVBQWUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDO0lBQzdCLGlCQUFpQixFQUFFLFVBQVUsQ0FBQztJQUM5QixPQUFPLEVBQUUsV0FBVyxDQUFDO0lBQ3JCLE1BQU0sRUFBRSxZQUFZLENBQUM7SUFDckIsS0FBSyxFQUFFLE1BQU0sQ0FBQztJQUNkLFVBQVUsRUFBRSxJQUFJLENBQUM7SUFDakIsY0FBYyxFQUFFLElBQUksQ0FBQztJQUNyQixPQUFPLENBQUMsRUFBRSxrQkFBa0IsQ0FBQztJQUM3QixVQUFVLEVBQUUsWUFBWSxHQUFHLFNBQVMsQ0FBQztDQUN0QyxDQUFDO0FBRUYsTUFBTSxNQUFNLGVBQWUsR0FBRyxDQUM1QixXQUFXLEVBQUUsdUJBQXVCLEVBQ3BDLGNBQWMsRUFBRSxVQUFVLEtBQ3ZCLE9BQU8sQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO0FBRXZDLHFCQUFhLG1CQUFvQixTQUFRLEtBQUs7SUFDNUMsWUFBWSxLQUFLLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBR3pDO0NBQ0Y7QUFFRCxxQkFBYSx1QkFBd0IsU0FBUSxLQUFLO0lBQ2hELFlBQVksS0FBSyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUd6QztDQUNGO0FBRUQseUZBQXlGO0FBQ3pGLE1BQU0sTUFBTSxlQUFlLEdBQUc7SUFDNUIsNEdBQTRHO0lBQzVHLGVBQWUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDO0lBQzdCLDJEQUEyRDtJQUMzRCxhQUFhLEVBQUUsUUFBUSxDQUFDO0lBQ3hCLHFEQUFxRDtJQUNyRCxRQUFRLEVBQUUsTUFBTSxDQUFDO0lBQ2pCLEtBQUssRUFBRSxNQUFNLENBQUM7SUFDZCxRQUFRLEVBQUUsTUFBTSxDQUFDO0NBQ2xCLENBQUM7QUFFRjs7O0dBR0c7QUFDSCxxQkFBYSxnQkFBaUIsU0FBUSxZQUFZO2FBRzlCLE9BQU8sRUFBRSxlQUFlO0lBRjFDLFlBQ0UsT0FBTyxFQUFFLE1BQU0sRUFDQyxPQUFPLEVBQUUsZUFBZSxFQUd6QztDQUNGIn0=
|
|
@@ -1 +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"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/l1_tx_utils/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { TimeoutError } from '@aztec/foundation/error';
|
|
1
2
|
export var TxUtilsState = /*#__PURE__*/ function(TxUtilsState) {
|
|
2
3
|
TxUtilsState[TxUtilsState["IDLE"] = 0] = "IDLE";
|
|
3
4
|
TxUtilsState[TxUtilsState["SENT"] = 1] = "SENT";
|
|
@@ -24,3 +25,12 @@ export class DroppedTransactionError extends Error {
|
|
|
24
25
|
this.name = 'DroppedTransactionError';
|
|
25
26
|
}
|
|
26
27
|
}
|
|
28
|
+
/**
|
|
29
|
+
* Thrown by sendAndMonitorTransaction when a tx times out. Subclasses TimeoutError so existing
|
|
30
|
+
* `instanceof TimeoutError` checks keep working, while carrying the gas-price ladder for diagnostics.
|
|
31
|
+
*/ export class L1TxTimeoutError extends TimeoutError {
|
|
32
|
+
txState;
|
|
33
|
+
constructor(message, txState){
|
|
34
|
+
super(message), this.txState = txState;
|
|
35
|
+
}
|
|
36
|
+
}
|
package/dest/queries.d.ts
CHANGED
|
@@ -22,4 +22,4 @@ export declare function getL1ContractsConfig(publicClient: ViemPublicClient, add
|
|
|
22
22
|
rollupVersion: number;
|
|
23
23
|
genesisArchiveTreeRoot: `0x${string}`;
|
|
24
24
|
}>;
|
|
25
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
25
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcmllcy5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3F1ZXJpZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRTNELE9BQU8sRUFBYSxLQUFLLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUU3QyxPQUFPLEVBQTRCLEtBQUssaUJBQWlCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFLL0UsT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRS9EOzs7R0FHRztBQUNILHdCQUFzQixtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsVUFBVSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxXQUFXLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FTcEg7QUFtQkQ7OztHQUdHO0FBQ0gsd0JBQWdCLGdDQUFnQyxDQUFDLEdBQUcsRUFBRSxPQUFPLEdBQUcsT0FBTyxDQWtCdEU7QUFVRCxxREFBcUQ7QUFDckQsd0JBQXNCLG9CQUFvQixDQUN4QyxZQUFZLEVBQUUsZ0JBQWdCLEVBQzlCLFNBQVMsRUFBRTtJQUFFLGlCQUFpQixFQUFFLFVBQVUsQ0FBQztJQUFDLGFBQWEsQ0FBQyxFQUFFLFVBQVUsQ0FBQTtDQUFFLEdBQ3ZFLE9BQU8sQ0FDUixJQUFJLENBQUMsaUJBQWlCLEVBQUUsc0JBQXNCLENBQUMsR0FBRztJQUNoRCxZQUFZLEVBQUUsTUFBTSxDQUFDO0lBQ3JCLGFBQWEsRUFBRSxNQUFNLENBQUM7SUFDdEIsYUFBYSxFQUFFLE1BQU0sQ0FBQztJQUN0QixzQkFBc0IsRUFBRSxLQUFLLE1BQU0sRUFBRSxDQUFDO0NBQ3ZDLENBQ0YsQ0E2R0EifQ==
|
package/dest/queries.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queries.d.ts","sourceRoot":"","sources":["../src/queries.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAE3D,OAAO,EAAa,KAAK,KAAK,EAAE,MAAM,MAAM,CAAC;AAE7C,OAAO,EAA4B,KAAK,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAK/E,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE/D;;;GAGG;AACH,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,WAAW,CAAC,GAAG,SAAS,CAAC,CASpH;AAmBD;;;GAGG;AACH,wBAAgB,gCAAgC,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAkBtE;AAUD,qDAAqD;AACrD,wBAAsB,oBAAoB,CACxC,YAAY,EAAE,gBAAgB,EAC9B,SAAS,EAAE;IAAE,iBAAiB,EAAE,UAAU,CAAC;IAAC,aAAa,CAAC,EAAE,UAAU,CAAA;CAAE,GACvE,OAAO,CACR,IAAI,CAAC,iBAAiB,EAAE,sBAAsB,CAAC,GAAG;IAChD,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,sBAAsB,EAAE,KAAK,MAAM,EAAE,CAAC;CACvC,CACF,
|
|
1
|
+
{"version":3,"file":"queries.d.ts","sourceRoot":"","sources":["../src/queries.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAE3D,OAAO,EAAa,KAAK,KAAK,EAAE,MAAM,MAAM,CAAC;AAE7C,OAAO,EAA4B,KAAK,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAK/E,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE/D;;;GAGG;AACH,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,WAAW,CAAC,GAAG,SAAS,CAAC,CASpH;AAmBD;;;GAGG;AACH,wBAAgB,gCAAgC,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAkBtE;AAUD,qDAAqD;AACrD,wBAAsB,oBAAoB,CACxC,YAAY,EAAE,gBAAgB,EAC9B,SAAS,EAAE;IAAE,iBAAiB,EAAE,UAAU,CAAC;IAAC,aAAa,CAAC,EAAE,UAAU,CAAA;CAAE,GACvE,OAAO,CACR,IAAI,CAAC,iBAAiB,EAAE,sBAAsB,CAAC,GAAG;IAChD,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,sBAAsB,EAAE,KAAK,MAAM,EAAE,CAAC;CACvC,CACF,CA6GA"}
|
package/dest/queries.js
CHANGED
|
@@ -138,6 +138,12 @@ function matchesFinalizedBlockTagNotFound(e) {
|
|
|
138
138
|
slashAmountSmall: slashingAmounts[0],
|
|
139
139
|
slashAmountMedium: slashingAmounts[1],
|
|
140
140
|
slashAmountLarge: slashingAmounts[2],
|
|
141
|
-
initialEthPerFeeAsset: DefaultL1ContractsConfig.initialEthPerFeeAsset
|
|
141
|
+
initialEthPerFeeAsset: DefaultL1ContractsConfig.initialEthPerFeeAsset,
|
|
142
|
+
// Not exposed by the rollup contract; fall back to defaults like the other non-on-chain fields above.
|
|
143
|
+
entryQueueBootstrapValidatorSetSize: DefaultL1ContractsConfig.entryQueueBootstrapValidatorSetSize,
|
|
144
|
+
entryQueueBootstrapFlushSize: DefaultL1ContractsConfig.entryQueueBootstrapFlushSize,
|
|
145
|
+
entryQueueFlushSizeMin: DefaultL1ContractsConfig.entryQueueFlushSizeMin,
|
|
146
|
+
entryQueueFlushSizeQuotient: DefaultL1ContractsConfig.entryQueueFlushSizeQuotient,
|
|
147
|
+
entryQueueMaxFlushSize: DefaultL1ContractsConfig.entryQueueMaxFlushSize
|
|
142
148
|
};
|
|
143
149
|
}
|
|
@@ -237,6 +237,12 @@ export declare class EthCheatCodes {
|
|
|
237
237
|
* reorg is needed because anvil applies a new gas limit only to future blocks: without it the just-mined
|
|
238
238
|
* blocks would keep the tiny gas limit, and an `eth_call` against `latest` (whose gas is capped by the
|
|
239
239
|
* block gas limit) would revert with "intrinsic gas too high".
|
|
240
|
+
*
|
|
241
|
+
* The replacement blocks advance L1 time. `anvil_reorg` stamps each replacement as `parent + N*interval`,
|
|
242
|
+
* so on its own it would freeze L1 time at the parent timestamp; callers that measure elapsed L1 time
|
|
243
|
+
* (L1TxUtils stall/timeout detection, `syncDateProvider`-driven slot advancement) rely on it moving
|
|
244
|
+
* forward. We reproduce the wall-clock advance the mine step just made (at least 1s per block) via a
|
|
245
|
+
* temporary block-timestamp interval, then restore any pre-existing interval.
|
|
240
246
|
*/
|
|
241
247
|
mineEmptyBlock(blockCount?: number): Promise<void>;
|
|
242
248
|
/** Returns the gas limit of the latest mined L1 block. */
|
|
@@ -251,4 +257,4 @@ export type TxPoolTransaction = Transaction & {
|
|
|
251
257
|
poolState: TxPoolState;
|
|
252
258
|
};
|
|
253
259
|
export {};
|
|
254
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
260
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXRoX2NoZWF0X2NvZGVzLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVzdC9ldGhfY2hlYXRfY29kZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBSTNELE9BQU8sS0FBSyxFQUFFLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRTlFLE9BQU8sRUFBRSxLQUFLLEtBQUssRUFBRSxLQUFLLEdBQUcsRUFBRSxLQUFLLFdBQVcsRUFBbUQsTUFBTSxNQUFNLENBQUM7QUFHL0csT0FBTyxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFcEQ7O0dBRUc7QUFDSCxxQkFBYSxhQUFhO0lBR3RCOztPQUVHO0lBQ0ksT0FBTyxFQUFFLE1BQU0sRUFBRTtJQUN4Qjs7T0FFRztJQUNJLFlBQVksRUFBRSxZQUFZLEdBQUcsZ0JBQWdCO0lBQ3BEOztPQUVHO0lBQ0ksTUFBTTtJQUNiOztPQUVHO0lBQ0ksS0FBSyxFQUFFLEtBQUs7SUFqQnJCLFNBQWdCLFlBQVksRUFBRSxnQkFBZ0IsQ0FBQztJQUMvQztJQUNFOztPQUVHO0lBQ0ksT0FBTyxFQUFFLE1BQU0sRUFBRTtJQUN4Qjs7T0FFRztJQUNJLFlBQVksRUFBRSxZQUFZLEdBQUcsZ0JBQWdCO0lBQ3BEOztPQUVHO0lBQ0ksTUFBTSx5Q0FBdUM7SUFDcEQ7O09BRUc7SUFDSSxLQUFLLEdBQUUsS0FBZSxFQU05QjtJQUVNLE9BQU8sQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsZ0JBRzNDO1lBRWEsU0FBUztJQU92Qjs7O09BR0c7SUFDVSxZQUFZLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQVE1QztJQUVEOzs7T0FHRztJQUNVLFdBQVcsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLENBRzFDO0lBRUQ7OztPQUdHO0lB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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"eth_cheat_codes.d.ts","sourceRoot":"","sources":["../../src/test/eth_cheat_codes.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"eth_cheat_codes.d.ts","sourceRoot":"","sources":["../../src/test/eth_cheat_codes.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAI3D,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE9E,OAAO,EAAE,KAAK,KAAK,EAAE,KAAK,GAAG,EAAE,KAAK,WAAW,EAAmD,MAAM,MAAM,CAAC;AAG/G,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpD;;GAEG;AACH,qBAAa,aAAa;IAGtB;;OAEG;IACI,OAAO,EAAE,MAAM,EAAE;IACxB;;OAEG;IACI,YAAY,EAAE,YAAY,GAAG,gBAAgB;IACpD;;OAEG;IACI,MAAM;IACb;;OAEG;IACI,KAAK,EAAE,KAAK;IAjBrB,SAAgB,YAAY,EAAE,gBAAgB,CAAC;IAC/C;IACE;;OAEG;IACI,OAAO,EAAE,MAAM,EAAE;IACxB;;OAEG;IACI,YAAY,EAAE,YAAY,GAAG,gBAAgB;IACpD;;OAEG;IACI,MAAM,yCAAuC;IACpD;;OAEG;IACI,KAAK,GAAE,KAAe,EAM9B;IAEM,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,gBAG3C;YAEa,SAAS;IAOvB;;;OAGG;IACU,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC,CAQ5C;IAED;;;OAGG;IACU,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC,CAG1C;IAED;;;OAGG;IACU,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC,CAGtC;IAED;;;;;OAKG;IACU,kBAAkB,IAAI,OAAO,CAAC,MAAM,CAAC,CAGjD;IAED;;;;OAIG;IACU,kBAAkB,IAAI,OAAO,CAAC,MAAM,CAAC,CAGjD;IAED;;;OAGG;IACU,IAAI,CAAC,cAAc,GAAE,MAAM,GAAG,MAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAGpE;YAEa,MAAM;IAQpB;;OAEG;IACU,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAOpC;IAED;;;;OAIG;IACU,UAAU,CAAC,OAAO,EAAE,UAAU,GAAG,GAAG,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAOjF;IAEY,UAAU,CAAC,OAAO,EAAE,UAAU,GAAG,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,CAGlE;IAED;;;OAGG;IACU,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAO7D;IAED;;;OAGG;IACU,yBAAyB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAO9E;IAED;;;OAGG;IACI,iBAAiB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAMjD;IAED;;;OAGG;IACU,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAA;KAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAS9F;IAED;;OAEG;IACU,iCAAiC,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAW7E;IAED;;;OAGG;IACU,WAAW,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,GAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAA;KAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAS1F;IAED;;;OAGG;IACU,eAAe,CAAC,MAAM,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAOvD;IAED;;;OAGG;IACU,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAS1E;IAED;;;;;OAKG;IACU,IAAI,CACf,SAAS,EAAE,MAAM,GAAG,MAAM,EAC1B,IAAI,GAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAC;QAAC,kBAAkB,CAAC,EAAE,OAAO,CAAA;KAAO,GAC5D,OAAO,CAAC,IAAI,CAAC,CA6Bf;IAED;;;;;OAKG;IACU,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAGrE;IAED;;;;;OAKG;IACU,KAAK,CAChB,QAAQ,EAAE,UAAU,EACpB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,IAAI,GAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAA;KAAO,GAC9B,OAAO,CAAC,IAAI,CAAC,CAUf;IAED;;;;;OAKG;IACI,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAItD;IAED;;;OAGG;IACU,kBAAkB,CAAC,GAAG,EAAE,UAAU,GAAG,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAYpE;IAED;;;OAGG;IACU,iBAAiB,CAAC,GAAG,EAAE,UAAU,GAAG,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAOnE;IAED;;;;OAIG;IACU,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAO9E;IAED;;;;OAIG;IACU,WAAW,CAAC,QAAQ,EAAE,UAAU,GAAG,OAAO,CAAC,KAAK,MAAM,EAAE,CAAC,CAErE;IAED;;;;OAIG;IACU,iBAAiB,CAAC,MAAM,EAAE,GAAG,GAAG,OAAO,CAAC,KAAK,MAAM,EAAE,CAAC,CAElE;IAED;;;;OAIG;IACU,qBAAqB,CAAC,MAAM,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAE5D;IAED;;;OAGG;IACI,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAIzC;IAED;;;OAGG;IACI,OAAO,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAkBjD;IAED;;;;;OAKG;IACU,oBAAoB,CAC/B,KAAK,EAAE,MAAM,EACb,SAAS,GAAE,CAAC,GAAG,GAAG;QAAE,EAAE,EAAE,UAAU,GAAG,GAAG,CAAC;QAAC,KAAK,CAAC,EAAE,GAAG,CAAC;QAAC,IAAI,CAAC,EAAE,UAAU,GAAG,GAAG,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC,EAAE,EAAO,GAClH,OAAO,CAAC,IAAI,CAAC,CAWf;IAEM,gBAAgB,CAAC,MAAM,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAEjD;IAEY,eAAe,IAAI,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAG3E;IAEY,iBAAiB,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAG7D;IAED;;;;;;;;;;;;;;;;;;OAkBG;IACU,cAAc,CAAC,UAAU,GAAE,MAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CA8BjE;IAED,0DAA0D;IAC7C,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC,CAG/C;IAED,wEAAwE;IAC3D,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE7D;IAEY,mBAAmB,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CA+BpE;IAEY,gBAAgB,kBAK5B;CACF;AAED,KAAK,WAAW,GAAG,SAAS,GAAG,QAAQ,CAAC;AAOxC,MAAM,MAAM,iBAAiB,GAAG,WAAW,GAAG;IAC5C,SAAS,EAAE,WAAW,CAAC;CACxB,CAAC"}
|
|
@@ -488,21 +488,46 @@ import { foundry } from 'viem/chains';
|
|
|
488
488
|
* reorg is needed because anvil applies a new gas limit only to future blocks: without it the just-mined
|
|
489
489
|
* blocks would keep the tiny gas limit, and an `eth_call` against `latest` (whose gas is capped by the
|
|
490
490
|
* block gas limit) would revert with "intrinsic gas too high".
|
|
491
|
+
*
|
|
492
|
+
* The replacement blocks advance L1 time. `anvil_reorg` stamps each replacement as `parent + N*interval`,
|
|
493
|
+
* so on its own it would freeze L1 time at the parent timestamp; callers that measure elapsed L1 time
|
|
494
|
+
* (L1TxUtils stall/timeout detection, `syncDateProvider`-driven slot advancement) rely on it moving
|
|
495
|
+
* forward. We reproduce the wall-clock advance the mine step just made (at least 1s per block) via a
|
|
496
|
+
* temporary block-timestamp interval, then restore any pre-existing interval.
|
|
491
497
|
*/ async mineEmptyBlock(blockCount = 1) {
|
|
492
498
|
await this.execWithPausedAnvil(async ()=>{
|
|
493
499
|
const originalGasLimit = await this.getBlockGasLimit();
|
|
500
|
+
const parentTimestamp = await this.lastBlockTimestamp();
|
|
501
|
+
// anvil has no getter for the block-timestamp interval, but the pending block is stamped
|
|
502
|
+
// `latest + interval`, so this delta is the standing interval (0 when none is set).
|
|
503
|
+
const priorInterval = await this.nextBlockTimestamp() - parentTimestamp;
|
|
494
504
|
try {
|
|
495
505
|
await this.setBlockGasLimit(1n);
|
|
496
506
|
await this.doMine(blockCount);
|
|
497
507
|
} finally{
|
|
498
508
|
await this.setBlockGasLimit(originalGasLimit);
|
|
499
509
|
}
|
|
510
|
+
const advance = await this.lastBlockTimestamp() - parentTimestamp;
|
|
511
|
+
const perBlockInterval = Math.max(1, Math.floor(advance / blockCount));
|
|
500
512
|
// Replace the tiny-gas-limit blocks with empty blocks at the restored gas limit, keeping the same
|
|
501
|
-
// height
|
|
502
|
-
await this.doRpcCall('
|
|
503
|
-
|
|
504
|
-
[]
|
|
513
|
+
// height. The reorged-out blocks held no transactions, so nothing returns to the pool.
|
|
514
|
+
await this.doRpcCall('anvil_setBlockTimestampInterval', [
|
|
515
|
+
perBlockInterval
|
|
505
516
|
]);
|
|
517
|
+
try {
|
|
518
|
+
await this.doRpcCall('anvil_reorg', [
|
|
519
|
+
blockCount,
|
|
520
|
+
[]
|
|
521
|
+
]);
|
|
522
|
+
} finally{
|
|
523
|
+
if (priorInterval > 0) {
|
|
524
|
+
await this.doRpcCall('anvil_setBlockTimestampInterval', [
|
|
525
|
+
priorInterval
|
|
526
|
+
]);
|
|
527
|
+
} else {
|
|
528
|
+
await this.doRpcCall('anvil_removeBlockTimestampInterval', []);
|
|
529
|
+
}
|
|
530
|
+
}
|
|
506
531
|
});
|
|
507
532
|
this.logger.warn(`Mined ${blockCount} empty L1 ${pluralize('block', blockCount)}`);
|
|
508
533
|
}
|
package/dest/utils.js
CHANGED
|
@@ -168,18 +168,15 @@ function getNestedErrorData(error) {
|
|
|
168
168
|
} catch {
|
|
169
169
|
// If decoding fails, we fall back to the original formatting
|
|
170
170
|
}
|
|
171
|
-
// Strip ABI from the error object before formatting
|
|
172
|
-
// caller's error, but structuredClone throws DataCloneError on values it cannot clone (e.g.
|
|
173
|
-
// viem RPC errors carrying function-valued request context). If cloning fails, fall back to
|
|
174
|
-
// formatting the original error untouched rather than letting the clone failure mask it.
|
|
171
|
+
// Strip ABI from the error object before formatting
|
|
175
172
|
if (error && typeof error === 'object') {
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
//
|
|
182
|
-
|
|
173
|
+
// Create a clone to avoid modifying the original
|
|
174
|
+
const errorClone = structuredClone(error);
|
|
175
|
+
// Helper function to recursively remove ABI properties
|
|
176
|
+
// Strip ABIs from the clone
|
|
177
|
+
stripAbis(errorClone);
|
|
178
|
+
// Use the cleaned clone for further processing
|
|
179
|
+
error = errorClone;
|
|
183
180
|
}
|
|
184
181
|
// If it's a regular Error instance, return it with its message
|
|
185
182
|
if (error instanceof Error) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/ethereum",
|
|
3
|
-
"version": "0.0.1-commit.
|
|
3
|
+
"version": "0.0.1-commit.aa0c64f",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
"./account": "./dest/account.js",
|
|
@@ -40,7 +40,6 @@
|
|
|
40
40
|
"build": "yarn clean && ../scripts/tsc.sh",
|
|
41
41
|
"build:dev": "../scripts/tsc.sh --watch",
|
|
42
42
|
"clean": "rm -rf ./dest .tsbuildinfo",
|
|
43
|
-
"generate": "./scripts/generate.sh",
|
|
44
43
|
"start:dev": "concurrently -k \"../scripts/tsc.sh --watch\" \"nodemon --watch dest --exec yarn start\"",
|
|
45
44
|
"start": "node ./dest/index.js",
|
|
46
45
|
"test": "NODE_NO_WARNINGS=1 node --experimental-vm-modules ../node_modules/.bin/jest --passWithNoTests --maxWorkers=${JEST_MAX_WORKERS:-8}",
|
|
@@ -50,10 +49,10 @@
|
|
|
50
49
|
"../package.common.json"
|
|
51
50
|
],
|
|
52
51
|
"dependencies": {
|
|
53
|
-
"@aztec/blob-lib": "0.0.1-commit.
|
|
54
|
-
"@aztec/constants": "0.0.1-commit.
|
|
55
|
-
"@aztec/foundation": "0.0.1-commit.
|
|
56
|
-
"@aztec/l1-artifacts": "0.0.1-commit.
|
|
52
|
+
"@aztec/blob-lib": "0.0.1-commit.aa0c64f",
|
|
53
|
+
"@aztec/constants": "0.0.1-commit.aa0c64f",
|
|
54
|
+
"@aztec/foundation": "0.0.1-commit.aa0c64f",
|
|
55
|
+
"@aztec/l1-artifacts": "0.0.1-commit.aa0c64f",
|
|
57
56
|
"dotenv": "^16.0.3",
|
|
58
57
|
"lodash.chunk": "^4.2.0",
|
|
59
58
|
"lodash.pickby": "^4.5.0",
|
package/src/config.ts
CHANGED
|
@@ -9,8 +9,8 @@ import {
|
|
|
9
9
|
optionalNumberConfigHelper,
|
|
10
10
|
} from '@aztec/foundation/config';
|
|
11
11
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
12
|
+
import l1ContractsDefaultEnv from '@aztec/l1-artifacts/network-defaults.json' with { type: 'json' };
|
|
12
13
|
|
|
13
|
-
import { l1ContractsDefaultEnv } from './generated/l1-contracts-defaults.js';
|
|
14
14
|
import { type L1TxUtilsConfig, l1TxUtilsConfigMappings } from './l1_tx_utils/config.js';
|
|
15
15
|
|
|
16
16
|
export type GenesisStateConfig = {
|
|
@@ -81,11 +81,21 @@ export type L1ContractsConfig = {
|
|
|
81
81
|
initialEthPerFeeAsset: bigint;
|
|
82
82
|
/** The number of seconds to wait for an exit */
|
|
83
83
|
exitDelaySeconds: number;
|
|
84
|
+
/** Validator set size at or below which the entry queue uses the bootstrap flush size. */
|
|
85
|
+
entryQueueBootstrapValidatorSetSize: number;
|
|
86
|
+
/** Number of validators admitted from the entry queue per flush during the bootstrap phase. */
|
|
87
|
+
entryQueueBootstrapFlushSize: number;
|
|
88
|
+
/** Minimum number of validators admitted from the entry queue per flush. */
|
|
89
|
+
entryQueueFlushSizeMin: number;
|
|
90
|
+
/** Divisor applied to the queue size to derive the normal per-flush admission count. */
|
|
91
|
+
entryQueueFlushSizeQuotient: number;
|
|
92
|
+
/** Maximum number of validators admitted from the entry queue per flush. */
|
|
93
|
+
entryQueueMaxFlushSize: number;
|
|
84
94
|
} & L1TxUtilsConfig;
|
|
85
95
|
|
|
86
96
|
/**
|
|
87
97
|
* Config mappings for L1ContractsConfig.
|
|
88
|
-
* Default values come from
|
|
98
|
+
* Default values come from l1-contracts/scripts/network-defaults.json (published via @aztec/l1-artifacts).
|
|
89
99
|
* Real deployments use forge scripts which require explicit env vars (vm.envUint).
|
|
90
100
|
*/
|
|
91
101
|
export const l1ContractsConfigMappings: ConfigMappingsType<L1ContractsConfig> = {
|
|
@@ -237,12 +247,37 @@ export const l1ContractsConfigMappings: ConfigMappingsType<L1ContractsConfig> =
|
|
|
237
247
|
description: 'The delay before a validator can exit the set',
|
|
238
248
|
...numberConfigHelper(l1ContractsDefaultEnv.AZTEC_EXIT_DELAY_SECONDS),
|
|
239
249
|
},
|
|
250
|
+
entryQueueBootstrapValidatorSetSize: {
|
|
251
|
+
env: 'AZTEC_ENTRY_QUEUE_BOOTSTRAP_VALIDATOR_SET_SIZE',
|
|
252
|
+
description: 'Validator set size at or below which the entry queue uses the bootstrap flush size.',
|
|
253
|
+
...numberConfigHelper(l1ContractsDefaultEnv.AZTEC_ENTRY_QUEUE_BOOTSTRAP_VALIDATOR_SET_SIZE),
|
|
254
|
+
},
|
|
255
|
+
entryQueueBootstrapFlushSize: {
|
|
256
|
+
env: 'AZTEC_ENTRY_QUEUE_BOOTSTRAP_FLUSH_SIZE',
|
|
257
|
+
description: 'Number of validators admitted from the entry queue per flush during the bootstrap phase.',
|
|
258
|
+
...numberConfigHelper(l1ContractsDefaultEnv.AZTEC_ENTRY_QUEUE_BOOTSTRAP_FLUSH_SIZE),
|
|
259
|
+
},
|
|
260
|
+
entryQueueFlushSizeMin: {
|
|
261
|
+
env: 'AZTEC_ENTRY_QUEUE_FLUSH_SIZE_MIN',
|
|
262
|
+
description: 'Minimum number of validators admitted from the entry queue per flush.',
|
|
263
|
+
...numberConfigHelper(l1ContractsDefaultEnv.AZTEC_ENTRY_QUEUE_FLUSH_SIZE_MIN),
|
|
264
|
+
},
|
|
265
|
+
entryQueueFlushSizeQuotient: {
|
|
266
|
+
env: 'AZTEC_ENTRY_QUEUE_FLUSH_SIZE_QUOTIENT',
|
|
267
|
+
description: 'Divisor applied to the queue size to derive the normal per-flush admission count.',
|
|
268
|
+
...numberConfigHelper(l1ContractsDefaultEnv.AZTEC_ENTRY_QUEUE_FLUSH_SIZE_QUOTIENT),
|
|
269
|
+
},
|
|
270
|
+
entryQueueMaxFlushSize: {
|
|
271
|
+
env: 'AZTEC_ENTRY_QUEUE_MAX_FLUSH_SIZE',
|
|
272
|
+
description: 'Maximum number of validators admitted from the entry queue per flush.',
|
|
273
|
+
...numberConfigHelper(l1ContractsDefaultEnv.AZTEC_ENTRY_QUEUE_MAX_FLUSH_SIZE),
|
|
274
|
+
},
|
|
240
275
|
...omitConfigMappings(l1TxUtilsConfigMappings, ['ethereumSlotDuration']),
|
|
241
276
|
};
|
|
242
277
|
|
|
243
278
|
/**
|
|
244
279
|
* Default L1 contracts configuration derived from l1ContractsConfigMappings.
|
|
245
|
-
* Source of truth:
|
|
280
|
+
* Source of truth: l1-contracts/scripts/network-defaults.json (published via @aztec/l1-artifacts).
|
|
246
281
|
*/
|
|
247
282
|
export const DefaultL1ContractsConfig = getDefaultConfig(l1ContractsConfigMappings);
|
|
248
283
|
|
|
@@ -14,7 +14,7 @@ import {
|
|
|
14
14
|
multicall3Abi,
|
|
15
15
|
} from 'viem';
|
|
16
16
|
|
|
17
|
-
import type { L1BlobInputs, L1TxConfig, L1TxRequest, L1TxUtils } from '../l1_tx_utils/index.js';
|
|
17
|
+
import type { L1BlobInputs, L1TxConfig, L1TxRequest, L1TxState, L1TxUtils } from '../l1_tx_utils/index.js';
|
|
18
18
|
import type { ExtendedViemWalletClient } from '../types.js';
|
|
19
19
|
import { tryDecodeRevertReason } from '../utils.js';
|
|
20
20
|
|
|
@@ -26,7 +26,10 @@ export const MULTI_CALL_3_ADDRESS = '0xcA11bde05977b3631167028862bE2a173976CA11'
|
|
|
26
26
|
* treat it as a fatal on-chain failure rather than retrying on a different publisher.
|
|
27
27
|
*/
|
|
28
28
|
export class MulticallForwarderRevertedError extends Error {
|
|
29
|
-
constructor(
|
|
29
|
+
constructor(
|
|
30
|
+
public readonly receipt: TransactionReceipt,
|
|
31
|
+
public readonly txState?: L1TxState,
|
|
32
|
+
) {
|
|
30
33
|
super(`Multicall3 forwarder tx reverted: ${receipt.transactionHash}`);
|
|
31
34
|
this.name = 'MulticallForwarderRevertedError';
|
|
32
35
|
}
|
|
@@ -209,7 +212,7 @@ export class Multicall3 {
|
|
|
209
212
|
args: [args],
|
|
210
213
|
});
|
|
211
214
|
|
|
212
|
-
const { receipt } = await l1TxUtils.sendAndMonitorTransaction(
|
|
215
|
+
const { receipt, state } = await l1TxUtils.sendAndMonitorTransaction(
|
|
213
216
|
{
|
|
214
217
|
to: MULTI_CALL_3_ADDRESS,
|
|
215
218
|
data: encodedForwarderData,
|
|
@@ -223,11 +226,11 @@ export class Multicall3 {
|
|
|
223
226
|
// allowFailure to true for all calls, so a reverted status here would indicate a problem with
|
|
224
227
|
// the Multicall3 contract itself or the forwarder transaction (such as an out-of-gas).
|
|
225
228
|
if (receipt.status !== 'success') {
|
|
226
|
-
throw new MulticallForwarderRevertedError(receipt);
|
|
229
|
+
throw new MulticallForwarderRevertedError(receipt, state);
|
|
227
230
|
}
|
|
228
231
|
|
|
229
232
|
const stats = await l1TxUtils.getTransactionStats(receipt.transactionHash);
|
|
230
|
-
return { receipt, stats, multicallData: encodedForwarderData };
|
|
233
|
+
return { receipt, stats, multicallData: encodedForwarderData, state };
|
|
231
234
|
}
|
|
232
235
|
|
|
233
236
|
/** Batch multiple value transfers into a single aggregate3Value call on Multicall3. */
|
|
@@ -5,12 +5,12 @@ import { jsonStringify } from '@aztec/foundation/json-rpc';
|
|
|
5
5
|
import { createLogger } from '@aztec/foundation/log';
|
|
6
6
|
import { promiseWithResolvers } from '@aztec/foundation/promise';
|
|
7
7
|
import type { Fr } from '@aztec/foundation/schemas';
|
|
8
|
-
import { fileURLToPath } from '@aztec/foundation/url';
|
|
9
8
|
|
|
10
9
|
import { bn254 } from '@noble/curves/bn254';
|
|
11
10
|
import type { Abi, Narrow } from 'abitype';
|
|
12
11
|
import { spawn } from 'child_process';
|
|
13
12
|
import { cpSync, existsSync, mkdirSync, mkdtempSync, readFileSync, rmSync, writeFileSync } from 'fs';
|
|
13
|
+
import { createRequire } from 'node:module';
|
|
14
14
|
import { tmpdir } from 'os';
|
|
15
15
|
import { dirname, join, resolve } from 'path';
|
|
16
16
|
import readline from 'readline';
|
|
@@ -28,6 +28,8 @@ import type { ExtendedViemWalletClient } from './types.js';
|
|
|
28
28
|
|
|
29
29
|
const logger = createLogger('ethereum:deploy_aztec_l1_contracts');
|
|
30
30
|
|
|
31
|
+
const require = createRequire(import.meta.url);
|
|
32
|
+
|
|
31
33
|
const JSON_DEPLOY_RESULT_PREFIX = 'JSON DEPLOY RESULT:';
|
|
32
34
|
|
|
33
35
|
/**
|
|
@@ -129,15 +131,13 @@ export interface ValidatorJson {
|
|
|
129
131
|
}
|
|
130
132
|
|
|
131
133
|
/**
|
|
132
|
-
* Gets the path to the l1-contracts foundry artifacts directory.
|
|
133
|
-
*
|
|
134
|
-
*
|
|
134
|
+
* Gets the path to the l1-contracts foundry artifacts directory bundled inside @aztec/l1-artifacts.
|
|
135
|
+
* Resolved through the package (its "." export -> dest/index.js) so it works whether the package is
|
|
136
|
+
* linked via portal (monorepo) or installed under node_modules (published npm) — resolution follows
|
|
137
|
+
* the symlink in the portal case. The bundled foundry subtree sits alongside dest/, at <pkg>/l1-contracts.
|
|
135
138
|
*/
|
|
136
139
|
export function getL1ContractsPath(): string {
|
|
137
|
-
|
|
138
|
-
// Go up from yarn-project/ethereum/dest to yarn-project, then to l1-artifacts/l1-contracts
|
|
139
|
-
const l1ContractsPath = resolve(currentDir, '..', '..', 'l1-artifacts', 'l1-contracts');
|
|
140
|
-
return l1ContractsPath;
|
|
140
|
+
return resolve(dirname(require.resolve('@aztec/l1-artifacts')), '..', 'l1-contracts');
|
|
141
141
|
}
|
|
142
142
|
|
|
143
143
|
// Cached deployment directory
|
|
@@ -599,6 +599,11 @@ export function getDeployRollupForUpgradeEnvVars(
|
|
|
599
599
|
AZTEC_SLASH_AMOUNT_SMALL: args.slashAmountSmall.toString(),
|
|
600
600
|
AZTEC_SLASH_AMOUNT_MEDIUM: args.slashAmountMedium.toString(),
|
|
601
601
|
AZTEC_SLASH_AMOUNT_LARGE: args.slashAmountLarge.toString(),
|
|
602
|
+
AZTEC_ENTRY_QUEUE_BOOTSTRAP_VALIDATOR_SET_SIZE: args.entryQueueBootstrapValidatorSetSize.toString(),
|
|
603
|
+
AZTEC_ENTRY_QUEUE_BOOTSTRAP_FLUSH_SIZE: args.entryQueueBootstrapFlushSize.toString(),
|
|
604
|
+
AZTEC_ENTRY_QUEUE_FLUSH_SIZE_MIN: args.entryQueueFlushSizeMin.toString(),
|
|
605
|
+
AZTEC_ENTRY_QUEUE_FLUSH_SIZE_QUOTIENT: args.entryQueueFlushSizeQuotient.toString(),
|
|
606
|
+
AZTEC_ENTRY_QUEUE_MAX_FLUSH_SIZE: args.entryQueueMaxFlushSize.toString(),
|
|
602
607
|
} as const;
|
|
603
608
|
}
|
|
604
609
|
|
|
@@ -791,9 +791,6 @@ export class L1FeeAnalyzer {
|
|
|
791
791
|
});
|
|
792
792
|
}
|
|
793
793
|
|
|
794
|
-
/**
|
|
795
|
-
* Gets the minimum value from an array of bigints
|
|
796
|
-
*/
|
|
797
794
|
private minBigInt(values: bigint[]): bigint {
|
|
798
795
|
if (values.length === 0) {
|
|
799
796
|
return 0n;
|
|
@@ -801,3 +798,78 @@ export class L1FeeAnalyzer {
|
|
|
801
798
|
return values.reduce((min, val) => (val < min ? val : min), values[0]);
|
|
802
799
|
}
|
|
803
800
|
}
|
|
801
|
+
|
|
802
|
+
/** Per-block fee data for one mined L1 block, used to diagnose whether a tx was underpriced for it. */
|
|
803
|
+
export interface WindowBlockFees {
|
|
804
|
+
blockNumber: bigint;
|
|
805
|
+
timestamp: bigint;
|
|
806
|
+
baseFeePerGas: bigint;
|
|
807
|
+
/** 75th percentile priority fee among the block's txs (gas-weighted, from eth_feeHistory). */
|
|
808
|
+
p75PriorityFee: bigint;
|
|
809
|
+
/** Minimum priority fee among all included txs — the inclusion bar for that block. */
|
|
810
|
+
minIncludedPriorityFee: bigint;
|
|
811
|
+
blockBlobsFull: boolean;
|
|
812
|
+
includedBlobCount: number;
|
|
813
|
+
}
|
|
814
|
+
|
|
815
|
+
/** Safety bound on how far back the window scan walks if the chain head is far ahead of the window. */
|
|
816
|
+
const MAX_WINDOW_SCAN_BLOCKS = 64;
|
|
817
|
+
|
|
818
|
+
/**
|
|
819
|
+
* Reads the already-mined L1 blocks whose timestamps fall in [windowStartS, windowEndS) — the L1
|
|
820
|
+
* inclusion window of an L2 slot — and extracts per-block fee data. Walks block headers to map the
|
|
821
|
+
* window to block numbers, then reads the priority-fee stats from a single eth_feeHistory call
|
|
822
|
+
* (percentile 0 is the cheapest included tx, i.e. the inclusion bar), so no transaction bodies are
|
|
823
|
+
* ever downloaded. Historical reads only, so it never waits on a future block. Returns the blocks in
|
|
824
|
+
* chronological order, [] on error, or the subset mined so far if the window is still in progress.
|
|
825
|
+
* Never throws.
|
|
826
|
+
*/
|
|
827
|
+
export async function captureWindowBlockFees(
|
|
828
|
+
client: ViemClient,
|
|
829
|
+
windowStartS: bigint,
|
|
830
|
+
windowEndS: bigint,
|
|
831
|
+
): Promise<WindowBlockFees[]> {
|
|
832
|
+
try {
|
|
833
|
+
let current = await client.getBlock({ blockTag: 'latest' });
|
|
834
|
+
const inWindow: (typeof current)[] = [];
|
|
835
|
+
let scanned = 0;
|
|
836
|
+
// Walk back from the head, collecting blocks inside the window and skipping any past its end,
|
|
837
|
+
// until we cross below the window start (or hit the safety cap / genesis).
|
|
838
|
+
while (current.timestamp >= windowStartS && scanned < MAX_WINDOW_SCAN_BLOCKS) {
|
|
839
|
+
if (current.timestamp < windowEndS) {
|
|
840
|
+
inWindow.push(current);
|
|
841
|
+
}
|
|
842
|
+
if (current.number === 0n) {
|
|
843
|
+
break;
|
|
844
|
+
}
|
|
845
|
+
current = await client.getBlock({ blockNumber: current.number - 1n });
|
|
846
|
+
scanned++;
|
|
847
|
+
}
|
|
848
|
+
if (inWindow.length === 0) {
|
|
849
|
+
return [];
|
|
850
|
+
}
|
|
851
|
+
inWindow.reverse();
|
|
852
|
+
const newest = inWindow[inWindow.length - 1];
|
|
853
|
+
const feeHistory = await client.getFeeHistory({
|
|
854
|
+
blockCount: Number(newest.number - inWindow[0].number) + 1,
|
|
855
|
+
blockNumber: newest.number,
|
|
856
|
+
rewardPercentiles: [0, 75],
|
|
857
|
+
});
|
|
858
|
+
return inWindow.map(block => {
|
|
859
|
+
const idx = Number(block.number - feeHistory.oldestBlock);
|
|
860
|
+
const [minIncludedPriorityFee, p75PriorityFee] = feeHistory.reward?.[idx] ?? [0n, 0n];
|
|
861
|
+
const blobsInBlock = block.blobGasUsed ? Number(block.blobGasUsed / GAS_PER_BLOB) : 0;
|
|
862
|
+
return {
|
|
863
|
+
blockNumber: block.number,
|
|
864
|
+
timestamp: block.timestamp,
|
|
865
|
+
baseFeePerGas: block.baseFeePerGas ?? 0n,
|
|
866
|
+
p75PriorityFee,
|
|
867
|
+
minIncludedPriorityFee,
|
|
868
|
+
blockBlobsFull: blobsInBlock >= getMaxBlobCapacity(block.timestamp),
|
|
869
|
+
includedBlobCount: blobsInBlock,
|
|
870
|
+
};
|
|
871
|
+
});
|
|
872
|
+
} catch {
|
|
873
|
+
return [];
|
|
874
|
+
}
|
|
875
|
+
}
|