@aztec/cli-wallet 0.0.1-commit.d431d1c → 0.0.1-commit.d58ff9d0
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/bin/index.js +1 -1
- package/dest/cmds/authorize_action.d.ts +2 -2
- package/dest/cmds/authorize_action.d.ts.map +1 -1
- package/dest/cmds/authorize_action.js +4 -2
- 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 +54 -22
- package/dest/cmds/create_account.d.ts +6 -3
- package/dest/cmds/create_account.d.ts.map +1 -1
- package/dest/cmds/create_account.js +64 -31
- package/dest/cmds/deploy.d.ts +5 -4
- package/dest/cmds/deploy.d.ts.map +1 -1
- package/dest/cmds/deploy.js +65 -36
- 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 +39 -25
- 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/import_test_accounts.d.ts +1 -1
- package/dest/cmds/import_test_accounts.d.ts.map +1 -1
- package/dest/cmds/import_test_accounts.js +2 -1
- package/dest/cmds/index.d.ts +1 -1
- package/dest/cmds/index.d.ts.map +1 -1
- package/dest/cmds/index.js +36 -19
- package/dest/cmds/send.d.ts +4 -3
- package/dest/cmds/send.d.ts.map +1 -1
- package/dest/cmds/send.js +33 -20
- package/dest/cmds/simulate.d.ts +1 -1
- package/dest/cmds/simulate.d.ts.map +1 -1
- package/dest/cmds/simulate.js +2 -1
- package/dest/storage/wallet_db.d.ts +12 -4
- package/dest/storage/wallet_db.d.ts.map +1 -1
- package/dest/storage/wallet_db.js +74 -31
- package/dest/utils/constants.d.ts +2 -2
- package/dest/utils/constants.d.ts.map +1 -1
- package/dest/utils/constants.js +1 -0
- package/dest/utils/options/fees.d.ts +3 -2
- package/dest/utils/options/fees.d.ts.map +1 -1
- package/dest/utils/options/fees.js +36 -10
- package/dest/utils/options/options.d.ts +2 -2
- package/dest/utils/options/options.d.ts.map +1 -1
- package/dest/utils/options/options.js +5 -5
- package/dest/utils/wallet.d.ts +37 -8
- package/dest/utils/wallet.d.ts.map +1 -1
- package/dest/utils/wallet.js +178 -97
- package/package.json +16 -15
- package/src/bin/index.ts +1 -1
- package/src/cmds/authorize_action.ts +1 -1
- package/src/cmds/check_tx.ts +61 -25
- package/src/cmds/create_account.ts +67 -35
- package/src/cmds/deploy.ts +64 -37
- package/src/cmds/deploy_account.ts +40 -21
- package/src/cmds/get_fee_juice_balance.ts +37 -0
- package/src/cmds/import_test_accounts.ts +12 -1
- package/src/cmds/index.ts +71 -15
- package/src/cmds/send.ts +33 -13
- package/src/cmds/simulate.ts +3 -2
- package/src/storage/wallet_db.ts +86 -37
- package/src/utils/constants.ts +7 -1
- package/src/utils/options/fees.ts +42 -10
- package/src/utils/options/options.ts +5 -5
- package/src/utils/wallet.ts +224 -130
package/dest/bin/index.js
CHANGED
|
@@ -47,7 +47,7 @@ function injectInternalCommands(program, log, db) {
|
|
|
47
47
|
return program;
|
|
48
48
|
}
|
|
49
49
|
/** CLI wallet main entrypoint */ async function main() {
|
|
50
|
-
const walletVersion = getPackageVersion()
|
|
50
|
+
const walletVersion = getPackageVersion();
|
|
51
51
|
const db = WalletDB.getInstance();
|
|
52
52
|
const walletAndNodeWrapper = new CliWalletAndNodeWrapper();
|
|
53
53
|
const program = new Command('wallet');
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { AztecAddress } from '@aztec/aztec.js/addresses';
|
|
2
2
|
import type { Wallet } from '@aztec/aztec.js/wallet';
|
|
3
3
|
import type { LogFn } from '@aztec/foundation/log';
|
|
4
|
-
export declare function authorizeAction(wallet: Wallet, from: AztecAddress, functionName: string, caller: AztecAddress, functionArgsIn: any[], contractArtifactPath: string, contractAddress: AztecAddress, log: LogFn): Promise<import("@aztec/stdlib/tx").TxReceipt
|
|
5
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
4
|
+
export declare function authorizeAction(wallet: Wallet, from: AztecAddress, functionName: string, caller: AztecAddress, functionArgsIn: any[], contractArtifactPath: string, contractAddress: AztecAddress, log: LogFn): Promise<import("@aztec/aztec.js/contracts").TxSendResultMined<import("@aztec/stdlib/tx").TxReceipt>>;
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aG9yaXplX2FjdGlvbi5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NtZHMvYXV0aG9yaXplX2FjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUc5RCxPQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUVyRCxPQUFPLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUluRCx3QkFBc0IsZUFBZSxDQUNuQyxNQUFNLEVBQUUsTUFBTSxFQUNkLElBQUksRUFBRSxZQUFZLEVBQ2xCLFlBQVksRUFBRSxNQUFNLEVBQ3BCLE1BQU0sRUFBRSxZQUFZLEVBQ3BCLGNBQWMsRUFBRSxHQUFHLEVBQUUsRUFDckIsb0JBQW9CLEVBQUUsTUFBTSxFQUM1QixlQUFlLEVBQUUsWUFBWSxFQUM3QixHQUFHLEVBQUUsS0FBSyx3R0E2QlgifQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authorize_action.d.ts","sourceRoot":"","sources":["../../src/cmds/authorize_action.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAG9D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAErD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAInD,wBAAsB,eAAe,CACnC,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,YAAY,EAClB,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,YAAY,EACpB,cAAc,EAAE,GAAG,EAAE,EACrB,oBAAoB,EAAE,MAAM,EAC5B,eAAe,EAAE,YAAY,EAC7B,GAAG,EAAE,KAAK,
|
|
1
|
+
{"version":3,"file":"authorize_action.d.ts","sourceRoot":"","sources":["../../src/cmds/authorize_action.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAG9D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAErD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAInD,wBAAsB,eAAe,CACnC,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,YAAY,EAClB,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,YAAY,EACpB,cAAc,EAAE,GAAG,EAAE,EACrB,oBAAoB,EAAE,MAAM,EAC5B,eAAe,EAAE,YAAY,EAC7B,GAAG,EAAE,KAAK,wGA6BX"}
|
|
@@ -13,8 +13,10 @@ export async function authorizeAction(wallet, from, functionName, caller, functi
|
|
|
13
13
|
caller,
|
|
14
14
|
action
|
|
15
15
|
}, true);
|
|
16
|
-
const witness = await setAuthwitnessInteraction.send(
|
|
17
|
-
|
|
16
|
+
const witness = await setAuthwitnessInteraction.send({
|
|
17
|
+
wait: {
|
|
18
|
+
timeout: DEFAULT_TX_TIMEOUT_S
|
|
19
|
+
}
|
|
18
20
|
});
|
|
19
21
|
log(`Authorized action ${functionName} on contract ${contractAddress} for caller ${caller}`);
|
|
20
22
|
return witness;
|
package/dest/cmds/check_tx.d.ts
CHANGED
|
@@ -3,4 +3,4 @@ import type { TxHash } from '@aztec/aztec.js/tx';
|
|
|
3
3
|
import type { LogFn } from '@aztec/foundation/log';
|
|
4
4
|
import type { CLIWallet } from '../utils/wallet.js';
|
|
5
5
|
export declare function checkTx(wallet: CLIWallet, aztecNode: AztecNode, txHash: TxHash, statusOnly: boolean, log: LogFn): Promise<import("@aztec/aztec.js/tx").TxStatus | undefined>;
|
|
6
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tfdHguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jbWRzL2NoZWNrX3R4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRXRELE9BQU8sS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2pELE9BQU8sS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBUW5ELE9BQU8sS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRXBELHdCQUFzQixPQUFPLENBQzNCLE1BQU0sRUFBRSxTQUFTLEVBQ2pCLFNBQVMsRUFBRSxTQUFTLEVBQ3BCLE1BQU0sRUFBRSxNQUFNLEVBQ2QsVUFBVSxFQUFFLE9BQU8sRUFDbkIsR0FBRyxFQUFFLEtBQUssOERBUVgifQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check_tx.d.ts","sourceRoot":"","sources":["../../src/cmds/check_tx.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEtD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"check_tx.d.ts","sourceRoot":"","sources":["../../src/cmds/check_tx.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEtD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAQnD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEpD,wBAAsB,OAAO,CAC3B,MAAM,EAAE,SAAS,EACjB,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,OAAO,EACnB,GAAG,EAAE,KAAK,8DAQX"}
|
package/dest/cmds/check_tx.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ProtocolContractAddress } from '@aztec/aztec.js/protocol';
|
|
2
|
-
import { siloNullifier } from '@aztec/stdlib/hash';
|
|
2
|
+
import { computeSiloedPrivateInitializationNullifier, computeSiloedPublicInitializationNullifier, siloNullifier } from '@aztec/stdlib/hash';
|
|
3
3
|
export async function checkTx(wallet, aztecNode, txHash, statusOnly, log) {
|
|
4
4
|
if (statusOnly) {
|
|
5
5
|
const receipt = await aztecNode.getTxReceipt(txHash);
|
|
@@ -11,20 +11,22 @@ export async function checkTx(wallet, aztecNode, txHash, statusOnly, log) {
|
|
|
11
11
|
// The rest of the code here was copied over here from CLI because in CLI I needed to prune the inspect function of the PXE
|
|
12
12
|
// dependency when dropping PXE JSON RPC Server.
|
|
13
13
|
async function inspectTx(wallet, aztecNode, txHash, log) {
|
|
14
|
-
const
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
]);
|
|
14
|
+
const receipt = await aztecNode.getTxReceipt(txHash, {
|
|
15
|
+
includeTxEffect: true
|
|
16
|
+
});
|
|
18
17
|
// Base tx data
|
|
19
18
|
log(`Tx ${txHash.toString()}`);
|
|
20
|
-
log(` Status: ${receipt.status}
|
|
19
|
+
log(` Status: ${receipt.status}`);
|
|
20
|
+
if (receipt.executionResult) {
|
|
21
|
+
log(` Execution result: ${receipt.executionResult}`);
|
|
22
|
+
}
|
|
21
23
|
if (receipt.error) {
|
|
22
24
|
log(` Error: ${receipt.error}`);
|
|
23
25
|
}
|
|
24
|
-
if (!
|
|
26
|
+
if (!receipt.isMined() || !receipt.txEffect) {
|
|
25
27
|
return;
|
|
26
28
|
}
|
|
27
|
-
const effects =
|
|
29
|
+
const effects = receipt.txEffect;
|
|
28
30
|
const artifactMap = await getKnownArtifacts(wallet);
|
|
29
31
|
log(` Block: ${receipt.blockNumber} (${receipt.blockHash?.toString()})`);
|
|
30
32
|
if (receipt.transactionFee) {
|
|
@@ -58,13 +60,15 @@ async function inspectTx(wallet, aztecNode, txHash, log) {
|
|
|
58
60
|
// Nullifiers
|
|
59
61
|
const nullifierCount = effects.nullifiers.length;
|
|
60
62
|
const { deployNullifiers, initNullifiers, classNullifiers } = await getKnownNullifiers(wallet, artifactMap);
|
|
63
|
+
const accounts = (await wallet.getAccounts()).map((a)=>a.item);
|
|
61
64
|
if (nullifierCount > 0) {
|
|
62
65
|
log(' Nullifiers:');
|
|
63
66
|
for (const nullifier of effects.nullifiers){
|
|
64
67
|
const deployed = deployNullifiers[nullifier.toString()];
|
|
65
68
|
const note = deployed ? (await wallet.getNotes({
|
|
66
69
|
siloedNullifier: nullifier,
|
|
67
|
-
contractAddress: deployed
|
|
70
|
+
contractAddress: deployed,
|
|
71
|
+
scopes: accounts
|
|
68
72
|
}))[0] : undefined;
|
|
69
73
|
const initialized = initNullifiers[nullifier.toString()];
|
|
70
74
|
const registered = classNullifiers[nullifier.toString()];
|
|
@@ -108,17 +112,22 @@ function toFriendlyAddress(address, artifactMap) {
|
|
|
108
112
|
}
|
|
109
113
|
async function getKnownNullifiers(wallet, artifactMap) {
|
|
110
114
|
const knownContracts = await wallet.getContracts();
|
|
111
|
-
const
|
|
112
|
-
|
|
115
|
+
const [contractResults, classResults] = await Promise.all([
|
|
116
|
+
Promise.all(knownContracts.map((contract)=>getContractNullifiers(wallet, contract))),
|
|
117
|
+
Promise.all(Object.values(artifactMap).map((artifact)=>getClassNullifier(artifact)))
|
|
118
|
+
]);
|
|
113
119
|
const initNullifiers = {};
|
|
114
120
|
const deployNullifiers = {};
|
|
115
121
|
const classNullifiers = {};
|
|
116
|
-
for (const contract of
|
|
117
|
-
|
|
118
|
-
|
|
122
|
+
for (const { contract, deployNullifier, privateInitNullifier, publicInitNullifier } of contractResults){
|
|
123
|
+
deployNullifiers[deployNullifier.toString()] = contract;
|
|
124
|
+
if (privateInitNullifier) {
|
|
125
|
+
initNullifiers[privateInitNullifier.toString()] = contract;
|
|
126
|
+
}
|
|
127
|
+
initNullifiers[publicInitNullifier.toString()] = contract;
|
|
119
128
|
}
|
|
120
|
-
for (const
|
|
121
|
-
classNullifiers[
|
|
129
|
+
for (const { nullifier, label } of classResults){
|
|
130
|
+
classNullifiers[nullifier.toString()] = label;
|
|
122
131
|
}
|
|
123
132
|
return {
|
|
124
133
|
initNullifiers,
|
|
@@ -126,22 +135,45 @@ async function getKnownNullifiers(wallet, artifactMap) {
|
|
|
126
135
|
classNullifiers
|
|
127
136
|
};
|
|
128
137
|
}
|
|
138
|
+
async function getContractNullifiers(wallet, contract) {
|
|
139
|
+
const deployerAddress = ProtocolContractAddress.ContractInstanceRegistry;
|
|
140
|
+
const deployNullifier = await siloNullifier(deployerAddress, contract.toField());
|
|
141
|
+
const metadata = await wallet.getContractMetadata(contract);
|
|
142
|
+
const privateInitNullifier = metadata.instance ? await computeSiloedPrivateInitializationNullifier(contract, metadata.instance.initializationHash) : undefined;
|
|
143
|
+
const publicInitNullifier = await computeSiloedPublicInitializationNullifier(contract);
|
|
144
|
+
return {
|
|
145
|
+
contract,
|
|
146
|
+
deployNullifier,
|
|
147
|
+
privateInitNullifier,
|
|
148
|
+
publicInitNullifier
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
async function getClassNullifier(artifact) {
|
|
152
|
+
const classRegistryAddress = ProtocolContractAddress.ContractClassRegistry;
|
|
153
|
+
const nullifier = await siloNullifier(classRegistryAddress, artifact.classId);
|
|
154
|
+
return {
|
|
155
|
+
nullifier,
|
|
156
|
+
label: `${artifact.name}Class<${artifact.classId}>`
|
|
157
|
+
};
|
|
158
|
+
}
|
|
129
159
|
async function getKnownArtifacts(wallet) {
|
|
130
160
|
const knownContractAddresses = await wallet.getContracts();
|
|
131
|
-
const knownContracts =
|
|
161
|
+
const knownContracts = await Promise.all(knownContractAddresses.map((contractAddress)=>wallet.getContractMetadata(contractAddress)));
|
|
162
|
+
const classIdFor = (metadata)=>metadata.updatedContractClassId ?? metadata.instance?.originalContractClassId;
|
|
132
163
|
const classIds = [
|
|
133
|
-
...new Set(knownContracts.map(
|
|
164
|
+
...new Set(knownContracts.map(classIdFor))
|
|
134
165
|
];
|
|
135
166
|
const knownArtifacts = (await Promise.all(classIds.map((classId)=>classId ? wallet.getContractArtifact(classId) : undefined))).map((artifact, index)=>artifact ? {
|
|
136
167
|
...artifact,
|
|
137
168
|
classId: classIds[index]
|
|
138
169
|
} : undefined);
|
|
139
170
|
const map = {};
|
|
140
|
-
for (const
|
|
141
|
-
|
|
142
|
-
|
|
171
|
+
for (const metadata of knownContracts){
|
|
172
|
+
const classId = classIdFor(metadata);
|
|
173
|
+
if (metadata.instance && classId) {
|
|
174
|
+
const artifact = knownArtifacts.find((a)=>a?.classId?.equals(classId));
|
|
143
175
|
if (artifact) {
|
|
144
|
-
map[instance.address.toString()] = artifact;
|
|
176
|
+
map[metadata.instance.address.toString()] = artifact;
|
|
145
177
|
}
|
|
146
178
|
}
|
|
147
179
|
}
|
|
@@ -1,14 +1,17 @@
|
|
|
1
1
|
import { AztecAddress } from '@aztec/aztec.js/addresses';
|
|
2
|
-
import type
|
|
2
|
+
import { type AztecNode } from '@aztec/aztec.js/node';
|
|
3
3
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
4
|
+
import { GrumpkinScalar } from '@aztec/foundation/curves/grumpkin';
|
|
4
5
|
import type { LogFn, Logger } from '@aztec/foundation/log';
|
|
6
|
+
import { TxStatus } from '@aztec/stdlib/tx';
|
|
5
7
|
import type { AccountType } from '../utils/constants.js';
|
|
6
8
|
import { CLIFeeArgs } from '../utils/options/fees.js';
|
|
7
9
|
import { CLIWallet } from '../utils/wallet.js';
|
|
8
|
-
export declare function createAccount(wallet: CLIWallet, aztecNode: AztecNode, accountType: AccountType,
|
|
10
|
+
export declare function createAccount(wallet: CLIWallet, aztecNode: AztecNode, accountType: AccountType, signingKey: GrumpkinScalar | undefined, salt: Fr | undefined, publicKey: string | undefined, alias: string | undefined, deployer: AztecAddress | undefined, registerOnly: boolean, skipInitialization: boolean, publicDeploy: boolean, registerClass: boolean, wait: boolean, feeOpts: CLIFeeArgs, waitForStatus: TxStatus, json: boolean, verbose: boolean, debugLogger: Logger, log: LogFn): Promise<{
|
|
9
11
|
alias: string | undefined;
|
|
10
12
|
address: AztecAddress;
|
|
13
|
+
signingKey: import("@aztec/foundation/curves/bn254").Fq | undefined;
|
|
11
14
|
secretKey: Fr;
|
|
12
15
|
salt: Fr;
|
|
13
16
|
}>;
|
|
14
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
17
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlX2FjY291bnQuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jbWRzL2NyZWF0ZV9hY2NvdW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUV6RCxPQUFPLEVBQUUsS0FBSyxTQUFTLEVBQWEsTUFBTSxzQkFBc0IsQ0FBQztBQUdqRSxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDcEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ25FLE9BQU8sS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMzRCxPQUFPLEVBQStCLFFBQVEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBR3pFLE9BQU8sS0FBSyxFQUFFLFdBQVcsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUV0RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFL0Msd0JBQXNCLGFBQWEsQ0FDakMsTUFBTSxFQUFFLFNBQVMsRUFDakIsU0FBUyxFQUFFLFNBQVMsRUFDcEIsV0FBVyxFQUFFLFdBQVcsRUFDeEIsVUFBVSxFQUFFLGNBQWMsR0FBRyxTQUFTLEVBQ3RDLElBQUksRUFBRSxFQUFFLEdBQUcsU0FBUyxFQUNwQixTQUFTLEVBQUUsTUFBTSxHQUFHLFNBQVMsRUFDN0IsS0FBSyxFQUFFLE1BQU0sR0FBRyxTQUFTLEVBQ3pCLFFBQVEsRUFBRSxZQUFZLEdBQUcsU0FBUyxFQUNsQyxZQUFZLEVBQUUsT0FBTyxFQUNyQixrQkFBa0IsRUFBRSxPQUFPLEVBQzNCLFlBQVksRUFBRSxPQUFPLEVBQ3JCLGFBQWEsRUFBRSxPQUFPLEVBQ3RCLElBQUksRUFBRSxPQUFPLEVBQ2IsT0FBTyxFQUFFLFVBQVUsRUFDbkIsYUFBYSxFQUFFLFFBQVEsRUFDdkIsSUFBSSxFQUFFLE9BQU8sRUFDYixPQUFPLEVBQUUsT0FBTyxFQUNoQixXQUFXLEVBQUUsTUFBTSxFQUNuQixHQUFHLEVBQUUsS0FBSzs7Ozs7O0dBMElYIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create_account.d.ts","sourceRoot":"","sources":["../../src/cmds/create_account.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"create_account.d.ts","sourceRoot":"","sources":["../../src/cmds/create_account.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEzD,OAAO,EAAE,KAAK,SAAS,EAAa,MAAM,sBAAsB,CAAC;AAGjE,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AACnE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAA+B,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAGzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAEtD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE/C,wBAAsB,aAAa,CACjC,MAAM,EAAE,SAAS,EACjB,SAAS,EAAE,SAAS,EACpB,WAAW,EAAE,WAAW,EACxB,UAAU,EAAE,cAAc,GAAG,SAAS,EACtC,IAAI,EAAE,EAAE,GAAG,SAAS,EACpB,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,QAAQ,EAAE,YAAY,GAAG,SAAS,EAClC,YAAY,EAAE,OAAO,EACrB,kBAAkB,EAAE,OAAO,EAC3B,YAAY,EAAE,OAAO,EACrB,aAAa,EAAE,OAAO,EACtB,IAAI,EAAE,OAAO,EACb,OAAO,EAAE,UAAU,EACnB,aAAa,EAAE,QAAQ,EACvB,IAAI,EAAE,OAAO,EACb,OAAO,EAAE,OAAO,EAChB,WAAW,EAAE,MAAM,EACnB,GAAG,EAAE,KAAK;;;;;;GA0IX"}
|
|
@@ -1,40 +1,60 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { deriveSecretKeyFromSigningKey } from '@aztec/accounts/utils';
|
|
2
|
+
import { NO_FROM } from '@aztec/aztec.js/account';
|
|
3
|
+
import { NO_WAIT } from '@aztec/aztec.js/contracts';
|
|
4
|
+
import { waitForTx } from '@aztec/aztec.js/node';
|
|
2
5
|
import { prettyPrintJSON } from '@aztec/cli/cli-utils';
|
|
3
6
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
7
|
+
import { GrumpkinScalar } from '@aztec/foundation/curves/grumpkin';
|
|
4
8
|
import { DEFAULT_TX_TIMEOUT_S } from '../utils/cli_wallet_and_node_wrapper.js';
|
|
5
9
|
import { printProfileResult } from '../utils/profiling.js';
|
|
6
|
-
export async function createAccount(wallet, aztecNode, accountType,
|
|
7
|
-
secretKey
|
|
8
|
-
|
|
9
|
-
|
|
10
|
+
export async function createAccount(wallet, aztecNode, accountType, signingKey, salt, publicKey, alias, deployer, registerOnly, skipInitialization, publicDeploy, registerClass, wait, feeOpts, waitForStatus, json, verbose, debugLogger, log) {
|
|
11
|
+
let secretKey;
|
|
12
|
+
if (accountType === 'ecdsasecp256r1ssh') {
|
|
13
|
+
// SSH accounts sign with a key held in the agent, and so we cannot derive their privacy secret key from it. Instead
|
|
14
|
+
// we pick a random value.
|
|
15
|
+
secretKey = Fr.random();
|
|
16
|
+
} else {
|
|
17
|
+
signingKey ??= GrumpkinScalar.random();
|
|
18
|
+
secretKey = await deriveSecretKeyFromSigningKey(signingKey);
|
|
19
|
+
}
|
|
20
|
+
const account = await wallet.createAccount(accountType, signingKey, secretKey, salt, publicKey);
|
|
21
|
+
const instanceSalt = account.getInstance().salt;
|
|
10
22
|
const { address, publicKeys, partialAddress } = await account.getCompleteAddress();
|
|
11
23
|
const out = {};
|
|
12
24
|
if (json) {
|
|
13
25
|
out.address = address;
|
|
14
26
|
out.publicKey = publicKeys;
|
|
27
|
+
if (signingKey) {
|
|
28
|
+
out.signingKey = signingKey;
|
|
29
|
+
}
|
|
15
30
|
if (secretKey) {
|
|
16
31
|
out.secretKey = secretKey;
|
|
17
32
|
}
|
|
18
33
|
out.partialAddress = partialAddress;
|
|
19
|
-
out.salt =
|
|
34
|
+
out.salt = instanceSalt;
|
|
20
35
|
out.initHash = account.getInstance().initializationHash;
|
|
21
36
|
} else {
|
|
22
37
|
log(`\nNew account:\n`);
|
|
23
38
|
log(`Address: ${address.toString()}`);
|
|
24
39
|
log(`Public key: ${publicKeys.toString()}`);
|
|
40
|
+
if (signingKey) {
|
|
41
|
+
log(`Signing key: ${signingKey.toString()}`);
|
|
42
|
+
}
|
|
25
43
|
if (secretKey) {
|
|
26
44
|
log(`Secret key: ${secretKey.toString()}`);
|
|
27
45
|
}
|
|
28
46
|
log(`Partial address: ${partialAddress.toString()}`);
|
|
29
|
-
log(`Salt: ${
|
|
47
|
+
log(`Salt: ${instanceSalt.toString()}`);
|
|
30
48
|
log(`Init hash: ${account.getInstance().initializationHash.toString()}`);
|
|
31
49
|
}
|
|
32
|
-
let
|
|
50
|
+
let txHash;
|
|
33
51
|
let txReceipt;
|
|
34
|
-
|
|
52
|
+
// Initializerless accounts have no deployment tx — creating one only registers it locally — so there is
|
|
53
|
+
// nothing to deploy on-chain.
|
|
54
|
+
if (!registerOnly && accountType !== 'schnorr_initializerless') {
|
|
35
55
|
const { paymentMethod, gasSettings } = await feeOpts.toUserFeeOptions(aztecNode, wallet, address);
|
|
36
56
|
const delegatedDeployment = deployer && !account.address.equals(deployer);
|
|
37
|
-
const from = delegatedDeployment ? deployer :
|
|
57
|
+
const from = delegatedDeployment ? deployer : NO_FROM;
|
|
38
58
|
const deployAccountOpts = {
|
|
39
59
|
skipClassPublication: !registerClass,
|
|
40
60
|
skipInstancePublication: !publicDeploy,
|
|
@@ -45,14 +65,15 @@ export async function createAccount(wallet, aztecNode, accountType, secretKey, p
|
|
|
45
65
|
gasSettings
|
|
46
66
|
}
|
|
47
67
|
};
|
|
68
|
+
const localStart = performance.now();
|
|
48
69
|
const deployMethod = await account.getDeployMethod();
|
|
49
|
-
const
|
|
70
|
+
const sim = await deployMethod.simulate({
|
|
50
71
|
...deployAccountOpts,
|
|
51
|
-
|
|
52
|
-
...deployAccountOpts.fee,
|
|
53
|
-
estimateGas: true
|
|
54
|
-
}
|
|
72
|
+
includeMetadata: true
|
|
55
73
|
});
|
|
74
|
+
// includeMetadata: true guarantees these fields are present
|
|
75
|
+
const estimatedGas = await wallet.estimateGasLimits(sim.gasUsed);
|
|
76
|
+
const stats = sim.stats;
|
|
56
77
|
if (feeOpts.estimateOnly) {
|
|
57
78
|
if (json) {
|
|
58
79
|
out.fee = {
|
|
@@ -67,38 +88,49 @@ export async function createAccount(wallet, aztecNode, accountType, secretKey, p
|
|
|
67
88
|
};
|
|
68
89
|
}
|
|
69
90
|
} else {
|
|
70
|
-
|
|
91
|
+
if (verbose) {
|
|
92
|
+
printProfileResult(stats, log);
|
|
93
|
+
}
|
|
94
|
+
if (!json) {
|
|
95
|
+
log(`\nWaiting for account contract deployment...`);
|
|
96
|
+
}
|
|
97
|
+
const sendOpts = {
|
|
71
98
|
...deployAccountOpts,
|
|
72
99
|
fee: deployAccountOpts.fee ? {
|
|
73
100
|
...deployAccountOpts.fee,
|
|
74
101
|
gasSettings: estimatedGas
|
|
75
102
|
} : undefined
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
out.txHash = txHash;
|
|
103
|
+
};
|
|
104
|
+
({ txHash } = await deployMethod.send({
|
|
105
|
+
...sendOpts,
|
|
106
|
+
wait: NO_WAIT
|
|
107
|
+
}));
|
|
108
|
+
const localTimeMs = performance.now() - localStart;
|
|
83
109
|
if (wait) {
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
timeout: DEFAULT_TX_TIMEOUT_S
|
|
110
|
+
const nodeStart = performance.now();
|
|
111
|
+
txReceipt = await waitForTx(aztecNode, txHash, {
|
|
112
|
+
timeout: DEFAULT_TX_TIMEOUT_S,
|
|
113
|
+
waitForStatus
|
|
89
114
|
});
|
|
115
|
+
const nodeTimeMs = performance.now() - nodeStart;
|
|
90
116
|
out.txReceipt = {
|
|
91
117
|
status: txReceipt.status,
|
|
92
118
|
transactionFee: txReceipt.transactionFee
|
|
93
119
|
};
|
|
120
|
+
if (!json) {
|
|
121
|
+
log(` Local processing time: ${(localTimeMs / 1000).toFixed(1)}s`);
|
|
122
|
+
log(` Node inclusion time: ${(nodeTimeMs / 1000).toFixed(1)}s`);
|
|
123
|
+
}
|
|
94
124
|
}
|
|
125
|
+
debugLogger.debug(`Account contract tx sent with hash ${txHash.toString()}`);
|
|
126
|
+
out.txHash = txHash;
|
|
95
127
|
}
|
|
96
128
|
}
|
|
97
129
|
if (json) {
|
|
98
130
|
log(prettyPrintJSON(out));
|
|
99
131
|
} else {
|
|
100
|
-
if (
|
|
101
|
-
log(`Deploy tx hash: ${
|
|
132
|
+
if (txHash) {
|
|
133
|
+
log(`Deploy tx hash: ${txHash.toString()}`);
|
|
102
134
|
}
|
|
103
135
|
if (txReceipt) {
|
|
104
136
|
log(`Deploy tx fee: ${txReceipt.transactionFee}`);
|
|
@@ -107,7 +139,8 @@ export async function createAccount(wallet, aztecNode, accountType, secretKey, p
|
|
|
107
139
|
return {
|
|
108
140
|
alias,
|
|
109
141
|
address,
|
|
142
|
+
signingKey,
|
|
110
143
|
secretKey,
|
|
111
|
-
salt
|
|
144
|
+
salt: instanceSalt
|
|
112
145
|
};
|
|
113
146
|
}
|
package/dest/cmds/deploy.d.ts
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import { AztecAddress } from '@aztec/aztec.js/addresses';
|
|
1
|
+
import type { AztecAddress } from '@aztec/aztec.js/addresses';
|
|
2
2
|
import { Fr } from '@aztec/aztec.js/fields';
|
|
3
|
-
import type
|
|
3
|
+
import { type AztecNode } from '@aztec/aztec.js/node';
|
|
4
4
|
import type { LogFn, Logger } from '@aztec/foundation/log';
|
|
5
5
|
import { PublicKeys } from '@aztec/stdlib/keys';
|
|
6
|
+
import type { TxStatus } from '@aztec/stdlib/tx';
|
|
6
7
|
import { CLIFeeArgs } from '../utils/options/fees.js';
|
|
7
8
|
import type { CLIWallet } from '../utils/wallet.js';
|
|
8
|
-
export declare function deploy(wallet: CLIWallet, node: AztecNode, deployer: AztecAddress, artifactPath: string, json: boolean, publicKeys: PublicKeys | undefined, rawArgs: any[], salt: Fr | undefined, initializer: string | undefined, skipInstancePublication: boolean, skipClassPublication: boolean, skipInitialization: boolean | undefined, wait: boolean, feeOpts: CLIFeeArgs, verbose: boolean, timeout: number | undefined, debugLogger: Logger, log: LogFn): Promise<AztecAddress
|
|
9
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
9
|
+
export declare function deploy(wallet: CLIWallet, node: AztecNode, deployer: AztecAddress, artifactPath: string, json: boolean, publicKeys: PublicKeys | undefined, rawArgs: any[], salt: Fr | undefined, initializer: string | undefined, skipInstancePublication: boolean, skipClassPublication: boolean, skipInitialization: boolean | undefined, wait: boolean, feeOpts: CLIFeeArgs, waitForStatus: TxStatus, verbose: boolean, timeout: number | undefined, debugLogger: Logger, log: LogFn, universal?: boolean): Promise<AztecAddress>;
|
|
10
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwbG95LmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY21kcy9kZXBsb3kudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxLQUFLLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFJOUQsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzVDLE9BQU8sRUFBRSxLQUFLLFNBQVMsRUFBYSxNQUFNLHNCQUFzQixDQUFDO0FBRWpFLE9BQU8sS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUUzRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDaEQsT0FBTyxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFHakQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRXRELE9BQU8sS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRXBELHdCQUFzQixNQUFNLENBQzFCLE1BQU0sRUFBRSxTQUFTLEVBQ2pCLElBQUksRUFBRSxTQUFTLEVBQ2YsUUFBUSxFQUFFLFlBQVksRUFDdEIsWUFBWSxFQUFFLE1BQU0sRUFDcEIsSUFBSSxFQUFFLE9BQU8sRUFDYixVQUFVLEVBQUUsVUFBVSxHQUFHLFNBQVMsRUFDbEMsT0FBTyxFQUFFLEdBQUcsRUFBRSxFQUNkLElBQUksRUFBRSxFQUFFLEdBQUcsU0FBUyxFQUNwQixXQUFXLEVBQUUsTUFBTSxHQUFHLFNBQVMsRUFDL0IsdUJBQXVCLEVBQUUsT0FBTyxFQUNoQyxvQkFBb0IsRUFBRSxPQUFPLEVBQzdCLGtCQUFrQixFQUFFLE9BQU8sR0FBRyxTQUFTLEVBQ3ZDLElBQUksRUFBRSxPQUFPLEVBQ2IsT0FBTyxFQUFFLFVBQVUsRUFDbkIsYUFBYSxFQUFFLFFBQVEsRUFDdkIsT0FBTyxFQUFFLE9BQU8sRUFDaEIsT0FBTyxvQkFBK0IsRUFDdEMsV0FBVyxFQUFFLE1BQU0sRUFDbkIsR0FBRyxFQUFFLEtBQUssRUFDVixTQUFTLENBQUMsRUFBRSxPQUFPLHlCQXNIcEIifQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../src/cmds/deploy.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../src/cmds/deploy.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAI9D,OAAO,EAAE,EAAE,EAAE,MAAM,wBAAwB,CAAC;AAC5C,OAAO,EAAE,KAAK,SAAS,EAAa,MAAM,sBAAsB,CAAC;AAEjE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAE3D,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAGjD,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAEtD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEpD,wBAAsB,MAAM,CAC1B,MAAM,EAAE,SAAS,EACjB,IAAI,EAAE,SAAS,EACf,QAAQ,EAAE,YAAY,EACtB,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE,OAAO,EACb,UAAU,EAAE,UAAU,GAAG,SAAS,EAClC,OAAO,EAAE,GAAG,EAAE,EACd,IAAI,EAAE,EAAE,GAAG,SAAS,EACpB,WAAW,EAAE,MAAM,GAAG,SAAS,EAC/B,uBAAuB,EAAE,OAAO,EAChC,oBAAoB,EAAE,OAAO,EAC7B,kBAAkB,EAAE,OAAO,GAAG,SAAS,EACvC,IAAI,EAAE,OAAO,EACb,OAAO,EAAE,UAAU,EACnB,aAAa,EAAE,QAAQ,EACvB,OAAO,EAAE,OAAO,EAChB,OAAO,oBAA+B,EACtC,WAAW,EAAE,MAAM,EACnB,GAAG,EAAE,KAAK,EACV,SAAS,CAAC,EAAE,OAAO,yBAsHpB"}
|
package/dest/cmds/deploy.js
CHANGED
|
@@ -1,19 +1,21 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { NO_FROM } from '@aztec/aztec.js/account';
|
|
2
|
+
import { NO_WAIT } from '@aztec/aztec.js/contracts';
|
|
2
3
|
import { ContractDeployer } from '@aztec/aztec.js/deployment';
|
|
3
4
|
import { Fr } from '@aztec/aztec.js/fields';
|
|
5
|
+
import { waitForTx } from '@aztec/aztec.js/node';
|
|
4
6
|
import { encodeArgs, getContractArtifact, prettyPrintJSON } from '@aztec/cli/utils';
|
|
5
7
|
import { getAllFunctionAbis, getInitializer } from '@aztec/stdlib/abi';
|
|
6
8
|
import { PublicKeys } from '@aztec/stdlib/keys';
|
|
7
9
|
import { DEFAULT_TX_TIMEOUT_S } from '../utils/cli_wallet_and_node_wrapper.js';
|
|
8
10
|
import { printProfileResult } from '../utils/profiling.js';
|
|
9
|
-
export async function deploy(wallet, node, deployer, artifactPath, json, publicKeys, rawArgs, salt, initializer, skipInstancePublication, skipClassPublication, skipInitialization, wait, feeOpts, verbose, timeout = DEFAULT_TX_TIMEOUT_S, debugLogger, log) {
|
|
11
|
+
export async function deploy(wallet, node, deployer, artifactPath, json, publicKeys, rawArgs, salt, initializer, skipInstancePublication, skipClassPublication, skipInitialization, wait, feeOpts, waitForStatus, verbose, timeout = DEFAULT_TX_TIMEOUT_S, debugLogger, log, universal) {
|
|
10
12
|
const out = {};
|
|
11
13
|
salt ??= Fr.random();
|
|
12
14
|
const contractArtifact = await getContractArtifact(artifactPath, log);
|
|
13
15
|
const hasInitializer = getAllFunctionAbis(contractArtifact).some((fn)=>fn.isInitializer);
|
|
14
16
|
const constructorArtifact = hasInitializer ? getInitializer(contractArtifact, initializer) : undefined;
|
|
15
17
|
// TODO(#12081): Add contractArtifact.noirVersion and check here (via Noir.lock)?
|
|
16
|
-
const contractDeployer = new ContractDeployer(contractArtifact, wallet,
|
|
18
|
+
const contractDeployer = new ContractDeployer(contractArtifact, wallet, initializer);
|
|
17
19
|
let args = [];
|
|
18
20
|
if (rawArgs.length > 0) {
|
|
19
21
|
if (!constructorArtifact) {
|
|
@@ -23,27 +25,32 @@ export async function deploy(wallet, node, deployer, artifactPath, json, publicK
|
|
|
23
25
|
args = encodeArgs(rawArgs, constructorArtifact.parameters);
|
|
24
26
|
debugLogger.debug(`Encoded arguments: ${args.join(', ')}`);
|
|
25
27
|
}
|
|
26
|
-
const
|
|
28
|
+
const deployInteraction = contractDeployer.deploy(args, {
|
|
29
|
+
salt,
|
|
30
|
+
publicKeys: publicKeys ?? PublicKeys.default(),
|
|
31
|
+
...universal ? {
|
|
32
|
+
universalDeploy: true
|
|
33
|
+
} : {}
|
|
34
|
+
});
|
|
27
35
|
const { paymentMethod, gasSettings } = await feeOpts.toUserFeeOptions(node, wallet, deployer);
|
|
28
36
|
const deployOpts = {
|
|
29
37
|
fee: {
|
|
30
38
|
gasSettings,
|
|
31
39
|
paymentMethod
|
|
32
40
|
},
|
|
33
|
-
from: deployer ??
|
|
34
|
-
contractAddressSalt: salt,
|
|
35
|
-
universalDeploy: !deployer,
|
|
41
|
+
from: deployer ?? NO_FROM,
|
|
36
42
|
skipClassPublication,
|
|
37
43
|
skipInitialization,
|
|
38
44
|
skipInstancePublication
|
|
39
45
|
};
|
|
40
|
-
const
|
|
46
|
+
const localStart = performance.now();
|
|
47
|
+
const sim = await deployInteraction.simulate({
|
|
41
48
|
...deployOpts,
|
|
42
|
-
|
|
43
|
-
...deployOpts.fee,
|
|
44
|
-
estimateGas: true
|
|
45
|
-
}
|
|
49
|
+
includeMetadata: true
|
|
46
50
|
});
|
|
51
|
+
// includeMetadata: true guarantees these fields are present
|
|
52
|
+
const estimatedGas = await wallet.estimateGasLimits(sim.gasUsed);
|
|
53
|
+
const stats = sim.stats;
|
|
47
54
|
if (feeOpts.estimateOnly) {
|
|
48
55
|
if (json) {
|
|
49
56
|
out.fee = {
|
|
@@ -58,43 +65,65 @@ export async function deploy(wallet, node, deployer, artifactPath, json, publicK
|
|
|
58
65
|
};
|
|
59
66
|
}
|
|
60
67
|
} else {
|
|
61
|
-
const tx = deploy1.send(deployOpts);
|
|
62
68
|
if (verbose) {
|
|
63
69
|
printProfileResult(stats, log);
|
|
64
70
|
}
|
|
65
|
-
const
|
|
71
|
+
const instance = await deployInteraction.getInstance();
|
|
72
|
+
const address = instance.address;
|
|
73
|
+
const partialAddress = await deployInteraction.getPartialAddress();
|
|
74
|
+
const { txHash } = await deployInteraction.send({
|
|
75
|
+
...deployOpts,
|
|
76
|
+
wait: NO_WAIT
|
|
77
|
+
});
|
|
78
|
+
const localTimeMs = performance.now() - localStart;
|
|
66
79
|
debugLogger.debug(`Deploy tx sent with hash ${txHash.toString()}`);
|
|
67
80
|
out.hash = txHash;
|
|
68
|
-
const { address, partialAddress } = deploy1;
|
|
69
|
-
const instance = await deploy1.getInstance();
|
|
70
|
-
if (!json) {
|
|
71
|
-
log(`Contract deployed at ${address?.toString()}`);
|
|
72
|
-
log(`Contract partial address ${(await partialAddress)?.toString()}`);
|
|
73
|
-
log(`Contract init hash ${instance.initializationHash.toString()}`);
|
|
74
|
-
log(`Deployment tx hash: ${txHash.toString()}`);
|
|
75
|
-
log(`Deployment salt: ${salt.toString()}`);
|
|
76
|
-
log(`Deployer: ${instance.deployer.toString()}`);
|
|
77
|
-
} else {
|
|
78
|
-
out.contract = {
|
|
79
|
-
address: address?.toString(),
|
|
80
|
-
partialAddress: (await partialAddress)?.toString(),
|
|
81
|
-
initializationHash: instance.initializationHash.toString(),
|
|
82
|
-
salt: salt.toString()
|
|
83
|
-
};
|
|
84
|
-
}
|
|
85
81
|
if (wait) {
|
|
86
|
-
const
|
|
87
|
-
|
|
82
|
+
const nodeStart = performance.now();
|
|
83
|
+
const receipt = await waitForTx(node, txHash, {
|
|
84
|
+
timeout,
|
|
85
|
+
waitForStatus
|
|
88
86
|
});
|
|
87
|
+
const nodeTimeMs = performance.now() - nodeStart;
|
|
88
|
+
if (!json) {
|
|
89
|
+
log(`Contract deployed at ${address.toString()}`);
|
|
90
|
+
log(`Contract partial address ${partialAddress.toString()}`);
|
|
91
|
+
log(`Contract init hash ${instance.initializationHash.toString()}`);
|
|
92
|
+
log(`Deployment tx hash: ${txHash.toString()}`);
|
|
93
|
+
log(`Deployment salt: ${salt.toString()}`);
|
|
94
|
+
log(`Deployer: ${instance.deployer.toString()}`);
|
|
95
|
+
log(`Transaction fee: ${receipt.transactionFee?.toString()}`);
|
|
96
|
+
log(` Local processing time: ${(localTimeMs / 1000).toFixed(1)}s`);
|
|
97
|
+
log(` Node inclusion time: ${(nodeTimeMs / 1000).toFixed(1)}s`);
|
|
98
|
+
} else {
|
|
99
|
+
out.contract = {
|
|
100
|
+
address: address.toString(),
|
|
101
|
+
partialAddress: partialAddress.toString(),
|
|
102
|
+
initializationHash: instance.initializationHash.toString(),
|
|
103
|
+
salt: salt.toString(),
|
|
104
|
+
transactionFee: receipt.transactionFee?.toString()
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
} else {
|
|
89
108
|
if (!json) {
|
|
90
|
-
log(`
|
|
109
|
+
log(`Contract deployed at ${address.toString()}`);
|
|
110
|
+
log(`Contract partial address ${partialAddress.toString()}`);
|
|
111
|
+
log(`Contract init hash ${instance.initializationHash.toString()}`);
|
|
112
|
+
log(`Deployment tx hash: ${txHash.toString()}`);
|
|
113
|
+
log(`Deployment salt: ${salt.toString()}`);
|
|
114
|
+
log(`Deployer: ${instance.deployer.toString()}`);
|
|
91
115
|
} else {
|
|
92
|
-
out.contract
|
|
116
|
+
out.contract = {
|
|
117
|
+
address: address.toString(),
|
|
118
|
+
partialAddress: partialAddress.toString(),
|
|
119
|
+
initializationHash: instance.initializationHash.toString(),
|
|
120
|
+
salt: salt.toString()
|
|
121
|
+
};
|
|
93
122
|
}
|
|
94
123
|
}
|
|
95
124
|
}
|
|
96
125
|
if (json) {
|
|
97
126
|
log(prettyPrintJSON(out));
|
|
98
127
|
}
|
|
99
|
-
return
|
|
128
|
+
return await deployInteraction.getAddress();
|
|
100
129
|
}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { AztecAddress } from '@aztec/aztec.js/addresses';
|
|
2
|
-
import type
|
|
2
|
+
import { type AztecNode } from '@aztec/aztec.js/node';
|
|
3
3
|
import type { LogFn, Logger } from '@aztec/foundation/log';
|
|
4
|
+
import type { TxStatus } from '@aztec/stdlib/tx';
|
|
4
5
|
import type { CLIFeeArgs } from '../utils/options/fees.js';
|
|
5
6
|
import type { CLIWallet } from '../utils/wallet.js';
|
|
6
|
-
export declare function deployAccount(wallet: CLIWallet, aztecNode: AztecNode, address: AztecAddress, wait: boolean, deployer: AztecAddress | undefined, registerClass: boolean, publicDeploy: boolean, skipInitialization: boolean, feeOpts: CLIFeeArgs, json: boolean, verbose: boolean, debugLogger: Logger, log: LogFn): Promise<void>;
|
|
7
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
7
|
+
export declare function deployAccount(wallet: CLIWallet, aztecNode: AztecNode, address: AztecAddress, wait: boolean, deployer: AztecAddress | undefined, registerClass: boolean, publicDeploy: boolean, skipInitialization: boolean, feeOpts: CLIFeeArgs, waitForStatus: TxStatus, json: boolean, verbose: boolean, debugLogger: Logger, log: LogFn): Promise<void>;
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwbG95X2FjY291bnQuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jbWRzL2RlcGxveV9hY2NvdW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUV6RCxPQUFPLEVBQUUsS0FBSyxTQUFTLEVBQWEsTUFBTSxzQkFBc0IsQ0FBQztBQUdqRSxPQUFPLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDM0QsT0FBTyxLQUFLLEVBQXFCLFFBQVEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBR3BFLE9BQU8sS0FBSyxFQUFFLFVBQVUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRTNELE9BQU8sS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRXBELHdCQUFzQixhQUFhLENBQ2pDLE1BQU0sRUFBRSxTQUFTLEVBQ2pCLFNBQVMsRUFBRSxTQUFTLEVBQ3BCLE9BQU8sRUFBRSxZQUFZLEVBQ3JCLElBQUksRUFBRSxPQUFPLEVBQ2IsUUFBUSxFQUFFLFlBQVksR0FBRyxTQUFTLEVBQ2xDLGFBQWEsRUFBRSxPQUFPLEVBQ3RCLFlBQVksRUFBRSxPQUFPLEVBQ3JCLGtCQUFrQixFQUFFLE9BQU8sRUFDM0IsT0FBTyxFQUFFLFVBQVUsRUFDbkIsYUFBYSxFQUFFLFFBQVEsRUFDdkIsSUFBSSxFQUFFLE9BQU8sRUFDYixPQUFPLEVBQUUsT0FBTyxFQUNoQixXQUFXLEVBQUUsTUFBTSxFQUNuQixHQUFHLEVBQUUsS0FBSyxpQkErR1gifQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deploy_account.d.ts","sourceRoot":"","sources":["../../src/cmds/deploy_account.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"deploy_account.d.ts","sourceRoot":"","sources":["../../src/cmds/deploy_account.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEzD,OAAO,EAAE,KAAK,SAAS,EAAa,MAAM,sBAAsB,CAAC;AAGjE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,KAAK,EAAqB,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAGpE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAE3D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEpD,wBAAsB,aAAa,CACjC,MAAM,EAAE,SAAS,EACjB,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,YAAY,EACrB,IAAI,EAAE,OAAO,EACb,QAAQ,EAAE,YAAY,GAAG,SAAS,EAClC,aAAa,EAAE,OAAO,EACtB,YAAY,EAAE,OAAO,EACrB,kBAAkB,EAAE,OAAO,EAC3B,OAAO,EAAE,UAAU,EACnB,aAAa,EAAE,QAAQ,EACvB,IAAI,EAAE,OAAO,EACb,OAAO,EAAE,OAAO,EAChB,WAAW,EAAE,MAAM,EACnB,GAAG,EAAE,KAAK,iBA+GX"}
|