@aztec/cli-wallet 0.0.1-commit.3d8f95d → 0.0.1-commit.3f296a7d2
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 +1 -1
- package/dest/cmds/create_account.d.ts.map +1 -1
- package/dest/cmds/create_account.js +23 -15
- package/dest/cmds/deploy.d.ts +1 -1
- package/dest/cmds/deploy.d.ts.map +1 -1
- package/dest/cmds/deploy.js +8 -5
- package/dest/cmds/deploy_account.d.ts +1 -1
- package/dest/cmds/deploy_account.d.ts.map +1 -1
- package/dest/cmds/deploy_account.js +23 -15
- package/dest/cmds/index.js +1 -1
- package/dest/cmds/send.d.ts +1 -1
- package/dest/cmds/send.d.ts.map +1 -1
- package/dest/cmds/send.js +6 -3
- package/dest/utils/options/fees.d.ts +1 -1
- package/dest/utils/options/fees.d.ts.map +1 -1
- package/dest/utils/options/fees.js +2 -0
- package/dest/utils/wallet.d.ts +8 -3
- package/dest/utils/wallet.d.ts.map +1 -1
- package/dest/utils/wallet.js +45 -49
- package/package.json +14 -14
- package/src/cmds/check_tx.ts +41 -10
- package/src/cmds/create_account.ts +16 -10
- package/src/cmds/deploy.ts +8 -4
- package/src/cmds/deploy_account.ts +16 -10
- package/src/cmds/index.ts +1 -1
- package/src/cmds/send.ts +6 -3
- package/src/cmds/simulate.ts +1 -1
- package/src/utils/options/fees.ts +6 -0
- package/src/utils/wallet.ts +53 -58
package/dest/utils/wallet.js
CHANGED
|
@@ -2,9 +2,10 @@ import { EcdsaRAccountContract, EcdsaRSSHAccountContract } from '@aztec/accounts
|
|
|
2
2
|
import { SchnorrAccountContract } from '@aztec/accounts/schnorr';
|
|
3
3
|
import { StubAccountContractArtifact, createStubAccount } from '@aztec/accounts/stub';
|
|
4
4
|
import { getIdentities } from '@aztec/accounts/utils';
|
|
5
|
-
import {
|
|
5
|
+
import { NO_FROM } from '@aztec/aztec.js/account';
|
|
6
6
|
import { getContractInstanceFromInstantiationParams, getGasLimits } from '@aztec/aztec.js/contracts';
|
|
7
7
|
import { AccountManager } from '@aztec/aztec.js/wallet';
|
|
8
|
+
import { DefaultEntrypoint } from '@aztec/entrypoints/default';
|
|
8
9
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
9
10
|
import { createPXE, getPXEConfig } from '@aztec/pxe/server';
|
|
10
11
|
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
@@ -42,19 +43,18 @@ export class CLIWallet extends BaseWallet {
|
|
|
42
43
|
const executionOptions = {
|
|
43
44
|
txNonce,
|
|
44
45
|
cancellable: this.cancellableTransactions,
|
|
46
|
+
// If from is an address, feeOptions include the way the account contract should handle the fee payment
|
|
45
47
|
feePaymentMethodOptions: feeOptions.accountFeePaymentMethodOptions
|
|
46
48
|
};
|
|
47
49
|
return await fromAccount.createTxExecutionRequest(feeExecutionPayload ?? executionPayload, feeOptions.gasSettings, chainInfo, executionOptions);
|
|
48
50
|
}
|
|
49
51
|
async proveCancellationTx(from, txNonce, increasedFee) {
|
|
50
52
|
const cancellationTxRequest = await this.createCancellationTxExecutionRequest(from, txNonce, increasedFee);
|
|
51
|
-
return await this.pxe.proveTx(cancellationTxRequest);
|
|
53
|
+
return await this.pxe.proveTx(cancellationTxRequest, this.scopesFrom(from));
|
|
52
54
|
}
|
|
53
55
|
async getAccountFromAddress(address) {
|
|
54
56
|
let account;
|
|
55
|
-
if (address.
|
|
56
|
-
account = new SignerlessAccount();
|
|
57
|
-
} else if (this.accountCache.has(address.toString())) {
|
|
57
|
+
if (this.accountCache.has(address.toString())) {
|
|
58
58
|
return this.accountCache.get(address.toString());
|
|
59
59
|
} else {
|
|
60
60
|
const accountManager = await this.createOrRetrieveAccount(address);
|
|
@@ -125,12 +125,6 @@ export class CLIWallet extends BaseWallet {
|
|
|
125
125
|
* @returns The stub account, contract instance, and artifact for simulation
|
|
126
126
|
*/ async getFakeAccountDataFor(address) {
|
|
127
127
|
const originalAccount = await this.getAccountFromAddress(address);
|
|
128
|
-
// Account contracts can only be overridden if they have an associated address
|
|
129
|
-
// Overwriting SignerlessAccount is not supported, and does not really make sense
|
|
130
|
-
// since it has no authorization mechanism.
|
|
131
|
-
if (originalAccount instanceof SignerlessAccount) {
|
|
132
|
-
throw new Error(`Cannot create fake account data for SignerlessAccount at address: ${address}`);
|
|
133
|
-
}
|
|
134
128
|
const originalAddress = originalAccount.getCompleteAddress();
|
|
135
129
|
const contractInstance = await this.pxe.getContractInstance(originalAddress.address);
|
|
136
130
|
if (!contractInstance) {
|
|
@@ -147,53 +141,55 @@ export class CLIWallet extends BaseWallet {
|
|
|
147
141
|
};
|
|
148
142
|
}
|
|
149
143
|
async simulateTx(executionPayload, opts) {
|
|
150
|
-
|
|
151
|
-
|
|
144
|
+
const simulationResults = await super.simulateTx(executionPayload, opts);
|
|
145
|
+
if (opts.fee?.estimateGas) {
|
|
146
|
+
const feeOptions = await this.completeFeeOptions(opts.from, executionPayload.feePayer, opts.fee?.gasSettings);
|
|
147
|
+
const limits = getGasLimits(simulationResults, opts.fee?.estimatedGasPadding);
|
|
148
|
+
printGasEstimates(feeOptions, limits, this.userLog);
|
|
149
|
+
}
|
|
150
|
+
return simulationResults;
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Uses a stub account for kernelless simulation, bypassing real account authorization.
|
|
154
|
+
* Uses DefaultEntrypoint directly for NO_FROM transactions.
|
|
155
|
+
*/ async simulateViaEntrypoint(executionPayload, opts) {
|
|
156
|
+
const { from, feeOptions, scopes } = opts;
|
|
152
157
|
const feeExecutionPayload = await feeOptions.walletFeePaymentMethod?.getExecutionPayload();
|
|
153
|
-
const chainInfo = await this.getChainInfo();
|
|
154
|
-
const executionOptions = {
|
|
155
|
-
txNonce: Fr.random(),
|
|
156
|
-
cancellable: this.cancellableTransactions,
|
|
157
|
-
feePaymentMethodOptions: feeOptions.accountFeePaymentMethodOptions
|
|
158
|
-
};
|
|
159
158
|
const finalExecutionPayload = feeExecutionPayload ? mergeExecutionPayloads([
|
|
160
159
|
feeExecutionPayload,
|
|
161
160
|
executionPayload
|
|
162
161
|
]) : executionPayload;
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
if (
|
|
167
|
-
const
|
|
168
|
-
|
|
169
|
-
simulationResults = await this.pxe.simulateTx(txRequest, {
|
|
170
|
-
simulatePublic: true,
|
|
171
|
-
skipTxValidation: opts?.skipTxValidation,
|
|
172
|
-
skipFeeEnforcement: opts?.skipFeeEnforcement ?? true
|
|
173
|
-
});
|
|
162
|
+
const chainInfo = await this.getChainInfo();
|
|
163
|
+
let overrides;
|
|
164
|
+
let txRequest;
|
|
165
|
+
if (from === NO_FROM) {
|
|
166
|
+
const entrypoint = new DefaultEntrypoint();
|
|
167
|
+
txRequest = await entrypoint.createTxExecutionRequest(finalExecutionPayload, feeOptions.gasSettings, chainInfo);
|
|
174
168
|
} else {
|
|
175
|
-
const { account
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
169
|
+
const { account, instance, artifact } = await this.getFakeAccountDataFor(from);
|
|
170
|
+
overrides = {
|
|
171
|
+
contracts: {
|
|
172
|
+
[from.toString()]: {
|
|
173
|
+
instance,
|
|
174
|
+
artifact
|
|
175
|
+
}
|
|
181
176
|
}
|
|
182
177
|
};
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
});
|
|
191
|
-
}
|
|
192
|
-
if (opts.fee?.estimateGas) {
|
|
193
|
-
const limits = getGasLimits(simulationResults, opts.fee?.estimatedGasPadding);
|
|
194
|
-
printGasEstimates(feeOptions, limits, this.userLog);
|
|
178
|
+
const executionOptions = {
|
|
179
|
+
txNonce: Fr.random(),
|
|
180
|
+
cancellable: this.cancellableTransactions,
|
|
181
|
+
// If from is an address, feeOptions include the way the account contract should handle the fee payment
|
|
182
|
+
feePaymentMethodOptions: feeOptions.accountFeePaymentMethodOptions
|
|
183
|
+
};
|
|
184
|
+
txRequest = await account.createTxExecutionRequest(finalExecutionPayload, feeOptions.gasSettings, chainInfo, executionOptions);
|
|
195
185
|
}
|
|
196
|
-
return
|
|
186
|
+
return this.pxe.simulateTx(txRequest, {
|
|
187
|
+
simulatePublic: true,
|
|
188
|
+
skipFeeEnforcement: true,
|
|
189
|
+
skipTxValidation: true,
|
|
190
|
+
overrides,
|
|
191
|
+
scopes
|
|
192
|
+
});
|
|
197
193
|
}
|
|
198
194
|
// Exposed because of the `aztec-wallet get-tx` command. It has been decided that it's fine to keep around because
|
|
199
195
|
// this is just a CLI wallet.
|
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.3f296a7d2",
|
|
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.3f296a7d2",
|
|
71
|
+
"@aztec/aztec.js": "0.0.1-commit.3f296a7d2",
|
|
72
|
+
"@aztec/bb.js": "0.0.1-commit.3f296a7d2",
|
|
73
|
+
"@aztec/cli": "0.0.1-commit.3f296a7d2",
|
|
74
|
+
"@aztec/entrypoints": "0.0.1-commit.3f296a7d2",
|
|
75
|
+
"@aztec/ethereum": "0.0.1-commit.3f296a7d2",
|
|
76
|
+
"@aztec/foundation": "0.0.1-commit.3f296a7d2",
|
|
77
|
+
"@aztec/kv-store": "0.0.1-commit.3f296a7d2",
|
|
78
|
+
"@aztec/noir-contracts.js": "0.0.1-commit.3f296a7d2",
|
|
79
|
+
"@aztec/noir-noirc_abi": "0.0.1-commit.3f296a7d2",
|
|
80
|
+
"@aztec/pxe": "0.0.1-commit.3f296a7d2",
|
|
81
|
+
"@aztec/stdlib": "0.0.1-commit.3f296a7d2",
|
|
82
|
+
"@aztec/wallet-sdk": "0.0.1-commit.3f296a7d2",
|
|
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,3 +1,4 @@
|
|
|
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
4
|
import type { AztecNode } from '@aztec/aztec.js/node';
|
|
@@ -72,7 +73,7 @@ export async function createAccount(
|
|
|
72
73
|
const { paymentMethod, gasSettings } = await feeOpts.toUserFeeOptions(aztecNode, wallet, address);
|
|
73
74
|
|
|
74
75
|
const delegatedDeployment = deployer && !account.address.equals(deployer);
|
|
75
|
-
const from = delegatedDeployment ? deployer :
|
|
76
|
+
const from = delegatedDeployment ? deployer : NO_FROM;
|
|
76
77
|
|
|
77
78
|
const deployAccountOpts: DeployAccountOptions = {
|
|
78
79
|
skipClassPublication: !registerClass,
|
|
@@ -83,10 +84,13 @@ export async function createAccount(
|
|
|
83
84
|
};
|
|
84
85
|
|
|
85
86
|
const deployMethod = await account.getDeployMethod();
|
|
86
|
-
const
|
|
87
|
+
const sim = await deployMethod.simulate({
|
|
87
88
|
...deployAccountOpts,
|
|
88
89
|
fee: { ...deployAccountOpts.fee, estimateGas: true },
|
|
89
90
|
});
|
|
91
|
+
// estimateGas: true guarantees these fields are present
|
|
92
|
+
const estimatedGas = sim.estimatedGas!;
|
|
93
|
+
const stats = sim.stats!;
|
|
90
94
|
|
|
91
95
|
if (feeOpts.estimateOnly) {
|
|
92
96
|
if (json) {
|
|
@@ -109,7 +113,7 @@ export async function createAccount(
|
|
|
109
113
|
if (!json) {
|
|
110
114
|
log(`\nWaiting for account contract deployment...`);
|
|
111
115
|
}
|
|
112
|
-
const
|
|
116
|
+
const sendOpts = {
|
|
113
117
|
...deployAccountOpts,
|
|
114
118
|
fee: deployAccountOpts.fee
|
|
115
119
|
? {
|
|
@@ -117,18 +121,20 @@ export async function createAccount(
|
|
|
117
121
|
gasSettings: estimatedGas,
|
|
118
122
|
}
|
|
119
123
|
: undefined,
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
124
|
+
};
|
|
125
|
+
if (wait) {
|
|
126
|
+
const { receipt } = await deployMethod.send({
|
|
127
|
+
...sendOpts,
|
|
128
|
+
wait: { timeout: DEFAULT_TX_TIMEOUT_S, returnReceipt: true },
|
|
129
|
+
});
|
|
130
|
+
txReceipt = receipt;
|
|
131
|
+
txHash = receipt.txHash;
|
|
126
132
|
out.txReceipt = {
|
|
127
133
|
status: txReceipt.status,
|
|
128
134
|
transactionFee: txReceipt.transactionFee,
|
|
129
135
|
};
|
|
130
136
|
} else {
|
|
131
|
-
txHash =
|
|
137
|
+
({ txHash } = await deployMethod.send({ ...sendOpts, wait: NO_WAIT }));
|
|
132
138
|
}
|
|
133
139
|
debugLogger.debug(`Account contract tx sent with hash ${txHash.toString()}`);
|
|
134
140
|
out.txHash = txHash;
|
package/src/cmds/deploy.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
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';
|
|
@@ -63,7 +64,7 @@ export async function deploy(
|
|
|
63
64
|
const { paymentMethod, gasSettings } = await feeOpts.toUserFeeOptions(node, wallet, deployer);
|
|
64
65
|
const deployOpts: DeployOptions = {
|
|
65
66
|
fee: { gasSettings, paymentMethod },
|
|
66
|
-
from: deployer ??
|
|
67
|
+
from: deployer ?? NO_FROM,
|
|
67
68
|
contractAddressSalt: salt,
|
|
68
69
|
universalDeploy: !deployer,
|
|
69
70
|
skipClassPublication,
|
|
@@ -71,10 +72,13 @@ export async function deploy(
|
|
|
71
72
|
skipInstancePublication,
|
|
72
73
|
};
|
|
73
74
|
|
|
74
|
-
const
|
|
75
|
+
const sim = await deploy.simulate({
|
|
75
76
|
...deployOpts,
|
|
76
77
|
fee: { ...deployOpts.fee, estimateGas: true },
|
|
77
78
|
});
|
|
79
|
+
// estimateGas: true guarantees these fields are present
|
|
80
|
+
const estimatedGas = sim.estimatedGas!;
|
|
81
|
+
const stats = sim.stats!;
|
|
78
82
|
|
|
79
83
|
if (feeOpts.estimateOnly) {
|
|
80
84
|
if (json) {
|
|
@@ -98,7 +102,7 @@ export async function deploy(
|
|
|
98
102
|
const instance = await deploy.getInstance();
|
|
99
103
|
|
|
100
104
|
if (wait) {
|
|
101
|
-
const receipt = await deploy.send({ ...deployOpts, wait: { timeout, returnReceipt: true } });
|
|
105
|
+
const { receipt } = await deploy.send({ ...deployOpts, wait: { timeout, returnReceipt: true } });
|
|
102
106
|
const txHash = receipt.txHash;
|
|
103
107
|
debugLogger.debug(`Deploy tx sent with hash ${txHash.toString()}`);
|
|
104
108
|
out.hash = txHash;
|
|
@@ -121,7 +125,7 @@ export async function deploy(
|
|
|
121
125
|
};
|
|
122
126
|
}
|
|
123
127
|
} else {
|
|
124
|
-
const txHash = await deploy.send({ ...deployOpts, wait: NO_WAIT });
|
|
128
|
+
const { txHash } = await deploy.send({ ...deployOpts, wait: NO_WAIT });
|
|
125
129
|
debugLogger.debug(`Deploy tx sent with hash ${txHash.toString()}`);
|
|
126
130
|
out.hash = txHash;
|
|
127
131
|
|
|
@@ -1,3 +1,4 @@
|
|
|
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
4
|
import type { AztecNode } from '@aztec/aztec.js/node';
|
|
@@ -52,7 +53,7 @@ export async function deployAccount(
|
|
|
52
53
|
const { paymentMethod, gasSettings } = await feeOpts.toUserFeeOptions(aztecNode, wallet, address);
|
|
53
54
|
|
|
54
55
|
const delegatedDeployment = deployer && !account.address.equals(deployer);
|
|
55
|
-
const from = delegatedDeployment ? deployer :
|
|
56
|
+
const from = delegatedDeployment ? deployer : NO_FROM;
|
|
56
57
|
|
|
57
58
|
const deployAccountOpts: DeployAccountOptions = {
|
|
58
59
|
skipClassPublication: !registerClass,
|
|
@@ -63,10 +64,13 @@ export async function deployAccount(
|
|
|
63
64
|
};
|
|
64
65
|
|
|
65
66
|
const deployMethod = await account.getDeployMethod();
|
|
66
|
-
const
|
|
67
|
+
const sim = await deployMethod.simulate({
|
|
67
68
|
...deployAccountOpts,
|
|
68
69
|
fee: { ...deployAccountOpts.fee, estimateGas: true },
|
|
69
70
|
});
|
|
71
|
+
// estimateGas: true guarantees these fields are present
|
|
72
|
+
const estimatedGas = sim.estimatedGas!;
|
|
73
|
+
const stats = sim.stats!;
|
|
70
74
|
|
|
71
75
|
if (feeOpts.estimateOnly) {
|
|
72
76
|
if (json) {
|
|
@@ -89,7 +93,7 @@ export async function deployAccount(
|
|
|
89
93
|
if (!json) {
|
|
90
94
|
log(`\nWaiting for account contract deployment...`);
|
|
91
95
|
}
|
|
92
|
-
const
|
|
96
|
+
const sendOpts = {
|
|
93
97
|
...deployAccountOpts,
|
|
94
98
|
fee: deployAccountOpts.fee
|
|
95
99
|
? {
|
|
@@ -97,18 +101,20 @@ export async function deployAccount(
|
|
|
97
101
|
gasSettings: estimatedGas,
|
|
98
102
|
}
|
|
99
103
|
: undefined,
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
104
|
+
};
|
|
105
|
+
if (wait) {
|
|
106
|
+
const { receipt } = await deployMethod.send({
|
|
107
|
+
...sendOpts,
|
|
108
|
+
wait: { timeout: DEFAULT_TX_TIMEOUT_S, returnReceipt: true },
|
|
109
|
+
});
|
|
110
|
+
txReceipt = receipt;
|
|
111
|
+
txHash = receipt.txHash;
|
|
106
112
|
out.txReceipt = {
|
|
107
113
|
status: txReceipt.status,
|
|
108
114
|
transactionFee: txReceipt.transactionFee,
|
|
109
115
|
};
|
|
110
116
|
} else {
|
|
111
|
-
txHash =
|
|
117
|
+
({ txHash } = await deployMethod.send({ ...sendOpts, wait: NO_WAIT }));
|
|
112
118
|
}
|
|
113
119
|
debugLogger.debug(`Account contract tx sent with hash ${txHash.toString()}`);
|
|
114
120
|
out.txHash = txHash;
|
package/src/cmds/index.ts
CHANGED
|
@@ -63,7 +63,7 @@ export function injectCommands(
|
|
|
63
63
|
const createAccountCommand = program
|
|
64
64
|
.command('create-account')
|
|
65
65
|
.description(
|
|
66
|
-
'Creates an aztec account that can be used for sending transactions. Registers the account on the PXE and deploys an account contract. Uses a Schnorr
|
|
66
|
+
'Creates an aztec account that can be used for sending transactions. Registers the account on the PXE and deploys an account contract. Uses a Schnorr account which uses an immutable key for authentication.',
|
|
67
67
|
)
|
|
68
68
|
.summary('Creates an aztec account that can be used for sending transactions.')
|
|
69
69
|
.addOption(createAccountOption('Alias or address of the account performing the deployment', !db, db))
|
package/src/cmds/send.ts
CHANGED
|
@@ -37,10 +37,13 @@ export async function send(
|
|
|
37
37
|
authWitnesses,
|
|
38
38
|
};
|
|
39
39
|
|
|
40
|
-
const
|
|
40
|
+
const sim = await call.simulate({
|
|
41
41
|
...sendOptions,
|
|
42
42
|
fee: { ...sendOptions.fee, estimateGas: true },
|
|
43
43
|
});
|
|
44
|
+
// estimateGas: true guarantees these fields are present
|
|
45
|
+
const estimatedGas = sim.estimatedGas!;
|
|
46
|
+
const stats = sim.stats!;
|
|
44
47
|
|
|
45
48
|
if (feeOpts.estimateOnly) {
|
|
46
49
|
return;
|
|
@@ -52,7 +55,7 @@ export async function send(
|
|
|
52
55
|
|
|
53
56
|
if (wait) {
|
|
54
57
|
try {
|
|
55
|
-
const receipt = await call.send({
|
|
58
|
+
const { receipt } = await call.send({
|
|
56
59
|
...sendOptions,
|
|
57
60
|
fee: { ...sendOptions.fee, gasSettings: estimatedGas },
|
|
58
61
|
wait: { timeout: DEFAULT_TX_TIMEOUT_S },
|
|
@@ -74,7 +77,7 @@ export async function send(
|
|
|
74
77
|
throw err;
|
|
75
78
|
}
|
|
76
79
|
} else {
|
|
77
|
-
const txHash = await call.send({
|
|
80
|
+
const { txHash } = await call.send({
|
|
78
81
|
...sendOptions,
|
|
79
82
|
fee: { ...sendOptions.fee, gasSettings: estimatedGas },
|
|
80
83
|
wait: NO_WAIT,
|
package/src/cmds/simulate.ts
CHANGED
|
@@ -38,7 +38,7 @@ export async function simulate(
|
|
|
38
38
|
});
|
|
39
39
|
if (verbose) {
|
|
40
40
|
await printAuthorizations(
|
|
41
|
-
simulationResult.offchainEffects
|
|
41
|
+
simulationResult.offchainEffects,
|
|
42
42
|
async (address: AztecAddress) => {
|
|
43
43
|
const metadata = await wallet.getContractMetadata(address);
|
|
44
44
|
if (!metadata.instance) {
|
|
@@ -171,6 +171,9 @@ export function parsePaymentMethod(
|
|
|
171
171
|
case 'fpc-public': {
|
|
172
172
|
const fpc = getFpc();
|
|
173
173
|
const asset = getAsset();
|
|
174
|
+
log(
|
|
175
|
+
`WARNING: fpc-public is deprecated and will not work on mainnet alpha. Use fee_juice or fpc-sponsored instead.`,
|
|
176
|
+
);
|
|
174
177
|
log(`Using public fee payment with asset ${asset} via paymaster ${fpc}`);
|
|
175
178
|
const { PublicFeePaymentMethod } = await import('@aztec/aztec.js/fee');
|
|
176
179
|
return new PublicFeePaymentMethod(fpc, from, wallet, gasSettings);
|
|
@@ -178,6 +181,9 @@ export function parsePaymentMethod(
|
|
|
178
181
|
case 'fpc-private': {
|
|
179
182
|
const fpc = getFpc();
|
|
180
183
|
const asset = getAsset();
|
|
184
|
+
log(
|
|
185
|
+
`WARNING: fpc-private is deprecated and will not work on mainnet alpha. Use fee_juice or fpc-sponsored instead.`,
|
|
186
|
+
);
|
|
181
187
|
log(`Using private fee payment with asset ${asset} via paymaster ${fpc}`);
|
|
182
188
|
const { PrivateFeePaymentMethod } = await import('@aztec/aztec.js/fee');
|
|
183
189
|
return new PrivateFeePaymentMethod(fpc, from, wallet, gasSettings);
|