@aztec/cli-wallet 0.0.1-commit.b655e406 → 0.0.1-commit.b6e433891

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.
Files changed (78) hide show
  1. package/README.md +2 -2
  2. package/dest/bin/index.d.ts +2 -1
  3. package/dest/bin/index.js +20 -10
  4. package/dest/cmds/authorize_action.d.ts +2 -2
  5. package/dest/cmds/authorize_action.d.ts.map +1 -1
  6. package/dest/cmds/authorize_action.js +5 -3
  7. package/dest/cmds/bridge_fee_juice.d.ts +2 -2
  8. package/dest/cmds/bridge_fee_juice.d.ts.map +1 -1
  9. package/dest/cmds/bridge_fee_juice.js +3 -2
  10. package/dest/cmds/check_tx.d.ts +1 -1
  11. package/dest/cmds/check_tx.d.ts.map +1 -1
  12. package/dest/cmds/check_tx.js +44 -15
  13. package/dest/cmds/create_account.d.ts +4 -3
  14. package/dest/cmds/create_account.d.ts.map +1 -1
  15. package/dest/cmds/create_account.js +32 -18
  16. package/dest/cmds/create_authwit.d.ts +1 -1
  17. package/dest/cmds/create_authwit.js +1 -1
  18. package/dest/cmds/deploy.d.ts +1 -1
  19. package/dest/cmds/deploy.d.ts.map +1 -1
  20. package/dest/cmds/deploy.js +50 -24
  21. package/dest/cmds/deploy_account.d.ts +1 -1
  22. package/dest/cmds/deploy_account.d.ts.map +1 -1
  23. package/dest/cmds/deploy_account.js +31 -17
  24. package/dest/cmds/import_test_accounts.d.ts +1 -1
  25. package/dest/cmds/index.d.ts +1 -1
  26. package/dest/cmds/index.js +3 -3
  27. package/dest/cmds/profile.d.ts +1 -1
  28. package/dest/cmds/profile.js +1 -1
  29. package/dest/cmds/register_contract.d.ts +1 -1
  30. package/dest/cmds/register_sender.d.ts +1 -1
  31. package/dest/cmds/send.d.ts +2 -2
  32. package/dest/cmds/send.d.ts.map +1 -1
  33. package/dest/cmds/send.js +33 -18
  34. package/dest/cmds/simulate.d.ts +1 -1
  35. package/dest/cmds/simulate.d.ts.map +1 -1
  36. package/dest/cmds/simulate.js +4 -4
  37. package/dest/storage/wallet_db.d.ts +5 -5
  38. package/dest/storage/wallet_db.d.ts.map +1 -1
  39. package/dest/storage/wallet_db.js +47 -32
  40. package/dest/utils/authorizations.d.ts +1 -1
  41. package/dest/utils/cli_wallet_and_node_wrapper.d.ts +1 -1
  42. package/dest/utils/cli_wallet_and_node_wrapper.d.ts.map +1 -1
  43. package/dest/utils/constants.d.ts +4 -0
  44. package/dest/utils/constants.d.ts.map +1 -0
  45. package/dest/utils/constants.js +7 -0
  46. package/dest/utils/ecdsa.d.ts +1 -1
  47. package/dest/utils/options/fees.d.ts +3 -2
  48. package/dest/utils/options/fees.d.ts.map +1 -1
  49. package/dest/utils/options/fees.js +5 -3
  50. package/dest/utils/options/index.d.ts +1 -1
  51. package/dest/utils/options/options.d.ts +1 -1
  52. package/dest/utils/options/options.js +1 -1
  53. package/dest/utils/profiling.d.ts +1 -1
  54. package/dest/utils/profiling.d.ts.map +1 -1
  55. package/dest/utils/profiling.js +9 -1
  56. package/dest/utils/wallet.d.ts +15 -10
  57. package/dest/utils/wallet.d.ts.map +1 -1
  58. package/dest/utils/wallet.js +68 -47
  59. package/package.json +17 -14
  60. package/src/bin/index.ts +18 -12
  61. package/src/cmds/authorize_action.ts +2 -2
  62. package/src/cmds/bridge_fee_juice.ts +3 -2
  63. package/src/cmds/check_tx.ts +50 -21
  64. package/src/cmds/create_account.ts +32 -20
  65. package/src/cmds/create_authwit.ts +1 -1
  66. package/src/cmds/deploy.ts +45 -23
  67. package/src/cmds/deploy_account.ts +29 -18
  68. package/src/cmds/index.ts +4 -4
  69. package/src/cmds/profile.ts +1 -1
  70. package/src/cmds/send.ts +27 -12
  71. package/src/cmds/simulate.ts +5 -8
  72. package/src/storage/wallet_db.ts +51 -38
  73. package/src/utils/cli_wallet_and_node_wrapper.ts +1 -1
  74. package/src/utils/constants.ts +4 -0
  75. package/src/utils/options/fees.ts +11 -4
  76. package/src/utils/options/options.ts +1 -1
  77. package/src/utils/profiling.ts +15 -1
  78. package/src/utils/wallet.ts +83 -62
@@ -1,8 +1,8 @@
1
- import { Fr } from '@aztec/foundation/fields';
1
+ import { Fr } from '@aztec/foundation/curves/bn254';
2
2
  import { AztecAddress } from '@aztec/stdlib/aztec-address';
3
3
  import { Gas, GasFees, GasSettings } from '@aztec/stdlib/gas';
4
4
  import { Option } from 'commander';
5
- import { BASE_FEE_PADDING } from '../wallet.js';
5
+ import { MIN_FEE_PADDING } from '../constants.js';
6
6
  import { aliasedAddressParser } from './options.js';
7
7
  function printOptionParams(params) {
8
8
  const paramsWithDescription = Object.keys(params).filter((name)=>params[name].description);
@@ -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,7 +192,7 @@ export class CLIFeeArgs {
190
192
  this.gasSettings = gasSettings;
191
193
  }
192
194
  async toUserFeeOptions(node, wallet, from) {
193
- const maxFeesPerGas = (await node.getCurrentBaseFees()).mul(1 + BASE_FEE_PADDING);
195
+ const maxFeesPerGas = (await node.getCurrentMinFees()).mul(1 + MIN_FEE_PADDING);
194
196
  const gasSettings = GasSettings.default({
195
197
  ...this.gasSettings,
196
198
  maxFeesPerGas
@@ -1,3 +1,3 @@
1
1
  export * from './fees.js';
2
2
  export * from './options.js';
3
- //# sourceMappingURL=index.d.ts.map
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy91dGlscy9vcHRpb25zL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsV0FBVyxDQUFDO0FBQzFCLGNBQWMsY0FBYyxDQUFDIn0=
@@ -21,4 +21,4 @@ export declare function artifactPathParser(filePath: string, db?: WalletDB): Pro
21
21
  export declare function artifactPathFromPromiseOrAlias(artifactPathPromise: Promise<string>, contractAddress: AztecAddress, db?: WalletDB): Promise<string>;
22
22
  export declare function createArtifactOption(db?: WalletDB): Option;
23
23
  export declare function cleanupAuthWitnesses(authWitnesses: AuthWitness[] | undefined): AuthWitness[];
24
- //# sourceMappingURL=options.d.ts.map
24
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3B0aW9ucy5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3V0aWxzL29wdGlvbnMvb3B0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFNUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3pELE9BQU8sS0FBSyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRWhFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFHbkMsT0FBTyxLQUFLLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBS3RFLGVBQU8sTUFBTSxvQkFBb0Isd0tBQ3NJLENBQUM7QUFFeEssd0JBQWdCLGdCQUFnQixDQUM5QixLQUFLLEVBQUUsTUFBTSxFQUNiLE9BQU8sRUFBRSxNQUFNLEVBQ2YsR0FBRyxTQUEwQixFQUM3QixHQUFHLFNBQTBCLFVBVTlCO0FBRUQsd0JBQWdCLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUUsUUFBUSxHQUFHLE1BQU0sQ0FRekU7QUFFRCx3QkFBZ0Isb0JBQW9CLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRSxRQUFRLGlCQVlwRTtBQUVELHdCQUFnQixvQkFBb0IsQ0FBQyxhQUFhLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUUsUUFBUSxnQkFRNUY7QUFFRCx3QkFBZ0Isc0JBQXNCLENBQUMsRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRSxRQUFRLDBDQVEvRDtBQUVELHdCQUFnQixpQkFBaUIsQ0FBQyxXQUFXLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxPQUFPLFVBRW5FO0FBRUQsd0JBQWdCLG1CQUFtQixDQUFDLFdBQVcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsRUFBRSxRQUFRLFVBSXBGO0FBRUQsd0JBQWdCLHVCQUF1QixDQUFDLFdBQVcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsRUFBRSxRQUFRLFVBSXhGO0FBRUQsd0JBQWdCLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxPQUFPLFVBTWxEO0FBRUQsd0JBQWdCLGdCQUFnQixDQUFDLGFBQWEsRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLEVBQUUsUUFBUSxVQVFyRTtBQUVELHdCQUFnQiwyQkFBMkIsQ0FBQyxFQUFFLENBQUMsRUFBRSxRQUFRLFVBSXhEO0FBRUQsd0JBQWdCLGtDQUFrQyxXQUtqRDtBQUVELHdCQUFnQixtQkFBbUIsV0FLbEM7QUFFRCx3QkFBZ0Isa0JBQWtCLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRSxRQUFRLG1CQWFqRTtBQUVELHdCQUFzQiw4QkFBOEIsQ0FDbEQsbUJBQW1CLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUNwQyxlQUFlLEVBQUUsWUFBWSxFQUM3QixFQUFFLENBQUMsRUFBRSxRQUFRLG1CQVdkO0FBRUQsd0JBQWdCLG9CQUFvQixDQUFDLEVBQUUsQ0FBQyxFQUFFLFFBQVEsVUFJakQ7QUE2QkQsd0JBQWdCLG9CQUFvQixDQUFDLGFBQWEsRUFBRSxXQUFXLEVBQUUsR0FBRyxTQUFTLEdBQUcsV0FBVyxFQUFFLENBRTVGIn0=
@@ -2,7 +2,7 @@ import { parseAztecAddress, parseSecretKey, parseTxHash } from '@aztec/cli/utils
2
2
  import { AuthWitness } from '@aztec/stdlib/auth-witness';
3
3
  import { Option } from 'commander';
4
4
  import { readdir, stat } from 'fs/promises';
5
- import { AccountTypes } from '../wallet.js';
5
+ import { AccountTypes } from '../constants.js';
6
6
  const TARGET_DIR = 'target';
7
7
  export const ARTIFACT_DESCRIPTION = "Path to a compiled Aztec contract's artifact in JSON format. If executed inside a nargo workspace, a package and contract name can be specified as package@contract";
8
8
  export function integerArgParser(value, argName, min = Number.MIN_SAFE_INTEGER, max = Number.MAX_SAFE_INTEGER) {
@@ -2,4 +2,4 @@ import type { LogFn } from '@aztec/foundation/log';
2
2
  import type { PrivateExecutionStep } from '@aztec/stdlib/kernel';
3
3
  import type { ProvingStats, SimulationStats } from '@aztec/stdlib/tx';
4
4
  export declare function printProfileResult(stats: ProvingStats | SimulationStats, log: LogFn, printOracles?: boolean, executionSteps?: PrivateExecutionStep[]): void;
5
- //# sourceMappingURL=profiling.d.ts.map
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZmlsaW5nLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvcHJvZmlsaW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ25ELE9BQU8sS0FBSyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDakUsT0FBTyxLQUFLLEVBQUUsWUFBWSxFQUFrQixlQUFlLEVBQXFCLE1BQU0sa0JBQWtCLENBQUM7QUFVekcsd0JBQWdCLGtCQUFrQixDQUNoQyxLQUFLLEVBQUUsWUFBWSxHQUFHLGVBQWUsRUFDckMsR0FBRyxFQUFFLEtBQUssRUFDVixZQUFZLEdBQUUsT0FBZSxFQUM3QixjQUFjLENBQUMsRUFBRSxvQkFBb0IsRUFBRSxRQTJKeEMifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"profiling.d.ts","sourceRoot":"","sources":["../../src/utils/profiling.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,KAAK,EAAE,YAAY,EAAkB,eAAe,EAAqB,MAAM,kBAAkB,CAAC;AAUzG,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,YAAY,GAAG,eAAe,EACrC,GAAG,EAAE,KAAK,EACV,YAAY,GAAE,OAAe,EAC7B,cAAc,CAAC,EAAE,oBAAoB,EAAE,QA6IxC"}
1
+ {"version":3,"file":"profiling.d.ts","sourceRoot":"","sources":["../../src/utils/profiling.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,KAAK,EAAE,YAAY,EAAkB,eAAe,EAAqB,MAAM,kBAAkB,CAAC;AAUzG,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,YAAY,GAAG,eAAe,EACrC,GAAG,EAAE,KAAK,EACV,YAAY,GAAE,OAAe,EAC7B,cAAc,CAAC,EAAE,oBAAoB,EAAE,QA2JxC"}
@@ -35,7 +35,7 @@ export function printProfileResult(stats, log, printOracles = false, executionSt
35
35
  }
36
36
  if (stats.nodeRPCCalls) {
37
37
  log(format('\nRPC calls:\n'));
38
- for (const [method, { times }] of Object.entries(stats.nodeRPCCalls)){
38
+ for (const [method, { times }] of Object.entries(stats.nodeRPCCalls.perMethod)){
39
39
  const calls = times.length;
40
40
  const total = times.reduce((acc, time)=>acc + time, 0);
41
41
  const avg = total / calls;
@@ -43,6 +43,14 @@ export function printProfileResult(stats, log, printOracles = false, executionSt
43
43
  const max = Math.max(...times);
44
44
  log(format(method.padEnd(ORACLE_NAME_PADDING), `${calls} calls`.padStart(COLUMN_MIN_WIDTH).padEnd(COLUMN_MAX_WIDTH), `${total.toFixed(2)}ms`.padStart(COLUMN_MIN_WIDTH).padEnd(COLUMN_MAX_WIDTH), `min: ${min.toFixed(2)}ms`.padStart(COLUMN_MIN_WIDTH).padEnd(COLUMN_MAX_WIDTH), `avg: ${avg.toFixed(2)}ms`.padStart(COLUMN_MIN_WIDTH).padEnd(COLUMN_MAX_WIDTH), `max: ${max.toFixed(2)}ms`.padStart(COLUMN_MIN_WIDTH).padEnd(COLUMN_MAX_WIDTH)));
45
45
  }
46
+ const { roundTrips } = stats.nodeRPCCalls;
47
+ log(format('\nRound trips (actual blocking waits):\n'));
48
+ log(format('Round trips:'.padEnd(25), `${roundTrips.roundTrips}`.padStart(COLUMN_MAX_WIDTH)));
49
+ log(format('Total blocking time:'.padEnd(25), `${roundTrips.totalBlockingTime.toFixed(2)}ms`.padStart(COLUMN_MAX_WIDTH)));
50
+ if (roundTrips.roundTrips > 0) {
51
+ const avgRoundTrip = roundTrips.totalBlockingTime / roundTrips.roundTrips;
52
+ log(format('Avg round trip:'.padEnd(25), `${avgRoundTrip.toFixed(2)}ms`.padStart(COLUMN_MAX_WIDTH)));
53
+ }
46
54
  }
47
55
  log(format('\nSync time:'.padEnd(25), `${timings.sync?.toFixed(2)}ms`.padStart(16)));
48
56
  log(format('Private simulation time:'.padEnd(25), `${timings.perFunction.reduce((acc, { time })=>acc + time, 0).toFixed(2)}ms`.padStart(COLUMN_MAX_WIDTH)));
@@ -1,20 +1,19 @@
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 { UniqueNote } from '@aztec/aztec.js/note';
5
- import { AccountManager, type Aliased, BaseWallet, type SimulateOptions } from '@aztec/aztec.js/wallet';
6
- import { ExecutionPayload } from '@aztec/entrypoints/payload';
7
- import { Fr } from '@aztec/foundation/fields';
4
+ import { AccountManager, type Aliased, type SimulateOptions } from '@aztec/aztec.js/wallet';
5
+ import { Fr } from '@aztec/foundation/curves/bn254';
8
6
  import type { LogFn } from '@aztec/foundation/log';
7
+ import type { NotesFilter } from '@aztec/pxe/client/lazy';
9
8
  import type { PXEConfig } from '@aztec/pxe/config';
10
9
  import type { PXE } from '@aztec/pxe/server';
11
10
  import { AztecAddress } from '@aztec/stdlib/aztec-address';
12
- import type { NotesFilter } from '@aztec/stdlib/note';
11
+ import { NoteDao } from '@aztec/stdlib/note';
13
12
  import type { TxProvingResult, TxSimulationResult } from '@aztec/stdlib/tx';
13
+ import { ExecutionPayload } from '@aztec/stdlib/tx';
14
+ import { BaseWallet, type SimulateViaEntrypointOptions } from '@aztec/wallet-sdk/base-wallet';
14
15
  import type { WalletDB } from '../storage/wallet_db.js';
15
- export declare const AccountTypes: readonly ["schnorr", "ecdsasecp256r1", "ecdsasecp256r1ssh", "ecdsasecp256k1"];
16
- export type AccountType = (typeof AccountTypes)[number];
17
- export declare const BASE_FEE_PADDING = 0.5;
16
+ import type { AccountType } from './constants.js';
18
17
  export declare class CLIWallet extends BaseWallet {
19
18
  private userLog;
20
19
  private db?;
@@ -29,7 +28,13 @@ export declare class CLIWallet extends BaseWallet {
29
28
  createOrRetrieveAccount(address?: AztecAddress, secretKey?: Fr, type?: AccountType, salt?: Fr, publicKey?: string): Promise<AccountManager>;
30
29
  private getFakeAccountDataFor;
31
30
  simulateTx(executionPayload: ExecutionPayload, opts: SimulateOptions): Promise<TxSimulationResult>;
31
+ /**
32
+ * Uses a stub account for kernelless simulation, bypassing real account authorization.
33
+ * Falls through to the standard entrypoint path for SignerlessAccount (ZERO address).
34
+ */
35
+ protected simulateViaEntrypoint(executionPayload: ExecutionPayload, opts: SimulateViaEntrypointOptions): Promise<TxSimulationResult>;
32
36
  getContracts(): Promise<AztecAddress[]>;
33
- getNotes(filter: NotesFilter): Promise<UniqueNote[]>;
37
+ getNotes(filter: NotesFilter): Promise<NoteDao[]>;
38
+ getContractArtifact(id: Fr): Promise<import("@aztec/stdlib/abi").ContractArtifact | undefined>;
34
39
  }
35
- //# sourceMappingURL=wallet.d.ts.map
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2FsbGV0LmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvd2FsbGV0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUlBLE9BQU8sRUFBRSxLQUFLLE9BQU8sRUFBMkMsTUFBTSx5QkFBeUIsQ0FBQztBQUNoRyxPQUFPLEVBQ0wsS0FBSyxxQkFBcUIsRUFHM0IsTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsY0FBYyxFQUFFLEtBQUssT0FBTyxFQUFFLEtBQUssZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFNUYsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3BELE9BQU8sS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ25ELE9BQU8sS0FBSyxFQUFFLFdBQVcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzFELE9BQU8sS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ25ELE9BQU8sS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRTdDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUUzRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDN0MsT0FBTyxLQUFLLEVBQXVCLGVBQWUsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2pHLE9BQU8sRUFBRSxnQkFBZ0IsRUFBMEIsTUFBTSxrQkFBa0IsQ0FBQztBQUM1RSxPQUFPLEVBQUUsVUFBVSxFQUFFLEtBQUssNEJBQTRCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUU5RixPQUFPLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN4RCxPQUFPLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUlsRCxxQkFBYSxTQUFVLFNBQVEsVUFBVTtJQU1yQyxPQUFPLENBQUMsT0FBTztJQUNmLE9BQU8sQ0FBQyxFQUFFLENBQUM7SUFOYixPQUFPLENBQUMsWUFBWSxDQUE4QjtJQUVsRCxZQUNFLEdBQUcsRUFBRSxHQUFHLEVBQ1IsSUFBSSxFQUFFLFNBQVMsRUFDUCxPQUFPLEVBQUUsS0FBSyxFQUNkLEVBQUUsQ0FBQyxzQkFBVSxFQUl0QjtJQUVELE9BQWEsTUFBTSxDQUNqQixJQUFJLEVBQUUsU0FBUyxFQUNmLEdBQUcsRUFBRSxLQUFLLEVBQ1YsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUNiLGlCQUFpQixDQUFDLEVBQUUsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUNyQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBSXBCO0lBRWMsV0FBVyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUc3RDtZQUVhLG9DQUFvQztJQXVCNUMsbUJBQW1CLENBQ3ZCLElBQUksRUFBRSxZQUFZLEVBQ2xCLE9BQU8sRUFBRSxFQUFFLEVBQ1gsWUFBWSxFQUFFLHFCQUFxQixHQUNsQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBRzFCO0lBRWMscUJBQXFCLENBQUMsT0FBTyxFQUFFLFlBQVksb0JBZXpEO1lBRWEsYUFBYTtJQVdyQix1QkFBdUIsQ0FDM0IsT0FBTyxDQUFDLEVBQUUsWUFBWSxFQUN0QixTQUFTLENBQUMsRUFBRSxFQUFFLEVBQ2QsSUFBSSxHQUFFLFdBQXVCLEVBQzdCLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFDVCxTQUFTLENBQUMsRUFBRSxNQUFNLEdBQ2pCLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FtRHpCO1lBUWEscUJBQXFCO0lBd0JwQixVQUFVLENBQUMsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLGVBQWUsR0FBRyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FTaEg7SUFFRDs7O09BR0c7SUFDSCxVQUF5QixxQkFBcUIsQ0FDNUMsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQ2xDLElBQUksRUFBRSw0QkFBNEIsR0FDakMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBc0M3QjtJQUlELFlBQVksSUFBSSxPQUFPLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FFdEM7SUFJRCxRQUFRLENBQUMsTUFBTSxFQUFFLFdBQVcsR0FBRyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FFaEQ7SUFJRCxtQkFBbUIsQ0FBQyxFQUFFLEVBQUUsRUFBRSxxRUFFekI7Q0FDRiJ9
@@ -1 +1 @@
1
- {"version":3,"file":"wallet.d.ts","sourceRoot":"","sources":["../../src/utils/wallet.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,OAAO,EAA2C,MAAM,yBAAyB,CAAC;AAChG,OAAO,EACL,KAAK,qBAAqB,EAG3B,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,KAAK,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAExG,OAAO,EAAE,gBAAgB,EAA0B,MAAM,4BAA4B,CAAC;AACtF,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAC9C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAE7C,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAE3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAE5E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAIxD,eAAO,MAAM,YAAY,+EAAgF,CAAC;AAC1G,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC;AAExD,eAAO,MAAM,gBAAgB,MAAM,CAAC;AAEpC,qBAAa,SAAU,SAAQ,UAAU;IAMrC,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,EAAE,CAAC;IANb,OAAO,CAAC,YAAY,CAA8B;gBAGhD,GAAG,EAAE,GAAG,EACR,IAAI,EAAE,SAAS,EACP,OAAO,EAAE,KAAK,EACd,EAAE,CAAC,EAAE,QAAQ,YAAA;WAMV,MAAM,CACjB,IAAI,EAAE,SAAS,EACf,GAAG,EAAE,KAAK,EACV,EAAE,CAAC,EAAE,QAAQ,EACb,iBAAiB,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,GACrC,OAAO,CAAC,SAAS,CAAC;IAMN,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;YAKhD,oCAAoC;IAoB5C,mBAAmB,CACvB,IAAI,EAAE,YAAY,EAClB,OAAO,EAAE,EAAE,EACX,YAAY,EAAE,qBAAqB,GAClC,OAAO,CAAC,eAAe,CAAC;IAKZ,qBAAqB,CAAC,OAAO,EAAE,YAAY;YAkB5C,aAAa;IAWrB,uBAAuB,CAC3B,OAAO,CAAC,EAAE,YAAY,EACtB,SAAS,CAAC,EAAE,EAAE,EACd,IAAI,GAAE,WAAuB,EAC7B,IAAI,CAAC,EAAE,EAAE,EACT,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,cAAc,CAAC;YAqDZ,qBAAqB;IAmBpB,UAAU,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAuDjH,YAAY,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;IAMvC,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;CAGrD"}
1
+ {"version":3,"file":"wallet.d.ts","sourceRoot":"","sources":["../../src/utils/wallet.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,OAAO,EAA2C,MAAM,yBAAyB,CAAC;AAChG,OAAO,EACL,KAAK,qBAAqB,EAG3B,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,KAAK,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAE5F,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AACpD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAE7C,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAE3D,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,KAAK,EAAuB,eAAe,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACjG,OAAO,EAAE,gBAAgB,EAA0B,MAAM,kBAAkB,CAAC;AAC5E,OAAO,EAAE,UAAU,EAAE,KAAK,4BAA4B,EAAE,MAAM,+BAA+B,CAAC;AAE9F,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAIlD,qBAAa,SAAU,SAAQ,UAAU;IAMrC,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,EAAE,CAAC;IANb,OAAO,CAAC,YAAY,CAA8B;IAElD,YACE,GAAG,EAAE,GAAG,EACR,IAAI,EAAE,SAAS,EACP,OAAO,EAAE,KAAK,EACd,EAAE,CAAC,sBAAU,EAItB;IAED,OAAa,MAAM,CACjB,IAAI,EAAE,SAAS,EACf,GAAG,EAAE,KAAK,EACV,EAAE,CAAC,EAAE,QAAQ,EACb,iBAAiB,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,GACrC,OAAO,CAAC,SAAS,CAAC,CAIpB;IAEc,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC,CAG7D;YAEa,oCAAoC;IAuB5C,mBAAmB,CACvB,IAAI,EAAE,YAAY,EAClB,OAAO,EAAE,EAAE,EACX,YAAY,EAAE,qBAAqB,GAClC,OAAO,CAAC,eAAe,CAAC,CAG1B;IAEc,qBAAqB,CAAC,OAAO,EAAE,YAAY,oBAezD;YAEa,aAAa;IAWrB,uBAAuB,CAC3B,OAAO,CAAC,EAAE,YAAY,EACtB,SAAS,CAAC,EAAE,EAAE,EACd,IAAI,GAAE,WAAuB,EAC7B,IAAI,CAAC,EAAE,EAAE,EACT,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,cAAc,CAAC,CAmDzB;YAQa,qBAAqB;IAwBpB,UAAU,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAShH;IAED;;;OAGG;IACH,UAAyB,qBAAqB,CAC5C,gBAAgB,EAAE,gBAAgB,EAClC,IAAI,EAAE,4BAA4B,GACjC,OAAO,CAAC,kBAAkB,CAAC,CAsC7B;IAID,YAAY,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC,CAEtC;IAID,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAEhD;IAID,mBAAmB,CAAC,EAAE,EAAE,EAAE,qEAEzB;CACF"}
@@ -4,21 +4,15 @@ import { StubAccountContractArtifact, createStubAccount } from '@aztec/accounts/
4
4
  import { getIdentities } from '@aztec/accounts/utils';
5
5
  import { SignerlessAccount } from '@aztec/aztec.js/account';
6
6
  import { getContractInstanceFromInstantiationParams, getGasLimits } from '@aztec/aztec.js/contracts';
7
- import { AccountManager, BaseWallet } from '@aztec/aztec.js/wallet';
8
- import { ExecutionPayload, mergeExecutionPayloads } from '@aztec/entrypoints/payload';
9
- import { Fr } from '@aztec/foundation/fields';
7
+ import { AccountManager } from '@aztec/aztec.js/wallet';
8
+ import { Fr } from '@aztec/foundation/curves/bn254';
10
9
  import { createPXE, getPXEConfig } from '@aztec/pxe/server';
11
10
  import { AztecAddress } from '@aztec/stdlib/aztec-address';
12
11
  import { deriveSigningKey } from '@aztec/stdlib/keys';
12
+ import { ExecutionPayload, mergeExecutionPayloads } from '@aztec/stdlib/tx';
13
+ import { BaseWallet } from '@aztec/wallet-sdk/base-wallet';
13
14
  import { extractECDSAPublicKeyFromBase64String } from './ecdsa.js';
14
15
  import { printGasEstimates } from './options/fees.js';
15
- export const AccountTypes = [
16
- 'schnorr',
17
- 'ecdsasecp256r1',
18
- 'ecdsasecp256r1ssh',
19
- 'ecdsasecp256k1'
20
- ];
21
- export const BASE_FEE_PADDING = 0.5;
22
16
  export class CLIWallet extends BaseWallet {
23
17
  userLog;
24
18
  db;
@@ -40,25 +34,26 @@ export class CLIWallet extends BaseWallet {
40
34
  })));
41
35
  }
42
36
  async createCancellationTxExecutionRequest(from, txNonce, increasedFee) {
43
- const feeOptions = await this.getDefaultFeeOptions(from, increasedFee);
37
+ const executionPayload = ExecutionPayload.empty();
38
+ const feeOptions = await this.completeFeeOptions(from, executionPayload.feePayer, increasedFee.gasSettings);
44
39
  const feeExecutionPayload = await feeOptions.walletFeePaymentMethod?.getExecutionPayload();
45
40
  const fromAccount = await this.getAccountFromAddress(from);
41
+ const chainInfo = await this.getChainInfo();
46
42
  const executionOptions = {
47
43
  txNonce,
48
44
  cancellable: this.cancellableTransactions,
49
45
  feePaymentMethodOptions: feeOptions.accountFeePaymentMethodOptions
50
46
  };
51
- return await fromAccount.createTxExecutionRequest(feeExecutionPayload ?? ExecutionPayload.empty(), feeOptions.gasSettings, executionOptions);
47
+ return await fromAccount.createTxExecutionRequest(feeExecutionPayload ?? executionPayload, feeOptions.gasSettings, chainInfo, executionOptions);
52
48
  }
53
49
  async proveCancellationTx(from, txNonce, increasedFee) {
54
50
  const cancellationTxRequest = await this.createCancellationTxExecutionRequest(from, txNonce, increasedFee);
55
- return await this.pxe.proveTx(cancellationTxRequest);
51
+ return await this.pxe.proveTx(cancellationTxRequest, this.scopesFrom(from));
56
52
  }
57
53
  async getAccountFromAddress(address) {
58
54
  let account;
59
55
  if (address.equals(AztecAddress.ZERO)) {
60
- const chainInfo = await this.getChainInfo();
61
- account = new SignerlessAccount(chainInfo);
56
+ account = new SignerlessAccount();
62
57
  } else if (this.accountCache.has(address.toString())) {
63
58
  return this.accountCache.get(address.toString());
64
59
  } else {
@@ -123,15 +118,25 @@ export class CLIWallet extends BaseWallet {
123
118
  }
124
119
  return account;
125
120
  }
126
- async getFakeAccountDataFor(address) {
127
- const chainInfo = await this.getChainInfo();
121
+ /**
122
+ * Creates a stub account that impersonates the given address, allowing kernelless simulations
123
+ * to bypass the account's authorization mechanisms via contract overrides.
124
+ * @param address - The address of the account to impersonate
125
+ * @returns The stub account, contract instance, and artifact for simulation
126
+ */ async getFakeAccountDataFor(address) {
128
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
+ }
129
134
  const originalAddress = originalAccount.getCompleteAddress();
130
- const { contractInstance } = await this.pxe.getContractMetadata(originalAddress.address);
135
+ const contractInstance = await this.pxe.getContractInstance(originalAddress.address);
131
136
  if (!contractInstance) {
132
137
  throw new Error(`No contract instance found for address: ${originalAddress.address}`);
133
138
  }
134
- const stubAccount = createStubAccount(originalAddress, chainInfo);
139
+ const stubAccount = createStubAccount(originalAddress);
135
140
  const instance = await getContractInstanceFromInstantiationParams(StubAccountContractArtifact, {
136
141
  salt: Fr.random()
137
142
  });
@@ -142,8 +147,35 @@ export class CLIWallet extends BaseWallet {
142
147
  };
143
148
  }
144
149
  async simulateTx(executionPayload, opts) {
145
- let simulationResults;
146
- const feeOptions = opts.fee?.estimateGas ? await this.getFeeOptionsForGasEstimation(opts.from, opts.fee) : await this.getDefaultFeeOptions(opts.from, opts.fee);
150
+ const simulationResults = await super.simulateTx(executionPayload, opts);
151
+ if (opts.fee?.estimateGas) {
152
+ const feeOptions = await this.completeFeeOptions(opts.from, executionPayload.feePayer, opts.fee?.gasSettings);
153
+ const limits = getGasLimits(simulationResults, opts.fee?.estimatedGasPadding);
154
+ printGasEstimates(feeOptions, limits, this.userLog);
155
+ }
156
+ return simulationResults;
157
+ }
158
+ /**
159
+ * Uses a stub account for kernelless simulation, bypassing real account authorization.
160
+ * Falls through to the standard entrypoint path for SignerlessAccount (ZERO address).
161
+ */ async simulateViaEntrypoint(executionPayload, opts) {
162
+ const { from, feeOptions, scopes } = opts;
163
+ let overrides;
164
+ let fromAccount;
165
+ if (!from.equals(AztecAddress.ZERO)) {
166
+ const { account, instance, artifact } = await this.getFakeAccountDataFor(from);
167
+ fromAccount = account;
168
+ overrides = {
169
+ contracts: {
170
+ [from.toString()]: {
171
+ instance,
172
+ artifact
173
+ }
174
+ }
175
+ };
176
+ } else {
177
+ fromAccount = await this.getAccountFromAddress(from);
178
+ }
147
179
  const feeExecutionPayload = await feeOptions.walletFeePaymentMethod?.getExecutionPayload();
148
180
  const executionOptions = {
149
181
  txNonce: Fr.random(),
@@ -154,31 +186,15 @@ export class CLIWallet extends BaseWallet {
154
186
  feeExecutionPayload,
155
187
  executionPayload
156
188
  ]) : executionPayload;
157
- // Kernelless simulations using the multicall entrypoints are not currently supported,
158
- // since we only override proper account contracts.
159
- // TODO: allow disabling kernels even when no overrides are necessary
160
- if (opts.from.equals(AztecAddress.ZERO)) {
161
- const fromAccount = await this.getAccountFromAddress(opts.from);
162
- const txRequest = await fromAccount.createTxExecutionRequest(finalExecutionPayload, feeOptions.gasSettings, executionOptions);
163
- simulationResults = await this.pxe.simulateTx(txRequest, true, opts?.skipTxValidation, opts?.skipFeeEnforcement ?? true);
164
- } else {
165
- const { account: fromAccount, instance, artifact } = await this.getFakeAccountDataFor(opts.from);
166
- const txRequest = await fromAccount.createTxExecutionRequest(finalExecutionPayload, feeOptions.gasSettings, executionOptions);
167
- const contractOverrides = {
168
- [opts.from.toString()]: {
169
- instance,
170
- artifact
171
- }
172
- };
173
- simulationResults = await this.pxe.simulateTx(txRequest, true, true, true, {
174
- contracts: contractOverrides
175
- });
176
- }
177
- if (opts.fee?.estimateGas) {
178
- const limits = getGasLimits(simulationResults, opts.fee?.estimatedGasPadding);
179
- printGasEstimates(feeOptions, limits, this.userLog);
180
- }
181
- return simulationResults;
189
+ const chainInfo = await this.getChainInfo();
190
+ const txRequest = await fromAccount.createTxExecutionRequest(finalExecutionPayload, feeOptions.gasSettings, chainInfo, executionOptions);
191
+ return this.pxe.simulateTx(txRequest, {
192
+ simulatePublic: true,
193
+ skipFeeEnforcement: true,
194
+ skipTxValidation: true,
195
+ overrides,
196
+ scopes
197
+ });
182
198
  }
183
199
  // Exposed because of the `aztec-wallet get-tx` command. It has been decided that it's fine to keep around because
184
200
  // this is just a CLI wallet.
@@ -188,6 +204,11 @@ export class CLIWallet extends BaseWallet {
188
204
  // Exposed because of the `aztec-wallet get-tx` command. It has been decided that it's fine to keep around because
189
205
  // this is just a CLI wallet.
190
206
  getNotes(filter) {
191
- return this.pxe.getNotes(filter);
207
+ return this.pxe.debug.getNotes(filter);
208
+ }
209
+ // Exposed because of the `aztec-wallet get-tx` command. It has been decided that it's fine to keep around because
210
+ // this is just a CLI wallet.
211
+ getContractArtifact(id) {
212
+ return this.pxe.getContractArtifact(id);
192
213
  }
193
214
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aztec/cli-wallet",
3
- "version": "0.0.1-commit.b655e406",
3
+ "version": "0.0.1-commit.b6e433891",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": "./dest/cmds/index.js",
@@ -20,8 +20,8 @@
20
20
  "start": "node --no-warnings ./dest/bin",
21
21
  "start:debug": "node --inspect=0.0.0.0:9221 --no-warnings ./dest/bin",
22
22
  "dev": "LOG_LEVEL=debug && node ./dest/bin",
23
- "build": "yarn clean && tsc -b",
24
- "build:dev": "tsc -b --watch",
23
+ "build": "yarn clean && ../scripts/tsc.sh",
24
+ "build:dev": "../scripts/tsc.sh --watch",
25
25
  "clean": "rm -rf ./dest .tsbuildinfo",
26
26
  "test": "NODE_NO_WARNINGS=1 node --experimental-vm-modules ../node_modules/.bin/jest --passWithNoTests --maxWorkers=${JEST_MAX_WORKERS:-8}"
27
27
  },
@@ -67,17 +67,19 @@
67
67
  ]
68
68
  },
69
69
  "dependencies": {
70
- "@aztec/accounts": "0.0.1-commit.b655e406",
71
- "@aztec/aztec.js": "0.0.1-commit.b655e406",
72
- "@aztec/cli": "0.0.1-commit.b655e406",
73
- "@aztec/entrypoints": "0.0.1-commit.b655e406",
74
- "@aztec/ethereum": "0.0.1-commit.b655e406",
75
- "@aztec/foundation": "0.0.1-commit.b655e406",
76
- "@aztec/kv-store": "0.0.1-commit.b655e406",
77
- "@aztec/noir-contracts.js": "0.0.1-commit.b655e406",
78
- "@aztec/noir-noirc_abi": "0.0.1-commit.b655e406",
79
- "@aztec/pxe": "0.0.1-commit.b655e406",
80
- "@aztec/stdlib": "0.0.1-commit.b655e406",
70
+ "@aztec/accounts": "0.0.1-commit.b6e433891",
71
+ "@aztec/aztec.js": "0.0.1-commit.b6e433891",
72
+ "@aztec/bb.js": "0.0.1-commit.b6e433891",
73
+ "@aztec/cli": "0.0.1-commit.b6e433891",
74
+ "@aztec/entrypoints": "0.0.1-commit.b6e433891",
75
+ "@aztec/ethereum": "0.0.1-commit.b6e433891",
76
+ "@aztec/foundation": "0.0.1-commit.b6e433891",
77
+ "@aztec/kv-store": "0.0.1-commit.b6e433891",
78
+ "@aztec/noir-contracts.js": "0.0.1-commit.b6e433891",
79
+ "@aztec/noir-noirc_abi": "0.0.1-commit.b6e433891",
80
+ "@aztec/pxe": "0.0.1-commit.b6e433891",
81
+ "@aztec/stdlib": "0.0.1-commit.b6e433891",
82
+ "@aztec/wallet-sdk": "0.0.1-commit.b6e433891",
81
83
  "commander": "^12.1.0",
82
84
  "inquirer": "^10.1.8",
83
85
  "source-map-support": "^0.5.21",
@@ -88,6 +90,7 @@
88
90
  "@types/jest": "^30.0.0",
89
91
  "@types/node": "^22.15.17",
90
92
  "@types/source-map-support": "^0.5.10",
93
+ "@typescript/native-preview": "7.0.0-dev.20260113.1",
91
94
  "jest": "^30.0.0",
92
95
  "jest-mock-extended": "^4.0.0",
93
96
  "ts-jest": "^29.4.0",
package/src/bin/index.ts CHANGED
@@ -1,7 +1,9 @@
1
+ #!/usr/bin/env node
1
2
  import { computeSecretHash } from '@aztec/aztec.js/crypto';
2
3
  import { Fr } from '@aztec/aztec.js/fields';
3
4
  import { createAztecNodeClient } from '@aztec/aztec.js/node';
4
5
  import { ProtocolContractAddress } from '@aztec/aztec.js/protocol';
6
+ import { BackendType, Barretenberg } from '@aztec/bb.js';
5
7
  import { LOCALHOST } from '@aztec/cli/cli-utils';
6
8
  import { type LogFn, createConsoleLogger, createLogger } from '@aztec/foundation/log';
7
9
  import { openStoreAt } from '@aztec/kv-store/lmdb-v2';
@@ -9,10 +11,8 @@ import type { PXEConfig } from '@aztec/pxe/config';
9
11
  import { getPackageVersion } from '@aztec/stdlib/update-checker';
10
12
 
11
13
  import { Argument, Command, Option } from 'commander';
12
- import { mkdirSync } from 'fs';
13
14
  import { homedir } from 'os';
14
- import { dirname, join, resolve } from 'path';
15
- import { fileURLToPath } from 'url';
15
+ import { join } from 'path';
16
16
 
17
17
  import { injectCommands } from '../cmds/index.js';
18
18
  import { Aliases, WalletDB } from '../storage/wallet_db.js';
@@ -95,22 +95,26 @@ async function main() {
95
95
  .default(`http://${LOCALHOST}:8080`),
96
96
  )
97
97
  .hook('preSubcommand', async command => {
98
+ // Skip initialization if user is just requesting help
99
+ if (command.args.includes('--help') || command.args.includes('-h')) {
100
+ return;
101
+ }
102
+
98
103
  const { dataDir, nodeUrl, prover } = command.optsWithGlobals();
99
104
 
100
105
  const proverEnabled = prover !== 'none';
101
106
 
102
- const bbBinaryPath =
103
- prover === 'native'
104
- ? (process.env.BB_BINARY_PATH ??
105
- resolve(dirname(fileURLToPath(import.meta.url)), '../../../../barretenberg/cpp/build/bin/bb'))
106
- : undefined;
107
- const bbWorkingDirectory = dataDir + '/bb';
108
- mkdirSync(bbWorkingDirectory, { recursive: true });
107
+ switch (prover) {
108
+ case 'native':
109
+ await Barretenberg.initSingleton({ backend: BackendType.NativeUnixSocket });
110
+ break;
111
+ case 'wasm':
112
+ await Barretenberg.initSingleton({ backend: BackendType.Wasm });
113
+ break;
114
+ }
109
115
 
110
116
  const overridePXEConfig: Partial<PXEConfig> = {
111
117
  proverEnabled,
112
- bbBinaryPath: prover === 'native' ? bbBinaryPath : undefined,
113
- bbWorkingDirectory: prover === 'native' ? bbWorkingDirectory : undefined,
114
118
  dataDirectory: join(dataDir, 'pxe'),
115
119
  };
116
120
 
@@ -142,6 +146,8 @@ async function main() {
142
146
  injectCommands(program, userLog, debugLogger, walletAndNodeWrapper, db);
143
147
  injectInternalCommands(program, userLog, db);
144
148
  await program.parseAsync(process.argv);
149
+
150
+ await Barretenberg.destroySingleton();
145
151
  }
146
152
 
147
153
  main().catch(err => {
@@ -30,7 +30,7 @@ export async function authorizeAction(
30
30
  );
31
31
  }
32
32
 
33
- const contract = await Contract.at(contractAddress, contractArtifact, wallet);
33
+ const contract = Contract.at(contractAddress, contractArtifact, wallet);
34
34
  const action = contract.methods[functionName](...functionArgs);
35
35
 
36
36
  const setAuthwitnessInteraction = await SetPublicAuthwitContractInteraction.create(
@@ -39,7 +39,7 @@ export async function authorizeAction(
39
39
  { caller, action },
40
40
  true,
41
41
  );
42
- const witness = await setAuthwitnessInteraction.send().wait({ timeout: DEFAULT_TX_TIMEOUT_S });
42
+ const witness = await setAuthwitnessInteraction.send({ wait: { timeout: DEFAULT_TX_TIMEOUT_S } });
43
43
 
44
44
  log(`Authorized action ${functionName} on contract ${contractAddress} for caller ${caller}`);
45
45
 
@@ -2,8 +2,9 @@ import { L1FeeJuicePortalManager } from '@aztec/aztec.js/ethereum';
2
2
  import type { AztecNode } from '@aztec/aztec.js/node';
3
3
  import { ProtocolContractAddress } from '@aztec/aztec.js/protocol';
4
4
  import { prettyPrintJSON } from '@aztec/cli/utils';
5
- import { createEthereumChain, createExtendedL1Client } from '@aztec/ethereum';
6
- import { Fr } from '@aztec/foundation/fields';
5
+ import { createEthereumChain } from '@aztec/ethereum/chain';
6
+ import { createExtendedL1Client } from '@aztec/ethereum/client';
7
+ import { Fr } from '@aztec/foundation/curves/bn254';
7
8
  import type { LogFn, Logger } from '@aztec/foundation/log';
8
9
  import type { AztecAddress } from '@aztec/stdlib/aztec-address';
9
10
  import { getNonNullifiedL1ToL2MessageWitness } from '@aztec/stdlib/messaging';
@@ -5,8 +5,12 @@ 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';
9
- import { UniqueNote } from '@aztec/stdlib/note';
8
+ import {
9
+ computeSiloedPrivateInitializationNullifier,
10
+ computeSiloedPublicInitializationNullifier,
11
+ siloNullifier,
12
+ } from '@aztec/stdlib/hash';
13
+ import { NoteDao } from '@aztec/stdlib/note';
10
14
 
11
15
  import type { CLIWallet } from '../utils/wallet.js';
12
16
 
@@ -32,7 +36,10 @@ async function inspectTx(wallet: CLIWallet, aztecNode: AztecNode, txHash: TxHash
32
36
  const [receipt, effectsInBlock] = await Promise.all([aztecNode.getTxReceipt(txHash), aztecNode.getTxEffect(txHash)]);
33
37
  // Base tx data
34
38
  log(`Tx ${txHash.toString()}`);
35
- log(` Status: ${receipt.status} ${effectsInBlock ? `(${effectsInBlock.data.revertCode.getDescription()})` : ''}`);
39
+ log(` Status: ${receipt.status}`);
40
+ if (receipt.executionResult) {
41
+ log(` Execution result: ${receipt.executionResult}`);
42
+ }
36
43
  if (receipt.error) {
37
44
  log(` Error: ${receipt.error}`);
38
45
  }
@@ -85,7 +92,7 @@ async function inspectTx(wallet: CLIWallet, aztecNode: AztecNode, txHash: TxHash
85
92
  for (const nullifier of effects.nullifiers) {
86
93
  const deployed = deployNullifiers[nullifier.toString()];
87
94
  const note = deployed
88
- ? (await wallet.getNotes({ siloedNullifier: nullifier, contractAddress: deployed }))[0]
95
+ ? (await wallet.getNotes({ siloedNullifier: nullifier, contractAddress: deployed, scopes: 'ALL_SCOPES' }))[0]
89
96
  : undefined;
90
97
  const initialized = initNullifiers[nullifier.toString()];
91
98
  const registered = classNullifiers[nullifier.toString()];
@@ -121,11 +128,10 @@ async function inspectTx(wallet: CLIWallet, aztecNode: AztecNode, txHash: TxHash
121
128
  }
122
129
  }
123
130
 
124
- function inspectNote(note: UniqueNote, artifactMap: ArtifactMap, log: LogFn, text = 'Note') {
131
+ function inspectNote(note: NoteDao, artifactMap: ArtifactMap, log: LogFn, text = 'Note') {
125
132
  const artifact = artifactMap[note.contractAddress.toString()];
126
133
  const contract = artifact?.name ?? note.contractAddress.toString();
127
134
  log(` ${text} at ${contract}`);
128
- log(` Recipient: ${toFriendlyAddress(note.recipient, artifactMap)}`);
129
135
  for (const field of note.note.items) {
130
136
  log(` ${field.toString()}`);
131
137
  }
@@ -142,22 +148,49 @@ function toFriendlyAddress(address: AztecAddress, artifactMap: ArtifactMap) {
142
148
 
143
149
  async function getKnownNullifiers(wallet: CLIWallet, artifactMap: ArtifactMap) {
144
150
  const knownContracts = await wallet.getContracts();
145
- const deployerAddress = ProtocolContractAddress.ContractInstanceRegistry;
146
- 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
+
147
157
  const initNullifiers: Record<string, AztecAddress> = {};
148
158
  const deployNullifiers: Record<string, AztecAddress> = {};
149
159
  const classNullifiers: Record<string, string> = {};
150
- for (const contract of knownContracts) {
151
- initNullifiers[(await siloNullifier(contract, contract.toField())).toString()] = contract;
152
- 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;
153
167
  }
154
- for (const artifact of Object.values(artifactMap)) {
155
- classNullifiers[(await siloNullifier(classRegistryAddress, artifact.classId)).toString()] =
156
- `${artifact.name}Class<${artifact.classId}>`;
168
+ for (const { nullifier, label } of classResults) {
169
+ classNullifiers[nullifier.toString()] = label;
157
170
  }
171
+
158
172
  return { initNullifiers, deployNullifiers, classNullifiers };
159
173
  }
160
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
+
161
194
  type ArtifactMap = Record<string, ContractArtifactWithClassId>;
162
195
  type ContractArtifactWithClassId = ContractArtifact & { classId: Fr };
163
196
 
@@ -165,15 +198,11 @@ async function getKnownArtifacts(wallet: CLIWallet): Promise<ArtifactMap> {
165
198
  const knownContractAddresses = await wallet.getContracts();
166
199
  const knownContracts = (
167
200
  await Promise.all(knownContractAddresses.map(contractAddress => wallet.getContractMetadata(contractAddress)))
168
- ).map(contractMetadata => contractMetadata.contractInstance);
201
+ ).map(contractMetadata => contractMetadata.instance);
169
202
  const classIds = [...new Set(knownContracts.map(contract => contract?.currentContractClassId))];
170
203
  const knownArtifacts = (
171
- await Promise.all(classIds.map(classId => (classId ? wallet.getContractClassMetadata(classId) : undefined)))
172
- ).map(contractClassMetadata =>
173
- contractClassMetadata
174
- ? { ...contractClassMetadata.artifact, classId: contractClassMetadata.contractClass?.id }
175
- : undefined,
176
- );
204
+ await Promise.all(classIds.map(classId => (classId ? wallet.getContractArtifact(classId) : undefined)))
205
+ ).map((artifact, index) => (artifact ? { ...artifact, classId: classIds[index] } : undefined));
177
206
  const map: Record<string, ContractArtifactWithClassId> = {};
178
207
  for (const instance of knownContracts) {
179
208
  if (instance) {