@aztec/ethereum 0.0.0-test.1 → 0.0.1-commit.b655e406
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/client.d.ts +5 -3
- package/dest/client.d.ts.map +1 -1
- package/dest/client.js +16 -2
- package/dest/config.d.ts +107 -16
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +456 -22
- package/dest/contracts/empire_base.d.ts +21 -6
- 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 +65 -0
- package/dest/contracts/empire_slashing_proposer.d.ts.map +1 -0
- package/dest/contracts/empire_slashing_proposer.js +194 -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 +5 -6
- package/dest/contracts/fee_juice.d.ts.map +1 -1
- package/dest/contracts/fee_juice.js +27 -20
- package/dest/contracts/governance.d.ts +36 -25
- package/dest/contracts/governance.d.ts.map +1 -1
- package/dest/contracts/governance.js +87 -84
- package/dest/contracts/governance_proposer.d.ts +13 -11
- package/dest/contracts/governance_proposer.d.ts.map +1 -1
- package/dest/contracts/governance_proposer.js +32 -18
- 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 +8 -2
- 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 +9 -4
- package/dest/contracts/registry.d.ts.map +1 -1
- package/dest/contracts/registry.js +44 -16
- package/dest/contracts/rollup.d.ts +202 -29
- package/dest/contracts/rollup.d.ts.map +1 -1
- package/dest/contracts/rollup.js +500 -55
- 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 +138 -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 +128 -21112
- package/dest/deploy_l1_contracts.d.ts.map +1 -1
- package/dest/deploy_l1_contracts.js +1204 -418
- 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 +6 -2
- package/dest/index.d.ts.map +1 -1
- package/dest/index.js +6 -2
- package/dest/l1_artifacts.d.ts +76184 -0
- package/dest/l1_artifacts.d.ts.map +1 -0
- package/dest/l1_artifacts.js +166 -0
- package/dest/l1_contract_addresses.d.ts +21 -1
- package/dest/l1_contract_addresses.d.ts.map +1 -1
- package/dest/l1_contract_addresses.js +22 -18
- package/dest/l1_reader.d.ts +1 -1
- 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 +73 -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 +95 -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 +431 -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 +3 -1
- package/dest/queries.d.ts.map +1 -1
- package/dest/queries.js +51 -12
- package/dest/test/chain_monitor.d.ts +72 -0
- package/dest/test/chain_monitor.d.ts.map +1 -0
- package/dest/test/chain_monitor.js +216 -0
- package/dest/test/delayed_tx_utils.d.ts +7 -2
- package/dest/test/delayed_tx_utils.d.ts.map +1 -1
- package/dest/test/delayed_tx_utils.js +13 -6
- package/dest/{eth_cheat_codes.d.ts → test/eth_cheat_codes.d.ts} +87 -13
- package/dest/test/eth_cheat_codes.d.ts.map +1 -0
- package/dest/test/eth_cheat_codes.js +552 -0
- package/dest/test/eth_cheat_codes_with_state.d.ts +1 -1
- 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 +3 -0
- package/dest/test/index.d.ts.map +1 -1
- package/dest/test/index.js +3 -0
- package/dest/test/rollup_cheat_codes.d.ts +86 -0
- package/dest/test/rollup_cheat_codes.d.ts.map +1 -0
- package/dest/test/rollup_cheat_codes.js +268 -0
- package/dest/test/start_anvil.d.ts +5 -0
- package/dest/test/start_anvil.d.ts.map +1 -1
- package/dest/test/start_anvil.js +15 -7
- package/dest/test/tx_delayer.d.ts +17 -6
- 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 +5 -4
- package/dest/test/upgrade_utils.d.ts.map +1 -1
- package/dest/test/upgrade_utils.js +23 -16
- package/dest/types.d.ts +6 -7
- package/dest/types.d.ts.map +1 -1
- package/dest/types.js +3 -1
- package/dest/utils.d.ts +1 -0
- 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 +24 -16
- package/src/account.ts +5 -0
- package/src/client.ts +42 -4
- package/src/config.ts +584 -31
- package/src/contracts/empire_base.ts +75 -6
- package/src/contracts/empire_slashing_proposer.ts +259 -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 +60 -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 +585 -56
- package/src/contracts/slasher_contract.ts +89 -0
- package/src/contracts/tally_slashing_proposer.ts +315 -0
- package/src/contracts/utils.ts +14 -0
- package/src/deploy_l1_contracts.ts +1467 -566
- 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 +140 -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 +559 -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 +70 -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 +582 -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 +310 -0
- package/src/test/start_anvil.ts +20 -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.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
|
@@ -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
|
-
|
|
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;
|
|
14
13
|
//# sourceMappingURL=types.d.ts.map
|
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.
|
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;gBAET,OAAO,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,GAAG,EAAE;CAKlD;AAED,wBAAgB,YAAY,CAC1B,KAAK,CAAC,IAAI,SAAS,GAAG,GAAG,SAAS,OAAO,EAAE,EAC3C,UAAU,SAAS,iBAAiB,CAAC,IAAI,CAAC,EAC1C,UAAU,GAAG,wBAAwB,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,EAE/E,IAAI,EAAE,GAAG,EAAE,EACX,OAAO,EAAE,GAAG,EACZ,GAAG,EAAE,IAAI,EACT,SAAS,EAAE,UAAU,EACrB,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,UAAU,KAAK,OAAO,EACrC,MAAM,CAAC,EAAE,MAAM,GACd,UAAU,CAMZ;
|
|
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;gBAET,OAAO,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,GAAG,EAAE;CAKlD;AAED,wBAAgB,YAAY,CAC1B,KAAK,CAAC,IAAI,SAAS,GAAG,GAAG,SAAS,OAAO,EAAE,EAC3C,UAAU,SAAS,iBAAiB,CAAC,IAAI,CAAC,EAC1C,UAAU,GAAG,wBAAwB,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,EAE/E,IAAI,EAAE,GAAG,EAAE,EACX,OAAO,EAAE,GAAG,EACZ,GAAG,EAAE,IAAI,EACT,SAAS,EAAE,UAAU,EACrB,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,UAAU,KAAK,OAAO,EACrC,MAAM,CAAC,EAAE,MAAM,GACd,UAAU,CAMZ;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=zkPassportVerifierAddress.d.ts.map
|
|
@@ -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';
|
package/package.json
CHANGED
|
@@ -1,15 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/ethereum",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.1-commit.b655e406",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": "./dest/index.js",
|
|
7
|
-
"./eth-cheatcodes": "./dest/eth_cheat_codes.js",
|
|
8
7
|
"./test": "./dest/test/index.js",
|
|
9
8
|
"./contracts": "./dest/contracts/index.js",
|
|
10
9
|
"./deploy-l1-contracts": "./dest/deploy_l1_contracts.js",
|
|
11
10
|
"./l1-contract-addresses": "./dest/l1_contract_addresses.js",
|
|
12
|
-
"./l1-tx-utils-with-blobs": "./dest/l1_tx_utils_with_blobs.js",
|
|
11
|
+
"./l1-tx-utils-with-blobs": "./dest/l1_tx_utils/l1_tx_utils_with_blobs.js",
|
|
13
12
|
"./utils": "./dest/utils.js"
|
|
14
13
|
},
|
|
15
14
|
"typedocOptions": {
|
|
@@ -23,35 +22,40 @@
|
|
|
23
22
|
"build": "yarn clean && tsc -b",
|
|
24
23
|
"build:dev": "tsc -b --watch",
|
|
25
24
|
"clean": "rm -rf ./dest .tsbuildinfo",
|
|
26
|
-
"formatting": "run -T prettier --check ./src && run -T eslint ./src",
|
|
27
|
-
"formatting:fix": "run -T eslint --fix ./src && run -T prettier -w ./src",
|
|
28
25
|
"start:dev": "tsc-watch -p tsconfig.json --onSuccess 'yarn start'",
|
|
29
26
|
"start": "node ./dest/index.js",
|
|
30
|
-
"test": "NODE_NO_WARNINGS=1 node --experimental-vm-modules ../node_modules/.bin/jest --passWithNoTests --maxWorkers=${JEST_MAX_WORKERS:-8}"
|
|
27
|
+
"test": "NODE_NO_WARNINGS=1 node --experimental-vm-modules ../node_modules/.bin/jest --passWithNoTests --maxWorkers=${JEST_MAX_WORKERS:-8}",
|
|
28
|
+
"proposer-address": "node ./dest/cli/forwarder_address.js"
|
|
31
29
|
},
|
|
32
30
|
"inherits": [
|
|
33
31
|
"../package.common.json"
|
|
34
32
|
],
|
|
35
33
|
"dependencies": {
|
|
36
|
-
"@aztec/blob-lib": "0.0.
|
|
37
|
-
"@aztec/
|
|
38
|
-
"@aztec/
|
|
34
|
+
"@aztec/blob-lib": "0.0.1-commit.b655e406",
|
|
35
|
+
"@aztec/constants": "0.0.1-commit.b655e406",
|
|
36
|
+
"@aztec/foundation": "0.0.1-commit.b655e406",
|
|
37
|
+
"@aztec/l1-artifacts": "0.0.1-commit.b655e406",
|
|
39
38
|
"@viem/anvil": "^0.0.10",
|
|
40
39
|
"dotenv": "^16.0.3",
|
|
40
|
+
"lodash.chunk": "^4.2.0",
|
|
41
|
+
"lodash.pickby": "^4.5.0",
|
|
41
42
|
"tslib": "^2.4.0",
|
|
42
|
-
"viem": "2.
|
|
43
|
+
"viem": "npm:@spalladino/viem@2.38.2-eip7594.0",
|
|
43
44
|
"zod": "^3.23.8"
|
|
44
45
|
},
|
|
45
46
|
"devDependencies": {
|
|
46
|
-
"@jest/globals": "^
|
|
47
|
-
"@
|
|
48
|
-
"@types/
|
|
47
|
+
"@jest/globals": "^30.0.0",
|
|
48
|
+
"@noble/curves": "=1.7.0",
|
|
49
|
+
"@types/jest": "^30.0.0",
|
|
50
|
+
"@types/lodash.pickby": "^4",
|
|
51
|
+
"@types/node": "^22.15.17",
|
|
49
52
|
"@viem/anvil": "^0.0.10",
|
|
50
53
|
"get-port": "^7.1.0",
|
|
51
|
-
"jest": "^
|
|
54
|
+
"jest": "^30.0.0",
|
|
55
|
+
"jest-mock-extended": "^4.0.0",
|
|
52
56
|
"lodash.omit": "^4.5.0",
|
|
53
57
|
"ts-node": "^10.9.1",
|
|
54
|
-
"typescript": "^5.
|
|
58
|
+
"typescript": "^5.3.3"
|
|
55
59
|
},
|
|
56
60
|
"files": [
|
|
57
61
|
"dest",
|
|
@@ -90,9 +94,13 @@
|
|
|
90
94
|
"testTimeout": 120000,
|
|
91
95
|
"setupFiles": [
|
|
92
96
|
"../../foundation/src/jest/setup.mjs"
|
|
97
|
+
],
|
|
98
|
+
"testEnvironment": "../../foundation/src/jest/env.mjs",
|
|
99
|
+
"setupFilesAfterEnv": [
|
|
100
|
+
"../../foundation/src/jest/setupAfterEnv.mjs"
|
|
93
101
|
]
|
|
94
102
|
},
|
|
95
103
|
"engines": {
|
|
96
|
-
"node": ">=
|
|
104
|
+
"node": ">=20.10"
|
|
97
105
|
}
|
|
98
106
|
}
|
package/src/account.ts
ADDED
package/src/client.ts
CHANGED
|
@@ -1,13 +1,25 @@
|
|
|
1
1
|
import type { Logger } from '@aztec/foundation/log';
|
|
2
2
|
import { retryUntil } from '@aztec/foundation/retry';
|
|
3
3
|
|
|
4
|
-
import {
|
|
4
|
+
import {
|
|
5
|
+
type Chain,
|
|
6
|
+
type HDAccount,
|
|
7
|
+
type LocalAccount,
|
|
8
|
+
type PrivateKeyAccount,
|
|
9
|
+
createPublicClient,
|
|
10
|
+
createWalletClient,
|
|
11
|
+
fallback,
|
|
12
|
+
http,
|
|
13
|
+
publicActions,
|
|
14
|
+
} from 'viem';
|
|
15
|
+
import { mnemonicToAccount, privateKeyToAccount } from 'viem/accounts';
|
|
16
|
+
import { foundry } from 'viem/chains';
|
|
5
17
|
|
|
6
18
|
import { createEthereumChain } from './chain.js';
|
|
7
|
-
import type { ViemPublicClient } from './types.js';
|
|
19
|
+
import type { ExtendedViemWalletClient, ViemPublicClient } from './types.js';
|
|
8
20
|
|
|
9
21
|
type Config = {
|
|
10
|
-
/**
|
|
22
|
+
/** List of URLs of Ethereum RPC nodes that services will connect to (comma separated). */
|
|
11
23
|
l1RpcUrls: string[];
|
|
12
24
|
/** The chain ID of the ethereum host. */
|
|
13
25
|
l1ChainId: number;
|
|
@@ -15,6 +27,8 @@ type Config = {
|
|
|
15
27
|
viemPollingIntervalMS?: number;
|
|
16
28
|
};
|
|
17
29
|
|
|
30
|
+
export type { Config as EthereumClientConfig };
|
|
31
|
+
|
|
18
32
|
// TODO: Use these methods to abstract the creation of viem clients.
|
|
19
33
|
|
|
20
34
|
/** Returns a viem public client given the L1 config. */
|
|
@@ -40,7 +54,7 @@ async function waitForRpc(client: ViemPublicClient, config: Config, logger?: Log
|
|
|
40
54
|
let chainId = 0;
|
|
41
55
|
try {
|
|
42
56
|
chainId = await client.getChainId();
|
|
43
|
-
} catch
|
|
57
|
+
} catch {
|
|
44
58
|
logger?.warn(`Failed to connect to Ethereum node at ${config.l1RpcUrls.join(', ')}. Retrying...`);
|
|
45
59
|
}
|
|
46
60
|
return chainId;
|
|
@@ -56,3 +70,27 @@ async function waitForRpc(client: ViemPublicClient, config: Config, logger?: Log
|
|
|
56
70
|
);
|
|
57
71
|
}
|
|
58
72
|
}
|
|
73
|
+
|
|
74
|
+
export function createExtendedL1Client(
|
|
75
|
+
rpcUrls: string[],
|
|
76
|
+
mnemonicOrPrivateKeyOrHdAccount: string | HDAccount | PrivateKeyAccount | LocalAccount,
|
|
77
|
+
chain: Chain = foundry,
|
|
78
|
+
pollingIntervalMS?: number,
|
|
79
|
+
addressIndex?: number,
|
|
80
|
+
): ExtendedViemWalletClient {
|
|
81
|
+
const hdAccount =
|
|
82
|
+
typeof mnemonicOrPrivateKeyOrHdAccount === 'string'
|
|
83
|
+
? mnemonicOrPrivateKeyOrHdAccount.startsWith('0x')
|
|
84
|
+
? privateKeyToAccount(mnemonicOrPrivateKeyOrHdAccount as `0x${string}`)
|
|
85
|
+
: mnemonicToAccount(mnemonicOrPrivateKeyOrHdAccount, { addressIndex })
|
|
86
|
+
: mnemonicOrPrivateKeyOrHdAccount;
|
|
87
|
+
|
|
88
|
+
const extendedClient = createWalletClient({
|
|
89
|
+
account: hdAccount,
|
|
90
|
+
chain,
|
|
91
|
+
transport: fallback(rpcUrls.map(url => http(url))),
|
|
92
|
+
pollingInterval: pollingIntervalMS,
|
|
93
|
+
}).extend(publicActions);
|
|
94
|
+
|
|
95
|
+
return extendedClient;
|
|
96
|
+
}
|