@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.
@@ -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 { SignerlessAccount } from '@aztec/aztec.js/account';
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.equals(AztecAddress.ZERO)) {
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
- let simulationResults;
151
- const feeOptions = opts.fee?.estimateGas ? await this.completeFeeOptionsForEstimation(opts.from, executionPayload.feePayer, opts.fee?.gasSettings) : await this.completeFeeOptions(opts.from, executionPayload.feePayer, opts.fee?.gasSettings);
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
- // Kernelless simulations using the multicall entrypoints are not currently supported,
164
- // since we only override proper account contracts.
165
- // TODO: allow disabling kernels even when no overrides are necessary
166
- if (opts.from.equals(AztecAddress.ZERO)) {
167
- const fromAccount = await this.getAccountFromAddress(opts.from);
168
- const txRequest = await fromAccount.createTxExecutionRequest(finalExecutionPayload, feeOptions.gasSettings, chainInfo, executionOptions);
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: fromAccount, instance, artifact } = await this.getFakeAccountDataFor(opts.from);
176
- const txRequest = await fromAccount.createTxExecutionRequest(finalExecutionPayload, feeOptions.gasSettings, chainInfo, executionOptions);
177
- const contractOverrides = {
178
- [opts.from.toString()]: {
179
- instance,
180
- artifact
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
- simulationResults = await this.pxe.simulateTx(txRequest, {
184
- simulatePublic: true,
185
- skipTxValidation: true,
186
- skipFeeEnforcement: true,
187
- overrides: {
188
- contracts: contractOverrides
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 simulationResults;
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.3d8f95d",
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.3d8f95d",
71
- "@aztec/aztec.js": "0.0.1-commit.3d8f95d",
72
- "@aztec/bb.js": "0.0.1-commit.3d8f95d",
73
- "@aztec/cli": "0.0.1-commit.3d8f95d",
74
- "@aztec/entrypoints": "0.0.1-commit.3d8f95d",
75
- "@aztec/ethereum": "0.0.1-commit.3d8f95d",
76
- "@aztec/foundation": "0.0.1-commit.3d8f95d",
77
- "@aztec/kv-store": "0.0.1-commit.3d8f95d",
78
- "@aztec/noir-contracts.js": "0.0.1-commit.3d8f95d",
79
- "@aztec/noir-noirc_abi": "0.0.1-commit.3d8f95d",
80
- "@aztec/pxe": "0.0.1-commit.3d8f95d",
81
- "@aztec/stdlib": "0.0.1-commit.3d8f95d",
82
- "@aztec/wallet-sdk": "0.0.1-commit.3d8f95d",
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",
@@ -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 { siloNullifier } from '@aztec/stdlib/hash';
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
- const deployerAddress = ProtocolContractAddress.ContractInstanceRegistry;
148
- const classRegistryAddress = ProtocolContractAddress.ContractClassRegistry;
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
- for (const contract of knownContracts) {
153
- initNullifiers[(await siloNullifier(contract, contract.toField())).toString()] = contract;
154
- deployNullifiers[(await siloNullifier(deployerAddress, contract.toField())).toString()] = contract;
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 artifact of Object.values(artifactMap)) {
157
- classNullifiers[(await siloNullifier(classRegistryAddress, artifact.classId)).toString()] =
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 : AztecAddress.ZERO;
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 { estimatedGas, stats } = await deployMethod.simulate({
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 result = await deployMethod.send({
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
- wait: wait ? { timeout: DEFAULT_TX_TIMEOUT_S, returnReceipt: true } : NO_WAIT,
121
- });
122
- const isReceipt = (data: TxReceipt | TxHash): data is TxReceipt => 'txHash' in data;
123
- if (isReceipt(result)) {
124
- txReceipt = result;
125
- txHash = result.txHash;
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 = result;
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;
@@ -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 ?? AztecAddress.ZERO,
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 { estimatedGas, stats } = await deploy.simulate({
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 : AztecAddress.ZERO;
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 { estimatedGas, stats } = await deployMethod.simulate({
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 result = await deployMethod.send({
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
- wait: wait ? { timeout: DEFAULT_TX_TIMEOUT_S, returnReceipt: true } : NO_WAIT,
101
- });
102
- const isReceipt = (data: TxReceipt | TxHash): data is TxReceipt => 'txHash' in data;
103
- if (isReceipt(result)) {
104
- txReceipt = result;
105
- txHash = result.txHash;
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 = result;
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 single-key account which uses the same key for encryption and authentication (not secure for production usage).',
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 { estimatedGas, stats } = await call.simulate({
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,
@@ -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);