@aztec/wallet-sdk 0.0.1-commit.d6f2b3f94 → 0.0.1-commit.d939eb5aa

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 (58) hide show
  1. package/dest/base-wallet/base_wallet.d.ts +58 -39
  2. package/dest/base-wallet/base_wallet.d.ts.map +1 -1
  3. package/dest/base-wallet/base_wallet.js +194 -71
  4. package/dest/base-wallet/index.d.ts +2 -2
  5. package/dest/base-wallet/index.d.ts.map +1 -1
  6. package/dest/base-wallet/utils.d.ts +5 -3
  7. package/dest/base-wallet/utils.d.ts.map +1 -1
  8. package/dest/base-wallet/utils.js +10 -5
  9. package/dest/crypto.d.ts +39 -1
  10. package/dest/crypto.d.ts.map +1 -1
  11. package/dest/crypto.js +88 -0
  12. package/dest/extension/provider/extension_wallet.d.ts +4 -6
  13. package/dest/extension/provider/extension_wallet.d.ts.map +1 -1
  14. package/dest/extension/provider/extension_wallet.js +9 -2
  15. package/dest/extension/provider/index.d.ts +2 -2
  16. package/dest/extension/provider/index.d.ts.map +1 -1
  17. package/dest/iframe/handlers/iframe_connection_handler.d.ts +118 -0
  18. package/dest/iframe/handlers/iframe_connection_handler.d.ts.map +1 -0
  19. package/dest/iframe/handlers/iframe_connection_handler.js +228 -0
  20. package/dest/iframe/handlers/index.d.ts +2 -0
  21. package/dest/iframe/handlers/index.d.ts.map +1 -0
  22. package/dest/iframe/handlers/index.js +1 -0
  23. package/dest/iframe/provider/iframe_discovery.d.ts +25 -0
  24. package/dest/iframe/provider/iframe_discovery.d.ts.map +1 -0
  25. package/dest/iframe/provider/iframe_discovery.js +167 -0
  26. package/dest/iframe/provider/iframe_provider.d.ts +65 -0
  27. package/dest/iframe/provider/iframe_provider.d.ts.map +1 -0
  28. package/dest/iframe/provider/iframe_provider.js +257 -0
  29. package/dest/iframe/provider/iframe_wallet.d.ts +68 -0
  30. package/dest/iframe/provider/iframe_wallet.d.ts.map +1 -0
  31. package/dest/iframe/provider/iframe_wallet.js +200 -0
  32. package/dest/iframe/provider/index.d.ts +4 -0
  33. package/dest/iframe/provider/index.d.ts.map +1 -0
  34. package/dest/iframe/provider/index.js +3 -0
  35. package/dest/manager/types.d.ts +6 -5
  36. package/dest/manager/types.d.ts.map +1 -1
  37. package/dest/manager/wallet_manager.d.ts +1 -1
  38. package/dest/manager/wallet_manager.d.ts.map +1 -1
  39. package/dest/manager/wallet_manager.js +48 -18
  40. package/dest/types.d.ts +14 -2
  41. package/dest/types.d.ts.map +1 -1
  42. package/dest/types.js +4 -0
  43. package/package.json +12 -8
  44. package/src/base-wallet/base_wallet.ts +265 -127
  45. package/src/base-wallet/index.ts +6 -1
  46. package/src/base-wallet/utils.ts +15 -4
  47. package/src/crypto.ts +104 -0
  48. package/src/extension/provider/extension_wallet.ts +13 -10
  49. package/src/extension/provider/index.ts +1 -1
  50. package/src/iframe/handlers/iframe_connection_handler.ts +328 -0
  51. package/src/iframe/handlers/index.ts +7 -0
  52. package/src/iframe/provider/iframe_discovery.ts +185 -0
  53. package/src/iframe/provider/iframe_provider.ts +331 -0
  54. package/src/iframe/provider/iframe_wallet.ts +229 -0
  55. package/src/iframe/provider/index.ts +3 -0
  56. package/src/manager/types.ts +5 -4
  57. package/src/manager/wallet_manager.ts +55 -23
  58. package/src/types.ts +13 -0
@@ -1,8 +1,8 @@
1
- import type { Account } from '@aztec/aztec.js/account';
1
+ import type { Account, NoFrom } from '@aztec/aztec.js/account';
2
2
  import type { CallIntent, IntentInnerHash } from '@aztec/aztec.js/authorization';
3
3
  import { type InteractionWaitOptions, type SendReturn } from '@aztec/aztec.js/contracts';
4
4
  import type { FeePaymentMethod } from '@aztec/aztec.js/fee';
5
- import type { Aliased, AppCapabilities, BatchResults, BatchedMethod, PrivateEvent, PrivateEventFilter, ProfileOptions, SendOptions, SimulateOptions, Wallet, WalletCapabilities } from '@aztec/aztec.js/wallet';
5
+ import { type Aliased, type AppCapabilities, type BatchResults, type BatchedMethod, ContractInitializationStatus, type ExecuteUtilityOptions, type PrivateEvent, type PrivateEventFilter, type ProfileOptions, type SendOptions, type SimulateOptions, TxSimulationResultWithAppOffset, type Wallet, type WalletCapabilities } from '@aztec/aztec.js/wallet';
6
6
  import { AccountFeePaymentMethodOptions } from '@aztec/entrypoints/account';
7
7
  import type { ChainInfo } from '@aztec/entrypoints/interfaces';
8
8
  import { Fr } from '@aztec/foundation/curves/bn254';
@@ -10,12 +10,11 @@ import type { FieldsOf } from '@aztec/foundation/types';
10
10
  import type { PXE } from '@aztec/pxe/server';
11
11
  import { type ContractArtifact, type EventMetadataDefinition, type FunctionCall } from '@aztec/stdlib/abi';
12
12
  import type { AuthWitness } from '@aztec/stdlib/auth-witness';
13
- import type { AztecAddress } from '@aztec/stdlib/aztec-address';
13
+ import { AztecAddress } from '@aztec/stdlib/aztec-address';
14
14
  import { type ContractInstanceWithAddress } from '@aztec/stdlib/contract';
15
- import { GasSettings } from '@aztec/stdlib/gas';
15
+ import { GasFees, GasSettings, ManaUsageEstimate } from '@aztec/stdlib/gas';
16
16
  import type { AztecNode } from '@aztec/stdlib/interfaces/client';
17
- import { type TxExecutionRequest, type TxProfileResult, TxSimulationResult, type UtilitySimulationResult } from '@aztec/stdlib/tx';
18
- import { ExecutionPayload } from '@aztec/stdlib/tx';
17
+ import { ExecutionPayload, type TxExecutionRequest, type TxProfileResult, type UtilityExecutionResult } from '@aztec/stdlib/tx';
19
18
  /**
20
19
  * Options to configure fee payment for a transaction
21
20
  */
@@ -26,10 +25,31 @@ export type FeeOptions = {
26
25
  */
27
26
  walletFeePaymentMethod?: FeePaymentMethod;
28
27
  /** Configuration options for the account to properly handle the selected fee payment method */
29
- accountFeePaymentMethodOptions: AccountFeePaymentMethodOptions;
28
+ accountFeePaymentMethodOptions?: AccountFeePaymentMethodOptions;
30
29
  /** The gas settings to use for the transaction */
31
30
  gasSettings: GasSettings;
32
31
  };
32
+ /** Options for `simulateViaEntrypoint`. */
33
+ export type SimulateViaEntrypointOptions = Pick<SimulateOptions, 'from' | 'additionalScopes' | 'skipTxValidation' | 'skipFeeEnforcement'> & {
34
+ /** Fee options for the entrypoint */
35
+ feeOptions: FeeOptions;
36
+ };
37
+ /** Options for `completeFeeOptions`. */
38
+ export type CompleteFeeOptionsConfig = {
39
+ /** The address where the transaction is being sent from. */
40
+ from: AztecAddress | NoFrom;
41
+ /** The address paying for fees (if any fee payment method is embedded in the execution payload). */
42
+ feePayer?: AztecAddress;
43
+ /** User-provided partial gas settings. */
44
+ gasSettings?: Partial<FieldsOf<GasSettings>>;
45
+ /** If true, returns gas settings with high gas limits for estimation. If false, uses fallback limits. */
46
+ forEstimation?: boolean;
47
+ /**
48
+ * Assumed network congestion level for fee prediction. Controls how aggressively the wallet
49
+ * estimates future fees. Defaults to Limit (worst case) when not specified.
50
+ */
51
+ congestionEstimate?: ManaUsageEstimate;
52
+ };
33
53
  /**
34
54
  * A base class for Wallet implementations
35
55
  */
@@ -39,7 +59,8 @@ export declare abstract class BaseWallet implements Wallet {
39
59
  protected log: import("@aztec/foundation/log").Logger;
40
60
  protected minFeePadding: number;
41
61
  protected cancellableTransactions: boolean;
42
- protected constructor(pxe: PXE, aztecNode: AztecNode);
62
+ protected constructor(pxe: PXE, aztecNode: AztecNode, log?: import("@aztec/foundation/log").Logger);
63
+ protected scopesFrom(from: AztecAddress | NoFrom, additionalScopes?: AztecAddress[]): AztecAddress[];
43
64
  protected abstract getAccountFromAddress(address: AztecAddress): Promise<Account>;
44
65
  abstract getAccounts(): Promise<Aliased<AztecAddress>[]>;
45
66
  /**
@@ -51,7 +72,7 @@ export declare abstract class BaseWallet implements Wallet {
51
72
  */
52
73
  getAddressBook(): Promise<Aliased<AztecAddress>[]>;
53
74
  getChainInfo(): Promise<ChainInfo>;
54
- protected createTxExecutionRequestFromPayloadAndFee(executionPayload: ExecutionPayload, from: AztecAddress, feeOptions: FeeOptions): Promise<TxExecutionRequest>;
75
+ protected createTxExecutionRequestFromPayloadAndFee(executionPayload: ExecutionPayload, from: AztecAddress | NoFrom, feeOptions: FeeOptions): Promise<TxExecutionRequest>;
55
76
  createAuthWit(from: AztecAddress, messageHashOrIntent: IntentInnerHash | CallIntent): Promise<AuthWitness>;
56
77
  /**
57
78
  * Request capabilities from the wallet.
@@ -70,41 +91,30 @@ export declare abstract class BaseWallet implements Wallet {
70
91
  batch<const T extends readonly BatchedMethod[]>(methods: T): Promise<BatchResults<T>>;
71
92
  /**
72
93
  * Completes partial user-provided fee options with wallet defaults.
73
- * @param from - The address where the transaction is being sent from
74
- * @param feePayer - The address paying for fees (if any fee payment method is embedded in the execution payload)
75
- * @param gasSettings - User-provided partial gas settings
76
- * @returns - Complete fee options that can be used to create a transaction execution request
94
+ * @param config - Fee completion config.
77
95
  */
78
- protected completeFeeOptions(from: AztecAddress, feePayer?: AztecAddress, gasSettings?: Partial<FieldsOf<GasSettings>>): Promise<FeeOptions>;
96
+ protected completeFeeOptions(config: CompleteFeeOptionsConfig): Promise<FeeOptions>;
79
97
  /**
80
- * Completes partial user-provided fee options with unreasonably high gas limits
81
- * for gas estimation. Uses the same logic as completeFeeOptions but sets high limits
82
- * to avoid running out of gas during estimation.
83
- * @param from - The address where the transaction is being sent from
84
- * @param feePayer - The address paying for fees (if any fee payment method is embedded in the execution payload)
85
- * @param gasSettings - User-provided partial gas settings
98
+ * Returns the worst-case min fee across predicted future slots.
99
+ * Falls back to getCurrentMinFees if the node doesn't support getPredictedMinFees.
100
+ * @param estimate - The mana usage estimate to use for fee prediction. Defaults to Limit for conservative estimation.
86
101
  */
87
- protected completeFeeOptionsForEstimation(from: AztecAddress, feePayer?: AztecAddress, gasSettings?: Partial<FieldsOf<GasSettings>>): Promise<{
88
- /**
89
- * A wallet-provided fallback fee payment method that is used only if the transaction that is being constructed
90
- * doesn't already include one
91
- */
92
- walletFeePaymentMethod?: FeePaymentMethod | undefined;
93
- /** Configuration options for the account to properly handle the selected fee payment method */
94
- accountFeePaymentMethodOptions: AccountFeePaymentMethodOptions;
95
- gasSettings: GasSettings;
96
- }>;
102
+ protected getMinFees(estimate?: ManaUsageEstimate): Promise<GasFees>;
97
103
  registerSender(address: AztecAddress, _alias?: string): Promise<AztecAddress>;
98
104
  registerContract(instance: ContractInstanceWithAddress, artifact?: ContractArtifact, secretKey?: Fr): Promise<ContractInstanceWithAddress>;
99
105
  /**
100
106
  * Simulates calls through the standard PXE path (account entrypoint).
101
107
  * @param executionPayload - The execution payload to simulate.
102
- * @param from - The sender address.
103
- * @param feeOptions - Fee options for the transaction.
104
- * @param skipTxValidation - Whether to skip tx validation.
105
- * @param skipFeeEnforcement - Whether to skip fee enforcement.
108
+ * @param opts - Simulation options.
106
109
  */
107
- protected simulateViaEntrypoint(executionPayload: ExecutionPayload, from: AztecAddress, feeOptions: FeeOptions, skipTxValidation?: boolean, skipFeeEnforcement?: boolean): Promise<TxSimulationResult>;
110
+ protected simulateViaEntrypoint(executionPayload: ExecutionPayload, opts: SimulateViaEntrypointOptions): Promise<TxSimulationResultWithAppOffset>;
111
+ /**
112
+ * Computes the index where the app's calls begin in the flattened array of calls (0 = entrypoint/root, 1..N = fee
113
+ * calls, N+1 = app).
114
+ * @param from - The sender address, or NO_FROM for the default entrypoint.
115
+ * @param feeOptions - Fee options containing the wallet fee payment method.
116
+ */
117
+ protected computeAppCallOffset(from: AztecAddress | NoFrom, feeOptions: FeeOptions): Promise<number>;
108
118
  /**
109
119
  * Simulates a transaction, optimizing leading public static calls by running them directly
110
120
  * on the node while sending the remaining calls through the standard PXE path.
@@ -113,15 +123,24 @@ export declare abstract class BaseWallet implements Wallet {
113
123
  * @param opts - Simulation options (from address, fee settings, etc.).
114
124
  * @returns The merged simulation result.
115
125
  */
116
- simulateTx(executionPayload: ExecutionPayload, opts: SimulateOptions): Promise<TxSimulationResult>;
126
+ simulateTx(executionPayload: ExecutionPayload, opts: SimulateOptions): Promise<TxSimulationResultWithAppOffset>;
117
127
  profileTx(executionPayload: ExecutionPayload, opts: ProfileOptions): Promise<TxProfileResult>;
118
128
  sendTx<W extends InteractionWaitOptions = undefined>(executionPayload: ExecutionPayload, opts: SendOptions<W>): Promise<SendReturn<W>>;
129
+ /**
130
+ * Resolves a contract address to a human-readable name via PXE, if available.
131
+ * @param address - The contract address to resolve.
132
+ */
133
+ protected getContractName(address: AztecAddress): Promise<string | undefined>;
119
134
  protected contextualizeError(err: Error, ...context: string[]): Error;
120
- simulateUtility(call: FunctionCall, authwits?: AuthWitness[]): Promise<UtilitySimulationResult>;
135
+ executeUtility(call: FunctionCall, opts: ExecuteUtilityOptions): Promise<UtilityExecutionResult>;
121
136
  getPrivateEvents<T>(eventDef: EventMetadataDefinition, eventFilter: PrivateEventFilter): Promise<PrivateEvent<T>[]>;
137
+ /**
138
+ * Returns metadata about a contract, including whether it has been initialized, published, and updated.
139
+ * @param address - The contract address to query.
140
+ */
122
141
  getContractMetadata(address: AztecAddress): Promise<{
123
142
  instance: ContractInstanceWithAddress | undefined;
124
- isContractInitialized: boolean;
143
+ initializationStatus: ContractInitializationStatus;
125
144
  isContractPublished: boolean;
126
145
  isContractUpdated: boolean;
127
146
  updatedContractClassId: Fr | undefined;
@@ -131,4 +150,4 @@ export declare abstract class BaseWallet implements Wallet {
131
150
  isContractClassPubliclyRegistered: boolean;
132
151
  }>;
133
152
  }
134
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZV93YWxsZXQuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9iYXNlLXdhbGxldC9iYXNlX3dhbGxldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN2RCxPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsZUFBZSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDakYsT0FBTyxFQUFFLEtBQUssc0JBQXNCLEVBQVcsS0FBSyxVQUFVLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNsRyxPQUFPLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRTVELE9BQU8sS0FBSyxFQUNWLE9BQU8sRUFDUCxlQUFlLEVBQ2YsWUFBWSxFQUNaLGFBQWEsRUFDYixZQUFZLEVBQ1osa0JBQWtCLEVBQ2xCLGNBQWMsRUFDZCxXQUFXLEVBQ1gsZUFBZSxFQUNmLE1BQU0sRUFDTixrQkFBa0IsRUFDbkIsTUFBTSx3QkFBd0IsQ0FBQztBQU9oQyxPQUFPLEVBQUUsOEJBQThCLEVBQXdDLE1BQU0sNEJBQTRCLENBQUM7QUFDbEgsT0FBTyxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDL0QsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRXBELE9BQU8sS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3hELE9BQU8sS0FBSyxFQUFFLEdBQUcsRUFBc0IsTUFBTSxtQkFBbUIsQ0FBQztBQUNqRSxPQUFPLEVBQ0wsS0FBSyxnQkFBZ0IsRUFDckIsS0FBSyx1QkFBdUIsRUFDNUIsS0FBSyxZQUFZLEVBRWxCLE1BQU0sbUJBQW1CLENBQUM7QUFDM0IsT0FBTyxLQUFLLEVBQUUsV0FBVyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDOUQsT0FBTyxLQUFLLEVBQUUsWUFBWSxFQUFF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
153
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZV93YWxsZXQuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9iYXNlLXdhbGxldC9iYXNlX3dhbGxldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFL0QsT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLGVBQWUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2pGLE9BQU8sRUFDTCxLQUFLLHNCQUFzQixFQUUzQixLQUFLLFVBQVUsRUFFaEIsTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRTVELE9BQU8sRUFDTCxLQUFLLE9BQU8sRUFDWixLQUFLLGVBQWUsRUFDcEIsS0FBSyxZQUFZLEVBQ2pCLEtBQUssYUFBYSxFQUNsQiw0QkFBNEIsRUFDNUIsS0FBSyxxQkFBcUIsRUFDMUIsS0FBSyxZQUFZLEVBQ2pCLEtBQUssa0JBQWtCLEVBQ3ZCLEtBQUssY0FBYyxFQUNuQixLQUFLLFdBQVcsRUFDaEIsS0FBSyxlQUFlLEVBQ3BCLCtCQUErQixFQUMvQixLQUFLLE1BQU0sRUFDWCxLQUFLLGtCQUFrQixFQUN4QixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFBRSw4QkFBOEIsRUFBd0MsTUFBTSw0QkFBNEIsQ0FBQztBQUVsSCxPQUFPLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFcEQsT0FBTyxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFeEQsT0FBTyxLQUFLLEVBQUUsR0FBRyxFQUFzQixNQUFNLG1CQUFtQixDQUFDO0FBQ2pFLE9BQU8sRUFDTCxLQUFLLGdCQUFnQixFQUNyQixLQUFLLHVCQUF1QixFQUM1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
@@ -1 +1 @@
1
- {"version":3,"file":"base_wallet.d.ts","sourceRoot":"","sources":["../../src/base-wallet/base_wallet.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"base_wallet.d.ts","sourceRoot":"","sources":["../../src/base-wallet/base_wallet.ts"],"names":[],"mappings":"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"}
@@ -1,14 +1,18 @@
1
- import { NO_WAIT } from '@aztec/aztec.js/contracts';
1
+ import { NO_FROM } from '@aztec/aztec.js/account';
2
+ import { NO_WAIT, extractOffchainOutput } from '@aztec/aztec.js/contracts';
2
3
  import { waitForTx } from '@aztec/aztec.js/node';
3
- import { GAS_ESTIMATION_DA_GAS_LIMIT, GAS_ESTIMATION_L2_GAS_LIMIT, GAS_ESTIMATION_TEARDOWN_DA_GAS_LIMIT, GAS_ESTIMATION_TEARDOWN_L2_GAS_LIMIT } from '@aztec/constants';
4
+ import { ContractInitializationStatus, TxSimulationResultWithAppOffset } from '@aztec/aztec.js/wallet';
4
5
  import { AccountFeePaymentMethodOptions } from '@aztec/entrypoints/account';
6
+ import { DefaultEntrypoint } from '@aztec/entrypoints/default';
5
7
  import { Fr } from '@aztec/foundation/curves/bn254';
6
8
  import { createLogger } from '@aztec/foundation/log';
9
+ import { displayDebugLogs } from '@aztec/pxe/client/lazy';
7
10
  import { decodeFromAbi } from '@aztec/stdlib/abi';
11
+ import { AztecAddress } from '@aztec/stdlib/aztec-address';
8
12
  import { computePartialAddress, getContractClassFromArtifact } from '@aztec/stdlib/contract';
9
13
  import { SimulationError } from '@aztec/stdlib/errors';
10
- import { Gas, GasSettings } from '@aztec/stdlib/gas';
11
- import { siloNullifier } from '@aztec/stdlib/hash';
14
+ import { Gas, GasFees, GasSettings, ManaUsageEstimate } from '@aztec/stdlib/gas';
15
+ import { computeSiloedPrivateInitializationNullifier, computeSiloedPublicInitializationNullifier } from '@aztec/stdlib/hash';
12
16
  import { mergeExecutionPayloads } from '@aztec/stdlib/tx';
13
17
  import { inspect } from 'util';
14
18
  import { buildMergedSimulationResult, extractOptimizablePublicStaticCalls, simulateViaNode } from './utils.js';
@@ -21,13 +25,23 @@ import { buildMergedSimulationResult, extractOptimizablePublicStaticCalls, simul
21
25
  minFeePadding;
22
26
  cancellableTransactions;
23
27
  // Protected because we want to force wallets to instantiate their own PXE.
24
- constructor(pxe, aztecNode){
28
+ constructor(pxe, aztecNode, log = createLogger('wallet-sdk:base_wallet')){
25
29
  this.pxe = pxe;
26
30
  this.aztecNode = aztecNode;
27
- this.log = createLogger('wallet-sdk:base_wallet');
31
+ this.log = log;
28
32
  this.minFeePadding = 0.5;
29
33
  this.cancellableTransactions = false;
30
34
  }
35
+ scopesFrom(from, additionalScopes = []) {
36
+ const allScopes = from === NO_FROM ? additionalScopes : [
37
+ from,
38
+ ...additionalScopes
39
+ ];
40
+ const scopeSet = new Set(allScopes.map((address)=>address.toString()));
41
+ return [
42
+ ...scopeSet
43
+ ].map(AztecAddress.fromString);
44
+ }
31
45
  /**
32
46
  * Returns the list of aliased contacts associated with the wallet.
33
47
  * This base implementation directly returns PXE's senders, but note that in general contacts are a superset of senders.
@@ -50,18 +64,24 @@ import { buildMergedSimulationResult, extractOptimizablePublicStaticCalls, simul
50
64
  }
51
65
  async createTxExecutionRequestFromPayloadAndFee(executionPayload, from, feeOptions) {
52
66
  const feeExecutionPayload = await feeOptions.walletFeePaymentMethod?.getExecutionPayload();
53
- const executionOptions = {
54
- txNonce: Fr.random(),
55
- cancellable: this.cancellableTransactions,
56
- feePaymentMethodOptions: feeOptions.accountFeePaymentMethodOptions
57
- };
58
67
  const finalExecutionPayload = feeExecutionPayload ? mergeExecutionPayloads([
59
68
  feeExecutionPayload,
60
69
  executionPayload
61
70
  ]) : executionPayload;
62
- const fromAccount = await this.getAccountFromAddress(from);
63
71
  const chainInfo = await this.getChainInfo();
64
- return fromAccount.createTxExecutionRequest(finalExecutionPayload, feeOptions.gasSettings, chainInfo, executionOptions);
72
+ if (from === NO_FROM) {
73
+ const entrypoint = new DefaultEntrypoint();
74
+ return entrypoint.createTxExecutionRequest(finalExecutionPayload, feeOptions.gasSettings, chainInfo);
75
+ } else {
76
+ const fromAccount = await this.getAccountFromAddress(from);
77
+ const executionOptions = {
78
+ txNonce: Fr.random(),
79
+ cancellable: this.cancellableTransactions,
80
+ // If from is an address, feeOptions include the way the account contract should handle the fee payment
81
+ feePaymentMethodOptions: feeOptions.accountFeePaymentMethodOptions
82
+ };
83
+ return fromAccount.createTxExecutionRequest(finalExecutionPayload, feeOptions.gasSettings, chainInfo, executionOptions);
84
+ }
65
85
  }
66
86
  async createAuthWit(from, messageHashOrIntent) {
67
87
  const account = await this.getAccountFromAddress(from);
@@ -104,26 +124,33 @@ import { buildMergedSimulationResult, extractOptimizablePublicStaticCalls, simul
104
124
  }
105
125
  /**
106
126
  * Completes partial user-provided fee options with wallet defaults.
107
- * @param from - The address where the transaction is being sent from
108
- * @param feePayer - The address paying for fees (if any fee payment method is embedded in the execution payload)
109
- * @param gasSettings - User-provided partial gas settings
110
- * @returns - Complete fee options that can be used to create a transaction execution request
111
- */ async completeFeeOptions(from, feePayer, gasSettings) {
112
- const maxFeesPerGas = gasSettings?.maxFeesPerGas ?? (await this.aztecNode.getCurrentMinFees()).mul(1 + this.minFeePadding);
127
+ * @param config - Fee completion config.
128
+ */ async completeFeeOptions(config) {
129
+ const { from, feePayer, gasSettings, forEstimation, congestionEstimate } = config;
130
+ const maxFeesPerGas = gasSettings?.maxFeesPerGas ?? (await this.getMinFees(congestionEstimate)).mul(1 + this.minFeePadding);
113
131
  let accountFeePaymentMethodOptions;
114
- // The transaction does not include a fee payment method, so we set the flag
115
- // for the account to use its fee juice balance
116
- if (!feePayer) {
117
- accountFeePaymentMethodOptions = AccountFeePaymentMethodOptions.PREEXISTING_FEE_JUICE;
118
- } else {
119
- // The transaction includes fee payment method, so we check if we are the fee payer for it
120
- // (this can only happen if the embedded payment method is FeeJuiceWithClaim)
121
- accountFeePaymentMethodOptions = from.equals(feePayer) ? AccountFeePaymentMethodOptions.FEE_JUICE_WITH_CLAIM : AccountFeePaymentMethodOptions.EXTERNAL;
132
+ // If from is an address, we need to determine the appropriate fee payment method options for the
133
+ // account contract entrypoint to use
134
+ if (from !== NO_FROM) {
135
+ if (!feePayer) {
136
+ // The transaction does not include a fee payment method, so we set the flag
137
+ // for the account to use its fee juice balance
138
+ accountFeePaymentMethodOptions = AccountFeePaymentMethodOptions.PREEXISTING_FEE_JUICE;
139
+ } else {
140
+ // The transaction includes fee payment method, so we check if we are the fee payer for it
141
+ // (this can only happen if the embedded payment method is FeeJuiceWithClaim)
142
+ accountFeePaymentMethodOptions = from.equals(feePayer) ? AccountFeePaymentMethodOptions.FEE_JUICE_WITH_CLAIM : AccountFeePaymentMethodOptions.EXTERNAL;
143
+ }
122
144
  }
123
- const fullGasSettings = GasSettings.default({
124
- ...gasSettings,
125
- maxFeesPerGas
126
- });
145
+ const gasSettingsOverrides = {
146
+ gasLimits: gasSettings?.gasLimits ? Gas.from(gasSettings.gasLimits) : undefined,
147
+ teardownGasLimits: gasSettings?.teardownGasLimits ? Gas.from(gasSettings.teardownGasLimits) : undefined,
148
+ maxFeesPerGas,
149
+ maxPriorityFeesPerGas: gasSettings?.maxPriorityFeesPerGas ?? GasFees.empty()
150
+ };
151
+ // When estimating gas (simulation), use high limits so the simulation doesn't run out of gas.
152
+ // When sending for real, use protocol max limits that the network will actually accept.
153
+ const fullGasSettings = forEstimation ? GasSettings.forEstimation(gasSettingsOverrides) : GasSettings.fallback(gasSettingsOverrides);
127
154
  this.log.debug(`Using L2 gas settings`, fullGasSettings);
128
155
  return {
129
156
  gasSettings: fullGasSettings,
@@ -132,22 +159,24 @@ import { buildMergedSimulationResult, extractOptimizablePublicStaticCalls, simul
132
159
  };
133
160
  }
134
161
  /**
135
- * Completes partial user-provided fee options with unreasonably high gas limits
136
- * for gas estimation. Uses the same logic as completeFeeOptions but sets high limits
137
- * to avoid running out of gas during estimation.
138
- * @param from - The address where the transaction is being sent from
139
- * @param feePayer - The address paying for fees (if any fee payment method is embedded in the execution payload)
140
- * @param gasSettings - User-provided partial gas settings
141
- */ async completeFeeOptionsForEstimation(from, feePayer, gasSettings) {
142
- const defaultFeeOptions = await this.completeFeeOptions(from, feePayer, gasSettings);
143
- const { gasSettings: { maxFeesPerGas, maxPriorityFeesPerGas } } = defaultFeeOptions;
144
- // Use unrealistically high gas limits for estimation to avoid running out of gas.
145
- // They will be tuned down after the simulation.
146
- const gasSettingsForEstimation = new GasSettings(new Gas(GAS_ESTIMATION_DA_GAS_LIMIT, GAS_ESTIMATION_L2_GAS_LIMIT), new Gas(GAS_ESTIMATION_TEARDOWN_DA_GAS_LIMIT, GAS_ESTIMATION_TEARDOWN_L2_GAS_LIMIT), maxFeesPerGas, maxPriorityFeesPerGas);
147
- return {
148
- ...defaultFeeOptions,
149
- gasSettings: gasSettingsForEstimation
150
- };
162
+ * Returns the worst-case min fee across predicted future slots.
163
+ * Falls back to getCurrentMinFees if the node doesn't support getPredictedMinFees.
164
+ * @param estimate - The mana usage estimate to use for fee prediction. Defaults to Limit for conservative estimation.
165
+ */ async getMinFees(estimate = ManaUsageEstimate.Limit) {
166
+ try {
167
+ const predicted = await this.aztecNode.getPredictedMinFees(estimate);
168
+ if (predicted.length === 0) {
169
+ return this.aztecNode.getCurrentMinFees();
170
+ }
171
+ return predicted.reduce((worst, fees)=>fees.feePerL2Gas > worst.feePerL2Gas ? fees : worst);
172
+ } catch (err) {
173
+ // Fallback for old nodes that don't support getPredictedMinFees.
174
+ // Only fall back on method-not-found errors (JSON-RPC code -32601); rethrow others.
175
+ if (err?.cause?.code === -32601 || err?.message?.includes('Method not found')) {
176
+ return this.aztecNode.getCurrentMinFees();
177
+ }
178
+ throw err;
179
+ }
151
180
  }
152
181
  registerSender(address, _alias = '') {
153
182
  return this.pxe.registerSender(address);
@@ -187,13 +216,29 @@ import { buildMergedSimulationResult, extractOptimizablePublicStaticCalls, simul
187
216
  /**
188
217
  * Simulates calls through the standard PXE path (account entrypoint).
189
218
  * @param executionPayload - The execution payload to simulate.
190
- * @param from - The sender address.
191
- * @param feeOptions - Fee options for the transaction.
192
- * @param skipTxValidation - Whether to skip tx validation.
193
- * @param skipFeeEnforcement - Whether to skip fee enforcement.
194
- */ async simulateViaEntrypoint(executionPayload, from, feeOptions, skipTxValidation, skipFeeEnforcement) {
195
- const txRequest = await this.createTxExecutionRequestFromPayloadAndFee(executionPayload, from, feeOptions);
196
- return this.pxe.simulateTx(txRequest, true, skipTxValidation, skipFeeEnforcement);
219
+ * @param opts - Simulation options.
220
+ */ async simulateViaEntrypoint(executionPayload, opts) {
221
+ const txRequest = await this.createTxExecutionRequestFromPayloadAndFee(executionPayload, opts.from, opts.feeOptions);
222
+ const result = await this.pxe.simulateTx(txRequest, {
223
+ simulatePublic: true,
224
+ skipTxValidation: opts.skipTxValidation,
225
+ skipFeeEnforcement: opts.skipFeeEnforcement,
226
+ scopes: this.scopesFrom(opts.from, opts.additionalScopes)
227
+ });
228
+ const appCallOffset = await this.computeAppCallOffset(opts.from, opts.feeOptions);
229
+ return TxSimulationResultWithAppOffset.fromResultAndOffset(result, appCallOffset);
230
+ }
231
+ /**
232
+ * Computes the index where the app's calls begin in the flattened array of calls (0 = entrypoint/root, 1..N = fee
233
+ * calls, N+1 = app).
234
+ * @param from - The sender address, or NO_FROM for the default entrypoint.
235
+ * @param feeOptions - Fee options containing the wallet fee payment method.
236
+ */ async computeAppCallOffset(from, feeOptions) {
237
+ if (from === NO_FROM) {
238
+ return 0;
239
+ }
240
+ const feeExecutionPayload = await feeOptions.walletFeePaymentMethod?.getExecutionPayload();
241
+ return (feeExecutionPayload?.calls.length ?? 0) + 1; // +1 for entrypoint
197
242
  }
198
243
  /**
199
244
  * Simulates a transaction, optimizing leading public static calls by running them directly
@@ -203,29 +248,64 @@ import { buildMergedSimulationResult, extractOptimizablePublicStaticCalls, simul
203
248
  * @param opts - Simulation options (from address, fee settings, etc.).
204
249
  * @returns The merged simulation result.
205
250
  */ async simulateTx(executionPayload, opts) {
206
- 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);
251
+ const feeOptions = await this.completeFeeOptions({
252
+ from: opts.from,
253
+ feePayer: executionPayload.feePayer,
254
+ gasSettings: opts.fee?.gasSettings,
255
+ forEstimation: true,
256
+ congestionEstimate: opts.fee?.congestionEstimate
257
+ });
207
258
  const { optimizableCalls, remainingCalls } = extractOptimizablePublicStaticCalls(executionPayload);
208
259
  const remainingPayload = {
209
260
  ...executionPayload,
210
261
  calls: remainingCalls
211
262
  };
212
263
  const chainInfo = await this.getChainInfo();
213
- const blockHeader = await this.pxe.getSyncedBlockHeader();
264
+ let blockHeader;
265
+ // PXE might not be synced yet, so we pull the latest header from the node
266
+ // To keep things consistent, we'll always try with PXE first
267
+ try {
268
+ blockHeader = await this.pxe.getSyncedBlockHeader();
269
+ } catch {
270
+ blockHeader = await this.aztecNode.getBlockHeader();
271
+ }
272
+ const simulationOrigin = opts.from === NO_FROM ? AztecAddress.ZERO : opts.from;
214
273
  const [optimizedResults, normalResult] = await Promise.all([
215
- optimizableCalls.length > 0 ? simulateViaNode(this.aztecNode, optimizableCalls, opts.from, chainInfo, feeOptions.gasSettings, blockHeader, opts.skipFeeEnforcement ?? true) : Promise.resolve([]),
216
- remainingCalls.length > 0 ? this.simulateViaEntrypoint(remainingPayload, opts.from, feeOptions, opts.skipTxValidation, opts.skipFeeEnforcement ?? true) : Promise.resolve(null)
274
+ optimizableCalls.length > 0 ? simulateViaNode(this.aztecNode, optimizableCalls, simulationOrigin, chainInfo, feeOptions.gasSettings, blockHeader, opts.skipFeeEnforcement ?? true, this.getContractName.bind(this)) : Promise.resolve([]),
275
+ remainingCalls.length > 0 ? this.simulateViaEntrypoint(remainingPayload, {
276
+ from: opts.from,
277
+ feeOptions,
278
+ additionalScopes: opts.additionalScopes,
279
+ skipTxValidation: opts.skipTxValidation,
280
+ skipFeeEnforcement: opts.skipFeeEnforcement ?? true
281
+ }) : Promise.resolve(null)
217
282
  ]);
218
283
  return buildMergedSimulationResult(optimizedResults, normalResult);
219
284
  }
220
285
  async profileTx(executionPayload, opts) {
221
- const feeOptions = await this.completeFeeOptions(opts.from, executionPayload.feePayer, opts.fee?.gasSettings);
286
+ const feeOptions = await this.completeFeeOptions({
287
+ from: opts.from,
288
+ feePayer: executionPayload.feePayer,
289
+ gasSettings: opts.fee?.gasSettings,
290
+ congestionEstimate: opts.fee?.congestionEstimate
291
+ });
222
292
  const txRequest = await this.createTxExecutionRequestFromPayloadAndFee(executionPayload, opts.from, feeOptions);
223
- return this.pxe.profileTx(txRequest, opts.profileMode, opts.skipProofGeneration ?? true);
293
+ return this.pxe.profileTx(txRequest, {
294
+ profileMode: opts.profileMode,
295
+ skipProofGeneration: opts.skipProofGeneration ?? true,
296
+ scopes: this.scopesFrom(opts.from, opts.additionalScopes)
297
+ });
224
298
  }
225
299
  async sendTx(executionPayload, opts) {
226
- const feeOptions = await this.completeFeeOptions(opts.from, executionPayload.feePayer, opts.fee?.gasSettings);
300
+ const feeOptions = await this.completeFeeOptions({
301
+ from: opts.from,
302
+ feePayer: executionPayload.feePayer,
303
+ gasSettings: opts.fee?.gasSettings,
304
+ congestionEstimate: opts.fee?.congestionEstimate
305
+ });
227
306
  const txRequest = await this.createTxExecutionRequestFromPayloadAndFee(executionPayload, opts.from, feeOptions);
228
- const provenTx = await this.pxe.proveTx(txRequest);
307
+ const provenTx = await this.pxe.proveTx(txRequest, this.scopesFrom(opts.from, opts.additionalScopes));
308
+ const offchainOutput = extractOffchainOutput(provenTx.getOffchainEffects(), provenTx.publicInputs.constants.anchorBlockHeader.globalVariables.timestamp);
229
309
  const tx = await provenTx.toTx();
230
310
  const txHash = tx.getTxHash();
231
311
  if (await this.aztecNode.getTxEffect(txHash)) {
@@ -238,11 +318,33 @@ import { buildMergedSimulationResult, extractOptimizablePublicStaticCalls, simul
238
318
  this.log.info(`Sent transaction ${txHash}`);
239
319
  // If wait is NO_WAIT, return txHash immediately
240
320
  if (opts.wait === NO_WAIT) {
241
- return txHash;
321
+ return {
322
+ txHash,
323
+ ...offchainOutput
324
+ };
242
325
  }
243
326
  // Otherwise, wait for the full receipt (default behavior on wait: undefined)
244
327
  const waitOpts = typeof opts.wait === 'object' ? opts.wait : undefined;
245
- return await waitForTx(this.aztecNode, txHash, waitOpts);
328
+ const receipt = await waitForTx(this.aztecNode, txHash, waitOpts);
329
+ // Display debug logs from public execution if present (served in test mode only)
330
+ if (receipt.debugLogs?.length) {
331
+ await displayDebugLogs(receipt.debugLogs, this.getContractName.bind(this));
332
+ }
333
+ return {
334
+ receipt,
335
+ ...offchainOutput
336
+ };
337
+ }
338
+ /**
339
+ * Resolves a contract address to a human-readable name via PXE, if available.
340
+ * @param address - The contract address to resolve.
341
+ */ async getContractName(address) {
342
+ const instance = await this.pxe.getContractInstance(address);
343
+ if (!instance) {
344
+ return undefined;
345
+ }
346
+ const artifact = await this.pxe.getContractArtifact(instance.currentContractClassId);
347
+ return artifact?.name;
246
348
  }
247
349
  contextualizeError(err, ...context) {
248
350
  let contextStr = '';
@@ -257,8 +359,11 @@ import { buildMergedSimulationResult, extractOptimizablePublicStaticCalls, simul
257
359
  }
258
360
  return err;
259
361
  }
260
- simulateUtility(call, authwits) {
261
- return this.pxe.simulateUtility(call, authwits);
362
+ executeUtility(call, opts) {
363
+ return this.pxe.executeUtility(call, {
364
+ authwits: opts.authWitnesses,
365
+ scopes: opts.scopes
366
+ });
262
367
  }
263
368
  async getPrivateEvents(eventDef, eventFilter) {
264
369
  const pxeEvents = await this.pxe.getPrivateEvents(eventDef.eventSelector, eventFilter);
@@ -276,15 +381,33 @@ import { buildMergedSimulationResult, extractOptimizablePublicStaticCalls, simul
276
381
  });
277
382
  return decodedEvents;
278
383
  }
279
- async getContractMetadata(address) {
384
+ /**
385
+ * Returns metadata about a contract, including whether it has been initialized, published, and updated.
386
+ * @param address - The contract address to query.
387
+ */ async getContractMetadata(address) {
280
388
  const instance = await this.pxe.getContractInstance(address);
281
- const initNullifier = await siloNullifier(address, address.toField());
282
- const publiclyRegisteredContract = await this.aztecNode.getContract(address);
283
- const initNullifierMembershipWitness = await this.aztecNode.getNullifierMembershipWitness('latest', initNullifier);
389
+ const publiclyRegisteredContractPromise = this.aztecNode.getContract(address);
390
+ let initializationStatus;
391
+ if (instance) {
392
+ // We have the instance, so we can compute the private initialization nullifier (which includes init_hash and is
393
+ // emitted by both private and public initializers) and get a definitive INITIALIZED/UNINITIALIZED answer.
394
+ const initNullifier = await computeSiloedPrivateInitializationNullifier(address, instance.initializationHash);
395
+ const witness = await this.aztecNode.getNullifierMembershipWitness('latest', initNullifier);
396
+ initializationStatus = witness ? ContractInitializationStatus.INITIALIZED : ContractInitializationStatus.UNINITIALIZED;
397
+ } else {
398
+ // Without the instance we lack the init_hash needed for the private nullifier. We fall back to checking the
399
+ // public initialization nullifier (computed from address alone). Not all contracts emit it (only those with
400
+ // public functions that require initialization checks), so its absence doesn't mean the contract is
401
+ // uninitialized.
402
+ const publicNullifier = await computeSiloedPublicInitializationNullifier(address);
403
+ const witness = await this.aztecNode.getNullifierMembershipWitness('latest', publicNullifier);
404
+ initializationStatus = witness ? ContractInitializationStatus.INITIALIZED : ContractInitializationStatus.UNKNOWN;
405
+ }
406
+ const publiclyRegisteredContract = await publiclyRegisteredContractPromise;
284
407
  const isContractUpdated = publiclyRegisteredContract && !publiclyRegisteredContract.currentContractClassId.equals(publiclyRegisteredContract.originalContractClassId);
285
408
  return {
286
409
  instance: instance ?? undefined,
287
- isContractInitialized: !!initNullifierMembershipWitness,
410
+ initializationStatus,
288
411
  isContractPublished: !!publiclyRegisteredContract,
289
412
  isContractUpdated: !!isContractUpdated,
290
413
  updatedContractClassId: isContractUpdated ? publiclyRegisteredContract.currentContractClassId : undefined
@@ -1,3 +1,3 @@
1
- export { BaseWallet, type FeeOptions } from './base_wallet.js';
1
+ export { BaseWallet, type CompleteFeeOptionsConfig, type FeeOptions, type SimulateViaEntrypointOptions, } from './base_wallet.js';
2
2
  export { simulateViaNode, buildMergedSimulationResult, extractOptimizablePublicStaticCalls } from './utils.js';
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9iYXNlLXdhbGxldC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLEtBQUssVUFBVSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGVBQWUsRUFBRSwyQkFBMkIsRUFBRSxtQ0FBbUMsRUFBRSxNQUFNLFlBQVksQ0FBQyJ9
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9iYXNlLXdhbGxldC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsVUFBVSxFQUNWLEtBQUssd0JBQXdCLEVBQzdCLEtBQUssVUFBVSxFQUNmLEtBQUssNEJBQTRCLEdBQ2xDLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxFQUFFLGVBQWUsRUFBRSwyQkFBMkIsRUFBRSxtQ0FBbUMsRUFBRSxNQUFNLFlBQVksQ0FBQyJ9
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/base-wallet/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,2BAA2B,EAAE,mCAAmC,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/base-wallet/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,KAAK,wBAAwB,EAC7B,KAAK,UAAU,EACf,KAAK,4BAA4B,GAClC,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,eAAe,EAAE,2BAA2B,EAAE,mCAAmC,EAAE,MAAM,YAAY,CAAC"}