@aztec/wallet-sdk 4.2.0-nightly.20260319 → 4.2.0-nightly.20260320
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/base-wallet/base_wallet.d.ts +25 -15
- package/dest/base-wallet/base_wallet.d.ts.map +1 -1
- package/dest/base-wallet/base_wallet.js +68 -37
- package/dest/base-wallet/index.d.ts +2 -2
- package/dest/base-wallet/index.d.ts.map +1 -1
- package/package.json +8 -8
- package/src/base-wallet/base_wallet.ts +98 -58
- package/src/base-wallet/index.ts +1 -1
|
@@ -1,4 +1,4 @@
|
|
|
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';
|
|
@@ -27,10 +27,17 @@ export type FeeOptions = {
|
|
|
27
27
|
*/
|
|
28
28
|
walletFeePaymentMethod?: FeePaymentMethod;
|
|
29
29
|
/** Configuration options for the account to properly handle the selected fee payment method */
|
|
30
|
-
accountFeePaymentMethodOptions
|
|
30
|
+
accountFeePaymentMethodOptions?: AccountFeePaymentMethodOptions;
|
|
31
31
|
/** The gas settings to use for the transaction */
|
|
32
32
|
gasSettings: GasSettings;
|
|
33
33
|
};
|
|
34
|
+
/** Options for `simulateViaEntrypoint`. */
|
|
35
|
+
export type SimulateViaEntrypointOptions = Pick<SimulateOptions, 'from' | 'additionalScopes' | 'skipTxValidation' | 'skipFeeEnforcement'> & {
|
|
36
|
+
/** Fee options for the entrypoint */
|
|
37
|
+
feeOptions: FeeOptions;
|
|
38
|
+
/** Scopes to use for the simulation */
|
|
39
|
+
scopes: AccessScopes;
|
|
40
|
+
};
|
|
34
41
|
/**
|
|
35
42
|
* A base class for Wallet implementations
|
|
36
43
|
*/
|
|
@@ -41,7 +48,7 @@ export declare abstract class BaseWallet implements Wallet {
|
|
|
41
48
|
protected minFeePadding: number;
|
|
42
49
|
protected cancellableTransactions: boolean;
|
|
43
50
|
protected constructor(pxe: PXE, aztecNode: AztecNode, log?: import("@aztec/foundation/log").Logger);
|
|
44
|
-
protected scopesFrom(from: AztecAddress, additionalScopes?: AztecAddress[]): AztecAddress[];
|
|
51
|
+
protected scopesFrom(from: AztecAddress | NoFrom, additionalScopes?: AztecAddress[]): AztecAddress[];
|
|
45
52
|
protected abstract getAccountFromAddress(address: AztecAddress): Promise<Account>;
|
|
46
53
|
abstract getAccounts(): Promise<Aliased<AztecAddress>[]>;
|
|
47
54
|
/**
|
|
@@ -53,7 +60,7 @@ export declare abstract class BaseWallet implements Wallet {
|
|
|
53
60
|
*/
|
|
54
61
|
getAddressBook(): Promise<Aliased<AztecAddress>[]>;
|
|
55
62
|
getChainInfo(): Promise<ChainInfo>;
|
|
56
|
-
protected createTxExecutionRequestFromPayloadAndFee(executionPayload: ExecutionPayload, from: AztecAddress, feeOptions: FeeOptions): Promise<TxExecutionRequest>;
|
|
63
|
+
protected createTxExecutionRequestFromPayloadAndFee(executionPayload: ExecutionPayload, from: AztecAddress | NoFrom, feeOptions: FeeOptions): Promise<TxExecutionRequest>;
|
|
57
64
|
createAuthWit(from: AztecAddress, messageHashOrIntent: IntentInnerHash | CallIntent): Promise<AuthWitness>;
|
|
58
65
|
/**
|
|
59
66
|
* Request capabilities from the wallet.
|
|
@@ -77,7 +84,7 @@ export declare abstract class BaseWallet implements Wallet {
|
|
|
77
84
|
* @param gasSettings - User-provided partial gas settings
|
|
78
85
|
* @returns - Complete fee options that can be used to create a transaction execution request
|
|
79
86
|
*/
|
|
80
|
-
protected completeFeeOptions(from: AztecAddress, feePayer?: AztecAddress, gasSettings?: Partial<FieldsOf<GasSettings>>): Promise<FeeOptions>;
|
|
87
|
+
protected completeFeeOptions(from: AztecAddress | NoFrom, feePayer?: AztecAddress, gasSettings?: Partial<FieldsOf<GasSettings>>): Promise<FeeOptions>;
|
|
81
88
|
/**
|
|
82
89
|
* Completes partial user-provided fee options with unreasonably high gas limits
|
|
83
90
|
* for gas estimation. Uses the same logic as completeFeeOptions but sets high limits
|
|
@@ -86,14 +93,14 @@ export declare abstract class BaseWallet implements Wallet {
|
|
|
86
93
|
* @param feePayer - The address paying for fees (if any fee payment method is embedded in the execution payload)
|
|
87
94
|
* @param gasSettings - User-provided partial gas settings
|
|
88
95
|
*/
|
|
89
|
-
protected completeFeeOptionsForEstimation(from: AztecAddress, feePayer?: AztecAddress, gasSettings?: Partial<FieldsOf<GasSettings>>): Promise<{
|
|
96
|
+
protected completeFeeOptionsForEstimation(from: AztecAddress | NoFrom, feePayer?: AztecAddress, gasSettings?: Partial<FieldsOf<GasSettings>>): Promise<{
|
|
90
97
|
/**
|
|
91
98
|
* A wallet-provided fallback fee payment method that is used only if the transaction that is being constructed
|
|
92
99
|
* doesn't already include one
|
|
93
100
|
*/
|
|
94
101
|
walletFeePaymentMethod?: FeePaymentMethod | undefined;
|
|
95
102
|
/** Configuration options for the account to properly handle the selected fee payment method */
|
|
96
|
-
accountFeePaymentMethodOptions
|
|
103
|
+
accountFeePaymentMethodOptions?: AccountFeePaymentMethodOptions | undefined;
|
|
97
104
|
gasSettings: GasSettings;
|
|
98
105
|
}>;
|
|
99
106
|
registerSender(address: AztecAddress, _alias?: string): Promise<AztecAddress>;
|
|
@@ -101,13 +108,9 @@ export declare abstract class BaseWallet implements Wallet {
|
|
|
101
108
|
/**
|
|
102
109
|
* Simulates calls through the standard PXE path (account entrypoint).
|
|
103
110
|
* @param executionPayload - The execution payload to simulate.
|
|
104
|
-
* @param
|
|
105
|
-
* @param feeOptions - Fee options for the transaction.
|
|
106
|
-
* @param skipTxValidation - Whether to skip tx validation.
|
|
107
|
-
* @param skipFeeEnforcement - Whether to skip fee enforcement.
|
|
108
|
-
* @param scopes - The scopes to use for the simulation.
|
|
111
|
+
* @param opts - Simulation options.
|
|
109
112
|
*/
|
|
110
|
-
protected simulateViaEntrypoint(executionPayload: ExecutionPayload,
|
|
113
|
+
protected simulateViaEntrypoint(executionPayload: ExecutionPayload, opts: SimulateViaEntrypointOptions): Promise<TxSimulationResult>;
|
|
111
114
|
/**
|
|
112
115
|
* Simulates a transaction, optimizing leading public static calls by running them directly
|
|
113
116
|
* on the node while sending the remaining calls through the standard PXE path.
|
|
@@ -127,9 +130,16 @@ export declare abstract class BaseWallet implements Wallet {
|
|
|
127
130
|
protected contextualizeError(err: Error, ...context: string[]): Error;
|
|
128
131
|
executeUtility(call: FunctionCall, opts: ExecuteUtilityOptions): Promise<UtilityExecutionResult>;
|
|
129
132
|
getPrivateEvents<T>(eventDef: EventMetadataDefinition, eventFilter: PrivateEventFilter): Promise<PrivateEvent<T>[]>;
|
|
133
|
+
/**
|
|
134
|
+
* Returns metadata about a contract, including whether it has been initialized, published, and updated.
|
|
135
|
+
*
|
|
136
|
+
* `isContractInitialized` requires the contract instance to be registered in the PXE (for `init_hash`). When the
|
|
137
|
+
* instance is not available, `isContractInitialized` is `undefined` since it cannot be determined.
|
|
138
|
+
* @param address - The contract address to query.
|
|
139
|
+
*/
|
|
130
140
|
getContractMetadata(address: AztecAddress): Promise<{
|
|
131
141
|
instance: ContractInstanceWithAddress | undefined;
|
|
132
|
-
isContractInitialized: boolean;
|
|
142
|
+
isContractInitialized: boolean | undefined;
|
|
133
143
|
isContractPublished: boolean;
|
|
134
144
|
isContractUpdated: boolean;
|
|
135
145
|
updatedContractClassId: Fr | undefined;
|
|
@@ -139,4 +149,4 @@ export declare abstract class BaseWallet implements Wallet {
|
|
|
139
149
|
isContractClassPubliclyRegistered: boolean;
|
|
140
150
|
}>;
|
|
141
151
|
}
|
|
142
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
152
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZV93YWxsZXQuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9iYXNlLXdhbGxldC9iYXNlX3dhbGxldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFL0QsT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLGVBQWUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2pGLE9BQU8sRUFDTCxLQUFLLHNCQUFzQixFQUUzQixLQUFLLFVBQVUsRUFFaEIsTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRTVELE9BQU8sS0FBSyxFQUNWLE9BQU8sRUFDUCxlQUFlLEVBQ2YsWUFBWSxFQUNaLGFBQWEsRUFDYixxQkFBcUIsRUFDckIsWUFBWSxFQUNaLGtCQUFrQixFQUNsQixjQUFjLEVBQ2QsV0FBVyxFQUNYLGVBQWUsRUFDZixNQUFNLEVBQ04sa0JBQWtCLEVBQ25CLE1BQU0sd0JBQXdCLENBQUM7QUFPaEMsT0FBTyxFQUFFLDhCQUE4QixFQUF3QyxNQUFNLDRCQUE0QixDQUFDO0FBRWxILE9BQU8sS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUVwRCxPQUFPLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsS0FBSyxZQUFZLEVBQW9CLE1BQU0sd0JBQXdCLENBQUM7QUFDN0UsT0FBTyxLQUFLLEVBQUUsR0FBRyxFQUFzQixNQUFNLG1CQUFtQixDQUFDO0FBQ2pFLE9BQU8sRUFDTCxLQUFLLGdCQUFnQixFQUNyQixLQUFLLHVCQUF1QixFQUM1QixLQUFLLFlBQVksRUFFbEIsTUFBTSxtQkFBbUIsQ0FBQztBQUMz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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base_wallet.d.ts","sourceRoot":"","sources":["../../src/base-wallet/base_wallet.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"base_wallet.d.ts","sourceRoot":"","sources":["../../src/base-wallet/base_wallet.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
+
import { NO_FROM } from '@aztec/aztec.js/account';
|
|
1
2
|
import { NO_WAIT, extractOffchainOutput } from '@aztec/aztec.js/contracts';
|
|
2
3
|
import { waitForTx } from '@aztec/aztec.js/node';
|
|
3
4
|
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
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';
|
|
7
9
|
import { displayDebugLogs } from '@aztec/pxe/client/lazy';
|
|
@@ -10,7 +12,7 @@ import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
|
10
12
|
import { computePartialAddress, getContractClassFromArtifact } from '@aztec/stdlib/contract';
|
|
11
13
|
import { SimulationError } from '@aztec/stdlib/errors';
|
|
12
14
|
import { Gas, GasSettings } from '@aztec/stdlib/gas';
|
|
13
|
-
import {
|
|
15
|
+
import { computeSiloedPrivateInitializationNullifier } from '@aztec/stdlib/hash';
|
|
14
16
|
import { mergeExecutionPayloads } from '@aztec/stdlib/tx';
|
|
15
17
|
import { inspect } from 'util';
|
|
16
18
|
import { buildMergedSimulationResult, extractOptimizablePublicStaticCalls, simulateViaNode } from './utils.js';
|
|
@@ -31,7 +33,7 @@ import { buildMergedSimulationResult, extractOptimizablePublicStaticCalls, simul
|
|
|
31
33
|
this.cancellableTransactions = false;
|
|
32
34
|
}
|
|
33
35
|
scopesFrom(from, additionalScopes = []) {
|
|
34
|
-
const allScopes = from
|
|
36
|
+
const allScopes = from === NO_FROM ? additionalScopes : [
|
|
35
37
|
from,
|
|
36
38
|
...additionalScopes
|
|
37
39
|
];
|
|
@@ -62,18 +64,24 @@ import { buildMergedSimulationResult, extractOptimizablePublicStaticCalls, simul
|
|
|
62
64
|
}
|
|
63
65
|
async createTxExecutionRequestFromPayloadAndFee(executionPayload, from, feeOptions) {
|
|
64
66
|
const feeExecutionPayload = await feeOptions.walletFeePaymentMethod?.getExecutionPayload();
|
|
65
|
-
const executionOptions = {
|
|
66
|
-
txNonce: Fr.random(),
|
|
67
|
-
cancellable: this.cancellableTransactions,
|
|
68
|
-
feePaymentMethodOptions: feeOptions.accountFeePaymentMethodOptions
|
|
69
|
-
};
|
|
70
67
|
const finalExecutionPayload = feeExecutionPayload ? mergeExecutionPayloads([
|
|
71
68
|
feeExecutionPayload,
|
|
72
69
|
executionPayload
|
|
73
70
|
]) : executionPayload;
|
|
74
|
-
const fromAccount = await this.getAccountFromAddress(from);
|
|
75
71
|
const chainInfo = await this.getChainInfo();
|
|
76
|
-
|
|
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
|
+
}
|
|
77
85
|
}
|
|
78
86
|
async createAuthWit(from, messageHashOrIntent) {
|
|
79
87
|
const account = await this.getAccountFromAddress(from);
|
|
@@ -123,14 +131,18 @@ import { buildMergedSimulationResult, extractOptimizablePublicStaticCalls, simul
|
|
|
123
131
|
*/ async completeFeeOptions(from, feePayer, gasSettings) {
|
|
124
132
|
const maxFeesPerGas = gasSettings?.maxFeesPerGas ?? (await this.aztecNode.getCurrentMinFees()).mul(1 + this.minFeePadding);
|
|
125
133
|
let accountFeePaymentMethodOptions;
|
|
126
|
-
//
|
|
127
|
-
//
|
|
128
|
-
if (
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
+
// If from is an address, we need to determine the appropriate fee payment method options for the
|
|
135
|
+
// account contract entrypoint to use
|
|
136
|
+
if (from !== NO_FROM) {
|
|
137
|
+
if (!feePayer) {
|
|
138
|
+
// The transaction does not include a fee payment method, so we set the flag
|
|
139
|
+
// for the account to use its fee juice balance
|
|
140
|
+
accountFeePaymentMethodOptions = AccountFeePaymentMethodOptions.PREEXISTING_FEE_JUICE;
|
|
141
|
+
} else {
|
|
142
|
+
// The transaction includes fee payment method, so we check if we are the fee payer for it
|
|
143
|
+
// (this can only happen if the embedded payment method is FeeJuiceWithClaim)
|
|
144
|
+
accountFeePaymentMethodOptions = from.equals(feePayer) ? AccountFeePaymentMethodOptions.FEE_JUICE_WITH_CLAIM : AccountFeePaymentMethodOptions.EXTERNAL;
|
|
145
|
+
}
|
|
134
146
|
}
|
|
135
147
|
const fullGasSettings = GasSettings.default({
|
|
136
148
|
...gasSettings,
|
|
@@ -199,18 +211,14 @@ import { buildMergedSimulationResult, extractOptimizablePublicStaticCalls, simul
|
|
|
199
211
|
/**
|
|
200
212
|
* Simulates calls through the standard PXE path (account entrypoint).
|
|
201
213
|
* @param executionPayload - The execution payload to simulate.
|
|
202
|
-
* @param
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
* @param skipFeeEnforcement - Whether to skip fee enforcement.
|
|
206
|
-
* @param scopes - The scopes to use for the simulation.
|
|
207
|
-
*/ async simulateViaEntrypoint(executionPayload, from, feeOptions, scopes, skipTxValidation, skipFeeEnforcement) {
|
|
208
|
-
const txRequest = await this.createTxExecutionRequestFromPayloadAndFee(executionPayload, from, feeOptions);
|
|
214
|
+
* @param opts - Simulation options.
|
|
215
|
+
*/ async simulateViaEntrypoint(executionPayload, opts) {
|
|
216
|
+
const txRequest = await this.createTxExecutionRequestFromPayloadAndFee(executionPayload, opts.from, opts.feeOptions);
|
|
209
217
|
return this.pxe.simulateTx(txRequest, {
|
|
210
218
|
simulatePublic: true,
|
|
211
|
-
skipTxValidation,
|
|
212
|
-
skipFeeEnforcement,
|
|
213
|
-
scopes
|
|
219
|
+
skipTxValidation: opts.skipTxValidation,
|
|
220
|
+
skipFeeEnforcement: opts.skipFeeEnforcement,
|
|
221
|
+
scopes: opts.scopes
|
|
214
222
|
});
|
|
215
223
|
}
|
|
216
224
|
/**
|
|
@@ -236,9 +244,16 @@ import { buildMergedSimulationResult, extractOptimizablePublicStaticCalls, simul
|
|
|
236
244
|
} catch {
|
|
237
245
|
blockHeader = await this.aztecNode.getBlockHeader();
|
|
238
246
|
}
|
|
247
|
+
const simulationOrigin = opts.from === NO_FROM ? AztecAddress.ZERO : opts.from;
|
|
239
248
|
const [optimizedResults, normalResult] = await Promise.all([
|
|
240
|
-
optimizableCalls.length > 0 ? simulateViaNode(this.aztecNode, optimizableCalls,
|
|
241
|
-
remainingCalls.length > 0 ? this.simulateViaEntrypoint(remainingPayload,
|
|
249
|
+
optimizableCalls.length > 0 ? simulateViaNode(this.aztecNode, optimizableCalls, simulationOrigin, chainInfo, feeOptions.gasSettings, blockHeader, opts.skipFeeEnforcement ?? true, this.getContractName.bind(this)) : Promise.resolve([]),
|
|
250
|
+
remainingCalls.length > 0 ? this.simulateViaEntrypoint(remainingPayload, {
|
|
251
|
+
from: opts.from,
|
|
252
|
+
feeOptions,
|
|
253
|
+
scopes: this.scopesFrom(opts.from, opts.additionalScopes),
|
|
254
|
+
skipTxValidation: opts.skipTxValidation,
|
|
255
|
+
skipFeeEnforcement: opts.skipFeeEnforcement ?? true
|
|
256
|
+
}) : Promise.resolve(null)
|
|
242
257
|
]);
|
|
243
258
|
return buildMergedSimulationResult(optimizedResults, normalResult);
|
|
244
259
|
}
|
|
@@ -312,9 +327,7 @@ import { buildMergedSimulationResult, extractOptimizablePublicStaticCalls, simul
|
|
|
312
327
|
executeUtility(call, opts) {
|
|
313
328
|
return this.pxe.executeUtility(call, {
|
|
314
329
|
authwits: opts.authWitnesses,
|
|
315
|
-
scopes:
|
|
316
|
-
opts.scope
|
|
317
|
-
]
|
|
330
|
+
scopes: opts.scopes
|
|
318
331
|
});
|
|
319
332
|
}
|
|
320
333
|
async getPrivateEvents(eventDef, eventFilter) {
|
|
@@ -333,15 +346,33 @@ import { buildMergedSimulationResult, extractOptimizablePublicStaticCalls, simul
|
|
|
333
346
|
});
|
|
334
347
|
return decodedEvents;
|
|
335
348
|
}
|
|
336
|
-
|
|
349
|
+
/**
|
|
350
|
+
* Returns metadata about a contract, including whether it has been initialized, published, and updated.
|
|
351
|
+
*
|
|
352
|
+
* `isContractInitialized` requires the contract instance to be registered in the PXE (for `init_hash`). When the
|
|
353
|
+
* instance is not available, `isContractInitialized` is `undefined` since it cannot be determined.
|
|
354
|
+
* @param address - The contract address to query.
|
|
355
|
+
*/ async getContractMetadata(address) {
|
|
337
356
|
const instance = await this.pxe.getContractInstance(address);
|
|
338
|
-
const
|
|
339
|
-
|
|
340
|
-
|
|
357
|
+
const publiclyRegisteredContractPromise = this.aztecNode.getContract(address);
|
|
358
|
+
// We check only the private initialization nullifier. It is emitted by both private and public initializers and
|
|
359
|
+
// includes init_hash, preventing observers from determining initialization status from the address alone. Without
|
|
360
|
+
// the instance (and thus init_hash), we can't compute it, so we return undefined.
|
|
361
|
+
//
|
|
362
|
+
// We skip the public initialization nullifier because it's not always emitted (contracts without public external
|
|
363
|
+
// functions that require initialization checks won't emit it). If the private one exists, the public one was
|
|
364
|
+
// created in the same tx and will also be present.
|
|
365
|
+
let isContractInitialized = undefined;
|
|
366
|
+
if (instance) {
|
|
367
|
+
const initNullifier = await computeSiloedPrivateInitializationNullifier(address, instance.initializationHash);
|
|
368
|
+
const witness = await this.aztecNode.getNullifierMembershipWitness('latest', initNullifier);
|
|
369
|
+
isContractInitialized = !!witness;
|
|
370
|
+
}
|
|
371
|
+
const publiclyRegisteredContract = await publiclyRegisteredContractPromise;
|
|
341
372
|
const isContractUpdated = publiclyRegisteredContract && !publiclyRegisteredContract.currentContractClassId.equals(publiclyRegisteredContract.originalContractClassId);
|
|
342
373
|
return {
|
|
343
374
|
instance: instance ?? undefined,
|
|
344
|
-
isContractInitialized
|
|
375
|
+
isContractInitialized,
|
|
345
376
|
isContractPublished: !!publiclyRegisteredContract,
|
|
346
377
|
isContractUpdated: !!isContractUpdated,
|
|
347
378
|
updatedContractClassId: isContractUpdated ? publiclyRegisteredContract.currentContractClassId : undefined
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export { BaseWallet, type FeeOptions } from './base_wallet.js';
|
|
1
|
+
export { BaseWallet, type FeeOptions, type SimulateViaEntrypointOptions } from './base_wallet.js';
|
|
2
2
|
export { simulateViaNode, buildMergedSimulationResult, extractOptimizablePublicStaticCalls } from './utils.js';
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9iYXNlLXdhbGxldC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLEtBQUssVUFBVSxFQUFFLEtBQUssNEJBQTRCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNsRyxPQUFPLEVBQUUsZUFBZSxFQUFFLDJCQUEyQixFQUFFLG1DQUFtQyxFQUFFLE1BQU0sWUFBWSxDQUFDIn0=
|
|
@@ -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;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/base-wallet/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,KAAK,UAAU,EAAE,KAAK,4BAA4B,EAAE,MAAM,kBAAkB,CAAC;AAClG,OAAO,EAAE,eAAe,EAAE,2BAA2B,EAAE,mCAAmC,EAAE,MAAM,YAAY,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/wallet-sdk",
|
|
3
3
|
"homepage": "https://github.com/AztecProtocol/aztec-packages/tree/master/yarn-project/wallet-sdk",
|
|
4
|
-
"version": "4.2.0-nightly.
|
|
4
|
+
"version": "4.2.0-nightly.20260320",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": {
|
|
7
7
|
"./base-wallet": "./dest/base-wallet/index.js",
|
|
@@ -71,15 +71,15 @@
|
|
|
71
71
|
]
|
|
72
72
|
},
|
|
73
73
|
"dependencies": {
|
|
74
|
-
"@aztec/aztec.js": "4.2.0-nightly.
|
|
75
|
-
"@aztec/constants": "4.2.0-nightly.
|
|
76
|
-
"@aztec/entrypoints": "4.2.0-nightly.
|
|
77
|
-
"@aztec/foundation": "4.2.0-nightly.
|
|
78
|
-
"@aztec/pxe": "4.2.0-nightly.
|
|
79
|
-
"@aztec/stdlib": "4.2.0-nightly.
|
|
74
|
+
"@aztec/aztec.js": "4.2.0-nightly.20260320",
|
|
75
|
+
"@aztec/constants": "4.2.0-nightly.20260320",
|
|
76
|
+
"@aztec/entrypoints": "4.2.0-nightly.20260320",
|
|
77
|
+
"@aztec/foundation": "4.2.0-nightly.20260320",
|
|
78
|
+
"@aztec/pxe": "4.2.0-nightly.20260320",
|
|
79
|
+
"@aztec/stdlib": "4.2.0-nightly.20260320"
|
|
80
80
|
},
|
|
81
81
|
"devDependencies": {
|
|
82
|
-
"@aztec/noir-contracts.js": "4.2.0-nightly.
|
|
82
|
+
"@aztec/noir-contracts.js": "4.2.0-nightly.20260320",
|
|
83
83
|
"@jest/globals": "^30.0.0",
|
|
84
84
|
"@types/jest": "^30.0.0",
|
|
85
85
|
"@types/node": "^22.15.17",
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import type { Account } from '@aztec/aztec.js/account';
|
|
1
|
+
import type { Account, NoFrom } from '@aztec/aztec.js/account';
|
|
2
|
+
import { NO_FROM } from '@aztec/aztec.js/account';
|
|
2
3
|
import type { CallIntent, IntentInnerHash } from '@aztec/aztec.js/authorization';
|
|
3
4
|
import {
|
|
4
5
|
type InteractionWaitOptions,
|
|
@@ -29,6 +30,7 @@ import {
|
|
|
29
30
|
GAS_ESTIMATION_TEARDOWN_L2_GAS_LIMIT,
|
|
30
31
|
} from '@aztec/constants';
|
|
31
32
|
import { AccountFeePaymentMethodOptions, type DefaultAccountEntrypointOptions } from '@aztec/entrypoints/account';
|
|
33
|
+
import { DefaultEntrypoint } from '@aztec/entrypoints/default';
|
|
32
34
|
import type { ChainInfo } from '@aztec/entrypoints/interfaces';
|
|
33
35
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
34
36
|
import { createLogger } from '@aztec/foundation/log';
|
|
@@ -50,7 +52,7 @@ import {
|
|
|
50
52
|
} from '@aztec/stdlib/contract';
|
|
51
53
|
import { SimulationError } from '@aztec/stdlib/errors';
|
|
52
54
|
import { Gas, GasSettings } from '@aztec/stdlib/gas';
|
|
53
|
-
import {
|
|
55
|
+
import { computeSiloedPrivateInitializationNullifier } from '@aztec/stdlib/hash';
|
|
54
56
|
import type { AztecNode } from '@aztec/stdlib/interfaces/client';
|
|
55
57
|
import {
|
|
56
58
|
BlockHeader,
|
|
@@ -75,11 +77,21 @@ export type FeeOptions = {
|
|
|
75
77
|
*/
|
|
76
78
|
walletFeePaymentMethod?: FeePaymentMethod;
|
|
77
79
|
/** Configuration options for the account to properly handle the selected fee payment method */
|
|
78
|
-
accountFeePaymentMethodOptions
|
|
80
|
+
accountFeePaymentMethodOptions?: AccountFeePaymentMethodOptions;
|
|
79
81
|
/** The gas settings to use for the transaction */
|
|
80
82
|
gasSettings: GasSettings;
|
|
81
83
|
};
|
|
82
84
|
|
|
85
|
+
/** Options for `simulateViaEntrypoint`. */
|
|
86
|
+
export type SimulateViaEntrypointOptions = Pick<
|
|
87
|
+
SimulateOptions,
|
|
88
|
+
'from' | 'additionalScopes' | 'skipTxValidation' | 'skipFeeEnforcement'
|
|
89
|
+
> & {
|
|
90
|
+
/** Fee options for the entrypoint */
|
|
91
|
+
feeOptions: FeeOptions;
|
|
92
|
+
/** Scopes to use for the simulation */
|
|
93
|
+
scopes: AccessScopes;
|
|
94
|
+
};
|
|
83
95
|
/**
|
|
84
96
|
* A base class for Wallet implementations
|
|
85
97
|
*/
|
|
@@ -94,8 +106,8 @@ export abstract class BaseWallet implements Wallet {
|
|
|
94
106
|
protected log = createLogger('wallet-sdk:base_wallet'),
|
|
95
107
|
) {}
|
|
96
108
|
|
|
97
|
-
protected scopesFrom(from: AztecAddress, additionalScopes: AztecAddress[] = []): AztecAddress[] {
|
|
98
|
-
const allScopes = from
|
|
109
|
+
protected scopesFrom(from: AztecAddress | NoFrom, additionalScopes: AztecAddress[] = []): AztecAddress[] {
|
|
110
|
+
const allScopes = from === NO_FROM ? additionalScopes : [from, ...additionalScopes];
|
|
99
111
|
const scopeSet = new Set(allScopes.map(address => address.toString()));
|
|
100
112
|
return [...scopeSet].map(AztecAddress.fromString);
|
|
101
113
|
}
|
|
@@ -123,26 +135,33 @@ export abstract class BaseWallet implements Wallet {
|
|
|
123
135
|
|
|
124
136
|
protected async createTxExecutionRequestFromPayloadAndFee(
|
|
125
137
|
executionPayload: ExecutionPayload,
|
|
126
|
-
from: AztecAddress,
|
|
138
|
+
from: AztecAddress | NoFrom,
|
|
127
139
|
feeOptions: FeeOptions,
|
|
128
140
|
): Promise<TxExecutionRequest> {
|
|
129
141
|
const feeExecutionPayload = await feeOptions.walletFeePaymentMethod?.getExecutionPayload();
|
|
130
|
-
const executionOptions: DefaultAccountEntrypointOptions = {
|
|
131
|
-
txNonce: Fr.random(),
|
|
132
|
-
cancellable: this.cancellableTransactions,
|
|
133
|
-
feePaymentMethodOptions: feeOptions.accountFeePaymentMethodOptions,
|
|
134
|
-
};
|
|
135
142
|
const finalExecutionPayload = feeExecutionPayload
|
|
136
143
|
? mergeExecutionPayloads([feeExecutionPayload, executionPayload])
|
|
137
144
|
: executionPayload;
|
|
138
|
-
const fromAccount = await this.getAccountFromAddress(from);
|
|
139
145
|
const chainInfo = await this.getChainInfo();
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
chainInfo
|
|
144
|
-
|
|
145
|
-
|
|
146
|
+
|
|
147
|
+
if (from === NO_FROM) {
|
|
148
|
+
const entrypoint = new DefaultEntrypoint();
|
|
149
|
+
return entrypoint.createTxExecutionRequest(finalExecutionPayload, feeOptions.gasSettings, chainInfo);
|
|
150
|
+
} else {
|
|
151
|
+
const fromAccount = await this.getAccountFromAddress(from);
|
|
152
|
+
const executionOptions: DefaultAccountEntrypointOptions = {
|
|
153
|
+
txNonce: Fr.random(),
|
|
154
|
+
cancellable: this.cancellableTransactions,
|
|
155
|
+
// If from is an address, feeOptions include the way the account contract should handle the fee payment
|
|
156
|
+
feePaymentMethodOptions: feeOptions.accountFeePaymentMethodOptions!,
|
|
157
|
+
};
|
|
158
|
+
return fromAccount.createTxExecutionRequest(
|
|
159
|
+
finalExecutionPayload,
|
|
160
|
+
feeOptions.gasSettings,
|
|
161
|
+
chainInfo,
|
|
162
|
+
executionOptions,
|
|
163
|
+
);
|
|
164
|
+
}
|
|
146
165
|
}
|
|
147
166
|
|
|
148
167
|
public async createAuthWit(
|
|
@@ -197,23 +216,27 @@ export abstract class BaseWallet implements Wallet {
|
|
|
197
216
|
* @returns - Complete fee options that can be used to create a transaction execution request
|
|
198
217
|
*/
|
|
199
218
|
protected async completeFeeOptions(
|
|
200
|
-
from: AztecAddress,
|
|
219
|
+
from: AztecAddress | NoFrom,
|
|
201
220
|
feePayer?: AztecAddress,
|
|
202
221
|
gasSettings?: Partial<FieldsOf<GasSettings>>,
|
|
203
222
|
): Promise<FeeOptions> {
|
|
204
223
|
const maxFeesPerGas =
|
|
205
224
|
gasSettings?.maxFeesPerGas ?? (await this.aztecNode.getCurrentMinFees()).mul(1 + this.minFeePadding);
|
|
206
225
|
let accountFeePaymentMethodOptions;
|
|
207
|
-
//
|
|
208
|
-
//
|
|
209
|
-
if (
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
226
|
+
// If from is an address, we need to determine the appropriate fee payment method options for the
|
|
227
|
+
// account contract entrypoint to use
|
|
228
|
+
if (from !== NO_FROM) {
|
|
229
|
+
if (!feePayer) {
|
|
230
|
+
// The transaction does not include a fee payment method, so we set the flag
|
|
231
|
+
// for the account to use its fee juice balance
|
|
232
|
+
accountFeePaymentMethodOptions = AccountFeePaymentMethodOptions.PREEXISTING_FEE_JUICE;
|
|
233
|
+
} else {
|
|
234
|
+
// The transaction includes fee payment method, so we check if we are the fee payer for it
|
|
235
|
+
// (this can only happen if the embedded payment method is FeeJuiceWithClaim)
|
|
236
|
+
accountFeePaymentMethodOptions = from.equals(feePayer)
|
|
237
|
+
? AccountFeePaymentMethodOptions.FEE_JUICE_WITH_CLAIM
|
|
238
|
+
: AccountFeePaymentMethodOptions.EXTERNAL;
|
|
239
|
+
}
|
|
217
240
|
}
|
|
218
241
|
const fullGasSettings: GasSettings = GasSettings.default({ ...gasSettings, maxFeesPerGas });
|
|
219
242
|
this.log.debug(`Using L2 gas settings`, fullGasSettings);
|
|
@@ -233,7 +256,7 @@ export abstract class BaseWallet implements Wallet {
|
|
|
233
256
|
* @param gasSettings - User-provided partial gas settings
|
|
234
257
|
*/
|
|
235
258
|
protected async completeFeeOptionsForEstimation(
|
|
236
|
-
from: AztecAddress,
|
|
259
|
+
from: AztecAddress | NoFrom,
|
|
237
260
|
feePayer?: AztecAddress,
|
|
238
261
|
gasSettings?: Partial<FieldsOf<GasSettings>>,
|
|
239
262
|
) {
|
|
@@ -300,22 +323,20 @@ export abstract class BaseWallet implements Wallet {
|
|
|
300
323
|
/**
|
|
301
324
|
* Simulates calls through the standard PXE path (account entrypoint).
|
|
302
325
|
* @param executionPayload - The execution payload to simulate.
|
|
303
|
-
* @param
|
|
304
|
-
* @param feeOptions - Fee options for the transaction.
|
|
305
|
-
* @param skipTxValidation - Whether to skip tx validation.
|
|
306
|
-
* @param skipFeeEnforcement - Whether to skip fee enforcement.
|
|
307
|
-
* @param scopes - The scopes to use for the simulation.
|
|
326
|
+
* @param opts - Simulation options.
|
|
308
327
|
*/
|
|
309
|
-
protected async simulateViaEntrypoint(
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
328
|
+
protected async simulateViaEntrypoint(executionPayload: ExecutionPayload, opts: SimulateViaEntrypointOptions) {
|
|
329
|
+
const txRequest = await this.createTxExecutionRequestFromPayloadAndFee(
|
|
330
|
+
executionPayload,
|
|
331
|
+
opts.from,
|
|
332
|
+
opts.feeOptions,
|
|
333
|
+
);
|
|
334
|
+
return this.pxe.simulateTx(txRequest, {
|
|
335
|
+
simulatePublic: true,
|
|
336
|
+
skipTxValidation: opts.skipTxValidation,
|
|
337
|
+
skipFeeEnforcement: opts.skipFeeEnforcement,
|
|
338
|
+
scopes: opts.scopes,
|
|
339
|
+
});
|
|
319
340
|
}
|
|
320
341
|
|
|
321
342
|
/**
|
|
@@ -343,12 +364,13 @@ export abstract class BaseWallet implements Wallet {
|
|
|
343
364
|
blockHeader = (await this.aztecNode.getBlockHeader())!;
|
|
344
365
|
}
|
|
345
366
|
|
|
367
|
+
const simulationOrigin = opts.from === NO_FROM ? AztecAddress.ZERO : opts.from;
|
|
346
368
|
const [optimizedResults, normalResult] = await Promise.all([
|
|
347
369
|
optimizableCalls.length > 0
|
|
348
370
|
? simulateViaNode(
|
|
349
371
|
this.aztecNode,
|
|
350
372
|
optimizableCalls,
|
|
351
|
-
|
|
373
|
+
simulationOrigin,
|
|
352
374
|
chainInfo,
|
|
353
375
|
feeOptions.gasSettings,
|
|
354
376
|
blockHeader,
|
|
@@ -357,14 +379,13 @@ export abstract class BaseWallet implements Wallet {
|
|
|
357
379
|
)
|
|
358
380
|
: Promise.resolve([]),
|
|
359
381
|
remainingCalls.length > 0
|
|
360
|
-
? this.simulateViaEntrypoint(
|
|
361
|
-
|
|
362
|
-
opts.from,
|
|
382
|
+
? this.simulateViaEntrypoint(remainingPayload, {
|
|
383
|
+
from: opts.from,
|
|
363
384
|
feeOptions,
|
|
364
|
-
this.scopesFrom(opts.from, opts.additionalScopes),
|
|
365
|
-
opts.skipTxValidation,
|
|
366
|
-
opts.skipFeeEnforcement ?? true,
|
|
367
|
-
)
|
|
385
|
+
scopes: this.scopesFrom(opts.from, opts.additionalScopes),
|
|
386
|
+
skipTxValidation: opts.skipTxValidation,
|
|
387
|
+
skipFeeEnforcement: opts.skipFeeEnforcement ?? true,
|
|
388
|
+
})
|
|
368
389
|
: Promise.resolve(null),
|
|
369
390
|
]);
|
|
370
391
|
|
|
@@ -448,7 +469,7 @@ export abstract class BaseWallet implements Wallet {
|
|
|
448
469
|
}
|
|
449
470
|
|
|
450
471
|
executeUtility(call: FunctionCall, opts: ExecuteUtilityOptions): Promise<UtilityExecutionResult> {
|
|
451
|
-
return this.pxe.executeUtility(call, { authwits: opts.authWitnesses, scopes:
|
|
472
|
+
return this.pxe.executeUtility(call, { authwits: opts.authWitnesses, scopes: opts.scopes });
|
|
452
473
|
}
|
|
453
474
|
|
|
454
475
|
async getPrivateEvents<T>(
|
|
@@ -471,17 +492,36 @@ export abstract class BaseWallet implements Wallet {
|
|
|
471
492
|
return decodedEvents;
|
|
472
493
|
}
|
|
473
494
|
|
|
495
|
+
/**
|
|
496
|
+
* Returns metadata about a contract, including whether it has been initialized, published, and updated.
|
|
497
|
+
*
|
|
498
|
+
* `isContractInitialized` requires the contract instance to be registered in the PXE (for `init_hash`). When the
|
|
499
|
+
* instance is not available, `isContractInitialized` is `undefined` since it cannot be determined.
|
|
500
|
+
* @param address - The contract address to query.
|
|
501
|
+
*/
|
|
474
502
|
async getContractMetadata(address: AztecAddress) {
|
|
475
503
|
const instance = await this.pxe.getContractInstance(address);
|
|
476
|
-
const
|
|
477
|
-
|
|
478
|
-
|
|
504
|
+
const publiclyRegisteredContractPromise = this.aztecNode.getContract(address);
|
|
505
|
+
// We check only the private initialization nullifier. It is emitted by both private and public initializers and
|
|
506
|
+
// includes init_hash, preventing observers from determining initialization status from the address alone. Without
|
|
507
|
+
// the instance (and thus init_hash), we can't compute it, so we return undefined.
|
|
508
|
+
//
|
|
509
|
+
// We skip the public initialization nullifier because it's not always emitted (contracts without public external
|
|
510
|
+
// functions that require initialization checks won't emit it). If the private one exists, the public one was
|
|
511
|
+
// created in the same tx and will also be present.
|
|
512
|
+
let isContractInitialized: boolean | undefined = undefined;
|
|
513
|
+
if (instance) {
|
|
514
|
+
const initNullifier = await computeSiloedPrivateInitializationNullifier(address, instance.initializationHash);
|
|
515
|
+
const witness = await this.aztecNode.getNullifierMembershipWitness('latest', initNullifier);
|
|
516
|
+
isContractInitialized = !!witness;
|
|
517
|
+
}
|
|
518
|
+
const publiclyRegisteredContract = await publiclyRegisteredContractPromise;
|
|
479
519
|
const isContractUpdated =
|
|
480
520
|
publiclyRegisteredContract &&
|
|
481
521
|
!publiclyRegisteredContract.currentContractClassId.equals(publiclyRegisteredContract.originalContractClassId);
|
|
482
522
|
return {
|
|
483
523
|
instance: instance ?? undefined,
|
|
484
|
-
isContractInitialized
|
|
524
|
+
isContractInitialized,
|
|
485
525
|
isContractPublished: !!publiclyRegisteredContract,
|
|
486
526
|
isContractUpdated: !!isContractUpdated,
|
|
487
527
|
updatedContractClassId: isContractUpdated ? publiclyRegisteredContract.currentContractClassId : undefined,
|
package/src/base-wallet/index.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { BaseWallet, type FeeOptions } from './base_wallet.js';
|
|
1
|
+
export { BaseWallet, type FeeOptions, type SimulateViaEntrypointOptions } from './base_wallet.js';
|
|
2
2
|
export { simulateViaNode, buildMergedSimulationResult, extractOptimizablePublicStaticCalls } from './utils.js';
|