@aztec/cli-wallet 0.0.1-commit.f146247c → 0.0.1-commit.f1b29a41e
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/cmds/authorize_action.d.ts +2 -2
- package/dest/cmds/authorize_action.d.ts.map +1 -1
- package/dest/cmds/check_tx.d.ts +1 -1
- package/dest/cmds/check_tx.d.ts.map +1 -1
- package/dest/cmds/check_tx.js +36 -9
- package/dest/cmds/create_account.d.ts +4 -3
- package/dest/cmds/create_account.d.ts.map +1 -1
- package/dest/cmds/create_account.js +32 -21
- package/dest/cmds/deploy.d.ts +4 -3
- package/dest/cmds/deploy.d.ts.map +1 -1
- package/dest/cmds/deploy.js +27 -23
- package/dest/cmds/deploy_account.d.ts +4 -3
- package/dest/cmds/deploy_account.d.ts.map +1 -1
- package/dest/cmds/deploy_account.js +27 -16
- package/dest/cmds/get_fee_juice_balance.d.ts +5 -0
- package/dest/cmds/get_fee_juice_balance.d.ts.map +1 -0
- package/dest/cmds/get_fee_juice_balance.js +27 -0
- package/dest/cmds/index.d.ts +1 -1
- package/dest/cmds/index.d.ts.map +1 -1
- package/dest/cmds/index.js +30 -14
- package/dest/cmds/send.d.ts +4 -3
- package/dest/cmds/send.d.ts.map +1 -1
- package/dest/cmds/send.js +27 -23
- package/dest/storage/wallet_db.d.ts +6 -1
- package/dest/storage/wallet_db.d.ts.map +1 -1
- package/dest/storage/wallet_db.js +14 -0
- package/dest/utils/options/fees.d.ts +2 -2
- package/dest/utils/options/fees.d.ts.map +1 -1
- package/dest/utils/options/fees.js +8 -5
- package/dest/utils/wallet.d.ts +8 -3
- package/dest/utils/wallet.d.ts.map +1 -1
- package/dest/utils/wallet.js +45 -40
- package/package.json +14 -14
- package/src/cmds/check_tx.ts +41 -10
- package/src/cmds/create_account.ts +32 -18
- package/src/cmds/deploy.ts +24 -15
- package/src/cmds/deploy_account.ts +26 -13
- package/src/cmds/get_fee_juice_balance.ts +37 -0
- package/src/cmds/index.ts +57 -4
- package/src/cmds/send.ts +24 -16
- package/src/cmds/simulate.ts +1 -1
- package/src/storage/wallet_db.ts +14 -0
- package/src/utils/options/fees.ts +13 -5
- package/src/utils/wallet.ts +53 -56
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/cli-wallet",
|
|
3
|
-
"version": "0.0.1-commit.
|
|
3
|
+
"version": "0.0.1-commit.f1b29a41e",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": "./dest/cmds/index.js",
|
|
@@ -67,19 +67,19 @@
|
|
|
67
67
|
]
|
|
68
68
|
},
|
|
69
69
|
"dependencies": {
|
|
70
|
-
"@aztec/accounts": "0.0.1-commit.
|
|
71
|
-
"@aztec/aztec.js": "0.0.1-commit.
|
|
72
|
-
"@aztec/bb.js": "0.0.1-commit.
|
|
73
|
-
"@aztec/cli": "0.0.1-commit.
|
|
74
|
-
"@aztec/entrypoints": "0.0.1-commit.
|
|
75
|
-
"@aztec/ethereum": "0.0.1-commit.
|
|
76
|
-
"@aztec/foundation": "0.0.1-commit.
|
|
77
|
-
"@aztec/kv-store": "0.0.1-commit.
|
|
78
|
-
"@aztec/noir-contracts.js": "0.0.1-commit.
|
|
79
|
-
"@aztec/noir-noirc_abi": "0.0.1-commit.
|
|
80
|
-
"@aztec/pxe": "0.0.1-commit.
|
|
81
|
-
"@aztec/stdlib": "0.0.1-commit.
|
|
82
|
-
"@aztec/wallet-sdk": "0.0.1-commit.
|
|
70
|
+
"@aztec/accounts": "0.0.1-commit.f1b29a41e",
|
|
71
|
+
"@aztec/aztec.js": "0.0.1-commit.f1b29a41e",
|
|
72
|
+
"@aztec/bb.js": "0.0.1-commit.f1b29a41e",
|
|
73
|
+
"@aztec/cli": "0.0.1-commit.f1b29a41e",
|
|
74
|
+
"@aztec/entrypoints": "0.0.1-commit.f1b29a41e",
|
|
75
|
+
"@aztec/ethereum": "0.0.1-commit.f1b29a41e",
|
|
76
|
+
"@aztec/foundation": "0.0.1-commit.f1b29a41e",
|
|
77
|
+
"@aztec/kv-store": "0.0.1-commit.f1b29a41e",
|
|
78
|
+
"@aztec/noir-contracts.js": "0.0.1-commit.f1b29a41e",
|
|
79
|
+
"@aztec/noir-noirc_abi": "0.0.1-commit.f1b29a41e",
|
|
80
|
+
"@aztec/pxe": "0.0.1-commit.f1b29a41e",
|
|
81
|
+
"@aztec/stdlib": "0.0.1-commit.f1b29a41e",
|
|
82
|
+
"@aztec/wallet-sdk": "0.0.1-commit.f1b29a41e",
|
|
83
83
|
"commander": "^12.1.0",
|
|
84
84
|
"inquirer": "^10.1.8",
|
|
85
85
|
"source-map-support": "^0.5.21",
|
package/src/cmds/check_tx.ts
CHANGED
|
@@ -5,7 +5,11 @@ import type { AztecNode } from '@aztec/aztec.js/node';
|
|
|
5
5
|
import { ProtocolContractAddress } from '@aztec/aztec.js/protocol';
|
|
6
6
|
import type { TxHash } from '@aztec/aztec.js/tx';
|
|
7
7
|
import type { LogFn } from '@aztec/foundation/log';
|
|
8
|
-
import {
|
|
8
|
+
import {
|
|
9
|
+
computeSiloedPrivateInitializationNullifier,
|
|
10
|
+
computeSiloedPublicInitializationNullifier,
|
|
11
|
+
siloNullifier,
|
|
12
|
+
} from '@aztec/stdlib/hash';
|
|
9
13
|
import { NoteDao } from '@aztec/stdlib/note';
|
|
10
14
|
|
|
11
15
|
import type { CLIWallet } from '../utils/wallet.js';
|
|
@@ -88,7 +92,7 @@ async function inspectTx(wallet: CLIWallet, aztecNode: AztecNode, txHash: TxHash
|
|
|
88
92
|
for (const nullifier of effects.nullifiers) {
|
|
89
93
|
const deployed = deployNullifiers[nullifier.toString()];
|
|
90
94
|
const note = deployed
|
|
91
|
-
? (await wallet.getNotes({ siloedNullifier: nullifier, contractAddress: deployed }))[0]
|
|
95
|
+
? (await wallet.getNotes({ siloedNullifier: nullifier, contractAddress: deployed, scopes: 'ALL_SCOPES' }))[0]
|
|
92
96
|
: undefined;
|
|
93
97
|
const initialized = initNullifiers[nullifier.toString()];
|
|
94
98
|
const registered = classNullifiers[nullifier.toString()];
|
|
@@ -144,22 +148,49 @@ function toFriendlyAddress(address: AztecAddress, artifactMap: ArtifactMap) {
|
|
|
144
148
|
|
|
145
149
|
async function getKnownNullifiers(wallet: CLIWallet, artifactMap: ArtifactMap) {
|
|
146
150
|
const knownContracts = await wallet.getContracts();
|
|
147
|
-
|
|
148
|
-
const
|
|
151
|
+
|
|
152
|
+
const [contractResults, classResults] = await Promise.all([
|
|
153
|
+
Promise.all(knownContracts.map(contract => getContractNullifiers(wallet, contract))),
|
|
154
|
+
Promise.all(Object.values(artifactMap).map(artifact => getClassNullifier(artifact))),
|
|
155
|
+
]);
|
|
156
|
+
|
|
149
157
|
const initNullifiers: Record<string, AztecAddress> = {};
|
|
150
158
|
const deployNullifiers: Record<string, AztecAddress> = {};
|
|
151
159
|
const classNullifiers: Record<string, string> = {};
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
deployNullifiers[
|
|
160
|
+
|
|
161
|
+
for (const { contract, deployNullifier, privateInitNullifier, publicInitNullifier } of contractResults) {
|
|
162
|
+
deployNullifiers[deployNullifier.toString()] = contract;
|
|
163
|
+
if (privateInitNullifier) {
|
|
164
|
+
initNullifiers[privateInitNullifier.toString()] = contract;
|
|
165
|
+
}
|
|
166
|
+
initNullifiers[publicInitNullifier.toString()] = contract;
|
|
155
167
|
}
|
|
156
|
-
for (const
|
|
157
|
-
classNullifiers[
|
|
158
|
-
`${artifact.name}Class<${artifact.classId}>`;
|
|
168
|
+
for (const { nullifier, label } of classResults) {
|
|
169
|
+
classNullifiers[nullifier.toString()] = label;
|
|
159
170
|
}
|
|
171
|
+
|
|
160
172
|
return { initNullifiers, deployNullifiers, classNullifiers };
|
|
161
173
|
}
|
|
162
174
|
|
|
175
|
+
async function getContractNullifiers(wallet: CLIWallet, contract: AztecAddress) {
|
|
176
|
+
const deployerAddress = ProtocolContractAddress.ContractInstanceRegistry;
|
|
177
|
+
const deployNullifier = await siloNullifier(deployerAddress, contract.toField());
|
|
178
|
+
|
|
179
|
+
const metadata = await wallet.getContractMetadata(contract);
|
|
180
|
+
const privateInitNullifier = metadata.instance
|
|
181
|
+
? await computeSiloedPrivateInitializationNullifier(contract, metadata.instance.initializationHash)
|
|
182
|
+
: undefined;
|
|
183
|
+
const publicInitNullifier = await computeSiloedPublicInitializationNullifier(contract);
|
|
184
|
+
|
|
185
|
+
return { contract, deployNullifier, privateInitNullifier, publicInitNullifier };
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
async function getClassNullifier(artifact: ContractArtifactWithClassId) {
|
|
189
|
+
const classRegistryAddress = ProtocolContractAddress.ContractClassRegistry;
|
|
190
|
+
const nullifier = await siloNullifier(classRegistryAddress, artifact.classId);
|
|
191
|
+
return { nullifier, label: `${artifact.name}Class<${artifact.classId}>` };
|
|
192
|
+
}
|
|
193
|
+
|
|
163
194
|
type ArtifactMap = Record<string, ContractArtifactWithClassId>;
|
|
164
195
|
type ContractArtifactWithClassId = ContractArtifact & { classId: Fr };
|
|
165
196
|
|
|
@@ -1,11 +1,12 @@
|
|
|
1
|
+
import { NO_FROM } from '@aztec/aztec.js/account';
|
|
1
2
|
import { AztecAddress } from '@aztec/aztec.js/addresses';
|
|
2
3
|
import { NO_WAIT } from '@aztec/aztec.js/contracts';
|
|
3
|
-
import type
|
|
4
|
+
import { type AztecNode, waitForTx } from '@aztec/aztec.js/node';
|
|
4
5
|
import type { DeployAccountOptions } from '@aztec/aztec.js/wallet';
|
|
5
6
|
import { prettyPrintJSON } from '@aztec/cli/cli-utils';
|
|
6
7
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
7
8
|
import type { LogFn, Logger } from '@aztec/foundation/log';
|
|
8
|
-
import type
|
|
9
|
+
import { type TxHash, type TxReceipt, TxStatus } from '@aztec/stdlib/tx';
|
|
9
10
|
|
|
10
11
|
import { DEFAULT_TX_TIMEOUT_S } from '../utils/cli_wallet_and_node_wrapper.js';
|
|
11
12
|
import type { AccountType } from '../utils/constants.js';
|
|
@@ -18,6 +19,7 @@ export async function createAccount(
|
|
|
18
19
|
aztecNode: AztecNode,
|
|
19
20
|
accountType: AccountType,
|
|
20
21
|
secretKey: Fr | undefined,
|
|
22
|
+
salt: Fr | undefined,
|
|
21
23
|
publicKey: string | undefined,
|
|
22
24
|
alias: string | undefined,
|
|
23
25
|
deployer: AztecAddress | undefined,
|
|
@@ -27,6 +29,7 @@ export async function createAccount(
|
|
|
27
29
|
registerClass: boolean,
|
|
28
30
|
wait: boolean,
|
|
29
31
|
feeOpts: CLIFeeArgs,
|
|
32
|
+
waitForStatus: TxStatus,
|
|
30
33
|
json: boolean,
|
|
31
34
|
verbose: boolean,
|
|
32
35
|
debugLogger: Logger,
|
|
@@ -38,10 +41,10 @@ export async function createAccount(
|
|
|
38
41
|
undefined /* address, we don't have it yet */,
|
|
39
42
|
secretKey,
|
|
40
43
|
accountType,
|
|
41
|
-
|
|
44
|
+
salt,
|
|
42
45
|
publicKey,
|
|
43
46
|
);
|
|
44
|
-
const
|
|
47
|
+
const instanceSalt = account.getInstance().salt;
|
|
45
48
|
const { address, publicKeys, partialAddress } = await account.getCompleteAddress();
|
|
46
49
|
|
|
47
50
|
const out: Record<string, any> = {};
|
|
@@ -52,7 +55,7 @@ export async function createAccount(
|
|
|
52
55
|
out.secretKey = secretKey;
|
|
53
56
|
}
|
|
54
57
|
out.partialAddress = partialAddress;
|
|
55
|
-
out.salt =
|
|
58
|
+
out.salt = instanceSalt;
|
|
56
59
|
out.initHash = account.getInstance().initializationHash;
|
|
57
60
|
} else {
|
|
58
61
|
log(`\nNew account:\n`);
|
|
@@ -62,7 +65,7 @@ export async function createAccount(
|
|
|
62
65
|
log(`Secret key: ${secretKey.toString()}`);
|
|
63
66
|
}
|
|
64
67
|
log(`Partial address: ${partialAddress.toString()}`);
|
|
65
|
-
log(`Salt: ${
|
|
68
|
+
log(`Salt: ${instanceSalt.toString()}`);
|
|
66
69
|
log(`Init hash: ${account.getInstance().initializationHash.toString()}`);
|
|
67
70
|
}
|
|
68
71
|
|
|
@@ -72,7 +75,7 @@ export async function createAccount(
|
|
|
72
75
|
const { paymentMethod, gasSettings } = await feeOpts.toUserFeeOptions(aztecNode, wallet, address);
|
|
73
76
|
|
|
74
77
|
const delegatedDeployment = deployer && !account.address.equals(deployer);
|
|
75
|
-
const from = delegatedDeployment ? deployer :
|
|
78
|
+
const from = delegatedDeployment ? deployer : NO_FROM;
|
|
76
79
|
|
|
77
80
|
const deployAccountOpts: DeployAccountOptions = {
|
|
78
81
|
skipClassPublication: !registerClass,
|
|
@@ -82,11 +85,15 @@ export async function createAccount(
|
|
|
82
85
|
fee: { paymentMethod, gasSettings },
|
|
83
86
|
};
|
|
84
87
|
|
|
88
|
+
const localStart = performance.now();
|
|
85
89
|
const deployMethod = await account.getDeployMethod();
|
|
86
|
-
const
|
|
90
|
+
const sim = await deployMethod.simulate({
|
|
87
91
|
...deployAccountOpts,
|
|
88
92
|
fee: { ...deployAccountOpts.fee, estimateGas: true },
|
|
89
93
|
});
|
|
94
|
+
// estimateGas: true guarantees these fields are present
|
|
95
|
+
const estimatedGas = sim.estimatedGas!;
|
|
96
|
+
const stats = sim.stats!;
|
|
90
97
|
|
|
91
98
|
if (feeOpts.estimateOnly) {
|
|
92
99
|
if (json) {
|
|
@@ -109,7 +116,7 @@ export async function createAccount(
|
|
|
109
116
|
if (!json) {
|
|
110
117
|
log(`\nWaiting for account contract deployment...`);
|
|
111
118
|
}
|
|
112
|
-
const
|
|
119
|
+
const sendOpts = {
|
|
113
120
|
...deployAccountOpts,
|
|
114
121
|
fee: deployAccountOpts.fee
|
|
115
122
|
? {
|
|
@@ -117,18 +124,25 @@ export async function createAccount(
|
|
|
117
124
|
gasSettings: estimatedGas,
|
|
118
125
|
}
|
|
119
126
|
: undefined,
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
127
|
+
};
|
|
128
|
+
|
|
129
|
+
({ txHash } = await deployMethod.send({ ...sendOpts, wait: NO_WAIT }));
|
|
130
|
+
const localTimeMs = performance.now() - localStart;
|
|
131
|
+
|
|
132
|
+
if (wait) {
|
|
133
|
+
const nodeStart = performance.now();
|
|
134
|
+
txReceipt = await waitForTx(aztecNode, txHash, { timeout: DEFAULT_TX_TIMEOUT_S, waitForStatus });
|
|
135
|
+
const nodeTimeMs = performance.now() - nodeStart;
|
|
136
|
+
|
|
126
137
|
out.txReceipt = {
|
|
127
138
|
status: txReceipt.status,
|
|
128
139
|
transactionFee: txReceipt.transactionFee,
|
|
129
140
|
};
|
|
130
|
-
|
|
131
|
-
|
|
141
|
+
|
|
142
|
+
if (!json) {
|
|
143
|
+
log(` Local processing time: ${(localTimeMs / 1000).toFixed(1)}s`);
|
|
144
|
+
log(` Node inclusion time: ${(nodeTimeMs / 1000).toFixed(1)}s`);
|
|
145
|
+
}
|
|
132
146
|
}
|
|
133
147
|
debugLogger.debug(`Account contract tx sent with hash ${txHash.toString()}`);
|
|
134
148
|
out.txHash = txHash;
|
|
@@ -146,5 +160,5 @@ export async function createAccount(
|
|
|
146
160
|
}
|
|
147
161
|
}
|
|
148
162
|
|
|
149
|
-
return { alias, address, secretKey, salt };
|
|
163
|
+
return { alias, address, secretKey, salt: instanceSalt };
|
|
150
164
|
}
|
package/src/cmds/deploy.ts
CHANGED
|
@@ -1,13 +1,15 @@
|
|
|
1
|
+
import { NO_FROM } from '@aztec/aztec.js/account';
|
|
1
2
|
import { AztecAddress } from '@aztec/aztec.js/addresses';
|
|
2
3
|
import type { DeployOptions } from '@aztec/aztec.js/contracts';
|
|
3
4
|
import { NO_WAIT } from '@aztec/aztec.js/contracts';
|
|
4
5
|
import { ContractDeployer } from '@aztec/aztec.js/deployment';
|
|
5
6
|
import { Fr } from '@aztec/aztec.js/fields';
|
|
6
|
-
import type
|
|
7
|
+
import { type AztecNode, waitForTx } from '@aztec/aztec.js/node';
|
|
7
8
|
import { encodeArgs, getContractArtifact, prettyPrintJSON } from '@aztec/cli/utils';
|
|
8
9
|
import type { LogFn, Logger } from '@aztec/foundation/log';
|
|
9
10
|
import { getAllFunctionAbis, getInitializer } from '@aztec/stdlib/abi';
|
|
10
11
|
import { PublicKeys } from '@aztec/stdlib/keys';
|
|
12
|
+
import type { TxStatus } from '@aztec/stdlib/tx';
|
|
11
13
|
|
|
12
14
|
import { DEFAULT_TX_TIMEOUT_S } from '../utils/cli_wallet_and_node_wrapper.js';
|
|
13
15
|
import { CLIFeeArgs } from '../utils/options/fees.js';
|
|
@@ -29,6 +31,7 @@ export async function deploy(
|
|
|
29
31
|
skipInitialization: boolean | undefined,
|
|
30
32
|
wait: boolean,
|
|
31
33
|
feeOpts: CLIFeeArgs,
|
|
34
|
+
waitForStatus: TxStatus,
|
|
32
35
|
verbose: boolean,
|
|
33
36
|
timeout: number = DEFAULT_TX_TIMEOUT_S,
|
|
34
37
|
debugLogger: Logger,
|
|
@@ -59,11 +62,11 @@ export async function deploy(
|
|
|
59
62
|
debugLogger.debug(`Encoded arguments: ${args.join(', ')}`);
|
|
60
63
|
}
|
|
61
64
|
|
|
62
|
-
const
|
|
65
|
+
const deployInteraction = contractDeployer.deploy(...args);
|
|
63
66
|
const { paymentMethod, gasSettings } = await feeOpts.toUserFeeOptions(node, wallet, deployer);
|
|
64
67
|
const deployOpts: DeployOptions = {
|
|
65
68
|
fee: { gasSettings, paymentMethod },
|
|
66
|
-
from: deployer ??
|
|
69
|
+
from: deployer ?? NO_FROM,
|
|
67
70
|
contractAddressSalt: salt,
|
|
68
71
|
universalDeploy: !deployer,
|
|
69
72
|
skipClassPublication,
|
|
@@ -71,10 +74,14 @@ export async function deploy(
|
|
|
71
74
|
skipInstancePublication,
|
|
72
75
|
};
|
|
73
76
|
|
|
74
|
-
const
|
|
77
|
+
const localStart = performance.now();
|
|
78
|
+
const sim = await deployInteraction.simulate({
|
|
75
79
|
...deployOpts,
|
|
76
80
|
fee: { ...deployOpts.fee, estimateGas: true },
|
|
77
81
|
});
|
|
82
|
+
// estimateGas: true guarantees these fields are present
|
|
83
|
+
const estimatedGas = sim.estimatedGas!;
|
|
84
|
+
const stats = sim.stats!;
|
|
78
85
|
|
|
79
86
|
if (feeOpts.estimateOnly) {
|
|
80
87
|
if (json) {
|
|
@@ -94,14 +101,18 @@ export async function deploy(
|
|
|
94
101
|
printProfileResult(stats, log);
|
|
95
102
|
}
|
|
96
103
|
|
|
97
|
-
const { address, partialAddress } =
|
|
98
|
-
const instance = await
|
|
104
|
+
const { address, partialAddress } = deployInteraction;
|
|
105
|
+
const instance = await deployInteraction.getInstance();
|
|
106
|
+
|
|
107
|
+
const { txHash } = await deployInteraction.send({ ...deployOpts, wait: NO_WAIT });
|
|
108
|
+
const localTimeMs = performance.now() - localStart;
|
|
109
|
+
debugLogger.debug(`Deploy tx sent with hash ${txHash.toString()}`);
|
|
110
|
+
out.hash = txHash;
|
|
99
111
|
|
|
100
112
|
if (wait) {
|
|
101
|
-
const
|
|
102
|
-
const
|
|
103
|
-
|
|
104
|
-
out.hash = txHash;
|
|
113
|
+
const nodeStart = performance.now();
|
|
114
|
+
const receipt = await waitForTx(node, txHash, { timeout, waitForStatus });
|
|
115
|
+
const nodeTimeMs = performance.now() - nodeStart;
|
|
105
116
|
|
|
106
117
|
if (!json) {
|
|
107
118
|
log(`Contract deployed at ${address?.toString()}`);
|
|
@@ -111,6 +122,8 @@ export async function deploy(
|
|
|
111
122
|
log(`Deployment salt: ${salt.toString()}`);
|
|
112
123
|
log(`Deployer: ${instance.deployer.toString()}`);
|
|
113
124
|
log(`Transaction fee: ${receipt.transactionFee?.toString()}`);
|
|
125
|
+
log(` Local processing time: ${(localTimeMs / 1000).toFixed(1)}s`);
|
|
126
|
+
log(` Node inclusion time: ${(nodeTimeMs / 1000).toFixed(1)}s`);
|
|
114
127
|
} else {
|
|
115
128
|
out.contract = {
|
|
116
129
|
address: address?.toString(),
|
|
@@ -121,10 +134,6 @@ export async function deploy(
|
|
|
121
134
|
};
|
|
122
135
|
}
|
|
123
136
|
} else {
|
|
124
|
-
const txHash = await deploy.send({ ...deployOpts, wait: NO_WAIT });
|
|
125
|
-
debugLogger.debug(`Deploy tx sent with hash ${txHash.toString()}`);
|
|
126
|
-
out.hash = txHash;
|
|
127
|
-
|
|
128
137
|
if (!json) {
|
|
129
138
|
log(`Contract deployed at ${address?.toString()}`);
|
|
130
139
|
log(`Contract partial address ${(await partialAddress)?.toString()}`);
|
|
@@ -145,5 +154,5 @@ export async function deploy(
|
|
|
145
154
|
if (json) {
|
|
146
155
|
log(prettyPrintJSON(out));
|
|
147
156
|
}
|
|
148
|
-
return
|
|
157
|
+
return deployInteraction.address;
|
|
149
158
|
}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
+
import { NO_FROM } from '@aztec/aztec.js/account';
|
|
1
2
|
import { AztecAddress } from '@aztec/aztec.js/addresses';
|
|
2
3
|
import { NO_WAIT } from '@aztec/aztec.js/contracts';
|
|
3
|
-
import type
|
|
4
|
+
import { type AztecNode, waitForTx } from '@aztec/aztec.js/node';
|
|
4
5
|
import type { DeployAccountOptions } from '@aztec/aztec.js/wallet';
|
|
5
6
|
import { prettyPrintJSON } from '@aztec/cli/cli-utils';
|
|
6
7
|
import type { LogFn, Logger } from '@aztec/foundation/log';
|
|
7
|
-
import type { TxHash, TxReceipt } from '@aztec/stdlib/tx';
|
|
8
|
+
import type { TxHash, TxReceipt, TxStatus } from '@aztec/stdlib/tx';
|
|
8
9
|
|
|
9
10
|
import { DEFAULT_TX_TIMEOUT_S } from '../utils/cli_wallet_and_node_wrapper.js';
|
|
10
11
|
import type { CLIFeeArgs } from '../utils/options/fees.js';
|
|
@@ -21,6 +22,7 @@ export async function deployAccount(
|
|
|
21
22
|
publicDeploy: boolean,
|
|
22
23
|
skipInitialization: boolean,
|
|
23
24
|
feeOpts: CLIFeeArgs,
|
|
25
|
+
waitForStatus: TxStatus,
|
|
24
26
|
json: boolean,
|
|
25
27
|
verbose: boolean,
|
|
26
28
|
debugLogger: Logger,
|
|
@@ -52,7 +54,7 @@ export async function deployAccount(
|
|
|
52
54
|
const { paymentMethod, gasSettings } = await feeOpts.toUserFeeOptions(aztecNode, wallet, address);
|
|
53
55
|
|
|
54
56
|
const delegatedDeployment = deployer && !account.address.equals(deployer);
|
|
55
|
-
const from = delegatedDeployment ? deployer :
|
|
57
|
+
const from = delegatedDeployment ? deployer : NO_FROM;
|
|
56
58
|
|
|
57
59
|
const deployAccountOpts: DeployAccountOptions = {
|
|
58
60
|
skipClassPublication: !registerClass,
|
|
@@ -62,11 +64,15 @@ export async function deployAccount(
|
|
|
62
64
|
fee: { paymentMethod, gasSettings },
|
|
63
65
|
};
|
|
64
66
|
|
|
67
|
+
const localStart = performance.now();
|
|
65
68
|
const deployMethod = await account.getDeployMethod();
|
|
66
|
-
const
|
|
69
|
+
const sim = await deployMethod.simulate({
|
|
67
70
|
...deployAccountOpts,
|
|
68
71
|
fee: { ...deployAccountOpts.fee, estimateGas: true },
|
|
69
72
|
});
|
|
73
|
+
// estimateGas: true guarantees these fields are present
|
|
74
|
+
const estimatedGas = sim.estimatedGas!;
|
|
75
|
+
const stats = sim.stats!;
|
|
70
76
|
|
|
71
77
|
if (feeOpts.estimateOnly) {
|
|
72
78
|
if (json) {
|
|
@@ -89,7 +95,7 @@ export async function deployAccount(
|
|
|
89
95
|
if (!json) {
|
|
90
96
|
log(`\nWaiting for account contract deployment...`);
|
|
91
97
|
}
|
|
92
|
-
const
|
|
98
|
+
const sendOpts = {
|
|
93
99
|
...deployAccountOpts,
|
|
94
100
|
fee: deployAccountOpts.fee
|
|
95
101
|
? {
|
|
@@ -97,18 +103,25 @@ export async function deployAccount(
|
|
|
97
103
|
gasSettings: estimatedGas,
|
|
98
104
|
}
|
|
99
105
|
: undefined,
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
+
};
|
|
107
|
+
|
|
108
|
+
({ txHash } = await deployMethod.send({ ...sendOpts, wait: NO_WAIT }));
|
|
109
|
+
const localTimeMs = performance.now() - localStart;
|
|
110
|
+
|
|
111
|
+
if (wait) {
|
|
112
|
+
const nodeStart = performance.now();
|
|
113
|
+
txReceipt = await waitForTx(aztecNode, txHash, { timeout: DEFAULT_TX_TIMEOUT_S, waitForStatus });
|
|
114
|
+
const nodeTimeMs = performance.now() - nodeStart;
|
|
115
|
+
|
|
106
116
|
out.txReceipt = {
|
|
107
117
|
status: txReceipt.status,
|
|
108
118
|
transactionFee: txReceipt.transactionFee,
|
|
109
119
|
};
|
|
110
|
-
|
|
111
|
-
|
|
120
|
+
|
|
121
|
+
if (!json) {
|
|
122
|
+
log(` Local processing time: ${(localTimeMs / 1000).toFixed(1)}s`);
|
|
123
|
+
log(` Node inclusion time: ${(nodeTimeMs / 1000).toFixed(1)}s`);
|
|
124
|
+
}
|
|
112
125
|
}
|
|
113
126
|
debugLogger.debug(`Account contract tx sent with hash ${txHash.toString()}`);
|
|
114
127
|
out.txHash = txHash;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { AztecAddress } from '@aztec/aztec.js/addresses';
|
|
2
|
+
import type { AztecNode } from '@aztec/aztec.js/node';
|
|
3
|
+
import { getFeeJuiceBalance } from '@aztec/aztec.js/utils';
|
|
4
|
+
import { prettyPrintJSON } from '@aztec/cli/cli-utils';
|
|
5
|
+
import type { LogFn } from '@aztec/foundation/log';
|
|
6
|
+
|
|
7
|
+
const FEE_JUICE_DECIMALS = 18;
|
|
8
|
+
const FEE_JUICE_UNIT = 10n ** BigInt(FEE_JUICE_DECIMALS);
|
|
9
|
+
|
|
10
|
+
/** Formats a raw FeeJuice balance (18 decimals) for human-readable display. */
|
|
11
|
+
function formatFeeJuice(raw: bigint, exact: boolean): string {
|
|
12
|
+
const whole = raw / FEE_JUICE_UNIT;
|
|
13
|
+
const fractional = raw % FEE_JUICE_UNIT;
|
|
14
|
+
const fracStr = fractional.toString().padStart(FEE_JUICE_DECIMALS, '0');
|
|
15
|
+
if (exact) {
|
|
16
|
+
return `${whole}.${fracStr} FJ`;
|
|
17
|
+
}
|
|
18
|
+
if (fractional === 0n) {
|
|
19
|
+
return `${whole} FJ`;
|
|
20
|
+
}
|
|
21
|
+
return `${whole}.${fracStr.replace(/0+$/, '')} FJ`;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export async function getFeeJuiceBalanceCmd(
|
|
25
|
+
node: AztecNode,
|
|
26
|
+
address: AztecAddress,
|
|
27
|
+
json: boolean,
|
|
28
|
+
exact: boolean,
|
|
29
|
+
log: LogFn,
|
|
30
|
+
) {
|
|
31
|
+
const balance = await getFeeJuiceBalance(address, node);
|
|
32
|
+
if (json) {
|
|
33
|
+
log(prettyPrintJSON({ address: address.toString(), balance: balance.toString() }));
|
|
34
|
+
} else {
|
|
35
|
+
log(`Fee Juice balance for ${address.toString()}: ${formatFeeJuice(balance, exact)}`);
|
|
36
|
+
}
|
|
37
|
+
}
|