@aztec/ethereum 0.0.0-test.0 → 0.0.1-commit.21caa21
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 +16 -2
- package/dest/config.d.ts +111 -17
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +462 -22
- package/dest/constants.d.ts +1 -1
- package/dest/contracts/empire_base.d.ts +24 -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 +66 -0
- package/dest/contracts/empire_slashing_proposer.d.ts.map +1 -0
- package/dest/contracts/empire_slashing_proposer.js +200 -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 +16 -13
- package/dest/contracts/governance_proposer.d.ts.map +1 -1
- package/dest/contracts/governance_proposer.js +37 -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 +204 -40
- package/dest/contracts/rollup.d.ts.map +1 -1
- package/dest/contracts/rollup.js +529 -79
- 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 +139 -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_l1_contracts.d.ts +577 -21114
- package/dest/deploy_l1_contracts.d.ts.map +1 -1
- package/dest/deploy_l1_contracts.js +1225 -421
- 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/index.d.ts +7 -3
- package/dest/index.d.ts.map +1 -1
- package/dest/index.js +6 -2
- package/dest/l1_artifacts.d.ts +77344 -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 +22 -18
- package/dest/l1_reader.d.ts +2 -2
- package/dest/l1_reader.d.ts.map +1 -1
- package/dest/l1_reader.js +8 -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 +82 -0
- package/dest/l1_tx_utils/constants.d.ts +6 -0
- package/dest/l1_tx_utils/constants.d.ts.map +1 -0
- package/dest/l1_tx_utils/constants.js +14 -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/index.d.ts +10 -0
- package/dest/l1_tx_utils/index.d.ts.map +1 -0
- package/dest/l1_tx_utils/index.js +10 -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_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 +610 -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 +94 -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 +430 -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 +73 -0
- package/dest/test/chain_monitor.d.ts.map +1 -0
- package/dest/test/chain_monitor.js +215 -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 +558 -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 +266 -0
- package/dest/test/start_anvil.d.ts +7 -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 +95 -19
- 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 +7 -8
- package/dest/types.d.ts.map +1 -1
- package/dest/types.js +3 -1
- package/dest/utils.d.ts +2 -1
- package/dest/utils.d.ts.map +1 -1
- package/dest/utils.js +43 -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 +28 -19
- package/src/account.ts +5 -0
- package/src/client.ts +42 -4
- package/src/config.ts +592 -31
- package/src/contracts/empire_base.ts +77 -7
- package/src/contracts/empire_slashing_proposer.ts +265 -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 +66 -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 +596 -74
- package/src/contracts/slasher_contract.ts +89 -0
- package/src/contracts/tally_slashing_proposer.ts +316 -0
- package/src/contracts/utils.ts +14 -0
- package/src/deploy_l1_contracts.ts +1459 -538
- package/src/eth-signer/eth-signer.ts +25 -0
- package/src/eth-signer/index.ts +1 -0
- package/src/index.ts +6 -2
- package/src/l1_artifacts.ts +254 -0
- package/src/l1_contract_addresses.ts +32 -19
- package/src/l1_reader.ts +9 -9
- package/src/l1_tx_utils/README.md +177 -0
- package/src/l1_tx_utils/config.ts +143 -0
- package/src/l1_tx_utils/constants.ts +18 -0
- package/src/l1_tx_utils/factory.ts +64 -0
- package/src/l1_tx_utils/index.ts +12 -0
- package/src/l1_tx_utils/interfaces.ts +86 -0
- package/src/l1_tx_utils/l1_tx_utils.ts +718 -0
- package/src/l1_tx_utils/l1_tx_utils_with_blobs.ts +77 -0
- package/src/l1_tx_utils/readonly_l1_tx_utils.ts +558 -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 +243 -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 +307 -0
- package/src/test/start_anvil.ts +22 -5
- package/src/test/tx_delayer.ts +127 -26
- package/src/test/upgrade_utils.ts +30 -21
- package/src/types.ts +10 -8
- package/src/utils.ts +49 -90
- 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/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/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/eth_cheat_codes.ts +0 -314
- 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,9 @@ 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
|
+
export function waitUntilBlock(client, blockNumber, logger, timeout) {
|
|
7
8
|
const publicClient = 'getBlockNumber' in client && typeof client.getBlockNumber === 'function' ? client : client.extend(publicActions);
|
|
8
9
|
return retryUntil(async ()=>{
|
|
9
10
|
const currentBlockNumber = await publicClient.getBlockNumber({
|
|
@@ -11,9 +12,9 @@ export function waitUntilBlock(client, blockNumber, logger) {
|
|
|
11
12
|
});
|
|
12
13
|
logger?.debug(`Block number is ${currentBlockNumber} (waiting until ${blockNumber})`);
|
|
13
14
|
return currentBlockNumber >= BigInt(blockNumber);
|
|
14
|
-
}, `Wait until L1 block ${blockNumber}`, 120, 0.1);
|
|
15
|
+
}, `Wait until L1 block ${blockNumber}`, timeout ?? 120, 0.1);
|
|
15
16
|
}
|
|
16
|
-
export function waitUntilL1Timestamp(client, timestamp, logger) {
|
|
17
|
+
export function waitUntilL1Timestamp(client, timestamp, logger, timeout) {
|
|
17
18
|
const publicClient = 'getBlockNumber' in client && typeof client.getBlockNumber === 'function' ? client : client.extend(publicActions);
|
|
18
19
|
let lastBlock = undefined;
|
|
19
20
|
return retryUntil(async ()=>{
|
|
@@ -31,17 +32,30 @@ export function waitUntilL1Timestamp(client, timestamp, logger) {
|
|
|
31
32
|
const currentTs = currentBlock.timestamp;
|
|
32
33
|
logger?.debug(`Block timstamp is ${currentTs} (waiting until ${timestamp})`);
|
|
33
34
|
return currentTs >= BigInt(timestamp);
|
|
34
|
-
}, `Wait until L1 timestamp ${timestamp}`, 120, 0.1);
|
|
35
|
+
}, `Wait until L1 timestamp ${timestamp}`, timeout ?? 120, 0.1);
|
|
35
36
|
}
|
|
36
37
|
class DelayerImpl {
|
|
37
|
-
|
|
38
|
+
dateProvider;
|
|
39
|
+
logger;
|
|
40
|
+
constructor(dateProvider, opts){
|
|
41
|
+
this.dateProvider = dateProvider;
|
|
42
|
+
this.logger = createLogger('ethereum:tx_delayer');
|
|
43
|
+
this.maxInclusionTimeIntoSlot = undefined;
|
|
44
|
+
this.nextWait = undefined;
|
|
45
|
+
this.sentTxHashes = [];
|
|
46
|
+
this.cancelledTxs = [];
|
|
38
47
|
this.ethereumSlotDuration = BigInt(opts.ethereumSlotDuration);
|
|
39
48
|
}
|
|
49
|
+
maxInclusionTimeIntoSlot;
|
|
40
50
|
ethereumSlotDuration;
|
|
41
|
-
nextWait
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
51
|
+
nextWait;
|
|
52
|
+
sentTxHashes;
|
|
53
|
+
cancelledTxs;
|
|
54
|
+
getSentTxHashes() {
|
|
55
|
+
return this.sentTxHashes;
|
|
56
|
+
}
|
|
57
|
+
getCancelledTxs() {
|
|
58
|
+
return this.cancelledTxs;
|
|
45
59
|
}
|
|
46
60
|
pauseNextTxUntilBlock(l1BlockNumber) {
|
|
47
61
|
this.nextWait = {
|
|
@@ -53,32 +67,77 @@ class DelayerImpl {
|
|
|
53
67
|
l1Timestamp: BigInt(l1Timestamp)
|
|
54
68
|
};
|
|
55
69
|
}
|
|
70
|
+
cancelNextTx() {
|
|
71
|
+
this.nextWait = {
|
|
72
|
+
indefinitely: true
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
setMaxInclusionTimeIntoSlot(seconds) {
|
|
76
|
+
this.maxInclusionTimeIntoSlot = seconds;
|
|
77
|
+
}
|
|
56
78
|
}
|
|
57
79
|
/**
|
|
58
80
|
* Returns a new client (without modifying the one passed in) with an injected tx delayer.
|
|
59
81
|
* The delayer can be used to hold off the next tx to be sent until a given block number.
|
|
60
82
|
* TODO(#10824): This doesn't play along well with blob txs for some reason.
|
|
61
|
-
*/ export function withDelayer(client, opts) {
|
|
83
|
+
*/ export function withDelayer(client, dateProvider, opts) {
|
|
84
|
+
if (!isExtendedClient(client)) {
|
|
85
|
+
throw new Error('withDelayer has to be instantiated with a wallet viem client.');
|
|
86
|
+
}
|
|
62
87
|
const logger = createLogger('ethereum:tx_delayer');
|
|
63
|
-
const delayer = new DelayerImpl(opts);
|
|
88
|
+
const delayer = new DelayerImpl(dateProvider, opts);
|
|
64
89
|
const extended = client// Tweak sendRawTransaction so it uses the delay defined in the delayer.
|
|
65
90
|
// Note that this will only work with local accounts (ie accounts for which we have the private key).
|
|
66
91
|
// Transactions signed by the node will not be delayed since they use sendTransaction directly,
|
|
67
92
|
// but we do not use them in our codebase at all.
|
|
68
93
|
.extend((client)=>({
|
|
69
94
|
async sendRawTransaction (...args) {
|
|
95
|
+
let wait;
|
|
96
|
+
let txHash;
|
|
97
|
+
const { serializedTransaction } = args[0];
|
|
98
|
+
const publicClient = client;
|
|
70
99
|
if (delayer.nextWait !== undefined) {
|
|
100
|
+
// Check if we have been instructed to delay the next tx.
|
|
71
101
|
const waitUntil = delayer.nextWait;
|
|
72
102
|
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
103
|
// Compute the tx hash manually so we emulate sendRawTransaction response
|
|
76
|
-
|
|
77
|
-
|
|
104
|
+
txHash = computeTxHash(serializedTransaction);
|
|
105
|
+
// Cancel tx outright if instructed
|
|
106
|
+
if ('indefinitely' in waitUntil && waitUntil.indefinitely) {
|
|
107
|
+
logger.info(`Cancelling tx ${txHash}`);
|
|
108
|
+
delayer.cancelledTxs.push(serializedTransaction);
|
|
109
|
+
return Promise.resolve(txHash);
|
|
110
|
+
}
|
|
111
|
+
// Or wait until the desired block number or timestamp
|
|
112
|
+
wait = 'l1BlockNumber' in waitUntil ? waitUntilBlock(publicClient, waitUntil.l1BlockNumber - 1n, logger) : 'l1Timestamp' in waitUntil ? waitUntilL1Timestamp(publicClient, waitUntil.l1Timestamp - delayer.ethereumSlotDuration, logger) : undefined;
|
|
78
113
|
logger.info(`Delaying tx ${txHash} until ${inspect(waitUntil)}`, {
|
|
79
114
|
argsLen: args.length,
|
|
80
115
|
...omit(parseTransaction(serializedTransaction), 'data', 'sidecars')
|
|
81
116
|
});
|
|
117
|
+
} else if (delayer.maxInclusionTimeIntoSlot !== undefined) {
|
|
118
|
+
// Check if we need to delay txs sent too close to the end of the slot.
|
|
119
|
+
const currentBlock = await publicClient.getBlock({
|
|
120
|
+
includeTransactions: false
|
|
121
|
+
});
|
|
122
|
+
const { timestamp: lastBlockTimestamp, number } = currentBlock;
|
|
123
|
+
const now = delayer.dateProvider.now();
|
|
124
|
+
txHash = computeTxHash(serializedTransaction);
|
|
125
|
+
const logData = {
|
|
126
|
+
...omit(parseTransaction(serializedTransaction), 'data', 'sidecars'),
|
|
127
|
+
lastBlockTimestamp,
|
|
128
|
+
now,
|
|
129
|
+
maxInclusionTimeIntoSlot: delayer.maxInclusionTimeIntoSlot
|
|
130
|
+
};
|
|
131
|
+
if (now / 1000 - Number(lastBlockTimestamp) > delayer.maxInclusionTimeIntoSlot) {
|
|
132
|
+
// If the last block was mined more than `maxInclusionTimeIntoSlot` seconds ago, then we cannot include
|
|
133
|
+
// any txs in the current slot, so we delay the tx until the next slot.
|
|
134
|
+
logger.info(`Delaying inclusion of tx ${txHash} until the next slot since it was sent too late`, logData);
|
|
135
|
+
wait = waitUntilBlock(publicClient, number + 1n, logger);
|
|
136
|
+
} else {
|
|
137
|
+
logger.debug(`Immediately sending tx ${txHash} as it was received early enough in the slot`, logData);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
if (wait !== undefined) {
|
|
82
141
|
// Do not await here so we can return the tx hash immediately as if it had been sent on the spot.
|
|
83
142
|
// Instead, delay it so it lands on the desired block number or timestamp, assuming anvil will
|
|
84
143
|
// mine it immediately.
|
|
@@ -90,14 +149,14 @@ class DelayerImpl {
|
|
|
90
149
|
computedTxHash: txHash
|
|
91
150
|
});
|
|
92
151
|
}
|
|
93
|
-
logger.info(`Sent previously delayed tx ${clientTxHash}
|
|
94
|
-
delayer.
|
|
152
|
+
logger.info(`Sent previously delayed tx ${clientTxHash}`);
|
|
153
|
+
delayer.sentTxHashes.push(clientTxHash);
|
|
95
154
|
}).catch((err)=>logger.error(`Error sending tx after delay`, err));
|
|
96
155
|
return Promise.resolve(txHash);
|
|
97
156
|
} else {
|
|
98
157
|
const txHash = await client.sendRawTransaction(...args);
|
|
99
158
|
logger.verbose(`Sent tx immediately ${txHash}`);
|
|
100
|
-
delayer.
|
|
159
|
+
delayer.sentTxHashes.push(txHash);
|
|
101
160
|
return txHash;
|
|
102
161
|
}
|
|
103
162
|
}
|
|
@@ -114,3 +173,20 @@ class DelayerImpl {
|
|
|
114
173
|
delayer
|
|
115
174
|
};
|
|
116
175
|
}
|
|
176
|
+
/**
|
|
177
|
+
* Compute the tx hash given the serialized tx. Note that if this is a blob tx, we need to
|
|
178
|
+
* exclude the blobs, commitments, and proofs from the hash.
|
|
179
|
+
*/ function computeTxHash(serializedTransaction) {
|
|
180
|
+
if (serializedTransaction.startsWith('0x03')) {
|
|
181
|
+
const parsed = parseTransaction(serializedTransaction);
|
|
182
|
+
if (parsed.blobs || parsed.sidecars) {
|
|
183
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
184
|
+
const { blobs, sidecars, ...rest } = parsed;
|
|
185
|
+
return keccak256(serializeTransaction({
|
|
186
|
+
type: 'eip4844',
|
|
187
|
+
...rest
|
|
188
|
+
}));
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
return keccak256(serializedTransaction);
|
|
192
|
+
}
|
|
@@ -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,13 @@
|
|
|
1
|
-
import type { Account, Chain, Client, FallbackTransport, HttpTransport, PublicActions, PublicClient, PublicRpcSchema, WalletActions,
|
|
1
|
+
import type { Abi, Account, Chain, Client, FallbackTransport, GetContractReturnType, 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 SimpleViemWalletClient = WalletClient<FallbackTransport<HttpTransport[]>, Chain, Account>;
|
|
5
4
|
export type ExtendedViemWalletClient = Client<FallbackTransport<readonly HttpTransport[]>, Chain, Account, [
|
|
6
5
|
...PublicRpcSchema,
|
|
7
6
|
...WalletRpcSchema
|
|
8
7
|
], PublicActions<FallbackTransport<readonly HttpTransport[]>, Chain> & WalletActions<Chain, Account>>;
|
|
9
|
-
|
|
10
|
-
export type
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
//# sourceMappingURL=
|
|
8
|
+
/** Type for a viem client that can be either public or extended with wallet capabilities */
|
|
9
|
+
export type ViemClient = ViemPublicClient | ExtendedViemWalletClient;
|
|
10
|
+
/** Type for a viem contract that can be used with an extended viem client */
|
|
11
|
+
export type ViemContract<TAbi extends Abi> = GetContractReturnType<TAbi, ExtendedViemWalletClient>;
|
|
12
|
+
export declare function isExtendedClient(client: ViemClient): client is ExtendedViemWalletClient;
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFDVixHQUFHLEVBQ0gsT0FBTyxFQUNQLEtBQUssRUFDTCxNQUFNLEVBQ04saUJBQWlCLEVBQ2pCLHFCQUFxQixFQUNyQixhQUFhLEVBQ2IsYUFBYSxFQUNiLFlBQVksRUFDWixlQUFlLEVBQ2YsYUFBYSxFQUNiLGVBQWUsRUFDaEIsTUFBTSxNQUFNLENBQUM7QUFFZCxvQ0FBb0M7QUFDcEMsTUFBTSxNQUFNLGdCQUFnQixHQUFHLFlBQVksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBRXZGLE1BQU0sTUFBTSx3QkFBd0IsR0FBRyxNQUFNLENBQzNDLGlCQUFpQixDQUFDLFNBQVMsYUFBYSxFQUFFLENBQUMsRUFDM0MsS0FBSyxFQUNMLE9BQU8sRUFDUDtJQUFDLEdBQUcsZUFBZTtJQUFFLEdBQUcsZUFBZTtDQUFDLEVBQ3hDLGFBQWEsQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLGFBQWEsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsYUFBYSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FDbEcsQ0FBQztBQUVGLDRGQUE0RjtBQUM1RixNQUFNLE1BQU0sVUFBVSxHQUFHLGdCQUFnQixHQUFHLHdCQUF3QixDQUFDO0FBRXJFLDZFQUE2RTtBQUM3RSxNQUFNLE1BQU0sWUFBWSxDQUFDLElBQUksU0FBUyxHQUFHLElBQUkscUJBQXFCLENBQUMsSUFBSSxFQUFFLHdCQUF3QixDQUFDLENBQUM7QUFFbkcsd0JBQWdCLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxVQUFVLEdBQUcsTUFBTSxJQUFJLHdCQUF3QixDQUV2RiJ9
|
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,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,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
|
@@ -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,4 @@ 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
|
-
//# sourceMappingURL=
|
|
25
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxFQUFFLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNuRCxPQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUdwRCxPQUFPLEVBQ0wsS0FBSyxHQUFHLEVBRVIsS0FBSyxpQkFBaUIsRUFFdEIsS0FBSyx3QkFBd0IsRUFDN0IsS0FBSyxHQUFHLEVBQ1IsS0FBSyxHQUFHLEVBR1QsTUFBTSxNQUFNLENBQUM7QUFFZCxNQUFNLFdBQVcsT0FBTztJQUN0QixXQUFXLEVBQUUsRUFBRSxDQUFDO0lBQ2hCLFdBQVcsRUFBRSxFQUFFLENBQUM7SUFDaEIsV0FBVyxFQUFFLEdBQUcsQ0FBQztJQUNqQixnQkFBZ0IsRUFBRSxNQUFNLENBQUM7Q0FDMUI7QUFFRCxxQkFBYSxrQkFBbUIsU0FBUSxLQUFLO0lBQzNDLFlBQVksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBRXJCLFlBQVksT0FBTyxFQUFFLE1BQU0sRUFBRSxZQUFZLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFJaEQ7Q0FDRjtBQUVELHdCQUFnQixZQUFZLENBQzFCLEtBQUssQ0FBQyxJQUFJLFNBQVMsR0FBRyxHQUFHLFNBQVMsT0FBTyxFQUFFLEVBQzNDLFVBQVUsU0FBUyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsRUFDMUMsVUFBVSxHQUFHLHdCQUF3QixDQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxFQUUvRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEVBQ1gsT0FBTyxFQUFFLEdBQUcsRUFDWixHQUFHLEVBQUUsSUFBSSxFQUNULFNBQVMsRUFBRSxVQUFVLEVBQ3JCLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLFVBQVUsS0FBSyxPQUFPLEVBQ3JDLE1BQU0sQ0FBQyxFQUFFLE1BQU0sR0FDZCxVQUFVLENBTVo7QUFFRCx3QkFBZ0IsZUFBZSxDQUM3QixLQUFLLENBQUMsSUFBSSxTQUFTLEdBQUcsR0FBRyxTQUFTLE9BQU8sRUFBRSxFQUMzQyxVQUFVLFNBQVMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEVBQzFDLFVBQVUsR0FBRyx3QkFBd0IsQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsRUFFL0UsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUNYLE9BQU8sRUFBRSxHQUFHLEVBQ1osR0FBRyxFQUFFLElBQUksRUFDVCxTQUFTLEVBQUUsVUFBVSxFQUNyQixNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxVQUFVLEtBQUssT0FBTyxFQUNyQyxNQUFNLENBQUMsRUFBRSxNQUFNLEdBQ2QsVUFBVSxHQUFHLFNBQVMsQ0FnQnhCO0FBRUQsd0JBQWdCLHFCQUFxQixDQUFDLEdBQUcsRUFBRSxHQUFHLE9BVzdDO0FBMEJEOzs7OztHQUtHO0FBQ0gsd0JBQWdCLGVBQWUsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLEdBQUcsR0FBRSxHQUFlLEdBQUcsa0JBQWtCLENBd0VwRjtBQXlCRCx3QkFBZ0IscUJBQXFCLENBQUMsR0FBRyxFQUFFLEdBQUcsc0JBYTdDIn0=
|
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,0BAA0B,CAAC;AACnD,OAAO,KAAK,EAAE,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;
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AACnD,OAAO,KAAK,EAAE,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;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"}
|
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,7 @@ 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
|
}
|
|
@@ -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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zkPassportVerifierAddress.d.ts","sourceRoot":"","sources":["../src/zkPassportVerifierAddress.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAE3D;;;GAGG;AACH,eAAO,MAAM,4BAA4B,YAAsE,CAAC;AAChH;;GAEG;AACH,eAAO,MAAM,kBAAkB,0BAA0B,CAAC;AAC1D;;GAEG;AACH,eAAO,MAAM,iBAAiB,eAAe,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
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
|
+
*/ export const ZK_PASSPORT_VERIFIER_ADDRESS = EthAddress.fromString('0x3101Bad9eA5fACadA5554844a1a88F7Fe48D4DE0');
|
|
6
|
+
/**
|
|
7
|
+
* The default domain of the zk passport site
|
|
8
|
+
*/ export const ZK_PASSPORT_DOMAIN = 'testnet.aztec.network';
|
|
9
|
+
/**
|
|
10
|
+
* The default scope of the zk passport proofs
|
|
11
|
+
*/ export const ZK_PASSPORT_SCOPE = 'personhood';
|