@aztec/cli-wallet 0.0.1-commit.a072138 → 0.0.1-commit.a4600f49
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/check_tx.d.ts +1 -1
- package/dest/cmds/check_tx.d.ts.map +1 -1
- package/dest/cmds/check_tx.js +50 -21
- 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 +36 -26
- package/dest/cmds/deploy.d.ts +5 -4
- package/dest/cmds/deploy.d.ts.map +1 -1
- package/dest/cmds/deploy.js +44 -38
- 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 +28 -20
- 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 +1 -1
- package/dest/cmds/index.d.ts +1 -1
- package/dest/cmds/index.d.ts.map +1 -1
- package/dest/cmds/index.js +31 -15
- package/dest/cmds/send.d.ts +4 -3
- package/dest/cmds/send.d.ts.map +1 -1
- package/dest/cmds/send.js +28 -27
- 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 +7 -2
- package/dest/storage/wallet_db.d.ts.map +1 -1
- package/dest/storage/wallet_db.js +14 -0
- 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/wallet.d.ts +24 -6
- package/dest/utils/wallet.d.ts.map +1 -1
- package/dest/utils/wallet.js +135 -60
- package/package.json +16 -15
- package/src/bin/index.ts +1 -1
- package/src/cmds/check_tx.ts +57 -24
- package/src/cmds/create_account.ts +36 -20
- package/src/cmds/deploy.ts +41 -33
- package/src/cmds/deploy_account.ts +27 -14
- package/src/cmds/get_fee_juice_balance.ts +37 -0
- package/src/cmds/import_test_accounts.ts +5 -1
- package/src/cmds/index.ts +60 -6
- package/src/cmds/send.ts +25 -17
- package/src/cmds/simulate.ts +3 -2
- package/src/storage/wallet_db.ts +14 -0
- package/src/utils/constants.ts +7 -1
- package/src/utils/options/fees.ts +42 -10
- package/src/utils/wallet.ts +148 -76
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
2
2
|
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
3
|
-
import { Gas, GasFees, GasSettings } from '@aztec/stdlib/gas';
|
|
3
|
+
import { Gas, GasFees, GasSettings, ManaUsageEstimate } from '@aztec/stdlib/gas';
|
|
4
4
|
import { Option } from 'commander';
|
|
5
5
|
import { MIN_FEE_PADDING } from '../constants.js';
|
|
6
6
|
import { aliasedAddressParser } from './options.js';
|
|
@@ -70,7 +70,7 @@ function parseGasSettings(args) {
|
|
|
70
70
|
maxPriorityFeesPerGas
|
|
71
71
|
};
|
|
72
72
|
}
|
|
73
|
-
export function parsePaymentMethod(payment, log, db) {
|
|
73
|
+
export function parsePaymentMethod(payment, log, db, estimateOnly) {
|
|
74
74
|
const parsed = payment.split(',').reduce((acc, item)=>{
|
|
75
75
|
const [dimension, value] = item.split('=');
|
|
76
76
|
acc[dimension] = value ?? 1;
|
|
@@ -86,7 +86,7 @@ export function parsePaymentMethod(payment, log, db) {
|
|
|
86
86
|
if (!parsed.asset) {
|
|
87
87
|
throw new Error('Missing "asset" in payment option');
|
|
88
88
|
}
|
|
89
|
-
return AztecAddress.
|
|
89
|
+
return AztecAddress.fromStringUnsafe(parsed.asset);
|
|
90
90
|
};
|
|
91
91
|
return async (wallet, from, gasSettings)=>{
|
|
92
92
|
switch(parsed.method){
|
|
@@ -95,15 +95,15 @@ export function parsePaymentMethod(payment, log, db) {
|
|
|
95
95
|
if (parsed.claim || parsed.claimSecret && parsed.claimAmount && parsed.messageLeafIndex) {
|
|
96
96
|
let claimAmount, claimSecret, messageLeafIndex;
|
|
97
97
|
if (parsed.claim && db) {
|
|
98
|
-
({ amount: claimAmount, secret: claimSecret, leafIndex: messageLeafIndex } = await db.popBridgedFeeJuice(from, log));
|
|
98
|
+
({ amount: claimAmount, secret: claimSecret, leafIndex: messageLeafIndex } = estimateOnly ? await db.peekBridgedFeeJuice(from, log) : await db.popBridgedFeeJuice(from, log));
|
|
99
99
|
} else {
|
|
100
100
|
({ claimAmount, claimSecret, messageLeafIndex } = parsed);
|
|
101
101
|
}
|
|
102
102
|
log(`Using Fee Juice for fee payments with claim for ${claimAmount} tokens`);
|
|
103
103
|
const { FeeJuicePaymentMethodWithClaim } = await import('@aztec/aztec.js/fee');
|
|
104
104
|
return new FeeJuicePaymentMethodWithClaim(from, {
|
|
105
|
-
claimAmount: (typeof claimAmount === 'string' ? Fr.
|
|
106
|
-
claimSecret: Fr.
|
|
105
|
+
claimAmount: (typeof claimAmount === 'string' ? Fr.fromString(claimAmount) : new Fr(claimAmount)).toBigInt(),
|
|
106
|
+
claimSecret: typeof claimSecret === 'string' ? Fr.fromString(claimSecret) : claimSecret,
|
|
107
107
|
messageLeafIndex: BigInt(messageLeafIndex)
|
|
108
108
|
});
|
|
109
109
|
} else {
|
|
@@ -115,6 +115,7 @@ export function parsePaymentMethod(payment, log, db) {
|
|
|
115
115
|
{
|
|
116
116
|
const fpc = getFpc();
|
|
117
117
|
const asset = getAsset();
|
|
118
|
+
log(`WARNING: fpc-public is deprecated and will not work on mainnet alpha. Use fee_juice or fpc-sponsored instead.`);
|
|
118
119
|
log(`Using public fee payment with asset ${asset} via paymaster ${fpc}`);
|
|
119
120
|
const { PublicFeePaymentMethod } = await import('@aztec/aztec.js/fee');
|
|
120
121
|
return new PublicFeePaymentMethod(fpc, from, wallet, gasSettings);
|
|
@@ -123,6 +124,7 @@ export function parsePaymentMethod(payment, log, db) {
|
|
|
123
124
|
{
|
|
124
125
|
const fpc = getFpc();
|
|
125
126
|
const asset = getAsset();
|
|
127
|
+
log(`WARNING: fpc-private is deprecated and will not work on mainnet alpha. Use fee_juice or fpc-sponsored instead.`);
|
|
126
128
|
log(`Using private fee payment with asset ${asset} via paymaster ${fpc}`);
|
|
127
129
|
const { PrivateFeePaymentMethod } = await import('@aztec/aztec.js/fee');
|
|
128
130
|
return new PrivateFeePaymentMethod(fpc, from, wallet, gasSettings);
|
|
@@ -190,9 +192,13 @@ export class CLIFeeArgs {
|
|
|
190
192
|
this.gasSettings = gasSettings;
|
|
191
193
|
}
|
|
192
194
|
async toUserFeeOptions(node, wallet, from) {
|
|
193
|
-
const
|
|
194
|
-
const
|
|
195
|
+
const minFees = await this.getMinFees(node);
|
|
196
|
+
const maxFeesPerGas = minFees.mul(1 + MIN_FEE_PADDING);
|
|
197
|
+
const { txsLimits } = await node.getNodeInfo();
|
|
198
|
+
const gasLimits = this.gasSettings.gasLimits ?? Gas.from(txsLimits.gas);
|
|
199
|
+
const gasSettings = GasSettings.fallback({
|
|
195
200
|
...this.gasSettings,
|
|
201
|
+
gasLimits,
|
|
196
202
|
maxFeesPerGas
|
|
197
203
|
});
|
|
198
204
|
const paymentMethod = await this.paymentMethod(wallet, from, gasSettings);
|
|
@@ -201,8 +207,28 @@ export class CLIFeeArgs {
|
|
|
201
207
|
gasSettings
|
|
202
208
|
};
|
|
203
209
|
}
|
|
210
|
+
/**
|
|
211
|
+
* Returns the worst-case min fee across predicted future slots.
|
|
212
|
+
* Falls back to getCurrentMinFees if the node doesn't support getPredictedMinFees.
|
|
213
|
+
*/ async getMinFees(node) {
|
|
214
|
+
try {
|
|
215
|
+
const predicted = await node.getPredictedMinFees(ManaUsageEstimate.Limit);
|
|
216
|
+
if (predicted.length === 0) {
|
|
217
|
+
return node.getCurrentMinFees();
|
|
218
|
+
}
|
|
219
|
+
return predicted.reduce((worst, fees)=>fees.feePerL2Gas > worst.feePerL2Gas ? fees : worst);
|
|
220
|
+
} catch (err) {
|
|
221
|
+
// Fallback for old nodes that don't support getPredictedMinFees.
|
|
222
|
+
// Only fall back on method-not-found errors (JSON-RPC code -32601); rethrow others.
|
|
223
|
+
if (err?.cause?.code === -32601 || err?.message?.includes('Method not found')) {
|
|
224
|
+
return node.getCurrentMinFees();
|
|
225
|
+
}
|
|
226
|
+
throw err;
|
|
227
|
+
}
|
|
228
|
+
}
|
|
204
229
|
static parse(args, log, db) {
|
|
205
|
-
|
|
230
|
+
const estimateOnly = !!args.estimateGasOnly;
|
|
231
|
+
return new CLIFeeArgs(estimateOnly, parsePaymentMethod(args.payment ?? 'method=fee_juice', log, db, estimateOnly), parseGasSettings(args));
|
|
206
232
|
}
|
|
207
233
|
static getOptions() {
|
|
208
234
|
return getFeeOptions();
|
|
@@ -217,7 +243,7 @@ function formatGasEstimate(estimate) {
|
|
|
217
243
|
return `da=${estimate.gasLimits.daGas},l2=${estimate.gasLimits.l2Gas},teardownDA=${estimate.teardownGasLimits.daGas},teardownL2=${estimate.teardownGasLimits.l2Gas}`;
|
|
218
244
|
}
|
|
219
245
|
function getEstimatedCost(estimate, maxFeesPerGas) {
|
|
220
|
-
return GasSettings.
|
|
246
|
+
return GasSettings.fallback({
|
|
221
247
|
...estimate,
|
|
222
248
|
maxFeesPerGas
|
|
223
249
|
}).getFeeLimit().toBigInt();
|
package/dest/utils/wallet.d.ts
CHANGED
|
@@ -1,35 +1,53 @@
|
|
|
1
1
|
import { type Account } from '@aztec/aztec.js/account';
|
|
2
2
|
import { type InteractionFeeOptions } from '@aztec/aztec.js/contracts';
|
|
3
3
|
import type { AztecNode } from '@aztec/aztec.js/node';
|
|
4
|
-
import { AccountManager, type Aliased
|
|
4
|
+
import { AccountManager, type Aliased } from '@aztec/aztec.js/wallet';
|
|
5
|
+
import { TxSimulationResultWithAppOffset } from '@aztec/aztec.js/wallet';
|
|
5
6
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
6
7
|
import type { LogFn } from '@aztec/foundation/log';
|
|
8
|
+
import type { NotesFilter } from '@aztec/pxe/client/lazy';
|
|
7
9
|
import type { PXEConfig } from '@aztec/pxe/config';
|
|
8
10
|
import type { PXE } from '@aztec/pxe/server';
|
|
9
11
|
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
12
|
+
import type { Gas, GasUsed } from '@aztec/stdlib/gas';
|
|
10
13
|
import { NoteDao } from '@aztec/stdlib/note';
|
|
11
|
-
import type {
|
|
12
|
-
import type { TxProvingResult, TxSimulationResult } from '@aztec/stdlib/tx';
|
|
14
|
+
import type { TxProvingResult } from '@aztec/stdlib/tx';
|
|
13
15
|
import { ExecutionPayload } from '@aztec/stdlib/tx';
|
|
14
|
-
import { BaseWallet } from '@aztec/wallet-sdk/base-wallet';
|
|
16
|
+
import { BaseWallet, type SimulateViaEntrypointOptions } from '@aztec/wallet-sdk/base-wallet';
|
|
15
17
|
import type { WalletDB } from '../storage/wallet_db.js';
|
|
16
18
|
import type { AccountType } from './constants.js';
|
|
17
19
|
export declare class CLIWallet extends BaseWallet {
|
|
18
20
|
private userLog;
|
|
19
21
|
private db?;
|
|
20
22
|
private accountCache;
|
|
23
|
+
private stubClassIds;
|
|
21
24
|
constructor(pxe: PXE, node: AztecNode, userLog: LogFn, db?: WalletDB | undefined);
|
|
22
25
|
static create(node: AztecNode, log: LogFn, db?: WalletDB, overridePXEConfig?: Partial<PXEConfig>): Promise<CLIWallet>;
|
|
26
|
+
private registerAuthRegistry;
|
|
27
|
+
private initStubClasses;
|
|
23
28
|
getAccounts(): Promise<Aliased<AztecAddress>[]>;
|
|
29
|
+
/**
|
|
30
|
+
* Derives suggested total and teardown gas limits from simulated gas usage, padded and clamped to the
|
|
31
|
+
* network's per-tx admission limits.
|
|
32
|
+
* @param gasUsed - The gas consumed during simulation (from a `simulate({ includeMetadata: true })` result).
|
|
33
|
+
*/
|
|
34
|
+
estimateGasLimits(gasUsed: GasUsed): Promise<{
|
|
35
|
+
gasLimits: Gas;
|
|
36
|
+
teardownGasLimits: Gas;
|
|
37
|
+
}>;
|
|
24
38
|
private createCancellationTxExecutionRequest;
|
|
25
39
|
proveCancellationTx(from: AztecAddress, txNonce: Fr, increasedFee: InteractionFeeOptions): Promise<TxProvingResult>;
|
|
26
40
|
getAccountFromAddress(address: AztecAddress): Promise<Account>;
|
|
27
41
|
private createAccount;
|
|
28
42
|
createOrRetrieveAccount(address?: AztecAddress, secretKey?: Fr, type?: AccountType, salt?: Fr, publicKey?: string): Promise<AccountManager>;
|
|
29
43
|
private getFakeAccountDataFor;
|
|
30
|
-
|
|
44
|
+
/**
|
|
45
|
+
* Uses a stub account for kernelless simulation, bypassing real account authorization.
|
|
46
|
+
* Uses DefaultEntrypoint directly for NO_FROM transactions.
|
|
47
|
+
*/
|
|
48
|
+
protected simulateViaEntrypoint(executionPayload: ExecutionPayload, opts: SimulateViaEntrypointOptions): Promise<TxSimulationResultWithAppOffset>;
|
|
31
49
|
getContracts(): Promise<AztecAddress[]>;
|
|
32
50
|
getNotes(filter: NotesFilter): Promise<NoteDao[]>;
|
|
33
51
|
getContractArtifact(id: Fr): Promise<import("@aztec/stdlib/abi").ContractArtifact | undefined>;
|
|
34
52
|
}
|
|
35
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
53
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2FsbGV0LmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvd2FsbGV0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUtBLE9BQU8sRUFBRSxLQUFLLE9BQU8sRUFBaUMsTUFBTSx5QkFBeUIsQ0FBQztBQUN0RixPQUFPLEVBRUwsS0FBSyxxQkFBcUIsRUFFM0IsTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsY0FBYyxFQUFFLEtBQUssT0FBTyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdEUsT0FBTyxFQUFFLCtCQUErQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFHekUsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3BELE9BQU8sS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ25ELE9BQU8sS0FBSyxFQUFFLFdBQVcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzFELE9BQU8sS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ25ELE9BQU8sS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRzdDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMzRCxPQUFPLEtBQUssRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFdEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzdDLE9BQU8sS0FBSyxFQUEyQyxlQUFlLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRyxPQUFPLEVBQUUsZ0JBQWdCLEVBQTBCLE1BQU0sa0JBQWtCLENBQUM7QUFDNUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxLQUFLLDRCQUE0QixFQUFnQixNQUFNLCtCQUErQixDQUFDO0FBRTVHLE9BQU8sS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3hELE9BQU8sS0FBSyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBTWxELHFCQUFhLFNBQVUsU0FBUSxVQUFVO0lBU3JDLE9BQU8sQ0FBQyxPQUFPO0lBQ2YsT0FBTyxDQUFDLEVBQUUsQ0FBQztJQVRiLE9BQU8sQ0FBQyxZQUFZLENBQThCO0lBR2xELE9BQU8sQ0FBQyxZQUFZLENBQThCO0lBRWxELFlBQ0UsR0FBRyxFQUFFLEdBQUcsRUFDUixJQUFJLEVBQUUsU0FBUyxFQUNQLE9BQU8sRUFBRSxLQUFLLEVBQ2QsRUFBRSxDQUFDLHNCQUFVLEVBSXRCO0lBRUQsT0FBYSxNQUFNLENBQ2pCLElBQUksRUFBRSxTQUFTLEVBQ2YsR0FBRyxFQUFFLEtBQUssRUFDVixFQUFFLENBQUMsRUFBRSxRQUFRLEVBQ2IsaUJBQWlCLENBQUMsRUFBRSxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQ3JDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FPcEI7WUFFYSxvQkFBb0I7WUFVcEIsZUFBZTtJQWVkLFdBQVcsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FRN0Q7SUFFRDs7OztPQUlHO0lBQ0csaUJBQWlCLENBQUMsT0FBTyxFQUFFLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFBRSxTQUFTLEVBQUUsR0FBRyxDQUFDO1FBQUMsaUJBQWlCLEVBQUUsR0FBRyxDQUFBO0tBQUUsQ0FBQyxDQUc3RjtZQUVhLG9DQUFvQztJQTRCNUMsbUJBQW1CLENBQ3ZCLElBQUksRUFBRSxZQUFZLEVBQ2xCLE9BQU8sRUFBRSxFQUFFLEVBQ1gsWUFBWSxFQUFFLHFCQUFxQixHQUNsQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBRzFCO0lBRWMscUJBQXFCLENBQUMsT0FBTyxFQUFFLFlBQVksb0JBYXpEO1lBRWEsYUFBYTtJQXlCckIsdUJBQXVCLENBQzNCLE9BQU8sQ0FBQyxFQUFFLFlBQVksRUFDdEIsU0FBUyxDQUFDLEVBQUUsRUFBRSxFQUNkLElBQUksR0FBRSxXQUF1QixFQUM3QixJQUFJLENBQUMsRUFBRSxFQUFFLEVBQ1QsU0FBUyxDQUFDLEVBQUUsTUFBTSxHQUNqQixPQUFPLENBQUMsY0FBYyxDQUFDLENBMkR6QjtZQVFhLHFCQUFxQjtJQXNCbkM7OztPQUdHO0lBQ0gsVUFBeUIscUJBQXFCLENBQzVDLGdCQUFnQixFQUFFLGdCQUFnQixFQUNsQyxJQUFJLEVBQUUsNEJBQTRCLEdBQ2pDLE9BQU8sQ0FBQywrQkFBK0IsQ0FBQyxDQTJDMUM7SUFJRCxZQUFZLElBQUksT0FBTyxDQUFDLFlBQVksRUFBRSxDQUFDLENBRXRDO0lBSUQsUUFBUSxDQUFDLE1BQU0sRUFBRSxXQUFXLEdBQUcsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBRWhEO0lBSUQsbUJBQW1CLENBQUMsRUFBRSxFQUFFLEVBQUUscUVBRXpCO0NBQ0YifQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wallet.d.ts","sourceRoot":"","sources":["../../src/utils/wallet.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"wallet.d.ts","sourceRoot":"","sources":["../../src/utils/wallet.ts"],"names":[],"mappings":"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"}
|
package/dest/utils/wallet.js
CHANGED
|
@@ -1,60 +1,107 @@
|
|
|
1
1
|
import { EcdsaRAccountContract, EcdsaRSSHAccountContract } from '@aztec/accounts/ecdsa';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { StubEcdsaAccountContractArtifact, createStubEcdsaAccount } from '@aztec/accounts/ecdsa/stub';
|
|
3
|
+
import { SchnorrAccountContract, SchnorrInitializerlessAccountContract } from '@aztec/accounts/schnorr';
|
|
4
|
+
import { StubSchnorrAccountContractArtifact, createStubSchnorrAccount } from '@aztec/accounts/schnorr/stub';
|
|
4
5
|
import { getIdentities } from '@aztec/accounts/utils';
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
6
|
+
import { NO_FROM } from '@aztec/aztec.js/account';
|
|
7
|
+
import { ContractFunctionInteraction, getContractClassFromArtifact } from '@aztec/aztec.js/contracts';
|
|
7
8
|
import { AccountManager } from '@aztec/aztec.js/wallet';
|
|
9
|
+
import { TxSimulationResultWithAppOffset } from '@aztec/aztec.js/wallet';
|
|
10
|
+
import { DefaultEntrypoint } from '@aztec/entrypoints/default';
|
|
8
11
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
9
12
|
import { createPXE, getPXEConfig } from '@aztec/pxe/server';
|
|
13
|
+
import { getStandardAuthRegistry } from '@aztec/standard-contracts/auth-registry';
|
|
10
14
|
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
11
15
|
import { deriveSigningKey } from '@aztec/stdlib/keys';
|
|
12
16
|
import { ExecutionPayload, mergeExecutionPayloads } from '@aztec/stdlib/tx';
|
|
13
|
-
import { BaseWallet } from '@aztec/wallet-sdk/base-wallet';
|
|
17
|
+
import { BaseWallet, getGasLimits } from '@aztec/wallet-sdk/base-wallet';
|
|
14
18
|
import { extractECDSAPublicKeyFromBase64String } from './ecdsa.js';
|
|
15
|
-
|
|
19
|
+
/** Padding the CLI wallet applies to simulated gas usage when deriving declared gas limits. */ const DEFAULT_ESTIMATED_GAS_PADDING = 0.1;
|
|
16
20
|
export class CLIWallet extends BaseWallet {
|
|
17
21
|
userLog;
|
|
18
22
|
db;
|
|
19
23
|
accountCache;
|
|
24
|
+
// Stub class ids, populated on wallet startup
|
|
25
|
+
// to avoid redundant work per simulation
|
|
26
|
+
stubClassIds;
|
|
20
27
|
constructor(pxe, node, userLog, db){
|
|
21
|
-
super(pxe, node), this.userLog = userLog, this.db = db, this.accountCache = new Map();
|
|
28
|
+
super(pxe, node), this.userLog = userLog, this.db = db, this.accountCache = new Map(), this.stubClassIds = new Map();
|
|
22
29
|
this.cancellableTransactions = true;
|
|
23
30
|
}
|
|
24
31
|
static async create(node, log, db, overridePXEConfig) {
|
|
25
32
|
const pxeConfig = Object.assign(getPXEConfig(), overridePXEConfig);
|
|
26
33
|
const pxe = await createPXE(node, pxeConfig);
|
|
27
|
-
|
|
34
|
+
const wallet = new CLIWallet(pxe, node, log, db);
|
|
35
|
+
await wallet.initStubClasses();
|
|
36
|
+
await wallet.registerAuthRegistry();
|
|
37
|
+
return wallet;
|
|
38
|
+
}
|
|
39
|
+
async registerAuthRegistry() {
|
|
40
|
+
const { instance, artifact } = await getStandardAuthRegistry();
|
|
41
|
+
await this.pxe.registerContractClass(artifact);
|
|
42
|
+
await this.pxe.registerContract(instance);
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Hashes and registers the stub class for every supported account type with PXE, populating
|
|
46
|
+
* stubClassIds. Called on wallet initialization.
|
|
47
|
+
*/ async initStubClasses() {
|
|
48
|
+
const { id: schnorrClassId } = await getContractClassFromArtifact(StubSchnorrAccountContractArtifact);
|
|
49
|
+
await this.pxe.registerContractClass(StubSchnorrAccountContractArtifact);
|
|
50
|
+
// ecdsa stubs share the same class id
|
|
51
|
+
const { id: ecdsaClassId } = await getContractClassFromArtifact(StubEcdsaAccountContractArtifact);
|
|
52
|
+
await this.pxe.registerContractClass(StubEcdsaAccountContractArtifact);
|
|
53
|
+
this.stubClassIds.set('schnorr', schnorrClassId);
|
|
54
|
+
this.stubClassIds.set('schnorr_initializerless', schnorrClassId);
|
|
55
|
+
this.stubClassIds.set('ecdsasecp256k1', ecdsaClassId);
|
|
56
|
+
this.stubClassIds.set('ecdsasecp256r1', ecdsaClassId);
|
|
57
|
+
this.stubClassIds.set('ecdsasecp256r1ssh', ecdsaClassId);
|
|
28
58
|
}
|
|
29
59
|
async getAccounts() {
|
|
30
60
|
const accounts = await this.db?.listAliases('accounts') ?? [];
|
|
31
|
-
return Promise.resolve(accounts.map(({ key, value })=>
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
61
|
+
return Promise.resolve(accounts.map(({ key, value })=>{
|
|
62
|
+
const alias = key.includes(':') ? key.slice(key.indexOf(':') + 1) : key;
|
|
63
|
+
return {
|
|
64
|
+
alias,
|
|
65
|
+
item: AztecAddress.fromStringUnsafe(value)
|
|
66
|
+
};
|
|
67
|
+
}));
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Derives suggested total and teardown gas limits from simulated gas usage, padded and clamped to the
|
|
71
|
+
* network's per-tx admission limits.
|
|
72
|
+
* @param gasUsed - The gas consumed during simulation (from a `simulate({ includeMetadata: true })` result).
|
|
73
|
+
*/ async estimateGasLimits(gasUsed) {
|
|
74
|
+
const maxTxGasLimits = await this.getMaxTxGasLimits();
|
|
75
|
+
return getGasLimits(gasUsed, maxTxGasLimits, DEFAULT_ESTIMATED_GAS_PADDING);
|
|
35
76
|
}
|
|
36
77
|
async createCancellationTxExecutionRequest(from, txNonce, increasedFee) {
|
|
37
78
|
const executionPayload = ExecutionPayload.empty();
|
|
38
|
-
const feeOptions = await this.completeFeeOptions(
|
|
79
|
+
const feeOptions = await this.completeFeeOptions({
|
|
80
|
+
from,
|
|
81
|
+
feePayer: executionPayload.feePayer,
|
|
82
|
+
gasSettings: increasedFee.gasSettings
|
|
83
|
+
});
|
|
39
84
|
const feeExecutionPayload = await feeOptions.walletFeePaymentMethod?.getExecutionPayload();
|
|
40
85
|
const fromAccount = await this.getAccountFromAddress(from);
|
|
41
86
|
const chainInfo = await this.getChainInfo();
|
|
42
87
|
const executionOptions = {
|
|
43
88
|
txNonce,
|
|
44
89
|
cancellable: this.cancellableTransactions,
|
|
90
|
+
// If from is an address, feeOptions include the way the account contract should handle the fee payment
|
|
45
91
|
feePaymentMethodOptions: feeOptions.accountFeePaymentMethodOptions
|
|
46
92
|
};
|
|
47
93
|
return await fromAccount.createTxExecutionRequest(feeExecutionPayload ?? executionPayload, feeOptions.gasSettings, chainInfo, executionOptions);
|
|
48
94
|
}
|
|
49
95
|
async proveCancellationTx(from, txNonce, increasedFee) {
|
|
50
96
|
const cancellationTxRequest = await this.createCancellationTxExecutionRequest(from, txNonce, increasedFee);
|
|
51
|
-
return await this.pxe.proveTx(cancellationTxRequest
|
|
97
|
+
return await this.pxe.proveTx(cancellationTxRequest, {
|
|
98
|
+
scopes: this.scopesFrom(from),
|
|
99
|
+
senderForTags: from
|
|
100
|
+
});
|
|
52
101
|
}
|
|
53
102
|
async getAccountFromAddress(address) {
|
|
54
103
|
let account;
|
|
55
|
-
if (address.
|
|
56
|
-
account = new SignerlessAccount();
|
|
57
|
-
} else if (this.accountCache.has(address.toString())) {
|
|
104
|
+
if (this.accountCache.has(address.toString())) {
|
|
58
105
|
return this.accountCache.get(address.toString());
|
|
59
106
|
} else {
|
|
60
107
|
const accountManager = await this.createOrRetrieveAccount(address);
|
|
@@ -66,11 +113,30 @@ export class CLIWallet extends BaseWallet {
|
|
|
66
113
|
return account;
|
|
67
114
|
}
|
|
68
115
|
async createAccount(secret, salt, contract) {
|
|
69
|
-
const accountManager = await AccountManager.create(this, secret, contract,
|
|
116
|
+
const accountManager = await AccountManager.create(this, secret, contract, {
|
|
117
|
+
salt
|
|
118
|
+
});
|
|
70
119
|
const instance = accountManager.getInstance();
|
|
71
120
|
const artifact = await contract.getContractArtifact();
|
|
72
121
|
await this.registerContract(instance, artifact, secret);
|
|
73
122
|
this.accountCache.set(accountManager.address.toString(), await accountManager.getAccount());
|
|
123
|
+
// Initializerless accounts have no deployment tx; their address commits to the signing public key
|
|
124
|
+
// (via the contract's immutablesHash, resolved by AccountManager.create) and the constructor's
|
|
125
|
+
// storage writes are materialized locally via a simulated "store" call here.
|
|
126
|
+
if (contract instanceof SchnorrInitializerlessAccountContract) {
|
|
127
|
+
const constructorAbi = artifact.functions.find((f)=>f.name === 'constructor');
|
|
128
|
+
if (!constructorAbi) {
|
|
129
|
+
throw new Error('Could not create SchnorrInitializerlessAccount: constructor ABI not found');
|
|
130
|
+
}
|
|
131
|
+
const { x, y } = await contract.getSigningPublicKey();
|
|
132
|
+
const storeCall = new ContractFunctionInteraction(this, instance.address, constructorAbi, [
|
|
133
|
+
x,
|
|
134
|
+
y
|
|
135
|
+
]);
|
|
136
|
+
await storeCall.simulate({
|
|
137
|
+
from: instance.address
|
|
138
|
+
});
|
|
139
|
+
}
|
|
74
140
|
return accountManager;
|
|
75
141
|
}
|
|
76
142
|
async createOrRetrieveAccount(address, secretKey, type = 'schnorr', salt, publicKey) {
|
|
@@ -88,6 +154,11 @@ export class CLIWallet extends BaseWallet {
|
|
|
88
154
|
account = await this.createAccount(secretKey, salt, new SchnorrAccountContract(deriveSigningKey(secretKey)));
|
|
89
155
|
break;
|
|
90
156
|
}
|
|
157
|
+
case 'schnorr_initializerless':
|
|
158
|
+
{
|
|
159
|
+
account = await this.createAccount(secretKey, salt, new SchnorrInitializerlessAccountContract(deriveSigningKey(secretKey)));
|
|
160
|
+
break;
|
|
161
|
+
}
|
|
91
162
|
case 'ecdsasecp256r1':
|
|
92
163
|
{
|
|
93
164
|
account = await this.createAccount(secretKey, salt, new EcdsaRAccountContract(deriveSigningKey(secretKey).toBuffer()));
|
|
@@ -125,66 +196,70 @@ export class CLIWallet extends BaseWallet {
|
|
|
125
196
|
* @returns The stub account, contract instance, and artifact for simulation
|
|
126
197
|
*/ async getFakeAccountDataFor(address) {
|
|
127
198
|
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
199
|
const originalAddress = originalAccount.getCompleteAddress();
|
|
135
200
|
const contractInstance = await this.pxe.getContractInstance(originalAddress.address);
|
|
136
201
|
if (!contractInstance) {
|
|
137
202
|
throw new Error(`No contract instance found for address: ${originalAddress.address}`);
|
|
138
203
|
}
|
|
139
|
-
const
|
|
140
|
-
const
|
|
141
|
-
|
|
142
|
-
|
|
204
|
+
const { type } = await this.db.retrieveAccount(address);
|
|
205
|
+
const stubAccount = type === 'schnorr' || type === 'schnorr_initializerless' ? createStubSchnorrAccount(originalAddress) : createStubEcdsaAccount(originalAddress);
|
|
206
|
+
const stubClassId = this.stubClassIds.get(type);
|
|
207
|
+
if (!stubClassId) {
|
|
208
|
+
throw new Error(`Stub class for account type '${type}' was not registered at wallet init. This is a bug — initStubClasses should cover every supported AccountType.`);
|
|
209
|
+
}
|
|
210
|
+
const instance = {
|
|
211
|
+
...contractInstance,
|
|
212
|
+
currentContractClassId: stubClassId
|
|
213
|
+
};
|
|
143
214
|
return {
|
|
144
215
|
account: stubAccount,
|
|
145
|
-
instance
|
|
146
|
-
artifact: StubAccountContractArtifact
|
|
216
|
+
instance
|
|
147
217
|
};
|
|
148
218
|
}
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
219
|
+
/**
|
|
220
|
+
* Uses a stub account for kernelless simulation, bypassing real account authorization.
|
|
221
|
+
* Uses DefaultEntrypoint directly for NO_FROM transactions.
|
|
222
|
+
*/ async simulateViaEntrypoint(executionPayload, opts) {
|
|
223
|
+
const { from, feeOptions, additionalScopes, sendMessagesAs } = opts;
|
|
224
|
+
const scopes = this.scopesFrom(from, additionalScopes);
|
|
152
225
|
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
226
|
const finalExecutionPayload = feeExecutionPayload ? mergeExecutionPayloads([
|
|
160
227
|
feeExecutionPayload,
|
|
161
228
|
executionPayload
|
|
162
229
|
]) : executionPayload;
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
if (
|
|
167
|
-
const
|
|
168
|
-
|
|
169
|
-
simulationResults = await this.pxe.simulateTx(txRequest, true, opts?.skipTxValidation, opts?.skipFeeEnforcement ?? true);
|
|
230
|
+
const chainInfo = await this.getChainInfo();
|
|
231
|
+
let overrides;
|
|
232
|
+
let txRequest;
|
|
233
|
+
if (from === NO_FROM) {
|
|
234
|
+
const entrypoint = new DefaultEntrypoint();
|
|
235
|
+
txRequest = await entrypoint.createTxExecutionRequest(finalExecutionPayload, feeOptions.gasSettings, chainInfo);
|
|
170
236
|
} else {
|
|
171
|
-
const { account
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
237
|
+
const { account, instance } = await this.getFakeAccountDataFor(from);
|
|
238
|
+
overrides = {
|
|
239
|
+
contracts: {
|
|
240
|
+
[from.toString()]: {
|
|
241
|
+
instance
|
|
242
|
+
}
|
|
177
243
|
}
|
|
178
244
|
};
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
245
|
+
const executionOptions = {
|
|
246
|
+
txNonce: Fr.random(),
|
|
247
|
+
cancellable: this.cancellableTransactions,
|
|
248
|
+
// If from is an address, feeOptions include the way the account contract should handle the fee payment
|
|
249
|
+
feePaymentMethodOptions: feeOptions.accountFeePaymentMethodOptions
|
|
250
|
+
};
|
|
251
|
+
txRequest = await account.createTxExecutionRequest(finalExecutionPayload, feeOptions.gasSettings, chainInfo, executionOptions);
|
|
186
252
|
}
|
|
187
|
-
|
|
253
|
+
const result = await this.pxe.simulateTx(txRequest, {
|
|
254
|
+
simulatePublic: true,
|
|
255
|
+
skipFeeEnforcement: true,
|
|
256
|
+
skipTxValidation: true,
|
|
257
|
+
overrides,
|
|
258
|
+
scopes,
|
|
259
|
+
senderForTags: this.senderForTagsFrom(from, sendMessagesAs)
|
|
260
|
+
});
|
|
261
|
+
const appCallOffset = await this.computeAppCallOffset(from, feeOptions);
|
|
262
|
+
return TxSimulationResultWithAppOffset.fromResultAndOffset(result, appCallOffset);
|
|
188
263
|
}
|
|
189
264
|
// Exposed because of the `aztec-wallet get-tx` command. It has been decided that it's fine to keep around because
|
|
190
265
|
// 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.a4600f49",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": "./dest/cmds/index.js",
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
"scripts": {
|
|
20
20
|
"start": "node --no-warnings ./dest/bin",
|
|
21
21
|
"start:debug": "node --inspect=0.0.0.0:9221 --no-warnings ./dest/bin",
|
|
22
|
-
"dev": "LOG_LEVEL
|
|
22
|
+
"dev": "LOG_LEVEL=\"debug; info: json-rpc, simulator\" node ./dest/bin",
|
|
23
23
|
"build": "yarn clean && ../scripts/tsc.sh",
|
|
24
24
|
"build:dev": "../scripts/tsc.sh --watch",
|
|
25
25
|
"clean": "rm -rf ./dest .tsbuildinfo",
|
|
@@ -67,19 +67,20 @@
|
|
|
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/
|
|
82
|
-
"@aztec/
|
|
70
|
+
"@aztec/accounts": "0.0.1-commit.a4600f49",
|
|
71
|
+
"@aztec/aztec.js": "0.0.1-commit.a4600f49",
|
|
72
|
+
"@aztec/bb.js": "0.0.1-commit.a4600f49",
|
|
73
|
+
"@aztec/cli": "0.0.1-commit.a4600f49",
|
|
74
|
+
"@aztec/entrypoints": "0.0.1-commit.a4600f49",
|
|
75
|
+
"@aztec/ethereum": "0.0.1-commit.a4600f49",
|
|
76
|
+
"@aztec/foundation": "0.0.1-commit.a4600f49",
|
|
77
|
+
"@aztec/kv-store": "0.0.1-commit.a4600f49",
|
|
78
|
+
"@aztec/noir-contracts.js": "0.0.1-commit.a4600f49",
|
|
79
|
+
"@aztec/noir-noirc_abi": "0.0.1-commit.a4600f49",
|
|
80
|
+
"@aztec/pxe": "0.0.1-commit.a4600f49",
|
|
81
|
+
"@aztec/standard-contracts": "0.0.1-commit.a4600f49",
|
|
82
|
+
"@aztec/stdlib": "0.0.1-commit.a4600f49",
|
|
83
|
+
"@aztec/wallet-sdk": "0.0.1-commit.a4600f49",
|
|
83
84
|
"commander": "^12.1.0",
|
|
84
85
|
"inquirer": "^10.1.8",
|
|
85
86
|
"source-map-support": "^0.5.21",
|
package/src/bin/index.ts
CHANGED
|
@@ -73,7 +73,7 @@ function injectInternalCommands(program: Command, log: LogFn, db: WalletDB) {
|
|
|
73
73
|
|
|
74
74
|
/** CLI wallet main entrypoint */
|
|
75
75
|
async function main() {
|
|
76
|
-
const walletVersion = getPackageVersion()
|
|
76
|
+
const walletVersion = getPackageVersion();
|
|
77
77
|
|
|
78
78
|
const db = WalletDB.getInstance();
|
|
79
79
|
const walletAndNodeWrapper = new CliWalletAndNodeWrapper();
|