@aztec/ethereum 0.71.0 → 0.72.1
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/contracts/rollup.d.ts +3 -3
- package/dest/contracts/rollup.d.ts.map +1 -1
- package/dest/contracts/rollup.js +1 -1
- package/dest/deploy_l1_contracts.d.ts +37 -48
- package/dest/deploy_l1_contracts.d.ts.map +1 -1
- package/dest/deploy_l1_contracts.js +3 -37
- package/dest/eth_cheat_codes.d.ts +1 -1
- package/dest/eth_cheat_codes.d.ts.map +1 -1
- package/dest/eth_cheat_codes.js +1 -1
- package/dest/l1_tx_utils.d.ts +9 -3
- package/dest/l1_tx_utils.d.ts.map +1 -1
- package/dest/l1_tx_utils.js +80 -21
- package/dest/utils.d.ts +11 -1
- package/dest/utils.d.ts.map +1 -1
- package/dest/utils.js +58 -4
- package/package.json +4 -4
- package/src/contracts/rollup.ts +1 -1
- package/src/deploy_l1_contracts.ts +3 -45
- package/src/eth_cheat_codes.ts +1 -1
- package/src/l1_tx_utils.ts +91 -22
- package/src/utils.ts +65 -5
package/dest/l1_tx_utils.js
CHANGED
|
@@ -2,7 +2,7 @@ import { times } from '@aztec/foundation/collection';
|
|
|
2
2
|
import { bigintConfigHelper, getDefaultConfig, numberConfigHelper, } from '@aztec/foundation/config';
|
|
3
3
|
import { makeBackoff, retry } from '@aztec/foundation/retry';
|
|
4
4
|
import { sleep } from '@aztec/foundation/sleep';
|
|
5
|
-
import { formatGwei, } from 'viem';
|
|
5
|
+
import { MethodNotFoundRpcError, MethodNotSupportedRpcError, formatGwei, } from 'viem';
|
|
6
6
|
import { formatViemError } from './utils.js';
|
|
7
7
|
// 1_000_000_000 Gwei = 1 ETH
|
|
8
8
|
// 1_000_000_000 Wei = 1 Gwei
|
|
@@ -18,9 +18,9 @@ const MIN_BLOB_REPLACEMENT_BUMP_PERCENTAGE = 100;
|
|
|
18
18
|
const BLOCK_TIME_MS = 12000;
|
|
19
19
|
export const l1TxUtilsConfigMappings = {
|
|
20
20
|
gasLimitBufferPercentage: {
|
|
21
|
-
description: 'How much to increase gas
|
|
21
|
+
description: 'How much to increase calculated gas limit by (percentage)',
|
|
22
22
|
env: 'L1_GAS_LIMIT_BUFFER_PERCENTAGE',
|
|
23
|
-
...numberConfigHelper(
|
|
23
|
+
...numberConfigHelper(20),
|
|
24
24
|
},
|
|
25
25
|
minGwei: {
|
|
26
26
|
description: 'Minimum gas price in gwei',
|
|
@@ -100,8 +100,8 @@ export class L1TxUtils {
|
|
|
100
100
|
const gasConfig = { ...this.config, ..._gasConfig };
|
|
101
101
|
const account = this.walletClient.account;
|
|
102
102
|
let gasLimit;
|
|
103
|
-
if (gasConfig.
|
|
104
|
-
gasLimit = gasConfig.
|
|
103
|
+
if (gasConfig.gasLimit) {
|
|
104
|
+
gasLimit = gasConfig.gasLimit;
|
|
105
105
|
}
|
|
106
106
|
else {
|
|
107
107
|
gasLimit = await this.estimateGas(account, request);
|
|
@@ -138,9 +138,9 @@ export class L1TxUtils {
|
|
|
138
138
|
return { txHash, gasLimit, gasPrice };
|
|
139
139
|
}
|
|
140
140
|
catch (err) {
|
|
141
|
-
const
|
|
142
|
-
this.logger?.error(`Failed to send transaction`,
|
|
143
|
-
throw
|
|
141
|
+
const viemError = formatViemError(err);
|
|
142
|
+
this.logger?.error(`Failed to send L1 transaction`, viemError.message, { metaMessages: viemError.metaMessages });
|
|
143
|
+
throw viemError;
|
|
144
144
|
}
|
|
145
145
|
}
|
|
146
146
|
/**
|
|
@@ -178,16 +178,18 @@ export class L1TxUtils {
|
|
|
178
178
|
try {
|
|
179
179
|
const receipt = await this.publicClient.getTransactionReceipt({ hash });
|
|
180
180
|
if (receipt) {
|
|
181
|
-
this.logger?.debug(`L1 transaction ${hash} mined`);
|
|
182
181
|
if (receipt.status === 'reverted') {
|
|
183
|
-
this.logger?.error(`L1 transaction ${hash} reverted
|
|
182
|
+
this.logger?.error(`L1 transaction ${hash} reverted`, receipt);
|
|
183
|
+
}
|
|
184
|
+
else {
|
|
185
|
+
this.logger?.debug(`L1 transaction ${hash} mined`);
|
|
184
186
|
}
|
|
185
187
|
return receipt;
|
|
186
188
|
}
|
|
187
189
|
}
|
|
188
190
|
catch (err) {
|
|
189
191
|
if (err instanceof Error && err.message.includes('reverted')) {
|
|
190
|
-
throw err;
|
|
192
|
+
throw formatViemError(err);
|
|
191
193
|
}
|
|
192
194
|
}
|
|
193
195
|
}
|
|
@@ -234,16 +236,20 @@ export class L1TxUtils {
|
|
|
234
236
|
await sleep(gasConfig.checkIntervalMs);
|
|
235
237
|
}
|
|
236
238
|
catch (err) {
|
|
237
|
-
const
|
|
238
|
-
this.logger?.warn(`Error monitoring
|
|
239
|
-
if (
|
|
240
|
-
throw
|
|
239
|
+
const viemError = formatViemError(err);
|
|
240
|
+
this.logger?.warn(`Error monitoring L1 transaction ${currentTxHash}:`, viemError.message);
|
|
241
|
+
if (viemError.message?.includes('reverted')) {
|
|
242
|
+
throw viemError;
|
|
241
243
|
}
|
|
242
244
|
await sleep(gasConfig.checkIntervalMs);
|
|
243
245
|
}
|
|
244
246
|
// Check if tx has timed out.
|
|
245
247
|
txTimedOut = isTimedOut();
|
|
246
248
|
}
|
|
249
|
+
this.logger?.error(`L1 transaction ${currentTxHash} timed out`, {
|
|
250
|
+
txHash: currentTxHash,
|
|
251
|
+
...tx,
|
|
252
|
+
});
|
|
247
253
|
throw new Error(`L1 transaction ${currentTxHash} timed out`);
|
|
248
254
|
}
|
|
249
255
|
/**
|
|
@@ -269,14 +275,14 @@ export class L1TxUtils {
|
|
|
269
275
|
try {
|
|
270
276
|
const blobBaseFeeHex = await this.publicClient.request({ method: 'eth_blobBaseFee' });
|
|
271
277
|
blobBaseFee = BigInt(blobBaseFeeHex);
|
|
272
|
-
this.logger?.debug('Blob base fee:', { blobBaseFee: formatGwei(blobBaseFee) });
|
|
278
|
+
this.logger?.debug('L1 Blob base fee:', { blobBaseFee: formatGwei(blobBaseFee) });
|
|
273
279
|
}
|
|
274
280
|
catch {
|
|
275
|
-
this.logger?.warn('Failed to get blob base fee', attempt);
|
|
281
|
+
this.logger?.warn('Failed to get L1 blob base fee', attempt);
|
|
276
282
|
}
|
|
277
283
|
let priorityFee;
|
|
278
284
|
if (gasConfig.fixedPriorityFeePerGas) {
|
|
279
|
-
this.logger?.debug('Using fixed priority fee per gas', {
|
|
285
|
+
this.logger?.debug('Using fixed priority fee per L1 gas', {
|
|
280
286
|
fixedPriorityFeePerGas: gasConfig.fixedPriorityFeePerGas,
|
|
281
287
|
});
|
|
282
288
|
// try to maintain precision up to 1000000 wei
|
|
@@ -338,7 +344,7 @@ export class L1TxUtils {
|
|
|
338
344
|
// use max between current network values and min required values
|
|
339
345
|
maxFeePerBlobGas = maxFeePerBlobGas > minBlobFee ? maxFeePerBlobGas : minBlobFee;
|
|
340
346
|
}
|
|
341
|
-
this.logger?.debug(`Computed gas price`, {
|
|
347
|
+
this.logger?.debug(`Computed L1 gas price`, {
|
|
342
348
|
attempt,
|
|
343
349
|
baseFee: formatGwei(baseFee),
|
|
344
350
|
maxFeePerGas: formatGwei(maxFeePerGas),
|
|
@@ -368,13 +374,66 @@ export class L1TxUtils {
|
|
|
368
374
|
..._blobInputs,
|
|
369
375
|
maxFeePerBlobGas: gasPrice.maxFeePerBlobGas,
|
|
370
376
|
}))?.gas;
|
|
377
|
+
this.logger?.debug('L1 gas used in estimateGas by blob tx', { gas: initialEstimate });
|
|
371
378
|
}
|
|
372
379
|
else {
|
|
373
380
|
initialEstimate = await this.publicClient.estimateGas({ account, ...request });
|
|
381
|
+
this.logger?.debug('L1 gas used in estimateGas by non-blob tx', { gas: initialEstimate });
|
|
374
382
|
}
|
|
375
383
|
// Add buffer based on either fixed amount or percentage
|
|
376
|
-
const withBuffer =
|
|
384
|
+
const withBuffer = this.bumpGasLimit(initialEstimate, gasConfig);
|
|
377
385
|
return withBuffer;
|
|
378
386
|
}
|
|
387
|
+
async simulateGasUsed(request, blockOverrides = {}, stateOverrides = [], _gasConfig) {
|
|
388
|
+
const gasConfig = { ...this.config, ..._gasConfig };
|
|
389
|
+
const gasPrice = await this.getGasPrice(gasConfig, false);
|
|
390
|
+
const nonce = await this.publicClient.getTransactionCount({ address: this.walletClient.account.address });
|
|
391
|
+
try {
|
|
392
|
+
const result = await this.publicClient.simulate({
|
|
393
|
+
validation: true,
|
|
394
|
+
blocks: [
|
|
395
|
+
{
|
|
396
|
+
blockOverrides,
|
|
397
|
+
stateOverrides,
|
|
398
|
+
calls: [
|
|
399
|
+
{
|
|
400
|
+
from: this.walletClient.account.address,
|
|
401
|
+
to: request.to,
|
|
402
|
+
data: request.data,
|
|
403
|
+
maxFeePerGas: gasPrice.maxFeePerGas,
|
|
404
|
+
maxPriorityFeePerGas: gasPrice.maxPriorityFeePerGas,
|
|
405
|
+
gas: request.gas ?? 10000000n,
|
|
406
|
+
nonce,
|
|
407
|
+
},
|
|
408
|
+
],
|
|
409
|
+
},
|
|
410
|
+
],
|
|
411
|
+
});
|
|
412
|
+
this.logger?.debug(`L1 gas used in simulation: ${result[0].calls[0].gasUsed}`, {
|
|
413
|
+
result,
|
|
414
|
+
});
|
|
415
|
+
if (result[0].calls[0].status === 'failure') {
|
|
416
|
+
this.logger?.error('L1 transaction Simulation failed', {
|
|
417
|
+
error: result[0].calls[0].error,
|
|
418
|
+
});
|
|
419
|
+
throw new Error(`L1 transaction simulation failed with error: ${result[0].calls[0].error.message}`);
|
|
420
|
+
}
|
|
421
|
+
return result[0].gasUsed;
|
|
422
|
+
}
|
|
423
|
+
catch (err) {
|
|
424
|
+
if (err instanceof MethodNotFoundRpcError || err instanceof MethodNotSupportedRpcError) {
|
|
425
|
+
this.logger?.error('Node does not support eth_simulateV1 API');
|
|
426
|
+
if (gasConfig.fallbackGasEstimate) {
|
|
427
|
+
this.logger?.debug(`Using fallback gas estimate: ${gasConfig.fallbackGasEstimate}`);
|
|
428
|
+
return gasConfig.fallbackGasEstimate;
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
throw err;
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
bumpGasLimit(gasLimit, _gasConfig) {
|
|
435
|
+
const gasConfig = { ...this.config, ..._gasConfig };
|
|
436
|
+
return gasLimit + (gasLimit * BigInt((gasConfig?.gasLimitBufferPercentage || 0) * 100)) / 10000n;
|
|
437
|
+
}
|
|
379
438
|
}
|
|
380
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibDFfdHhfdXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvbDFfdHhfdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3JELE9BQU8sRUFFTCxrQkFBa0IsRUFDbEIsZ0JBQWdCLEVBQ2hCLGtCQUFrQixHQUNuQixNQUFNLDBCQUEwQixDQUFDO0FBRWxDLE9BQU8sRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDN0QsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRWhELE9BQU8sRUFVTCxVQUFVLEdBQ1gsTUFBTSxNQUFNLENBQUM7QUFFZCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRTdDLDZCQUE2QjtBQUM3Qiw2QkFBNkI7QUFDN0Isd0NBQXdDO0FBRXhDLE1BQU0sU0FBUyxHQUFHLFdBQWMsQ0FBQztBQUVqQyx3RUFBd0U7QUFDeEUsNEhBQTRIO0FBQzVILE1BQU0sK0JBQStCLEdBQUcsRUFBRSxDQUFDO0FBRTNDLHlFQUF5RTtBQUN6RSwySEFBMkg7QUFDM0gsTUFBTSxvQ0FBb0MsR0FBRyxHQUFHLENBQUM7QUFFakQsa0NBQWtDO0FBQ2xDLE1BQU0sYUFBYSxHQUFHLEtBQU0sQ0FBQztBQXNEN0IsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQXdDO0lBQzFFLHdCQUF3QixFQUFFO1FBQ3hCLFdBQVcsRUFBRSw2REFBNkQ7UUFDMUUsR0FBRyxFQUFFLGdDQUFnQztRQUNyQyxHQUFHLGtCQUFrQixDQUFDLEVBQUUsQ0FBQztLQUMxQjtJQUNELE9BQU8sRUFBRTtRQUNQLFdBQVcsRUFBRSwyQkFBMkI7UUFDeEMsR0FBRyxFQUFFLGtCQUFrQjtRQUN2QixHQUFHLGtCQUFrQixDQUFDLEVBQUUsQ0FBQztLQUMxQjtJQUNELE9BQU8sRUFBRTtRQUNQLFdBQVcsRUFB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
|
|
439
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibDFfdHhfdXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvbDFfdHhfdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3JELE9BQU8sRUFFTCxrQkFBa0IsRUFDbEIsZ0JBQWdCLEVBQ2hCLGtCQUFrQixHQUNuQixNQUFNLDBCQUEwQixDQUFDO0FBRWxDLE9BQU8sRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDN0QsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRWhELE9BQU8sRUFRTCxzQkFBc0IsRUFDdEIsMEJBQTBCLEVBSzFCLFVBQVUsR0FDWCxNQUFNLE1BQU0sQ0FBQztBQUVkLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFN0MsNkJBQTZCO0FBQzdCLDZCQUE2QjtBQUM3Qix3Q0FBd0M7QUFFeEMsTUFBTSxTQUFTLEdBQUcsV0FBYyxDQUFDO0FBRWpDLHdFQUF3RTtBQUN4RSw0SEFBNEg7QUFDNUgsTUFBTSwrQkFBK0IsR0FBRyxFQUFFLENBQUM7QUFFM0MseUVBQXlFO0FBQ3pFLDJIQUEySDtBQUMzSCxNQUFNLG9DQUFvQyxHQUFHLEdBQUcsQ0FBQztBQUVqRCxrQ0FBa0M7QUFDbEMsTUFBTSxhQUFhLEdBQUcsS0FBTSxDQUFDO0FBc0Q3QixNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBd0M7SUFDMUUsd0JBQXdCLEVBQUU7UUFDeEIsV0FBVyxFQUFFLDJEQUEyRDtRQUN4RSxHQUFHLEVBQUUsZ0NBQWdDO1FBQ3JDLEdBQUcsa0JBQWtCLENBQUMsRUFBRSxDQUFDO0tBQzFCO0lBQ0QsT0FBTyxFQUFFO1FBQ1AsV0FBVyxFQUFFLDJCQUEyQjtRQUN4QyxHQUFHLEVBQUUsa0JBQWtCO1FBQ3ZCLEdBQUcsa0JBQWtCLENBQUMsRUFBRSxDQUFDO0tBQzFCO0lB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
|
package/dest/utils.d.ts
CHANGED
|
@@ -7,7 +7,17 @@ export interface L2Claim {
|
|
|
7
7
|
messageHash: Hex;
|
|
8
8
|
messageLeafIndex: bigint;
|
|
9
9
|
}
|
|
10
|
+
export declare class FormattedViemError extends Error {
|
|
11
|
+
metaMessages?: any[];
|
|
12
|
+
constructor(message: string, metaMessages?: any[]);
|
|
13
|
+
}
|
|
10
14
|
export declare function extractEvent<const TAbi extends Abi | readonly unknown[], TEventName extends ContractEventName<TAbi>, TEventType = DecodeEventLogReturnType<TAbi, TEventName, Hex[], undefined, true>>(logs: Log[], address: Hex, abi: TAbi, eventName: TEventName, filter?: (log: TEventType) => boolean, logger?: Logger): TEventType;
|
|
11
15
|
export declare function prettyLogViemErrorMsg(err: any): any;
|
|
12
|
-
|
|
16
|
+
/**
|
|
17
|
+
* Formats a Viem error into a FormattedViemError instance.
|
|
18
|
+
* @param error - The error to format.
|
|
19
|
+
* @param abi - The ABI to use for decoding.
|
|
20
|
+
* @returns A FormattedViemError instance.
|
|
21
|
+
*/
|
|
22
|
+
export declare function formatViemError(error: any, abi?: Abi): FormattedViemError;
|
|
13
23
|
//# sourceMappingURL=utils.d.ts.map
|
package/dest/utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,EAAE,MAAM,0BAA0B,CAAC;AACnD,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,EAAE,MAAM,0BAA0B,CAAC;AACnD,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAGpD,OAAO,EACL,KAAK,GAAG,EAER,KAAK,iBAAiB,EAEtB,KAAK,wBAAwB,EAC7B,KAAK,GAAG,EACR,KAAK,GAAG,EAGT,MAAM,MAAM,CAAC;AAEd,MAAM,WAAW,OAAO;IACtB,WAAW,EAAE,EAAE,CAAC;IAChB,WAAW,EAAE,EAAE,CAAC;IAChB,WAAW,EAAE,GAAG,CAAC;IACjB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,YAAY,CAAC,EAAE,GAAG,EAAE,CAAC;gBAET,OAAO,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,GAAG,EAAE;CAKlD;AAED,wBAAgB,YAAY,CAC1B,KAAK,CAAC,IAAI,SAAS,GAAG,GAAG,SAAS,OAAO,EAAE,EAC3C,UAAU,SAAS,iBAAiB,CAAC,IAAI,CAAC,EAC1C,UAAU,GAAG,wBAAwB,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,EAE/E,IAAI,EAAE,GAAG,EAAE,EACX,OAAO,EAAE,GAAG,EACZ,GAAG,EAAE,IAAI,EACT,SAAS,EAAE,UAAU,EACrB,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,UAAU,KAAK,OAAO,EACrC,MAAM,CAAC,EAAE,MAAM,GACd,UAAU,CAMZ;AA+BD,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,GAAG,OAW7C;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,GAAE,GAAe,GAAG,kBAAkB,CAsIpF"}
|
package/dest/utils.js
CHANGED
|
@@ -1,4 +1,12 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ErrorsAbi } from '@aztec/l1-artifacts';
|
|
2
|
+
import { BaseError, ContractFunctionRevertedError, decodeErrorResult, decodeEventLog, } from 'viem';
|
|
3
|
+
export class FormattedViemError extends Error {
|
|
4
|
+
constructor(message, metaMessages) {
|
|
5
|
+
super(message);
|
|
6
|
+
this.name = 'FormattedViemError';
|
|
7
|
+
this.metaMessages = metaMessages;
|
|
8
|
+
}
|
|
9
|
+
}
|
|
2
10
|
export function extractEvent(logs, address, abi, eventName, filter, logger) {
|
|
3
11
|
const event = tryExtractEvent(logs, address, abi, eventName, filter, logger);
|
|
4
12
|
if (!event) {
|
|
@@ -35,7 +43,52 @@ export function prettyLogViemErrorMsg(err) {
|
|
|
35
43
|
}
|
|
36
44
|
return err?.message ?? err;
|
|
37
45
|
}
|
|
38
|
-
|
|
46
|
+
/**
|
|
47
|
+
* Formats a Viem error into a FormattedViemError instance.
|
|
48
|
+
* @param error - The error to format.
|
|
49
|
+
* @param abi - The ABI to use for decoding.
|
|
50
|
+
* @returns A FormattedViemError instance.
|
|
51
|
+
*/
|
|
52
|
+
export function formatViemError(error, abi = ErrorsAbi) {
|
|
53
|
+
// If error is already a FormattedViemError, return it as is
|
|
54
|
+
if (error instanceof FormattedViemError) {
|
|
55
|
+
return error;
|
|
56
|
+
}
|
|
57
|
+
// First try to decode as a custom error using the ABI
|
|
58
|
+
try {
|
|
59
|
+
if (error?.data) {
|
|
60
|
+
// Try to decode the error data using the ABI
|
|
61
|
+
const decoded = decodeErrorResult({
|
|
62
|
+
abi,
|
|
63
|
+
data: error.data,
|
|
64
|
+
});
|
|
65
|
+
if (decoded) {
|
|
66
|
+
return new FormattedViemError(`${decoded.errorName}(${decoded.args?.join(', ') ?? ''})`, error?.metaMessages);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
// If it's a BaseError, try to get the custom error through ContractFunctionRevertedError
|
|
70
|
+
if (error instanceof BaseError) {
|
|
71
|
+
const revertError = error.walk(err => err instanceof ContractFunctionRevertedError);
|
|
72
|
+
if (revertError instanceof ContractFunctionRevertedError) {
|
|
73
|
+
let errorName = revertError.data?.errorName;
|
|
74
|
+
if (!errorName) {
|
|
75
|
+
errorName = revertError.signature ?? '';
|
|
76
|
+
}
|
|
77
|
+
const args = revertError.metaMessages && revertError.metaMessages?.length > 1
|
|
78
|
+
? revertError.metaMessages[1].trimStart()
|
|
79
|
+
: '';
|
|
80
|
+
return new FormattedViemError(`${errorName}${args}`, error?.metaMessages);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
catch (decodeErr) {
|
|
85
|
+
// If decoding fails, we fall back to the original formatting
|
|
86
|
+
}
|
|
87
|
+
// If it's a regular Error instance, return it with its message
|
|
88
|
+
if (error instanceof Error) {
|
|
89
|
+
return new FormattedViemError(error.message);
|
|
90
|
+
}
|
|
91
|
+
// Original formatting logic for non-custom errors
|
|
39
92
|
const truncateHex = (hex, length = 100) => {
|
|
40
93
|
if (!hex || typeof hex !== 'string') {
|
|
41
94
|
return hex;
|
|
@@ -115,6 +168,7 @@ export function formatViemError(error) {
|
|
|
115
168
|
result = truncateHexStringsInText(result);
|
|
116
169
|
return result;
|
|
117
170
|
};
|
|
118
|
-
|
|
171
|
+
const formattedRes = extractAndFormatRequestBody(error?.message || String(error));
|
|
172
|
+
return new FormattedViemError(formattedRes.replace(/\\n/g, '\n'), error?.metaMessages);
|
|
119
173
|
}
|
|
120
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
174
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRWhELE9BQU8sRUFFTCxTQUFTLEVBRVQsNkJBQTZCLEVBSTdCLGlCQUFpQixFQUNqQixjQUFjLEdBQ2YsTUFBTSxNQUFNLENBQUM7QUFTZCxNQUFNLE9BQU8sa0JBQW1CLFNBQVEsS0FBSztJQUczQyxZQUFZLE9BQWUsRUFBRSxZQUFvQjtRQUMvQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDZixJQUFJLENBQUMsSUFBSSxHQUFHLG9CQUFvQixDQUFDO1FBQ2pDLElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO0lBQ25DLENBQUM7Q0FDRjtBQUVELE1BQU0sVUFBVSxZQUFZLENBSzFCLElBQVcsRUFDWCxPQUFZLEVBQ1osR0FBUyxFQUNULFNBQXFCLEVBQ3JCLE1BQXFDLEVBQ3JDLE1BQWU7SUFFZixNQUFNLEtBQUssR0FBRyxlQUFlLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztJQUM3RSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDWCxNQUFNLElBQUksS0FBSyxDQUFDLGlDQUFpQyxTQUFTLGlCQUFpQixPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ3hGLENBQUM7SUFDRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFFRCxTQUFTLGVBQWUsQ0FLdEIsSUFBVyxFQUNYLE9BQVksRUFDWixHQUFTLEVBQ1QsU0FBcUIsRUFDckIsTUFBcUMsRUFDckMsTUFBZTtJQUVmLEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7UUFDdkIsSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxLQUFLLE9BQU8sQ0FBQyxXQUFXLEVBQUUs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
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/ethereum",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.72.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": "./dest/index.js",
|
|
@@ -29,12 +29,12 @@
|
|
|
29
29
|
"../package.common.json"
|
|
30
30
|
],
|
|
31
31
|
"dependencies": {
|
|
32
|
-
"@aztec/foundation": "0.
|
|
33
|
-
"@aztec/l1-artifacts": "0.
|
|
32
|
+
"@aztec/foundation": "0.72.1",
|
|
33
|
+
"@aztec/l1-artifacts": "0.72.1",
|
|
34
34
|
"@viem/anvil": "^0.0.10",
|
|
35
35
|
"dotenv": "^16.0.3",
|
|
36
36
|
"tslib": "^2.4.0",
|
|
37
|
-
"viem": "
|
|
37
|
+
"viem": "2.22.8",
|
|
38
38
|
"zod": "^3.23.8"
|
|
39
39
|
},
|
|
40
40
|
"devDependencies": {
|
package/src/contracts/rollup.ts
CHANGED
|
@@ -20,7 +20,7 @@ import { type L1ReaderConfig } from '../l1_reader.js';
|
|
|
20
20
|
export class RollupContract {
|
|
21
21
|
private readonly rollup: GetContractReturnType<typeof RollupAbi, PublicClient<HttpTransport, Chain>>;
|
|
22
22
|
|
|
23
|
-
constructor(public readonly client: PublicClient, address: Hex) {
|
|
23
|
+
constructor(public readonly client: PublicClient<HttpTransport, Chain>, address: Hex) {
|
|
24
24
|
this.rollup = getContract({ address, abi: RollupAbi, client });
|
|
25
25
|
}
|
|
26
26
|
|
|
@@ -346,6 +346,8 @@ export const deployL1Contracts = async (
|
|
|
346
346
|
account.address.toString(),
|
|
347
347
|
rollupConfigArgs,
|
|
348
348
|
];
|
|
349
|
+
await deployer.waitForDeployments();
|
|
350
|
+
|
|
349
351
|
const rollupAddress = await deployer.deploy(l1Artifacts.rollup, rollupArgs);
|
|
350
352
|
logger.verbose(`Deployed Rollup at ${rollupAddress}`, rollupConfigArgs);
|
|
351
353
|
|
|
@@ -431,7 +433,7 @@ export const deployL1Contracts = async (
|
|
|
431
433
|
// because there is circular dependency hell. This is a temporary solution. #3342
|
|
432
434
|
// @todo #8084
|
|
433
435
|
// fund the portal contract with Fee Juice
|
|
434
|
-
const FEE_JUICE_INITIAL_MINT =
|
|
436
|
+
const FEE_JUICE_INITIAL_MINT = 200000000000000000000000n;
|
|
435
437
|
const mintTxHash = await feeAsset.write.mint([feeJuicePortalAddress.toString(), FEE_JUICE_INITIAL_MINT], {} as any);
|
|
436
438
|
|
|
437
439
|
// @note This is used to ensure we fully wait for the transaction when running against a real chain
|
|
@@ -579,50 +581,6 @@ class L1Deployer {
|
|
|
579
581
|
}
|
|
580
582
|
}
|
|
581
583
|
|
|
582
|
-
/**
|
|
583
|
-
* Compiles a contract source code using the provided solc compiler.
|
|
584
|
-
* @param fileName - Contract file name (eg UltraHonkVerifier.sol)
|
|
585
|
-
* @param contractName - Contract name within the file (eg HonkVerifier)
|
|
586
|
-
* @param source - Source code to compile
|
|
587
|
-
* @param solc - Solc instance
|
|
588
|
-
* @returns ABI and bytecode of the compiled contract
|
|
589
|
-
*/
|
|
590
|
-
export function compileContract(
|
|
591
|
-
fileName: string,
|
|
592
|
-
contractName: string,
|
|
593
|
-
source: string,
|
|
594
|
-
solc: { compile: (source: string) => string },
|
|
595
|
-
): { abi: Narrow<Abi | readonly unknown[]>; bytecode: Hex } {
|
|
596
|
-
const input = {
|
|
597
|
-
language: 'Solidity',
|
|
598
|
-
sources: {
|
|
599
|
-
[fileName]: {
|
|
600
|
-
content: source,
|
|
601
|
-
},
|
|
602
|
-
},
|
|
603
|
-
settings: {
|
|
604
|
-
// we require the optimizer
|
|
605
|
-
optimizer: {
|
|
606
|
-
enabled: true,
|
|
607
|
-
runs: 200,
|
|
608
|
-
},
|
|
609
|
-
evmVersion: 'cancun',
|
|
610
|
-
outputSelection: {
|
|
611
|
-
'*': {
|
|
612
|
-
'*': ['evm.bytecode.object', 'abi'],
|
|
613
|
-
},
|
|
614
|
-
},
|
|
615
|
-
},
|
|
616
|
-
};
|
|
617
|
-
|
|
618
|
-
const output = JSON.parse(solc.compile(JSON.stringify(input)));
|
|
619
|
-
|
|
620
|
-
const abi = output.contracts[fileName][contractName].abi;
|
|
621
|
-
const bytecode: `0x${string}` = `0x${output.contracts[fileName][contractName].evm.bytecode.object}`;
|
|
622
|
-
|
|
623
|
-
return { abi, bytecode };
|
|
624
|
-
}
|
|
625
|
-
|
|
626
584
|
// docs:start:deployL1Contract
|
|
627
585
|
/**
|
|
628
586
|
* Helper function to deploy ETH contracts.
|
package/src/eth_cheat_codes.ts
CHANGED
|
@@ -126,7 +126,7 @@ export class EthCheatCodes {
|
|
|
126
126
|
* Set the next block base fee per gas
|
|
127
127
|
* @param baseFee - The base fee to set
|
|
128
128
|
*/
|
|
129
|
-
public async setNextBlockBaseFeePerGas(baseFee: bigint): Promise<void> {
|
|
129
|
+
public async setNextBlockBaseFeePerGas(baseFee: bigint | number): Promise<void> {
|
|
130
130
|
const res = await this.rpcCall('anvil_setNextBlockBaseFeePerGas', [baseFee.toString()]);
|
|
131
131
|
if (res.error) {
|
|
132
132
|
throw new Error(`Error setting next block base fee per gas: ${res.error.message}`);
|