@aztec/ethereum 0.0.0-test.1 → 0.0.1-commit.03f7ef2
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/account.d.ts +2 -0
- package/dest/account.d.ts.map +1 -0
- package/dest/account.js +4 -0
- package/dest/chain.d.ts +1 -1
- package/dest/client.d.ts +6 -4
- package/dest/client.d.ts.map +1 -1
- package/dest/client.js +21 -3
- package/dest/config.d.ts +71 -16
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +138 -22
- package/dest/constants.d.ts +1 -1
- package/dest/contracts/empire_base.d.ts +25 -8
- package/dest/contracts/empire_base.d.ts.map +1 -1
- package/dest/contracts/empire_base.js +75 -2
- package/dest/contracts/empire_slashing_proposer.d.ts +67 -0
- package/dest/contracts/empire_slashing_proposer.d.ts.map +1 -0
- package/dest/contracts/empire_slashing_proposer.js +209 -0
- package/dest/contracts/errors.d.ts +7 -0
- package/dest/contracts/errors.d.ts.map +1 -0
- package/dest/contracts/errors.js +12 -0
- package/dest/contracts/fee_asset_handler.d.ts +19 -0
- package/dest/contracts/fee_asset_handler.d.ts.map +1 -0
- package/dest/contracts/fee_asset_handler.js +57 -0
- package/dest/contracts/fee_juice.d.ts +6 -7
- package/dest/contracts/fee_juice.d.ts.map +1 -1
- package/dest/contracts/fee_juice.js +27 -20
- package/dest/contracts/governance.d.ts +43 -32
- package/dest/contracts/governance.d.ts.map +1 -1
- package/dest/contracts/governance.js +87 -84
- package/dest/contracts/governance_proposer.d.ts +17 -13
- package/dest/contracts/governance_proposer.d.ts.map +1 -1
- package/dest/contracts/governance_proposer.js +46 -17
- package/dest/contracts/gse.d.ts +32 -0
- package/dest/contracts/gse.d.ts.map +1 -0
- package/dest/contracts/gse.js +72 -0
- package/dest/contracts/inbox.d.ts +26 -0
- package/dest/contracts/inbox.d.ts.map +1 -0
- package/dest/contracts/inbox.js +45 -0
- package/dest/contracts/index.d.ts +9 -3
- package/dest/contracts/index.d.ts.map +1 -1
- package/dest/contracts/index.js +8 -2
- package/dest/contracts/multicall.d.ts +21 -0
- package/dest/contracts/multicall.d.ts.map +1 -0
- package/dest/contracts/multicall.js +156 -0
- package/dest/contracts/registry.d.ts +10 -5
- package/dest/contracts/registry.d.ts.map +1 -1
- package/dest/contracts/registry.js +44 -16
- package/dest/contracts/rollup.d.ts +221 -41
- package/dest/contracts/rollup.d.ts.map +1 -1
- package/dest/contracts/rollup.js +549 -81
- package/dest/contracts/slasher_contract.d.ts +44 -0
- package/dest/contracts/slasher_contract.d.ts.map +1 -0
- package/dest/contracts/slasher_contract.js +75 -0
- package/dest/contracts/tally_slashing_proposer.d.ts +140 -0
- package/dest/contracts/tally_slashing_proposer.d.ts.map +1 -0
- package/dest/contracts/tally_slashing_proposer.js +313 -0
- package/dest/contracts/utils.d.ts +3 -0
- package/dest/contracts/utils.d.ts.map +1 -0
- package/dest/contracts/utils.js +11 -0
- package/dest/deploy_aztec_l1_contracts.d.ts +245 -0
- package/dest/deploy_aztec_l1_contracts.d.ts.map +1 -0
- package/dest/deploy_aztec_l1_contracts.js +335 -0
- package/dest/deploy_l1_contract.d.ts +68 -0
- package/dest/deploy_l1_contract.d.ts.map +1 -0
- package/dest/deploy_l1_contract.js +312 -0
- package/dest/eth-signer/eth-signer.d.ts +21 -0
- package/dest/eth-signer/eth-signer.d.ts.map +1 -0
- package/dest/eth-signer/eth-signer.js +5 -0
- package/dest/eth-signer/index.d.ts +2 -0
- package/dest/eth-signer/index.d.ts.map +1 -0
- package/dest/eth-signer/index.js +1 -0
- package/dest/forwarder_proxy.d.ts +32 -0
- package/dest/forwarder_proxy.d.ts.map +1 -0
- package/dest/forwarder_proxy.js +93 -0
- package/dest/l1_artifacts.d.ts +77364 -0
- package/dest/l1_artifacts.d.ts.map +1 -0
- package/dest/l1_artifacts.js +166 -0
- package/dest/l1_contract_addresses.d.ts +24 -4
- package/dest/l1_contract_addresses.d.ts.map +1 -1
- package/dest/l1_contract_addresses.js +25 -21
- package/dest/l1_reader.d.ts +4 -2
- package/dest/l1_reader.d.ts.map +1 -1
- package/dest/l1_reader.js +14 -8
- package/dest/l1_tx_utils/config.d.ts +59 -0
- package/dest/l1_tx_utils/config.d.ts.map +1 -0
- package/dest/l1_tx_utils/config.js +96 -0
- package/dest/l1_tx_utils/constants.d.ts +12 -0
- package/dest/l1_tx_utils/constants.d.ts.map +1 -0
- package/dest/l1_tx_utils/constants.js +39 -0
- package/dest/l1_tx_utils/factory.d.ts +24 -0
- package/dest/l1_tx_utils/factory.d.ts.map +1 -0
- package/dest/l1_tx_utils/factory.js +12 -0
- package/dest/l1_tx_utils/fee-strategies/index.d.ts +9 -0
- package/dest/l1_tx_utils/fee-strategies/index.d.ts.map +1 -0
- package/dest/l1_tx_utils/fee-strategies/index.js +11 -0
- package/dest/l1_tx_utils/fee-strategies/p75_competitive.d.ts +18 -0
- package/dest/l1_tx_utils/fee-strategies/p75_competitive.d.ts.map +1 -0
- package/dest/l1_tx_utils/fee-strategies/p75_competitive.js +111 -0
- package/dest/l1_tx_utils/fee-strategies/p75_competitive_blob_txs_only.d.ts +32 -0
- package/dest/l1_tx_utils/fee-strategies/p75_competitive_blob_txs_only.d.ts.map +1 -0
- package/dest/l1_tx_utils/fee-strategies/p75_competitive_blob_txs_only.js +173 -0
- package/dest/l1_tx_utils/fee-strategies/types.d.ts +64 -0
- package/dest/l1_tx_utils/fee-strategies/types.d.ts.map +1 -0
- package/dest/l1_tx_utils/fee-strategies/types.js +24 -0
- package/dest/l1_tx_utils/forwarder_l1_tx_utils.d.ts +41 -0
- package/dest/l1_tx_utils/forwarder_l1_tx_utils.d.ts.map +1 -0
- package/dest/l1_tx_utils/forwarder_l1_tx_utils.js +48 -0
- package/dest/l1_tx_utils/index-blobs.d.ts +3 -0
- package/dest/l1_tx_utils/index-blobs.d.ts.map +1 -0
- package/dest/l1_tx_utils/index-blobs.js +2 -0
- package/dest/l1_tx_utils/index.d.ts +12 -0
- package/dest/l1_tx_utils/index.d.ts.map +1 -0
- package/dest/l1_tx_utils/index.js +12 -0
- package/dest/l1_tx_utils/interfaces.d.ts +76 -0
- package/dest/l1_tx_utils/interfaces.d.ts.map +1 -0
- package/dest/l1_tx_utils/interfaces.js +4 -0
- package/dest/l1_tx_utils/l1_fee_analyzer.d.ts +233 -0
- package/dest/l1_tx_utils/l1_fee_analyzer.d.ts.map +1 -0
- package/dest/l1_tx_utils/l1_fee_analyzer.js +506 -0
- package/dest/l1_tx_utils/l1_tx_utils.d.ts +94 -0
- package/dest/l1_tx_utils/l1_tx_utils.d.ts.map +1 -0
- package/dest/l1_tx_utils/l1_tx_utils.js +623 -0
- package/dest/l1_tx_utils/l1_tx_utils_with_blobs.d.ts +26 -0
- package/dest/l1_tx_utils/l1_tx_utils_with_blobs.d.ts.map +1 -0
- package/dest/l1_tx_utils/l1_tx_utils_with_blobs.js +26 -0
- package/dest/l1_tx_utils/readonly_l1_tx_utils.d.ts +87 -0
- package/dest/l1_tx_utils/readonly_l1_tx_utils.d.ts.map +1 -0
- package/dest/l1_tx_utils/readonly_l1_tx_utils.js +360 -0
- package/dest/l1_tx_utils/signer.d.ts +4 -0
- package/dest/l1_tx_utils/signer.d.ts.map +1 -0
- package/dest/l1_tx_utils/signer.js +16 -0
- package/dest/l1_tx_utils/types.d.ts +67 -0
- package/dest/l1_tx_utils/types.d.ts.map +1 -0
- package/dest/l1_tx_utils/types.js +26 -0
- package/dest/l1_tx_utils/utils.d.ts +4 -0
- package/dest/l1_tx_utils/utils.d.ts.map +1 -0
- package/dest/l1_tx_utils/utils.js +14 -0
- package/dest/l1_types.d.ts +6 -0
- package/dest/l1_types.d.ts.map +1 -0
- package/dest/l1_types.js +1 -0
- package/dest/publisher_manager.d.ts +15 -0
- package/dest/publisher_manager.d.ts.map +1 -0
- package/dest/publisher_manager.js +88 -0
- package/dest/queries.d.ts +4 -2
- package/dest/queries.d.ts.map +1 -1
- package/dest/queries.js +53 -12
- package/dest/test/chain_monitor.d.ts +75 -0
- package/dest/test/chain_monitor.d.ts.map +1 -0
- package/dest/test/chain_monitor.js +214 -0
- package/dest/test/delayed_tx_utils.d.ts +8 -3
- package/dest/test/delayed_tx_utils.d.ts.map +1 -1
- package/dest/test/delayed_tx_utils.js +13 -6
- package/dest/test/eth_cheat_codes.d.ts +217 -0
- package/dest/test/eth_cheat_codes.d.ts.map +1 -0
- package/dest/test/eth_cheat_codes.js +560 -0
- package/dest/test/eth_cheat_codes_with_state.d.ts +2 -2
- package/dest/test/eth_cheat_codes_with_state.d.ts.map +1 -1
- package/dest/test/eth_cheat_codes_with_state.js +1 -1
- package/dest/test/index.d.ts +4 -1
- package/dest/test/index.d.ts.map +1 -1
- package/dest/test/index.js +3 -0
- package/dest/test/rollup_cheat_codes.d.ts +87 -0
- package/dest/test/rollup_cheat_codes.d.ts.map +1 -0
- package/dest/test/rollup_cheat_codes.js +275 -0
- package/dest/test/start_anvil.d.ts +9 -1
- package/dest/test/start_anvil.d.ts.map +1 -1
- package/dest/test/start_anvil.js +16 -7
- package/dest/test/tx_delayer.d.ts +18 -7
- package/dest/test/tx_delayer.d.ts.map +1 -1
- package/dest/test/tx_delayer.js +97 -20
- package/dest/test/upgrade_utils.d.ts +6 -5
- package/dest/test/upgrade_utils.d.ts.map +1 -1
- package/dest/test/upgrade_utils.js +23 -16
- package/dest/types.d.ts +62 -8
- package/dest/types.d.ts.map +1 -1
- package/dest/types.js +3 -1
- package/dest/utils.d.ts +16 -3
- package/dest/utils.d.ts.map +1 -1
- package/dest/utils.js +61 -88
- package/dest/zkPassportVerifierAddress.d.ts +15 -0
- package/dest/zkPassportVerifierAddress.d.ts.map +1 -0
- package/dest/zkPassportVerifierAddress.js +11 -0
- package/package.json +50 -23
- package/src/account.ts +5 -0
- package/src/client.ts +43 -5
- package/src/config.ts +188 -31
- package/src/contracts/empire_base.ts +77 -7
- package/src/contracts/empire_slashing_proposer.ts +270 -0
- package/src/contracts/errors.ts +13 -0
- package/src/contracts/fee_asset_handler.ts +63 -0
- package/src/contracts/fee_juice.ts +29 -15
- package/src/contracts/governance.ts +80 -77
- package/src/contracts/governance_proposer.ts +71 -24
- package/src/contracts/gse.ts +88 -0
- package/src/contracts/inbox.ts +63 -0
- package/src/contracts/index.ts +8 -2
- package/src/contracts/multicall.ts +155 -0
- package/src/contracts/registry.ts +51 -26
- package/src/contracts/rollup.ts +624 -78
- package/src/contracts/slasher_contract.ts +89 -0
- package/src/contracts/tally_slashing_proposer.ts +318 -0
- package/src/contracts/utils.ts +14 -0
- package/src/deploy_aztec_l1_contracts.ts +556 -0
- package/src/deploy_l1_contract.ts +362 -0
- package/src/eth-signer/eth-signer.ts +25 -0
- package/src/eth-signer/index.ts +1 -0
- package/src/forwarder_proxy.ts +108 -0
- package/src/l1_artifacts.ts +254 -0
- package/src/l1_contract_addresses.ts +49 -34
- package/src/l1_reader.ts +17 -9
- package/src/l1_tx_utils/README.md +177 -0
- package/src/l1_tx_utils/config.ts +161 -0
- package/src/l1_tx_utils/constants.ts +29 -0
- package/src/l1_tx_utils/factory.ts +64 -0
- package/src/l1_tx_utils/fee-strategies/index.ts +22 -0
- package/src/l1_tx_utils/fee-strategies/p75_competitive.ts +159 -0
- package/src/l1_tx_utils/fee-strategies/p75_competitive_blob_txs_only.ts +241 -0
- package/src/l1_tx_utils/fee-strategies/types.ts +88 -0
- package/src/l1_tx_utils/forwarder_l1_tx_utils.ts +119 -0
- package/src/l1_tx_utils/index-blobs.ts +2 -0
- package/src/l1_tx_utils/index.ts +14 -0
- package/src/l1_tx_utils/interfaces.ts +86 -0
- package/src/l1_tx_utils/l1_fee_analyzer.ts +804 -0
- package/src/l1_tx_utils/l1_tx_utils.ts +738 -0
- package/src/l1_tx_utils/l1_tx_utils_with_blobs.ts +77 -0
- package/src/l1_tx_utils/readonly_l1_tx_utils.ts +458 -0
- package/src/l1_tx_utils/signer.ts +28 -0
- package/src/l1_tx_utils/types.ts +85 -0
- package/src/l1_tx_utils/utils.ts +16 -0
- package/src/l1_types.ts +6 -0
- package/src/publisher_manager.ts +106 -0
- package/src/queries.ts +73 -15
- package/src/test/chain_monitor.ts +245 -0
- package/src/test/delayed_tx_utils.ts +34 -6
- package/src/test/eth_cheat_codes.ts +588 -0
- package/src/test/eth_cheat_codes_with_state.ts +1 -1
- package/src/test/index.ts +3 -0
- package/src/test/rollup_cheat_codes.ts +312 -0
- package/src/test/start_anvil.ts +24 -5
- package/src/test/tx_delayer.ts +130 -27
- package/src/test/upgrade_utils.ts +30 -21
- package/src/types.ts +71 -7
- package/src/utils.ts +79 -91
- package/src/zkPassportVerifierAddress.ts +15 -0
- package/dest/contracts/forwarder.d.ts +0 -24
- package/dest/contracts/forwarder.d.ts.map +0 -1
- package/dest/contracts/forwarder.js +0 -101
- package/dest/contracts/slashing_proposer.d.ts +0 -21
- package/dest/contracts/slashing_proposer.d.ts.map +0 -1
- package/dest/contracts/slashing_proposer.js +0 -47
- package/dest/deploy_l1_contracts.d.ts +0 -21210
- package/dest/deploy_l1_contracts.d.ts.map +0 -1
- package/dest/deploy_l1_contracts.js +0 -687
- package/dest/eth_cheat_codes.d.ts +0 -147
- package/dest/eth_cheat_codes.d.ts.map +0 -1
- package/dest/eth_cheat_codes.js +0 -303
- package/dest/index.d.ts +0 -14
- package/dest/index.d.ts.map +0 -1
- package/dest/index.js +0 -13
- package/dest/l1_tx_utils.d.ts +0 -192
- package/dest/l1_tx_utils.d.ts.map +0 -1
- package/dest/l1_tx_utils.js +0 -641
- package/dest/l1_tx_utils_with_blobs.d.ts +0 -12
- package/dest/l1_tx_utils_with_blobs.d.ts.map +0 -1
- package/dest/l1_tx_utils_with_blobs.js +0 -64
- package/src/contracts/forwarder.ts +0 -132
- package/src/contracts/slashing_proposer.ts +0 -51
- package/src/deploy_l1_contracts.ts +0 -948
- package/src/eth_cheat_codes.ts +0 -314
- package/src/index.ts +0 -13
- package/src/l1_tx_utils.ts +0 -847
- package/src/l1_tx_utils_with_blobs.ts +0 -86
package/dest/test/tx_delayer.js
CHANGED
|
@@ -2,8 +2,10 @@ import { omit } from '@aztec/foundation/collection';
|
|
|
2
2
|
import { createLogger } from '@aztec/foundation/log';
|
|
3
3
|
import { retryUntil } from '@aztec/foundation/retry';
|
|
4
4
|
import { inspect } from 'util';
|
|
5
|
-
import { keccak256, parseTransaction, publicActions, walletActions } from 'viem';
|
|
6
|
-
|
|
5
|
+
import { keccak256, parseTransaction, publicActions, serializeTransaction, walletActions } from 'viem';
|
|
6
|
+
import { isExtendedClient } from '../types.js';
|
|
7
|
+
const MAX_WAIT_TIME_SECONDS = 180;
|
|
8
|
+
export function waitUntilBlock(client, blockNumber, logger, timeout) {
|
|
7
9
|
const publicClient = 'getBlockNumber' in client && typeof client.getBlockNumber === 'function' ? client : client.extend(publicActions);
|
|
8
10
|
return retryUntil(async ()=>{
|
|
9
11
|
const currentBlockNumber = await publicClient.getBlockNumber({
|
|
@@ -11,9 +13,9 @@ export function waitUntilBlock(client, blockNumber, logger) {
|
|
|
11
13
|
});
|
|
12
14
|
logger?.debug(`Block number is ${currentBlockNumber} (waiting until ${blockNumber})`);
|
|
13
15
|
return currentBlockNumber >= BigInt(blockNumber);
|
|
14
|
-
}, `Wait until L1 block ${blockNumber}`,
|
|
16
|
+
}, `Wait until L1 block ${blockNumber}`, timeout ?? MAX_WAIT_TIME_SECONDS, 0.1);
|
|
15
17
|
}
|
|
16
|
-
export function waitUntilL1Timestamp(client, timestamp, logger) {
|
|
18
|
+
export function waitUntilL1Timestamp(client, timestamp, logger, timeout) {
|
|
17
19
|
const publicClient = 'getBlockNumber' in client && typeof client.getBlockNumber === 'function' ? client : client.extend(publicActions);
|
|
18
20
|
let lastBlock = undefined;
|
|
19
21
|
return retryUntil(async ()=>{
|
|
@@ -31,17 +33,30 @@ export function waitUntilL1Timestamp(client, timestamp, logger) {
|
|
|
31
33
|
const currentTs = currentBlock.timestamp;
|
|
32
34
|
logger?.debug(`Block timstamp is ${currentTs} (waiting until ${timestamp})`);
|
|
33
35
|
return currentTs >= BigInt(timestamp);
|
|
34
|
-
}, `Wait until L1 timestamp ${timestamp}`,
|
|
36
|
+
}, `Wait until L1 timestamp ${timestamp}`, timeout ?? MAX_WAIT_TIME_SECONDS, 0.1);
|
|
35
37
|
}
|
|
36
38
|
class DelayerImpl {
|
|
37
|
-
|
|
39
|
+
dateProvider;
|
|
40
|
+
logger;
|
|
41
|
+
constructor(dateProvider, opts){
|
|
42
|
+
this.dateProvider = dateProvider;
|
|
43
|
+
this.logger = createLogger('ethereum:tx_delayer');
|
|
44
|
+
this.maxInclusionTimeIntoSlot = undefined;
|
|
45
|
+
this.nextWait = undefined;
|
|
46
|
+
this.sentTxHashes = [];
|
|
47
|
+
this.cancelledTxs = [];
|
|
38
48
|
this.ethereumSlotDuration = BigInt(opts.ethereumSlotDuration);
|
|
39
49
|
}
|
|
50
|
+
maxInclusionTimeIntoSlot;
|
|
40
51
|
ethereumSlotDuration;
|
|
41
|
-
nextWait
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
52
|
+
nextWait;
|
|
53
|
+
sentTxHashes;
|
|
54
|
+
cancelledTxs;
|
|
55
|
+
getSentTxHashes() {
|
|
56
|
+
return this.sentTxHashes;
|
|
57
|
+
}
|
|
58
|
+
getCancelledTxs() {
|
|
59
|
+
return this.cancelledTxs;
|
|
45
60
|
}
|
|
46
61
|
pauseNextTxUntilBlock(l1BlockNumber) {
|
|
47
62
|
this.nextWait = {
|
|
@@ -53,32 +68,77 @@ class DelayerImpl {
|
|
|
53
68
|
l1Timestamp: BigInt(l1Timestamp)
|
|
54
69
|
};
|
|
55
70
|
}
|
|
71
|
+
cancelNextTx() {
|
|
72
|
+
this.nextWait = {
|
|
73
|
+
indefinitely: true
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
setMaxInclusionTimeIntoSlot(seconds) {
|
|
77
|
+
this.maxInclusionTimeIntoSlot = seconds;
|
|
78
|
+
}
|
|
56
79
|
}
|
|
57
80
|
/**
|
|
58
81
|
* Returns a new client (without modifying the one passed in) with an injected tx delayer.
|
|
59
82
|
* The delayer can be used to hold off the next tx to be sent until a given block number.
|
|
60
83
|
* TODO(#10824): This doesn't play along well with blob txs for some reason.
|
|
61
|
-
*/ export function withDelayer(client, opts) {
|
|
84
|
+
*/ export function withDelayer(client, dateProvider, opts) {
|
|
85
|
+
if (!isExtendedClient(client)) {
|
|
86
|
+
throw new Error('withDelayer has to be instantiated with a wallet viem client.');
|
|
87
|
+
}
|
|
62
88
|
const logger = createLogger('ethereum:tx_delayer');
|
|
63
|
-
const delayer = new DelayerImpl(opts);
|
|
89
|
+
const delayer = new DelayerImpl(dateProvider, opts);
|
|
64
90
|
const extended = client// Tweak sendRawTransaction so it uses the delay defined in the delayer.
|
|
65
91
|
// Note that this will only work with local accounts (ie accounts for which we have the private key).
|
|
66
92
|
// Transactions signed by the node will not be delayed since they use sendTransaction directly,
|
|
67
93
|
// but we do not use them in our codebase at all.
|
|
68
94
|
.extend((client)=>({
|
|
69
95
|
async sendRawTransaction (...args) {
|
|
96
|
+
let wait;
|
|
97
|
+
let txHash;
|
|
98
|
+
const { serializedTransaction } = args[0];
|
|
99
|
+
const publicClient = client;
|
|
70
100
|
if (delayer.nextWait !== undefined) {
|
|
101
|
+
// Check if we have been instructed to delay the next tx.
|
|
71
102
|
const waitUntil = delayer.nextWait;
|
|
72
103
|
delayer.nextWait = undefined;
|
|
73
|
-
const publicClient = client;
|
|
74
|
-
const wait = 'l1BlockNumber' in waitUntil ? waitUntilBlock(publicClient, waitUntil.l1BlockNumber - 1n, logger) : waitUntilL1Timestamp(publicClient, waitUntil.l1Timestamp - delayer.ethereumSlotDuration, logger);
|
|
75
104
|
// Compute the tx hash manually so we emulate sendRawTransaction response
|
|
76
|
-
|
|
77
|
-
|
|
105
|
+
txHash = computeTxHash(serializedTransaction);
|
|
106
|
+
// Cancel tx outright if instructed
|
|
107
|
+
if ('indefinitely' in waitUntil && waitUntil.indefinitely) {
|
|
108
|
+
logger.info(`Cancelling tx ${txHash}`);
|
|
109
|
+
delayer.cancelledTxs.push(serializedTransaction);
|
|
110
|
+
return Promise.resolve(txHash);
|
|
111
|
+
}
|
|
112
|
+
// Or wait until the desired block number or timestamp
|
|
113
|
+
wait = 'l1BlockNumber' in waitUntil ? waitUntilBlock(publicClient, waitUntil.l1BlockNumber - 1n, logger) : 'l1Timestamp' in waitUntil ? waitUntilL1Timestamp(publicClient, waitUntil.l1Timestamp - delayer.ethereumSlotDuration, logger) : undefined;
|
|
78
114
|
logger.info(`Delaying tx ${txHash} until ${inspect(waitUntil)}`, {
|
|
79
115
|
argsLen: args.length,
|
|
80
116
|
...omit(parseTransaction(serializedTransaction), 'data', 'sidecars')
|
|
81
117
|
});
|
|
118
|
+
} else if (delayer.maxInclusionTimeIntoSlot !== undefined) {
|
|
119
|
+
// Check if we need to delay txs sent too close to the end of the slot.
|
|
120
|
+
const currentBlock = await publicClient.getBlock({
|
|
121
|
+
includeTransactions: false
|
|
122
|
+
});
|
|
123
|
+
const { timestamp: lastBlockTimestamp, number } = currentBlock;
|
|
124
|
+
const now = delayer.dateProvider.now();
|
|
125
|
+
txHash = computeTxHash(serializedTransaction);
|
|
126
|
+
const logData = {
|
|
127
|
+
...omit(parseTransaction(serializedTransaction), 'data', 'sidecars'),
|
|
128
|
+
lastBlockTimestamp,
|
|
129
|
+
now,
|
|
130
|
+
maxInclusionTimeIntoSlot: delayer.maxInclusionTimeIntoSlot
|
|
131
|
+
};
|
|
132
|
+
if (now / 1000 - Number(lastBlockTimestamp) > delayer.maxInclusionTimeIntoSlot) {
|
|
133
|
+
// If the last block was mined more than `maxInclusionTimeIntoSlot` seconds ago, then we cannot include
|
|
134
|
+
// any txs in the current slot, so we delay the tx until the next slot.
|
|
135
|
+
logger.info(`Delaying inclusion of tx ${txHash} until the next slot since it was sent too late`, logData);
|
|
136
|
+
wait = waitUntilBlock(publicClient, number + 1n, logger);
|
|
137
|
+
} else {
|
|
138
|
+
logger.debug(`Immediately sending tx ${txHash} as it was received early enough in the slot`, logData);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
if (wait !== undefined) {
|
|
82
142
|
// Do not await here so we can return the tx hash immediately as if it had been sent on the spot.
|
|
83
143
|
// Instead, delay it so it lands on the desired block number or timestamp, assuming anvil will
|
|
84
144
|
// mine it immediately.
|
|
@@ -90,14 +150,14 @@ class DelayerImpl {
|
|
|
90
150
|
computedTxHash: txHash
|
|
91
151
|
});
|
|
92
152
|
}
|
|
93
|
-
logger.info(`Sent previously delayed tx ${clientTxHash}
|
|
94
|
-
delayer.
|
|
153
|
+
logger.info(`Sent previously delayed tx ${clientTxHash}`);
|
|
154
|
+
delayer.sentTxHashes.push(clientTxHash);
|
|
95
155
|
}).catch((err)=>logger.error(`Error sending tx after delay`, err));
|
|
96
156
|
return Promise.resolve(txHash);
|
|
97
157
|
} else {
|
|
98
158
|
const txHash = await client.sendRawTransaction(...args);
|
|
99
|
-
logger.
|
|
100
|
-
delayer.
|
|
159
|
+
logger.debug(`Sent tx immediately ${txHash}`);
|
|
160
|
+
delayer.sentTxHashes.push(txHash);
|
|
101
161
|
return txHash;
|
|
102
162
|
}
|
|
103
163
|
}
|
|
@@ -114,3 +174,20 @@ class DelayerImpl {
|
|
|
114
174
|
delayer
|
|
115
175
|
};
|
|
116
176
|
}
|
|
177
|
+
/**
|
|
178
|
+
* Compute the tx hash given the serialized tx. Note that if this is a blob tx, we need to
|
|
179
|
+
* exclude the blobs, commitments, and proofs from the hash.
|
|
180
|
+
*/ function computeTxHash(serializedTransaction) {
|
|
181
|
+
if (serializedTransaction.startsWith('0x03')) {
|
|
182
|
+
const parsed = parseTransaction(serializedTransaction);
|
|
183
|
+
if (parsed.blobs || parsed.sidecars) {
|
|
184
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
185
|
+
const { blobs, sidecars, ...rest } = parsed;
|
|
186
|
+
return keccak256(serializeTransaction({
|
|
187
|
+
type: 'eip4844',
|
|
188
|
+
...rest
|
|
189
|
+
}));
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
return keccak256(serializedTransaction);
|
|
193
|
+
}
|
|
@@ -2,10 +2,11 @@ import type { Logger } from '@aztec/foundation/log';
|
|
|
2
2
|
import { GovernanceAbi } from '@aztec/l1-artifacts/GovernanceAbi';
|
|
3
3
|
import { type GetContractReturnType, type PrivateKeyAccount } from 'viem';
|
|
4
4
|
import type { L1ContractAddresses } from '../l1_contract_addresses.js';
|
|
5
|
-
import type {
|
|
6
|
-
export declare function executeGovernanceProposal(proposalId: bigint, governance: GetContractReturnType<typeof GovernanceAbi,
|
|
7
|
-
export declare function createGovernanceProposal(payloadAddress: `0x${string}`, addresses: L1ContractAddresses, privateKey: PrivateKeyAccount, publicClient:
|
|
8
|
-
governance: GetContractReturnType<typeof GovernanceAbi,
|
|
5
|
+
import type { ExtendedViemWalletClient, ViemPublicClient } from '../types.js';
|
|
6
|
+
export declare function executeGovernanceProposal(proposalId: bigint, governance: GetContractReturnType<typeof GovernanceAbi, ViemPublicClient>, voteAmount: bigint, privateKey: PrivateKeyAccount, l1Client: ExtendedViemWalletClient, rpcUrls: string[], logger: Logger): Promise<void>;
|
|
7
|
+
export declare function createGovernanceProposal(payloadAddress: `0x${string}`, addresses: L1ContractAddresses, privateKey: PrivateKeyAccount, publicClient: ViemPublicClient, logger: Logger): Promise<{
|
|
8
|
+
governance: GetContractReturnType<typeof GovernanceAbi, ViemPublicClient>;
|
|
9
9
|
voteAmount: bigint;
|
|
10
|
+
proposalId: bigint;
|
|
10
11
|
}>;
|
|
11
|
-
//# sourceMappingURL=
|
|
12
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBncmFkZV91dGlscy5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Rlc3QvdXBncmFkZV91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUVwRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFHbEUsT0FBTyxFQUFFLEtBQUsscUJBQXFCLEVBQUUsS0FBSyxpQkFBaUIsRUFBZSxNQUFNLE1BQU0sQ0FBQztBQUd2RixPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRXZFLE9BQU8sS0FBSyxFQUFFLHdCQUF3QixFQUFFLGdCQUFnQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRzlFLHdCQUFzQix5QkFBeUIsQ0FDN0MsVUFBVSxFQUFFLE1BQU0sRUFDbEIsVUFBVSxFQUFFLHFCQUFxQixDQUFDLE9BQU8sYUFBYSxFQUFFLGdCQUFnQixDQUFDLEVBQ3pFLFVBQVUsRUFBRSxNQUFNLEVBQ2xCLFVBQVUsRUFBRSxpQkFBaUIsRUFDN0IsUUFBUSxFQUFFLHdCQUF3QixFQUNsQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQ2pCLE1BQU0sRUFBRSxNQUFNLGlCQW1DZjtBQUVELHdCQUFzQix3QkFBd0IsQ0FDNUMsY0FBYyxFQUFFLEtBQUssTUFBTSxFQUFFLEVBQzdCLFNBQVMsRUFBRSxtQkFBbUIsRUFDOUIsVUFBVSxFQUFFLGlCQUFpQixFQUM3QixZQUFZLEVBQUUsZ0JBQWdCLEVBQzlCLE1BQU0sRUFBRSxNQUFNLEdBQ2IsT0FBTyxDQUFDO0lBQ1QsVUFBVSxFQUFFLHFCQUFxQixDQUFDLE9BQU8sYUFBYSxFQUFFLGdCQUFnQixDQUFDLENBQUM7SUFDMUUsVUFBVSxFQUFFLE1BQU0sQ0FBQztJQUNuQixVQUFVLEVBQUUsTUFBTSxDQUFDO0NBQ3BCLENBQUMsQ0F5Q0QifQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upgrade_utils.d.ts","sourceRoot":"","sources":["../../src/test/upgrade_utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAEpD,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;
|
|
1
|
+
{"version":3,"file":"upgrade_utils.d.ts","sourceRoot":"","sources":["../../src/test/upgrade_utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAEpD,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAGlE,OAAO,EAAE,KAAK,qBAAqB,EAAE,KAAK,iBAAiB,EAAe,MAAM,MAAM,CAAC;AAGvF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAEvE,OAAO,KAAK,EAAE,wBAAwB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAG9E,wBAAsB,yBAAyB,CAC7C,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,qBAAqB,CAAC,OAAO,aAAa,EAAE,gBAAgB,CAAC,EACzE,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,iBAAiB,EAC7B,QAAQ,EAAE,wBAAwB,EAClC,OAAO,EAAE,MAAM,EAAE,EACjB,MAAM,EAAE,MAAM,iBAmCf;AAED,wBAAsB,wBAAwB,CAC5C,cAAc,EAAE,KAAK,MAAM,EAAE,EAC7B,SAAS,EAAE,mBAAmB,EAC9B,UAAU,EAAE,iBAAiB,EAC7B,YAAY,EAAE,gBAAgB,EAC9B,MAAM,EAAE,MAAM,GACb,OAAO,CAAC;IACT,UAAU,EAAE,qBAAqB,CAAC,OAAO,aAAa,EAAE,gBAAgB,CAAC,CAAC;IAC1E,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC,CAyCD"}
|
|
@@ -1,21 +1,22 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { DateProvider } from '@aztec/foundation/timer';
|
|
2
2
|
import { GovernanceAbi } from '@aztec/l1-artifacts/GovernanceAbi';
|
|
3
|
+
import { TestERC20Abi as StakingAssetAbi } from '@aztec/l1-artifacts/TestERC20Abi';
|
|
3
4
|
import { getContract } from 'viem';
|
|
4
|
-
import {
|
|
5
|
-
|
|
5
|
+
import { extractProposalIdFromLogs } from '../contracts/governance.js';
|
|
6
|
+
import { createL1TxUtilsFromViemWallet } from '../l1_tx_utils/index.js';
|
|
7
|
+
import { EthCheatCodes } from './eth_cheat_codes.js';
|
|
8
|
+
export async function executeGovernanceProposal(proposalId, governance, voteAmount, privateKey, l1Client, rpcUrls, logger) {
|
|
6
9
|
const proposal = await governance.read.getProposal([
|
|
7
10
|
proposalId
|
|
8
11
|
]);
|
|
12
|
+
const l1TxUtils = createL1TxUtilsFromViemWallet(l1Client);
|
|
9
13
|
const waitL1Block = async ()=>{
|
|
10
|
-
await
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
value: 1n,
|
|
14
|
-
account: privateKey
|
|
15
|
-
})
|
|
14
|
+
await l1TxUtils.sendAndMonitorTransaction({
|
|
15
|
+
to: l1Client.account.address,
|
|
16
|
+
value: 1n
|
|
16
17
|
});
|
|
17
18
|
};
|
|
18
|
-
const cheatCodes = new EthCheatCodes(rpcUrls, logger);
|
|
19
|
+
const cheatCodes = new EthCheatCodes(rpcUrls, new DateProvider(), logger);
|
|
19
20
|
const timeToActive = proposal.creation + proposal.config.votingDelay;
|
|
20
21
|
logger.info(`Warping to ${timeToActive + 1n}`);
|
|
21
22
|
await cheatCodes.warp(Number(timeToActive + 1n));
|
|
@@ -29,7 +30,7 @@ export async function executeGovernanceProposal(proposalId, governance, voteAmou
|
|
|
29
30
|
], {
|
|
30
31
|
account: privateKey
|
|
31
32
|
});
|
|
32
|
-
await
|
|
33
|
+
await l1Client.waitForTransactionReceipt({
|
|
33
34
|
hash: voteTx
|
|
34
35
|
});
|
|
35
36
|
logger.info(`Voted`);
|
|
@@ -43,15 +44,15 @@ export async function executeGovernanceProposal(proposalId, governance, voteAmou
|
|
|
43
44
|
], {
|
|
44
45
|
account: privateKey
|
|
45
46
|
});
|
|
46
|
-
await
|
|
47
|
+
await l1Client.waitForTransactionReceipt({
|
|
47
48
|
hash: executeTx
|
|
48
49
|
});
|
|
49
50
|
logger.info(`Executed proposal`);
|
|
50
51
|
}
|
|
51
52
|
export async function createGovernanceProposal(payloadAddress, addresses, privateKey, publicClient, logger) {
|
|
52
53
|
const token = getContract({
|
|
53
|
-
address: addresses.
|
|
54
|
-
abi:
|
|
54
|
+
address: addresses.stakingAssetAddress.toString(),
|
|
55
|
+
abi: StakingAssetAbi,
|
|
55
56
|
client: publicClient
|
|
56
57
|
});
|
|
57
58
|
const governance = getContract({
|
|
@@ -91,14 +92,20 @@ export async function createGovernanceProposal(payloadAddress, addresses, privat
|
|
|
91
92
|
hash: depositTx
|
|
92
93
|
});
|
|
93
94
|
logger.info(`Deposited tokens`);
|
|
94
|
-
await governance.write.proposeWithLock([
|
|
95
|
+
const proposeTx = await governance.write.proposeWithLock([
|
|
95
96
|
payloadAddress,
|
|
96
97
|
privateKey.address
|
|
97
98
|
], {
|
|
98
99
|
account: privateKey
|
|
99
100
|
});
|
|
101
|
+
const receipt = await publicClient.waitForTransactionReceipt({
|
|
102
|
+
hash: proposeTx
|
|
103
|
+
});
|
|
104
|
+
logger.info(`Proposed upgrade`);
|
|
105
|
+
const proposalId = extractProposalIdFromLogs(receipt.logs);
|
|
100
106
|
return {
|
|
101
107
|
governance,
|
|
102
|
-
voteAmount
|
|
108
|
+
voteAmount,
|
|
109
|
+
proposalId
|
|
103
110
|
};
|
|
104
111
|
}
|
package/dest/types.d.ts
CHANGED
|
@@ -1,14 +1,68 @@
|
|
|
1
|
-
import type { Account, Chain, Client, FallbackTransport, HttpTransport, PublicActions, PublicClient, PublicRpcSchema, WalletActions,
|
|
1
|
+
import type { Abi, Account, Chain, Client, FallbackTransport, GetContractReturnType, Hex, HttpTransport, PublicActions, PublicClient, PublicRpcSchema, WalletActions, WalletRpcSchema } from 'viem';
|
|
2
2
|
/** Type for a viem public client */
|
|
3
3
|
export type ViemPublicClient = PublicClient<FallbackTransport<HttpTransport[]>, Chain>;
|
|
4
|
-
export type
|
|
4
|
+
export type PublicRpcDebugSchema = [
|
|
5
|
+
{
|
|
6
|
+
Method: 'debug_traceTransaction';
|
|
7
|
+
Parameters: [txHash: `0x${string}`, options: {
|
|
8
|
+
tracer: 'callTracer';
|
|
9
|
+
}];
|
|
10
|
+
ReturnType: DebugCallTrace;
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
Method: 'trace_transaction';
|
|
14
|
+
Parameters: [txHash: `0x${string}`];
|
|
15
|
+
ReturnType: TraceTransactionResponse[];
|
|
16
|
+
}
|
|
17
|
+
];
|
|
18
|
+
/** Return type for a debug_traceTransaction call */
|
|
19
|
+
export type DebugCallTrace = {
|
|
20
|
+
from: Hex;
|
|
21
|
+
to?: Hex;
|
|
22
|
+
type: string;
|
|
23
|
+
input?: Hex;
|
|
24
|
+
output?: Hex;
|
|
25
|
+
gas?: Hex;
|
|
26
|
+
gasUsed?: Hex;
|
|
27
|
+
value?: Hex;
|
|
28
|
+
error?: string;
|
|
29
|
+
calls?: DebugCallTrace[];
|
|
30
|
+
};
|
|
31
|
+
/** Action object for a trace_transaction call */
|
|
32
|
+
export type TraceAction = {
|
|
33
|
+
from: Hex;
|
|
34
|
+
to?: Hex;
|
|
35
|
+
callType: string;
|
|
36
|
+
gas?: Hex;
|
|
37
|
+
input?: Hex;
|
|
38
|
+
value?: Hex;
|
|
39
|
+
};
|
|
40
|
+
/** Result object for a trace_transaction call */
|
|
41
|
+
export type TraceResult = {
|
|
42
|
+
gasUsed?: Hex;
|
|
43
|
+
output?: Hex;
|
|
44
|
+
};
|
|
45
|
+
/** Return type for a single trace in trace_transaction response */
|
|
46
|
+
export type TraceTransactionResponse = {
|
|
47
|
+
action: TraceAction;
|
|
48
|
+
result?: TraceResult;
|
|
49
|
+
error?: string;
|
|
50
|
+
subtraces: number;
|
|
51
|
+
traceAddress: number[];
|
|
52
|
+
type: string;
|
|
53
|
+
};
|
|
54
|
+
/** Type for a viem public client with support for debug methods */
|
|
55
|
+
export type ViemPublicDebugClient = PublicClient<FallbackTransport<HttpTransport[]>, Chain, undefined, [
|
|
56
|
+
...PublicRpcSchema,
|
|
57
|
+
...PublicRpcDebugSchema
|
|
58
|
+
]>;
|
|
5
59
|
export type ExtendedViemWalletClient = Client<FallbackTransport<readonly HttpTransport[]>, Chain, Account, [
|
|
6
60
|
...PublicRpcSchema,
|
|
7
61
|
...WalletRpcSchema
|
|
8
62
|
], PublicActions<FallbackTransport<readonly HttpTransport[]>, Chain> & WalletActions<Chain, Account>>;
|
|
9
|
-
|
|
10
|
-
export type
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
//# sourceMappingURL=
|
|
63
|
+
/** Type for a viem client that can be either public or extended with wallet capabilities */
|
|
64
|
+
export type ViemClient = ViemPublicClient | ExtendedViemWalletClient;
|
|
65
|
+
/** Type for a viem contract that can be used with an extended viem client */
|
|
66
|
+
export type ViemContract<TAbi extends Abi> = GetContractReturnType<TAbi, ExtendedViemWalletClient>;
|
|
67
|
+
export declare function isExtendedClient(client: ViemClient): client is ExtendedViemWalletClient;
|
|
68
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFDVixHQUFHLEVBQ0gsT0FBTyxFQUNQLEtBQUssRUFDTCxNQUFNLEVBQ04saUJBQWlCLEVBQ2pCLHFCQUFxQixFQUNyQixHQUFHLEVBQ0gsYUFBYSxFQUNiLGFBQWEsRUFDYixZQUFZLEVBQ1osZUFBZSxFQUNmLGFBQWEsRUFDYixlQUFlLEVBQ2hCLE1BQU0sTUFBTSxDQUFDO0FBRWQsb0NBQW9DO0FBQ3BDLE1BQU0sTUFBTSxnQkFBZ0IsR0FBRyxZQUFZLENBQUMsaUJBQWlCLENBQUMsYUFBYSxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUV2RixNQUFNLE1BQU0sb0JBQW9CLEdBQUc7SUFDakM7UUFDRSxNQUFNLEVBQUUsd0JBQXdCLENBQUM7UUFDakMsVUFBVSxFQUFFLENBQUMsTUFBTSxFQUFFLEtBQUssTUFBTSxFQUFFLEVBQUUsT0FBTyxFQUFFO1lBQUUsTUFBTSxFQUFFLFlBQVksQ0FBQTtTQUFFLENBQUMsQ0FBQztRQUN2RSxVQUFVLEVBQUUsY0FBYyxDQUFDO0tBQzVCO0lBQ0Q7UUFDRSxNQUFNLEVBQUUsbUJBQW1CLENBQUM7UUFDNUIsVUFBVSxFQUFFLENBQUMsTUFBTSxFQUFFLEtBQUssTUFBTSxFQUFFLENBQUMsQ0FBQztRQUNwQyxVQUFVLEVBQUUsd0JBQXdCLEVBQUUsQ0FBQztLQUN4QztDQUNGLENBQUM7QUFFRixvREFBb0Q7QUFDcEQsTUFBTSxNQUFNLGNBQWMsR0FBRztJQUMzQixJQUFJLEVBQUUsR0FBRyxDQUFDO0lBQ1YsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDO0lBQ1QsSUFBSSxFQUFFLE1BQU0sQ0FBQztJQUNiLEtBQUssQ0FBQyxFQUFFLEdBQUcsQ0FBQztJQUNaLE1BQU0sQ0FBQyxFQUFFLEdBQUcsQ0FBQztJQUNiLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQztJQUNWLE9BQU8sQ0FBQyxFQUFFLEdBQUcsQ0FBQztJQUNkLEtBQUssQ0FBQyxFQUFFLEdBQUcsQ0FBQztJQUNaLEtBQUssQ0FBQyxFQUFFLE1BQU0sQ0FBQztJQUNmLEtBQUssQ0FBQyxFQUFFLGNBQWMsRUFBRSxDQUFDO0NBQzFCLENBQUM7QUFFRixpREFBaUQ7QUFDakQsTUFBTSxNQUFNLFdBQVcsR0FBRztJQUN4QixJQUFJLEVBQUUsR0FBRyxDQUFDO0lBQ1YsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDO0lBQ1QsUUFBUSxFQUFFLE1BQU0sQ0FBQztJQUNqQixHQUFHLENBQUMsRUFBRSxHQUFHLENBQUM7SUFDVixLQUFLLENBQUMsRUFBRSxHQUFHLENBQUM7SUFDWixLQUFLLENBQUMsRUFBRSxHQUFHLENBQUM7Q0FDYixDQUFDO0FBRUYsaURBQWlEO0FBQ2pELE1BQU0sTUFBTSxXQUFXLEdBQUc7SUFDeEIsT0FBTyxDQUFDLEVBQUUsR0FBRyxDQUFDO0lBQ2QsTUFBTSxDQUFDLEVBQUUsR0FBRyxDQUFDO0NBQ2QsQ0FBQztBQUVGLG1FQUFtRTtBQUNuRSxNQUFNLE1BQU0sd0JBQXdCLEdBQUc7SUFDckMsTUFBTSxFQUFFLFdBQVcsQ0FBQztJQUNwQixNQUFNLENBQUMsRUFBRSxXQUFXLENBQUM7SUFDckIsS0FBSyxDQUFDLEVBQUUsTUFBTSxDQUFDO0lBQ2YsU0FBUyxFQUFFLE1BQU0sQ0FBQztJQUNsQixZQUFZLEVBQUUsTUFBTSxFQUFFLENBQUM7SUFDdkIsSUFBSSxFQUFFLE1BQU0sQ0FBQztDQUNkLENBQUM7QUFFRixtRUFBbUU7QUFDbkUsTUFBTSxNQUFNLHFCQUFxQixHQUFHLFlBQVksQ0FDOUMsaUJBQWlCLENBQUMsYUFBYSxFQUFFLENBQUMsRUFDbEMsS0FBSyxFQUNMLFNBQVMsRUFDVDtJQUFDLEdBQUcsZUFBZTtJQUFFLEdBQUcsb0JBQW9CO0NBQUMsQ0FDOUMsQ0FBQztBQUVGLE1BQU0sTUFBTSx3QkFBd0IsR0FBRyxNQUFNLENBQzNDLGlCQUFpQixDQUFDLFNBQVMsYUFBYSxFQUFFLENBQUMsRUFDM0MsS0FBSyxFQUNMLE9BQU8sRUFDUDtJQUFDLEdBQUcsZUFBZTtJQUFFLEdBQUcsZUFBZTtDQUFDLEVBQ3hDLGFBQWEsQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLGFBQWEsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsYUFBYSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FDbEcsQ0FBQztBQUVGLDRGQUE0RjtBQUM1RixNQUFNLE1BQU0sVUFBVSxHQUFHLGdCQUFnQixHQUFHLHdCQUF3QixDQUFDO0FBRXJFLDZFQUE2RTtBQUM3RSxNQUFNLE1BQU0sWUFBWSxDQUFDLElBQUksU0FBUyxHQUFHLElBQUkscUJBQXFCLENBQUMsSUFBSSxFQUFFLHdCQUF3QixDQUFDLENBQUM7QUFFbkcsd0JBQWdCLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxVQUFVLEdBQUcsTUFBTSxJQUFJLHdCQUF3QixDQUV2RiJ9
|
package/dest/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,OAAO,EACP,KAAK,EACL,MAAM,EACN,iBAAiB,EACjB,aAAa,EACb,aAAa,EACb,YAAY,EACZ,eAAe,EACf,aAAa,EACb,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,GAAG,EACH,OAAO,EACP,KAAK,EACL,MAAM,EACN,iBAAiB,EACjB,qBAAqB,EACrB,GAAG,EACH,aAAa,EACb,aAAa,EACb,YAAY,EACZ,eAAe,EACf,aAAa,EACb,eAAe,EAChB,MAAM,MAAM,CAAC;AAEd,oCAAoC;AACpC,MAAM,MAAM,gBAAgB,GAAG,YAAY,CAAC,iBAAiB,CAAC,aAAa,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;AAEvF,MAAM,MAAM,oBAAoB,GAAG;IACjC;QACE,MAAM,EAAE,wBAAwB,CAAC;QACjC,UAAU,EAAE,CAAC,MAAM,EAAE,KAAK,MAAM,EAAE,EAAE,OAAO,EAAE;YAAE,MAAM,EAAE,YAAY,CAAA;SAAE,CAAC,CAAC;QACvE,UAAU,EAAE,cAAc,CAAC;KAC5B;IACD;QACE,MAAM,EAAE,mBAAmB,CAAC;QAC5B,UAAU,EAAE,CAAC,MAAM,EAAE,KAAK,MAAM,EAAE,CAAC,CAAC;QACpC,UAAU,EAAE,wBAAwB,EAAE,CAAC;KACxC;CACF,CAAC;AAEF,oDAAoD;AACpD,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,GAAG,CAAC;IACV,EAAE,CAAC,EAAE,GAAG,CAAC;IACT,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,GAAG,CAAC;IACZ,MAAM,CAAC,EAAE,GAAG,CAAC;IACb,GAAG,CAAC,EAAE,GAAG,CAAC;IACV,OAAO,CAAC,EAAE,GAAG,CAAC;IACd,KAAK,CAAC,EAAE,GAAG,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,cAAc,EAAE,CAAC;CAC1B,CAAC;AAEF,iDAAiD;AACjD,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,GAAG,CAAC;IACV,EAAE,CAAC,EAAE,GAAG,CAAC;IACT,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,GAAG,CAAC;IACV,KAAK,CAAC,EAAE,GAAG,CAAC;IACZ,KAAK,CAAC,EAAE,GAAG,CAAC;CACb,CAAC;AAEF,iDAAiD;AACjD,MAAM,MAAM,WAAW,GAAG;IACxB,OAAO,CAAC,EAAE,GAAG,CAAC;IACd,MAAM,CAAC,EAAE,GAAG,CAAC;CACd,CAAC;AAEF,mEAAmE;AACnE,MAAM,MAAM,wBAAwB,GAAG;IACrC,MAAM,EAAE,WAAW,CAAC;IACpB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,mEAAmE;AACnE,MAAM,MAAM,qBAAqB,GAAG,YAAY,CAC9C,iBAAiB,CAAC,aAAa,EAAE,CAAC,EAClC,KAAK,EACL,SAAS,EACT;IAAC,GAAG,eAAe;IAAE,GAAG,oBAAoB;CAAC,CAC9C,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG,MAAM,CAC3C,iBAAiB,CAAC,SAAS,aAAa,EAAE,CAAC,EAC3C,KAAK,EACL,OAAO,EACP;IAAC,GAAG,eAAe;IAAE,GAAG,eAAe;CAAC,EACxC,aAAa,CAAC,iBAAiB,CAAC,SAAS,aAAa,EAAE,CAAC,EAAE,KAAK,CAAC,GAAG,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC,CAClG,CAAC;AAEF,4FAA4F;AAC5F,MAAM,MAAM,UAAU,GAAG,gBAAgB,GAAG,wBAAwB,CAAC;AAErE,6EAA6E;AAC7E,MAAM,MAAM,YAAY,CAAC,IAAI,SAAS,GAAG,IAAI,qBAAqB,CAAC,IAAI,EAAE,wBAAwB,CAAC,CAAC;AAEnG,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,IAAI,wBAAwB,CAEvF"}
|
package/dest/types.js
CHANGED
package/dest/utils.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import type { Fr } from '@aztec/foundation/
|
|
1
|
+
import type { Fr } from '@aztec/foundation/curves/bn254';
|
|
2
2
|
import type { Logger } from '@aztec/foundation/log';
|
|
3
|
-
import { type Abi, type ContractEventName, type DecodeEventLogReturnType, type Hex, type Log } from 'viem';
|
|
3
|
+
import { type Abi, type ContractEventName, type DecodeEventLogReturnType, type FormattedTransaction, type Hex, type Log } from 'viem';
|
|
4
4
|
export interface L2Claim {
|
|
5
5
|
claimSecret: Fr;
|
|
6
6
|
claimAmount: Fr;
|
|
@@ -12,6 +12,7 @@ export declare class FormattedViemError extends Error {
|
|
|
12
12
|
constructor(message: string, metaMessages?: any[]);
|
|
13
13
|
}
|
|
14
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;
|
|
15
|
+
export declare function tryExtractEvent<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 | undefined;
|
|
15
16
|
export declare function prettyLogViemErrorMsg(err: any): any;
|
|
16
17
|
/**
|
|
17
18
|
* Formats a Viem error into a FormattedViemError instance.
|
|
@@ -21,4 +22,16 @@ export declare function prettyLogViemErrorMsg(err: any): any;
|
|
|
21
22
|
*/
|
|
22
23
|
export declare function formatViemError(error: any, abi?: Abi): FormattedViemError;
|
|
23
24
|
export declare function tryGetCustomErrorName(err: any): string | undefined;
|
|
24
|
-
|
|
25
|
+
/**
|
|
26
|
+
* Type guard to check if a transaction is a blob transaction (EIP-4844).
|
|
27
|
+
* Blob transactions have maxFeePerBlobGas and blobVersionedHashes fields.
|
|
28
|
+
*/
|
|
29
|
+
export declare function isBlobTransaction(tx: FormattedTransaction): tx is FormattedTransaction & {
|
|
30
|
+
maxFeePerBlobGas: bigint;
|
|
31
|
+
blobVersionedHashes: readonly Hex[];
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* Calculates a percentile from an array of bigints
|
|
35
|
+
*/
|
|
36
|
+
export declare function calculatePercentile(values: bigint[], percentile: number): bigint;
|
|
37
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxFQUFFLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN6RCxPQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUdwRCxPQUFPLEVBQ0wsS0FBSyxHQUFHLEVBRVIsS0FBSyxpQkFBaUIsRUFFdEIsS0FBSyx3QkFBd0IsRUFDN0IsS0FBSyxvQkFBb0IsRUFDekIsS0FBSyxHQUFHLEVBQ1IsS0FBSyxHQUFHLEVBR1QsTUFBTSxNQUFNLENBQUM7QUFFZCxNQUFNLFdBQVcsT0FBTztJQUN0QixXQUFXLEVBQUUsRUFBRSxDQUFDO0lBQ2hCLFdBQVcsRUFBRSxFQUFFLENBQUM7SUFDaEIsV0FBVyxFQUFFLEdBQUcsQ0FBQztJQUNqQixnQkFBZ0IsRUFBRSxNQUFNLENBQUM7Q0FDMUI7QUFFRCxxQkFBYSxrQkFBbUIsU0FBUSxLQUFLO0lBQzNDLFlBQVksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBRXJCLFlBQVksT0FBTyxFQUFFLE1BQU0sRUFBRSxZQUFZLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFJaEQ7Q0FDRjtBQUVELHdCQUFnQixZQUFZLENBQzFCLEtBQUssQ0FBQyxJQUFJLFNBQVMsR0FBRyxHQUFHLFNBQVMsT0FBTyxFQUFFLEVBQzNDLFVBQVUsU0FBUyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsRUFDMUMsVUFBVSxHQUFHLHdCQUF3QixDQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxFQUUvRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEVBQ1gsT0FBTyxFQUFFLEdBQUcsRUFDWixHQUFHLEVBQUUsSUFBSSxFQUNULFNBQVMsRUFBRSxVQUFVLEVBQ3JCLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLFVBQVUsS0FBSyxPQUFPLEVBQ3JDLE1BQU0sQ0FBQyxFQUFFLE1BQU0sR0FDZCxVQUFVLENBTVo7QUFFRCx3QkFBZ0IsZUFBZSxDQUM3QixLQUFLLENBQUMsSUFBSSxTQUFTLEdBQUcsR0FBRyxTQUFTLE9BQU8sRUFBRSxFQUMzQyxVQUFVLFNBQVMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEVBQzFDLFVBQVUsR0FBRyx3QkFBd0IsQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsRUFFL0UsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUNYLE9BQU8sRUFBRSxHQUFHLEVBQ1osR0FBRyxFQUFFLElBQUksRUFDVCxTQUFTLEVBQUUsVUFBVSxFQUNyQixNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxVQUFVLEtBQUssT0FBTyxFQUNyQyxNQUFNLENBQUMsRUFBRSxNQUFNLEdBQ2QsVUFBVSxHQUFHLFNBQVMsQ0FnQnhCO0FBRUQsd0JBQWdCLHFCQUFxQixDQUFDLEdBQUcsRUFBRSxHQUFHLE9BVzdDO0FBMEJEOzs7OztHQUtHO0FBQ0gsd0JBQWdCLGVBQWUsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLEdBQUcsR0FBRSxHQUFlLEdBQUcsa0JBQWtCLENBd0VwRjtBQXlCRCx3QkFBZ0IscUJBQXFCLENBQUMsR0FBRyxFQUFFLEdBQUcsc0JBYTdDO0FBRUQ7OztHQUdHO0FBQ0gsd0JBQWdCLGlCQUFpQixDQUFDLEVBQUUsRUFBRSxvQkFBb0IsR0FBRyxFQUFFLElBQUksb0JBQW9CLEdBQUc7SUFDeEYsZ0JBQWdCLEVBQUUsTUFBTSxDQUFDO0lBQ3pCLG1CQUFtQixFQUFFLFNBQVMsR0FBRyxFQUFFLENBQUM7Q0FDckMsQ0FPQTtBQUVEOztHQUVHO0FBQ0gsd0JBQWdCLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsRUFBRSxVQUFVLEVBQUUsTUFBTSxHQUFHLE1BQU0sQ0FPaEYifQ==
|
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,KAAK,EAAE,EAAE,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AACzD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAGpD,OAAO,EACL,KAAK,GAAG,EAER,KAAK,iBAAiB,EAEtB,KAAK,wBAAwB,EAC7B,KAAK,oBAAoB,EACzB,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;IAErB,YAAY,OAAO,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,GAAG,EAAE,EAIhD;CACF;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;AAED,wBAAgB,eAAe,CAC7B,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,GAAG,SAAS,CAgBxB;AAED,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,GAAG,OAW7C;AA0BD;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,GAAE,GAAe,GAAG,kBAAkB,CAwEpF;AAyBD,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,GAAG,sBAa7C;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,oBAAoB,GAAG,EAAE,IAAI,oBAAoB,GAAG;IACxF,gBAAgB,EAAE,MAAM,CAAC;IACzB,mBAAmB,EAAE,SAAS,GAAG,EAAE,CAAC;CACrC,CAOA;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAOhF"}
|
package/dest/utils.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ErrorsAbi } from '@aztec/l1-artifacts';
|
|
1
|
+
import { ErrorsAbi } from '@aztec/l1-artifacts/ErrorsAbi';
|
|
2
2
|
import { BaseError, ContractFunctionRevertedError, decodeErrorResult, decodeEventLog } from 'viem';
|
|
3
3
|
export class FormattedViemError extends Error {
|
|
4
4
|
metaMessages;
|
|
@@ -15,7 +15,7 @@ export function extractEvent(logs, address, abi, eventName, filter, logger) {
|
|
|
15
15
|
}
|
|
16
16
|
return event;
|
|
17
17
|
}
|
|
18
|
-
function tryExtractEvent(logs, address, abi, eventName, filter, logger) {
|
|
18
|
+
export function tryExtractEvent(logs, address, abi, eventName, filter, logger) {
|
|
19
19
|
for (const log of logs){
|
|
20
20
|
if (log.address.toLowerCase() === address.toLowerCase()) {
|
|
21
21
|
try {
|
|
@@ -101,97 +101,52 @@ function getNestedErrorData(error) {
|
|
|
101
101
|
return new FormattedViemError(`${errorName}${args}`, error?.metaMessages);
|
|
102
102
|
}
|
|
103
103
|
}
|
|
104
|
-
} catch
|
|
104
|
+
} catch {
|
|
105
105
|
// If decoding fails, we fall back to the original formatting
|
|
106
106
|
}
|
|
107
|
+
// Strip ABI from the error object before formatting
|
|
108
|
+
if (error && typeof error === 'object') {
|
|
109
|
+
// Create a clone to avoid modifying the original
|
|
110
|
+
const errorClone = structuredClone(error);
|
|
111
|
+
// Helper function to recursively remove ABI properties
|
|
112
|
+
// Strip ABIs from the clone
|
|
113
|
+
stripAbis(errorClone);
|
|
114
|
+
// Use the cleaned clone for further processing
|
|
115
|
+
error = errorClone;
|
|
116
|
+
}
|
|
107
117
|
// If it's a regular Error instance, return it with its message
|
|
108
118
|
if (error instanceof Error) {
|
|
109
|
-
return error;
|
|
119
|
+
return new FormattedViemError(error.message, error?.metaMessages);
|
|
110
120
|
}
|
|
111
|
-
|
|
112
|
-
const
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
}
|
|
139
|
-
if (typeof obj === 'string') {
|
|
140
|
-
if (obj.startsWith('0x')) {
|
|
141
|
-
return truncateHex(obj);
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
return obj;
|
|
145
|
-
};
|
|
146
|
-
// Process the entire request body
|
|
147
|
-
const processed = processParams(parsed);
|
|
148
|
-
return JSON.stringify(processed, null, 2);
|
|
149
|
-
} catch {
|
|
150
|
-
return body;
|
|
121
|
+
const body = String(error);
|
|
122
|
+
const length = body.length;
|
|
123
|
+
// LogExplorer can only render up to 2500 characters in it's summary view. Try to keep the whole message below this number
|
|
124
|
+
// Limit the error to 2000 chacaters in order to allow code higher up to decorate this error with extra details (up to 500 characters)
|
|
125
|
+
if (length > 2000) {
|
|
126
|
+
const chunk = 950;
|
|
127
|
+
const truncated = length - 2 * chunk;
|
|
128
|
+
return new FormattedViemError(body.slice(0, chunk) + `...${truncated} characters truncated...` + body.slice(-1 * chunk));
|
|
129
|
+
}
|
|
130
|
+
return new FormattedViemError(body);
|
|
131
|
+
}
|
|
132
|
+
function stripAbis(obj) {
|
|
133
|
+
if (!obj || typeof obj !== 'object') {
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
// Delete ABI property at current level
|
|
137
|
+
if ('abi' in obj) {
|
|
138
|
+
delete obj.abi;
|
|
139
|
+
}
|
|
140
|
+
// Process cause property
|
|
141
|
+
if (obj.cause) {
|
|
142
|
+
stripAbis(obj.cause);
|
|
143
|
+
}
|
|
144
|
+
// Process arrays and objects
|
|
145
|
+
Object.values(obj).forEach((value)=>{
|
|
146
|
+
if (value && typeof value === 'object') {
|
|
147
|
+
stripAbis(value);
|
|
151
148
|
}
|
|
152
|
-
};
|
|
153
|
-
const truncateHexStringsInText = (text)=>{
|
|
154
|
-
const hexRegex = /\b0x[a-fA-F0-9]{10,}/g;
|
|
155
|
-
return text.replace(hexRegex, (hex)=>truncateHex(hex));
|
|
156
|
-
};
|
|
157
|
-
const extractAndFormatRequestBody = (message)=>{
|
|
158
|
-
// First handle Request body JSON
|
|
159
|
-
const requestBodyRegex = /Request body: ({[\s\S]*?})\n/g;
|
|
160
|
-
let result = message.replace(requestBodyRegex, (match, body)=>{
|
|
161
|
-
return `Request body: ${formatRequestBody(body)}\n`;
|
|
162
|
-
});
|
|
163
|
-
// Then handle Arguments section
|
|
164
|
-
const argsRegex = /((?:Request |Estimate Gas )?Arguments:[\s\S]*?(?=\n\n|$))/g;
|
|
165
|
-
result = result.replace(argsRegex, (section)=>{
|
|
166
|
-
const lines = section.split('\n');
|
|
167
|
-
const processedLines = lines.map((line)=>{
|
|
168
|
-
// Check if line contains a colon followed by content
|
|
169
|
-
const colonIndex = line.indexOf(':');
|
|
170
|
-
if (colonIndex !== -1) {
|
|
171
|
-
const [prefix, content] = [
|
|
172
|
-
line.slice(0, colonIndex + 1),
|
|
173
|
-
line.slice(colonIndex + 1).trim()
|
|
174
|
-
];
|
|
175
|
-
// If content contains a hex string, truncate it
|
|
176
|
-
if (content.includes('0x')) {
|
|
177
|
-
const hexMatches = content.match(/0x[a-fA-F0-9]+/g) || [];
|
|
178
|
-
let processedContent = content;
|
|
179
|
-
hexMatches.forEach((hex)=>{
|
|
180
|
-
processedContent = processedContent.replace(hex, truncateHex(hex));
|
|
181
|
-
});
|
|
182
|
-
return `${prefix} ${processedContent}`;
|
|
183
|
-
}
|
|
184
|
-
}
|
|
185
|
-
return line;
|
|
186
|
-
});
|
|
187
|
-
return processedLines.join('\n');
|
|
188
|
-
});
|
|
189
|
-
// Finally, catch any remaining hex strings in the message
|
|
190
|
-
result = truncateHexStringsInText(result);
|
|
191
|
-
return result;
|
|
192
|
-
};
|
|
193
|
-
const formattedRes = extractAndFormatRequestBody(error?.message || String(error));
|
|
194
|
-
return new FormattedViemError(formattedRes.replace(/\\n/g, '\n'), error?.metaMessages);
|
|
149
|
+
});
|
|
195
150
|
}
|
|
196
151
|
export function tryGetCustomErrorName(err) {
|
|
197
152
|
try {
|
|
@@ -203,7 +158,25 @@ export function tryGetCustomErrorName(err) {
|
|
|
203
158
|
return revertError.data?.errorName;
|
|
204
159
|
}
|
|
205
160
|
}
|
|
206
|
-
} catch
|
|
161
|
+
} catch {
|
|
207
162
|
return undefined;
|
|
208
163
|
}
|
|
209
164
|
}
|
|
165
|
+
/**
|
|
166
|
+
* Type guard to check if a transaction is a blob transaction (EIP-4844).
|
|
167
|
+
* Blob transactions have maxFeePerBlobGas and blobVersionedHashes fields.
|
|
168
|
+
*/ export function isBlobTransaction(tx) {
|
|
169
|
+
return 'maxFeePerBlobGas' in tx && tx.maxFeePerBlobGas !== undefined && 'blobVersionedHashes' in tx && tx.blobVersionedHashes !== undefined;
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Calculates a percentile from an array of bigints
|
|
173
|
+
*/ export function calculatePercentile(values, percentile) {
|
|
174
|
+
if (values.length === 0) {
|
|
175
|
+
return 0n;
|
|
176
|
+
}
|
|
177
|
+
const sorted = [
|
|
178
|
+
...values
|
|
179
|
+
].sort((a, b)=>a < b ? -1 : a > b ? 1 : 0);
|
|
180
|
+
const index = Math.ceil((sorted.length - 1) * (percentile / 100));
|
|
181
|
+
return sorted[index];
|
|
182
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
2
|
+
/**
|
|
3
|
+
* The address of the zk passport verifier on sepolia
|
|
4
|
+
* get address from: ROOT/l1-contracts/lib/circuits/src/solidity/deployments/deployment-11155111.json
|
|
5
|
+
*/
|
|
6
|
+
export declare const ZK_PASSPORT_VERIFIER_ADDRESS: EthAddress;
|
|
7
|
+
/**
|
|
8
|
+
* The default domain of the zk passport site
|
|
9
|
+
*/
|
|
10
|
+
export declare const ZK_PASSPORT_DOMAIN = "testnet.aztec.network";
|
|
11
|
+
/**
|
|
12
|
+
* The default scope of the zk passport proofs
|
|
13
|
+
*/
|
|
14
|
+
export declare const ZK_PASSPORT_SCOPE = "personhood";
|
|
15
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiemtQYXNzcG9ydFZlcmlmaWVyQWRkcmVzcy5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3prUGFzc3BvcnRWZXJpZmllckFkZHJlc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRTNEOzs7R0FHRztBQUNILGVBQU8sTUFBTSw0QkFBNEIsWUFBc0UsQ0FBQztBQUNoSDs7R0FFRztBQUNILGVBQU8sTUFBTSxrQkFBa0IsMEJBQTBCLENBQUM7QUFDMUQ7O0dBRUc7QUFDSCxlQUFPLE1BQU0saUJBQWlCLGVBQWUsQ0FBQyJ9
|