@aztec/wallet-sdk 0.0.1-commit.381b1a9 → 0.0.1-commit.3a4ae741b
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 +23 -17
- package/dest/base-wallet/base_wallet.d.ts.map +1 -1
- package/dest/base-wallet/base_wallet.js +70 -45
- 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 +122 -78
- package/src/base-wallet/index.ts +1 -1
|
@@ -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
|
|
5
|
+
import { type Aliased, type AppCapabilities, type BatchResults, type BatchedMethod, ContractInitializationStatus, type ExecuteUtilityOptions, type PrivateEvent, type PrivateEventFilter, type ProfileOptions, type SendOptions, type SimulateOptions, 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';
|
|
@@ -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,8 +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
|
|
45
|
-
protected scopesFrom(from: AztecAddress, additionalScopes?: AztecAddress[]): AztecAddress[];
|
|
51
|
+
protected scopesFrom(from: AztecAddress | NoFrom, additionalScopes?: AztecAddress[]): AztecAddress[];
|
|
46
52
|
protected abstract getAccountFromAddress(address: AztecAddress): Promise<Account>;
|
|
47
53
|
abstract getAccounts(): Promise<Aliased<AztecAddress>[]>;
|
|
48
54
|
/**
|
|
@@ -54,7 +60,7 @@ export declare abstract class BaseWallet implements Wallet {
|
|
|
54
60
|
*/
|
|
55
61
|
getAddressBook(): Promise<Aliased<AztecAddress>[]>;
|
|
56
62
|
getChainInfo(): Promise<ChainInfo>;
|
|
57
|
-
protected createTxExecutionRequestFromPayloadAndFee(executionPayload: ExecutionPayload, from: AztecAddress, feeOptions: FeeOptions): Promise<TxExecutionRequest>;
|
|
63
|
+
protected createTxExecutionRequestFromPayloadAndFee(executionPayload: ExecutionPayload, from: AztecAddress | NoFrom, feeOptions: FeeOptions): Promise<TxExecutionRequest>;
|
|
58
64
|
createAuthWit(from: AztecAddress, messageHashOrIntent: IntentInnerHash | CallIntent): Promise<AuthWitness>;
|
|
59
65
|
/**
|
|
60
66
|
* Request capabilities from the wallet.
|
|
@@ -78,7 +84,7 @@ export declare abstract class BaseWallet implements Wallet {
|
|
|
78
84
|
* @param gasSettings - User-provided partial gas settings
|
|
79
85
|
* @returns - Complete fee options that can be used to create a transaction execution request
|
|
80
86
|
*/
|
|
81
|
-
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>;
|
|
82
88
|
/**
|
|
83
89
|
* Completes partial user-provided fee options with unreasonably high gas limits
|
|
84
90
|
* for gas estimation. Uses the same logic as completeFeeOptions but sets high limits
|
|
@@ -87,14 +93,14 @@ export declare abstract class BaseWallet implements Wallet {
|
|
|
87
93
|
* @param feePayer - The address paying for fees (if any fee payment method is embedded in the execution payload)
|
|
88
94
|
* @param gasSettings - User-provided partial gas settings
|
|
89
95
|
*/
|
|
90
|
-
protected completeFeeOptionsForEstimation(from: AztecAddress, feePayer?: AztecAddress, gasSettings?: Partial<FieldsOf<GasSettings>>): Promise<{
|
|
96
|
+
protected completeFeeOptionsForEstimation(from: AztecAddress | NoFrom, feePayer?: AztecAddress, gasSettings?: Partial<FieldsOf<GasSettings>>): Promise<{
|
|
91
97
|
/**
|
|
92
98
|
* A wallet-provided fallback fee payment method that is used only if the transaction that is being constructed
|
|
93
99
|
* doesn't already include one
|
|
94
100
|
*/
|
|
95
101
|
walletFeePaymentMethod?: FeePaymentMethod | undefined;
|
|
96
102
|
/** Configuration options for the account to properly handle the selected fee payment method */
|
|
97
|
-
accountFeePaymentMethodOptions
|
|
103
|
+
accountFeePaymentMethodOptions?: AccountFeePaymentMethodOptions | undefined;
|
|
98
104
|
gasSettings: GasSettings;
|
|
99
105
|
}>;
|
|
100
106
|
registerSender(address: AztecAddress, _alias?: string): Promise<AztecAddress>;
|
|
@@ -102,13 +108,9 @@ export declare abstract class BaseWallet implements Wallet {
|
|
|
102
108
|
/**
|
|
103
109
|
* Simulates calls through the standard PXE path (account entrypoint).
|
|
104
110
|
* @param executionPayload - The execution payload to simulate.
|
|
105
|
-
* @param
|
|
106
|
-
* @param feeOptions - Fee options for the transaction.
|
|
107
|
-
* @param skipTxValidation - Whether to skip tx validation.
|
|
108
|
-
* @param skipFeeEnforcement - Whether to skip fee enforcement.
|
|
109
|
-
* @param scopes - The scopes to use for the simulation.
|
|
111
|
+
* @param opts - Simulation options.
|
|
110
112
|
*/
|
|
111
|
-
protected simulateViaEntrypoint(executionPayload: ExecutionPayload,
|
|
113
|
+
protected simulateViaEntrypoint(executionPayload: ExecutionPayload, opts: SimulateViaEntrypointOptions): Promise<TxSimulationResult>;
|
|
112
114
|
/**
|
|
113
115
|
* Simulates a transaction, optimizing leading public static calls by running them directly
|
|
114
116
|
* on the node while sending the remaining calls through the standard PXE path.
|
|
@@ -128,9 +130,13 @@ export declare abstract class BaseWallet implements Wallet {
|
|
|
128
130
|
protected contextualizeError(err: Error, ...context: string[]): Error;
|
|
129
131
|
executeUtility(call: FunctionCall, opts: ExecuteUtilityOptions): Promise<UtilityExecutionResult>;
|
|
130
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
|
+
* @param address - The contract address to query.
|
|
136
|
+
*/
|
|
131
137
|
getContractMetadata(address: AztecAddress): Promise<{
|
|
132
138
|
instance: ContractInstanceWithAddress | undefined;
|
|
133
|
-
|
|
139
|
+
initializationStatus: ContractInitializationStatus;
|
|
134
140
|
isContractPublished: boolean;
|
|
135
141
|
isContractUpdated: boolean;
|
|
136
142
|
updatedContractClassId: Fr | undefined;
|
|
@@ -140,4 +146,4 @@ export declare abstract class BaseWallet implements Wallet {
|
|
|
140
146
|
isContractClassPubliclyRegistered: boolean;
|
|
141
147
|
}>;
|
|
142
148
|
}
|
|
143
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
149
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZV93YWxsZXQuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9iYXNlLXdhbGxldC9iYXNlX3dhbGxldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFL0QsT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLGVBQWUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2pGLE9BQU8sRUFDTCxLQUFLLHNCQUFzQixFQUUzQixLQUFLLFVBQVUsRUFFaEIsTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRTVELE9BQU8sRUFDTCxLQUFLLE9BQU8sRUFDWixLQUFLLGVBQWUsRUFDcEIsS0FBSyxZQUFZLEVBQ2pCLEtBQUssYUFBYSxFQUNsQiw0QkFBNEIsRUFDNUIsS0FBSyxxQkFBcUIsRUFDMUIsS0FBSyxZQUFZLEVBQ2pCLEtBQUssa0JBQWtCLEVBQ3ZCLEtBQUssY0FBYyxFQUNuQixLQUFLLFdBQVcsRUFDaEIsS0FBSyxlQUFlLEVBQ3BCLEtBQUssTUFBTSxFQUNYLEtBQUssa0JBQWtCLEVBQ3hCLE1BQU0sd0JBQXdCLENBQUM7QUFPaEMsT0FBTyxFQUFFLDhCQUE4QixFQUF3QyxNQUFNLDRCQUE0QixDQUFDO0FBRWxILE9BQU8sS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUVwRCxPQUFPLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsS0FBSyxZQUFZLEVBQW9CLE1BQU0sd0JBQXdCLENBQUM7QUFDN0UsT0FBTyxLQUFLLEVBQUUsR0FBRyxFQUFzQixNQUFNLG1CQUFtQixDQUFDO0FBQ2pFLE9BQU8sRUFD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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,10 @@
|
|
|
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';
|
|
4
|
+
import { ContractInitializationStatus } from '@aztec/aztec.js/wallet';
|
|
3
5
|
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
6
|
import { AccountFeePaymentMethodOptions } from '@aztec/entrypoints/account';
|
|
7
|
+
import { DefaultEntrypoint } from '@aztec/entrypoints/default';
|
|
5
8
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
6
9
|
import { createLogger } from '@aztec/foundation/log';
|
|
7
10
|
import { displayDebugLogs } from '@aztec/pxe/client/lazy';
|
|
@@ -10,7 +13,7 @@ import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
|
10
13
|
import { computePartialAddress, getContractClassFromArtifact } from '@aztec/stdlib/contract';
|
|
11
14
|
import { SimulationError } from '@aztec/stdlib/errors';
|
|
12
15
|
import { Gas, GasSettings } from '@aztec/stdlib/gas';
|
|
13
|
-
import {
|
|
16
|
+
import { computeSiloedPrivateInitializationNullifier, computeSiloedPublicInitializationNullifier } from '@aztec/stdlib/hash';
|
|
14
17
|
import { mergeExecutionPayloads } from '@aztec/stdlib/tx';
|
|
15
18
|
import { inspect } from 'util';
|
|
16
19
|
import { buildMergedSimulationResult, extractOptimizablePublicStaticCalls, simulateViaNode } from './utils.js';
|
|
@@ -30,15 +33,8 @@ import { buildMergedSimulationResult, extractOptimizablePublicStaticCalls, simul
|
|
|
30
33
|
this.minFeePadding = 0.5;
|
|
31
34
|
this.cancellableTransactions = false;
|
|
32
35
|
}
|
|
33
|
-
// When `from` is the zero address (e.g. when deploying a new account contract), we return an
|
|
34
|
-
// empty scope list which acts as deny-all: no notes are visible and no keys are accessible.
|
|
35
|
-
scopesFor(from) {
|
|
36
|
-
return from.isZero() ? [] : [
|
|
37
|
-
from
|
|
38
|
-
];
|
|
39
|
-
}
|
|
40
36
|
scopesFrom(from, additionalScopes = []) {
|
|
41
|
-
const allScopes = from
|
|
37
|
+
const allScopes = from === NO_FROM ? additionalScopes : [
|
|
42
38
|
from,
|
|
43
39
|
...additionalScopes
|
|
44
40
|
];
|
|
@@ -69,18 +65,24 @@ import { buildMergedSimulationResult, extractOptimizablePublicStaticCalls, simul
|
|
|
69
65
|
}
|
|
70
66
|
async createTxExecutionRequestFromPayloadAndFee(executionPayload, from, feeOptions) {
|
|
71
67
|
const feeExecutionPayload = await feeOptions.walletFeePaymentMethod?.getExecutionPayload();
|
|
72
|
-
const executionOptions = {
|
|
73
|
-
txNonce: Fr.random(),
|
|
74
|
-
cancellable: this.cancellableTransactions,
|
|
75
|
-
feePaymentMethodOptions: feeOptions.accountFeePaymentMethodOptions
|
|
76
|
-
};
|
|
77
68
|
const finalExecutionPayload = feeExecutionPayload ? mergeExecutionPayloads([
|
|
78
69
|
feeExecutionPayload,
|
|
79
70
|
executionPayload
|
|
80
71
|
]) : executionPayload;
|
|
81
|
-
const fromAccount = await this.getAccountFromAddress(from);
|
|
82
72
|
const chainInfo = await this.getChainInfo();
|
|
83
|
-
|
|
73
|
+
if (from === NO_FROM) {
|
|
74
|
+
const entrypoint = new DefaultEntrypoint();
|
|
75
|
+
return entrypoint.createTxExecutionRequest(finalExecutionPayload, feeOptions.gasSettings, chainInfo);
|
|
76
|
+
} else {
|
|
77
|
+
const fromAccount = await this.getAccountFromAddress(from);
|
|
78
|
+
const executionOptions = {
|
|
79
|
+
txNonce: Fr.random(),
|
|
80
|
+
cancellable: this.cancellableTransactions,
|
|
81
|
+
// If from is an address, feeOptions include the way the account contract should handle the fee payment
|
|
82
|
+
feePaymentMethodOptions: feeOptions.accountFeePaymentMethodOptions
|
|
83
|
+
};
|
|
84
|
+
return fromAccount.createTxExecutionRequest(finalExecutionPayload, feeOptions.gasSettings, chainInfo, executionOptions);
|
|
85
|
+
}
|
|
84
86
|
}
|
|
85
87
|
async createAuthWit(from, messageHashOrIntent) {
|
|
86
88
|
const account = await this.getAccountFromAddress(from);
|
|
@@ -130,14 +132,18 @@ import { buildMergedSimulationResult, extractOptimizablePublicStaticCalls, simul
|
|
|
130
132
|
*/ async completeFeeOptions(from, feePayer, gasSettings) {
|
|
131
133
|
const maxFeesPerGas = gasSettings?.maxFeesPerGas ?? (await this.aztecNode.getCurrentMinFees()).mul(1 + this.minFeePadding);
|
|
132
134
|
let accountFeePaymentMethodOptions;
|
|
133
|
-
//
|
|
134
|
-
//
|
|
135
|
-
if (
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
135
|
+
// If from is an address, we need to determine the appropriate fee payment method options for the
|
|
136
|
+
// account contract entrypoint to use
|
|
137
|
+
if (from !== NO_FROM) {
|
|
138
|
+
if (!feePayer) {
|
|
139
|
+
// The transaction does not include a fee payment method, so we set the flag
|
|
140
|
+
// for the account to use its fee juice balance
|
|
141
|
+
accountFeePaymentMethodOptions = AccountFeePaymentMethodOptions.PREEXISTING_FEE_JUICE;
|
|
142
|
+
} else {
|
|
143
|
+
// The transaction includes fee payment method, so we check if we are the fee payer for it
|
|
144
|
+
// (this can only happen if the embedded payment method is FeeJuiceWithClaim)
|
|
145
|
+
accountFeePaymentMethodOptions = from.equals(feePayer) ? AccountFeePaymentMethodOptions.FEE_JUICE_WITH_CLAIM : AccountFeePaymentMethodOptions.EXTERNAL;
|
|
146
|
+
}
|
|
141
147
|
}
|
|
142
148
|
const fullGasSettings = GasSettings.default({
|
|
143
149
|
...gasSettings,
|
|
@@ -206,18 +212,14 @@ import { buildMergedSimulationResult, extractOptimizablePublicStaticCalls, simul
|
|
|
206
212
|
/**
|
|
207
213
|
* Simulates calls through the standard PXE path (account entrypoint).
|
|
208
214
|
* @param executionPayload - The execution payload to simulate.
|
|
209
|
-
* @param
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
* @param skipFeeEnforcement - Whether to skip fee enforcement.
|
|
213
|
-
* @param scopes - The scopes to use for the simulation.
|
|
214
|
-
*/ async simulateViaEntrypoint(executionPayload, from, feeOptions, scopes, skipTxValidation, skipFeeEnforcement) {
|
|
215
|
-
const txRequest = await this.createTxExecutionRequestFromPayloadAndFee(executionPayload, from, feeOptions);
|
|
215
|
+
* @param opts - Simulation options.
|
|
216
|
+
*/ async simulateViaEntrypoint(executionPayload, opts) {
|
|
217
|
+
const txRequest = await this.createTxExecutionRequestFromPayloadAndFee(executionPayload, opts.from, opts.feeOptions);
|
|
216
218
|
return this.pxe.simulateTx(txRequest, {
|
|
217
219
|
simulatePublic: true,
|
|
218
|
-
skipTxValidation,
|
|
219
|
-
skipFeeEnforcement,
|
|
220
|
-
scopes
|
|
220
|
+
skipTxValidation: opts.skipTxValidation,
|
|
221
|
+
skipFeeEnforcement: opts.skipFeeEnforcement,
|
|
222
|
+
scopes: opts.scopes
|
|
221
223
|
});
|
|
222
224
|
}
|
|
223
225
|
/**
|
|
@@ -243,9 +245,16 @@ import { buildMergedSimulationResult, extractOptimizablePublicStaticCalls, simul
|
|
|
243
245
|
} catch {
|
|
244
246
|
blockHeader = await this.aztecNode.getBlockHeader();
|
|
245
247
|
}
|
|
248
|
+
const simulationOrigin = opts.from === NO_FROM ? AztecAddress.ZERO : opts.from;
|
|
246
249
|
const [optimizedResults, normalResult] = await Promise.all([
|
|
247
|
-
optimizableCalls.length > 0 ? simulateViaNode(this.aztecNode, optimizableCalls,
|
|
248
|
-
remainingCalls.length > 0 ? this.simulateViaEntrypoint(remainingPayload,
|
|
250
|
+
optimizableCalls.length > 0 ? simulateViaNode(this.aztecNode, optimizableCalls, simulationOrigin, chainInfo, feeOptions.gasSettings, blockHeader, opts.skipFeeEnforcement ?? true, this.getContractName.bind(this)) : Promise.resolve([]),
|
|
251
|
+
remainingCalls.length > 0 ? this.simulateViaEntrypoint(remainingPayload, {
|
|
252
|
+
from: opts.from,
|
|
253
|
+
feeOptions,
|
|
254
|
+
scopes: this.scopesFrom(opts.from, opts.additionalScopes),
|
|
255
|
+
skipTxValidation: opts.skipTxValidation,
|
|
256
|
+
skipFeeEnforcement: opts.skipFeeEnforcement ?? true
|
|
257
|
+
}) : Promise.resolve(null)
|
|
249
258
|
]);
|
|
250
259
|
return buildMergedSimulationResult(optimizedResults, normalResult);
|
|
251
260
|
}
|
|
@@ -262,7 +271,7 @@ import { buildMergedSimulationResult, extractOptimizablePublicStaticCalls, simul
|
|
|
262
271
|
const feeOptions = await this.completeFeeOptions(opts.from, executionPayload.feePayer, opts.fee?.gasSettings);
|
|
263
272
|
const txRequest = await this.createTxExecutionRequestFromPayloadAndFee(executionPayload, opts.from, feeOptions);
|
|
264
273
|
const provenTx = await this.pxe.proveTx(txRequest, this.scopesFrom(opts.from, opts.additionalScopes));
|
|
265
|
-
const offchainOutput = extractOffchainOutput(provenTx.getOffchainEffects());
|
|
274
|
+
const offchainOutput = extractOffchainOutput(provenTx.getOffchainEffects(), provenTx.publicInputs.constants.anchorBlockHeader.globalVariables.timestamp);
|
|
266
275
|
const tx = await provenTx.toTx();
|
|
267
276
|
const txHash = tx.getTxHash();
|
|
268
277
|
if (await this.aztecNode.getTxEffect(txHash)) {
|
|
@@ -319,9 +328,7 @@ import { buildMergedSimulationResult, extractOptimizablePublicStaticCalls, simul
|
|
|
319
328
|
executeUtility(call, opts) {
|
|
320
329
|
return this.pxe.executeUtility(call, {
|
|
321
330
|
authwits: opts.authWitnesses,
|
|
322
|
-
scopes:
|
|
323
|
-
opts.scope
|
|
324
|
-
]
|
|
331
|
+
scopes: opts.scopes
|
|
325
332
|
});
|
|
326
333
|
}
|
|
327
334
|
async getPrivateEvents(eventDef, eventFilter) {
|
|
@@ -340,15 +347,33 @@ import { buildMergedSimulationResult, extractOptimizablePublicStaticCalls, simul
|
|
|
340
347
|
});
|
|
341
348
|
return decodedEvents;
|
|
342
349
|
}
|
|
343
|
-
|
|
350
|
+
/**
|
|
351
|
+
* Returns metadata about a contract, including whether it has been initialized, published, and updated.
|
|
352
|
+
* @param address - The contract address to query.
|
|
353
|
+
*/ async getContractMetadata(address) {
|
|
344
354
|
const instance = await this.pxe.getContractInstance(address);
|
|
345
|
-
const
|
|
346
|
-
|
|
347
|
-
|
|
355
|
+
const publiclyRegisteredContractPromise = this.aztecNode.getContract(address);
|
|
356
|
+
let initializationStatus;
|
|
357
|
+
if (instance) {
|
|
358
|
+
// We have the instance, so we can compute the private initialization nullifier (which includes init_hash and is
|
|
359
|
+
// emitted by both private and public initializers) and get a definitive INITIALIZED/UNINITIALIZED answer.
|
|
360
|
+
const initNullifier = await computeSiloedPrivateInitializationNullifier(address, instance.initializationHash);
|
|
361
|
+
const witness = await this.aztecNode.getNullifierMembershipWitness('latest', initNullifier);
|
|
362
|
+
initializationStatus = witness ? ContractInitializationStatus.INITIALIZED : ContractInitializationStatus.UNINITIALIZED;
|
|
363
|
+
} else {
|
|
364
|
+
// Without the instance we lack the init_hash needed for the private nullifier. We fall back to checking the
|
|
365
|
+
// public initialization nullifier (computed from address alone). Not all contracts emit it (only those with
|
|
366
|
+
// public functions that require initialization checks), so its absence doesn't mean the contract is
|
|
367
|
+
// uninitialized.
|
|
368
|
+
const publicNullifier = await computeSiloedPublicInitializationNullifier(address);
|
|
369
|
+
const witness = await this.aztecNode.getNullifierMembershipWitness('latest', publicNullifier);
|
|
370
|
+
initializationStatus = witness ? ContractInitializationStatus.INITIALIZED : ContractInitializationStatus.UNKNOWN;
|
|
371
|
+
}
|
|
372
|
+
const publiclyRegisteredContract = await publiclyRegisteredContractPromise;
|
|
348
373
|
const isContractUpdated = publiclyRegisteredContract && !publiclyRegisteredContract.currentContractClassId.equals(publiclyRegisteredContract.originalContractClassId);
|
|
349
374
|
return {
|
|
350
375
|
instance: instance ?? undefined,
|
|
351
|
-
|
|
376
|
+
initializationStatus,
|
|
352
377
|
isContractPublished: !!publiclyRegisteredContract,
|
|
353
378
|
isContractUpdated: !!isContractUpdated,
|
|
354
379
|
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": "0.0.1-commit.
|
|
4
|
+
"version": "0.0.1-commit.3a4ae741b",
|
|
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": "0.0.1-commit.
|
|
75
|
-
"@aztec/constants": "0.0.1-commit.
|
|
76
|
-
"@aztec/entrypoints": "0.0.1-commit.
|
|
77
|
-
"@aztec/foundation": "0.0.1-commit.
|
|
78
|
-
"@aztec/pxe": "0.0.1-commit.
|
|
79
|
-
"@aztec/stdlib": "0.0.1-commit.
|
|
74
|
+
"@aztec/aztec.js": "0.0.1-commit.3a4ae741b",
|
|
75
|
+
"@aztec/constants": "0.0.1-commit.3a4ae741b",
|
|
76
|
+
"@aztec/entrypoints": "0.0.1-commit.3a4ae741b",
|
|
77
|
+
"@aztec/foundation": "0.0.1-commit.3a4ae741b",
|
|
78
|
+
"@aztec/pxe": "0.0.1-commit.3a4ae741b",
|
|
79
|
+
"@aztec/stdlib": "0.0.1-commit.3a4ae741b"
|
|
80
80
|
},
|
|
81
81
|
"devDependencies": {
|
|
82
|
-
"@aztec/noir-contracts.js": "0.0.1-commit.
|
|
82
|
+
"@aztec/noir-contracts.js": "0.0.1-commit.3a4ae741b",
|
|
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,
|
|
@@ -8,19 +9,20 @@ import {
|
|
|
8
9
|
} from '@aztec/aztec.js/contracts';
|
|
9
10
|
import type { FeePaymentMethod } from '@aztec/aztec.js/fee';
|
|
10
11
|
import { waitForTx } from '@aztec/aztec.js/node';
|
|
11
|
-
import
|
|
12
|
-
Aliased,
|
|
13
|
-
AppCapabilities,
|
|
14
|
-
BatchResults,
|
|
15
|
-
BatchedMethod,
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
12
|
+
import {
|
|
13
|
+
type Aliased,
|
|
14
|
+
type AppCapabilities,
|
|
15
|
+
type BatchResults,
|
|
16
|
+
type BatchedMethod,
|
|
17
|
+
ContractInitializationStatus,
|
|
18
|
+
type ExecuteUtilityOptions,
|
|
19
|
+
type PrivateEvent,
|
|
20
|
+
type PrivateEventFilter,
|
|
21
|
+
type ProfileOptions,
|
|
22
|
+
type SendOptions,
|
|
23
|
+
type SimulateOptions,
|
|
24
|
+
type Wallet,
|
|
25
|
+
type WalletCapabilities,
|
|
24
26
|
} from '@aztec/aztec.js/wallet';
|
|
25
27
|
import {
|
|
26
28
|
GAS_ESTIMATION_DA_GAS_LIMIT,
|
|
@@ -29,6 +31,7 @@ import {
|
|
|
29
31
|
GAS_ESTIMATION_TEARDOWN_L2_GAS_LIMIT,
|
|
30
32
|
} from '@aztec/constants';
|
|
31
33
|
import { AccountFeePaymentMethodOptions, type DefaultAccountEntrypointOptions } from '@aztec/entrypoints/account';
|
|
34
|
+
import { DefaultEntrypoint } from '@aztec/entrypoints/default';
|
|
32
35
|
import type { ChainInfo } from '@aztec/entrypoints/interfaces';
|
|
33
36
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
34
37
|
import { createLogger } from '@aztec/foundation/log';
|
|
@@ -50,7 +53,10 @@ import {
|
|
|
50
53
|
} from '@aztec/stdlib/contract';
|
|
51
54
|
import { SimulationError } from '@aztec/stdlib/errors';
|
|
52
55
|
import { Gas, GasSettings } from '@aztec/stdlib/gas';
|
|
53
|
-
import {
|
|
56
|
+
import {
|
|
57
|
+
computeSiloedPrivateInitializationNullifier,
|
|
58
|
+
computeSiloedPublicInitializationNullifier,
|
|
59
|
+
} from '@aztec/stdlib/hash';
|
|
54
60
|
import type { AztecNode } from '@aztec/stdlib/interfaces/client';
|
|
55
61
|
import {
|
|
56
62
|
BlockHeader,
|
|
@@ -75,11 +81,21 @@ export type FeeOptions = {
|
|
|
75
81
|
*/
|
|
76
82
|
walletFeePaymentMethod?: FeePaymentMethod;
|
|
77
83
|
/** Configuration options for the account to properly handle the selected fee payment method */
|
|
78
|
-
accountFeePaymentMethodOptions
|
|
84
|
+
accountFeePaymentMethodOptions?: AccountFeePaymentMethodOptions;
|
|
79
85
|
/** The gas settings to use for the transaction */
|
|
80
86
|
gasSettings: GasSettings;
|
|
81
87
|
};
|
|
82
88
|
|
|
89
|
+
/** Options for `simulateViaEntrypoint`. */
|
|
90
|
+
export type SimulateViaEntrypointOptions = Pick<
|
|
91
|
+
SimulateOptions,
|
|
92
|
+
'from' | 'additionalScopes' | 'skipTxValidation' | 'skipFeeEnforcement'
|
|
93
|
+
> & {
|
|
94
|
+
/** Fee options for the entrypoint */
|
|
95
|
+
feeOptions: FeeOptions;
|
|
96
|
+
/** Scopes to use for the simulation */
|
|
97
|
+
scopes: AccessScopes;
|
|
98
|
+
};
|
|
83
99
|
/**
|
|
84
100
|
* A base class for Wallet implementations
|
|
85
101
|
*/
|
|
@@ -94,14 +110,8 @@ export abstract class BaseWallet implements Wallet {
|
|
|
94
110
|
protected log = createLogger('wallet-sdk:base_wallet'),
|
|
95
111
|
) {}
|
|
96
112
|
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
protected scopesFor(from: AztecAddress): AztecAddress[] {
|
|
100
|
-
return from.isZero() ? [] : [from];
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
protected scopesFrom(from: AztecAddress, additionalScopes: AztecAddress[] = []): AztecAddress[] {
|
|
104
|
-
const allScopes = from.isZero() ? additionalScopes : [from, ...additionalScopes];
|
|
113
|
+
protected scopesFrom(from: AztecAddress | NoFrom, additionalScopes: AztecAddress[] = []): AztecAddress[] {
|
|
114
|
+
const allScopes = from === NO_FROM ? additionalScopes : [from, ...additionalScopes];
|
|
105
115
|
const scopeSet = new Set(allScopes.map(address => address.toString()));
|
|
106
116
|
return [...scopeSet].map(AztecAddress.fromString);
|
|
107
117
|
}
|
|
@@ -129,26 +139,33 @@ export abstract class BaseWallet implements Wallet {
|
|
|
129
139
|
|
|
130
140
|
protected async createTxExecutionRequestFromPayloadAndFee(
|
|
131
141
|
executionPayload: ExecutionPayload,
|
|
132
|
-
from: AztecAddress,
|
|
142
|
+
from: AztecAddress | NoFrom,
|
|
133
143
|
feeOptions: FeeOptions,
|
|
134
144
|
): Promise<TxExecutionRequest> {
|
|
135
145
|
const feeExecutionPayload = await feeOptions.walletFeePaymentMethod?.getExecutionPayload();
|
|
136
|
-
const executionOptions: DefaultAccountEntrypointOptions = {
|
|
137
|
-
txNonce: Fr.random(),
|
|
138
|
-
cancellable: this.cancellableTransactions,
|
|
139
|
-
feePaymentMethodOptions: feeOptions.accountFeePaymentMethodOptions,
|
|
140
|
-
};
|
|
141
146
|
const finalExecutionPayload = feeExecutionPayload
|
|
142
147
|
? mergeExecutionPayloads([feeExecutionPayload, executionPayload])
|
|
143
148
|
: executionPayload;
|
|
144
|
-
const fromAccount = await this.getAccountFromAddress(from);
|
|
145
149
|
const chainInfo = await this.getChainInfo();
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
chainInfo
|
|
150
|
-
|
|
151
|
-
|
|
150
|
+
|
|
151
|
+
if (from === NO_FROM) {
|
|
152
|
+
const entrypoint = new DefaultEntrypoint();
|
|
153
|
+
return entrypoint.createTxExecutionRequest(finalExecutionPayload, feeOptions.gasSettings, chainInfo);
|
|
154
|
+
} else {
|
|
155
|
+
const fromAccount = await this.getAccountFromAddress(from);
|
|
156
|
+
const executionOptions: DefaultAccountEntrypointOptions = {
|
|
157
|
+
txNonce: Fr.random(),
|
|
158
|
+
cancellable: this.cancellableTransactions,
|
|
159
|
+
// If from is an address, feeOptions include the way the account contract should handle the fee payment
|
|
160
|
+
feePaymentMethodOptions: feeOptions.accountFeePaymentMethodOptions!,
|
|
161
|
+
};
|
|
162
|
+
return fromAccount.createTxExecutionRequest(
|
|
163
|
+
finalExecutionPayload,
|
|
164
|
+
feeOptions.gasSettings,
|
|
165
|
+
chainInfo,
|
|
166
|
+
executionOptions,
|
|
167
|
+
);
|
|
168
|
+
}
|
|
152
169
|
}
|
|
153
170
|
|
|
154
171
|
public async createAuthWit(
|
|
@@ -203,23 +220,27 @@ export abstract class BaseWallet implements Wallet {
|
|
|
203
220
|
* @returns - Complete fee options that can be used to create a transaction execution request
|
|
204
221
|
*/
|
|
205
222
|
protected async completeFeeOptions(
|
|
206
|
-
from: AztecAddress,
|
|
223
|
+
from: AztecAddress | NoFrom,
|
|
207
224
|
feePayer?: AztecAddress,
|
|
208
225
|
gasSettings?: Partial<FieldsOf<GasSettings>>,
|
|
209
226
|
): Promise<FeeOptions> {
|
|
210
227
|
const maxFeesPerGas =
|
|
211
228
|
gasSettings?.maxFeesPerGas ?? (await this.aztecNode.getCurrentMinFees()).mul(1 + this.minFeePadding);
|
|
212
229
|
let accountFeePaymentMethodOptions;
|
|
213
|
-
//
|
|
214
|
-
//
|
|
215
|
-
if (
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
230
|
+
// If from is an address, we need to determine the appropriate fee payment method options for the
|
|
231
|
+
// account contract entrypoint to use
|
|
232
|
+
if (from !== NO_FROM) {
|
|
233
|
+
if (!feePayer) {
|
|
234
|
+
// The transaction does not include a fee payment method, so we set the flag
|
|
235
|
+
// for the account to use its fee juice balance
|
|
236
|
+
accountFeePaymentMethodOptions = AccountFeePaymentMethodOptions.PREEXISTING_FEE_JUICE;
|
|
237
|
+
} else {
|
|
238
|
+
// The transaction includes fee payment method, so we check if we are the fee payer for it
|
|
239
|
+
// (this can only happen if the embedded payment method is FeeJuiceWithClaim)
|
|
240
|
+
accountFeePaymentMethodOptions = from.equals(feePayer)
|
|
241
|
+
? AccountFeePaymentMethodOptions.FEE_JUICE_WITH_CLAIM
|
|
242
|
+
: AccountFeePaymentMethodOptions.EXTERNAL;
|
|
243
|
+
}
|
|
223
244
|
}
|
|
224
245
|
const fullGasSettings: GasSettings = GasSettings.default({ ...gasSettings, maxFeesPerGas });
|
|
225
246
|
this.log.debug(`Using L2 gas settings`, fullGasSettings);
|
|
@@ -239,7 +260,7 @@ export abstract class BaseWallet implements Wallet {
|
|
|
239
260
|
* @param gasSettings - User-provided partial gas settings
|
|
240
261
|
*/
|
|
241
262
|
protected async completeFeeOptionsForEstimation(
|
|
242
|
-
from: AztecAddress,
|
|
263
|
+
from: AztecAddress | NoFrom,
|
|
243
264
|
feePayer?: AztecAddress,
|
|
244
265
|
gasSettings?: Partial<FieldsOf<GasSettings>>,
|
|
245
266
|
) {
|
|
@@ -306,22 +327,20 @@ export abstract class BaseWallet implements Wallet {
|
|
|
306
327
|
/**
|
|
307
328
|
* Simulates calls through the standard PXE path (account entrypoint).
|
|
308
329
|
* @param executionPayload - The execution payload to simulate.
|
|
309
|
-
* @param
|
|
310
|
-
* @param feeOptions - Fee options for the transaction.
|
|
311
|
-
* @param skipTxValidation - Whether to skip tx validation.
|
|
312
|
-
* @param skipFeeEnforcement - Whether to skip fee enforcement.
|
|
313
|
-
* @param scopes - The scopes to use for the simulation.
|
|
330
|
+
* @param opts - Simulation options.
|
|
314
331
|
*/
|
|
315
|
-
protected async simulateViaEntrypoint(
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
332
|
+
protected async simulateViaEntrypoint(executionPayload: ExecutionPayload, opts: SimulateViaEntrypointOptions) {
|
|
333
|
+
const txRequest = await this.createTxExecutionRequestFromPayloadAndFee(
|
|
334
|
+
executionPayload,
|
|
335
|
+
opts.from,
|
|
336
|
+
opts.feeOptions,
|
|
337
|
+
);
|
|
338
|
+
return this.pxe.simulateTx(txRequest, {
|
|
339
|
+
simulatePublic: true,
|
|
340
|
+
skipTxValidation: opts.skipTxValidation,
|
|
341
|
+
skipFeeEnforcement: opts.skipFeeEnforcement,
|
|
342
|
+
scopes: opts.scopes,
|
|
343
|
+
});
|
|
325
344
|
}
|
|
326
345
|
|
|
327
346
|
/**
|
|
@@ -349,12 +368,13 @@ export abstract class BaseWallet implements Wallet {
|
|
|
349
368
|
blockHeader = (await this.aztecNode.getBlockHeader())!;
|
|
350
369
|
}
|
|
351
370
|
|
|
371
|
+
const simulationOrigin = opts.from === NO_FROM ? AztecAddress.ZERO : opts.from;
|
|
352
372
|
const [optimizedResults, normalResult] = await Promise.all([
|
|
353
373
|
optimizableCalls.length > 0
|
|
354
374
|
? simulateViaNode(
|
|
355
375
|
this.aztecNode,
|
|
356
376
|
optimizableCalls,
|
|
357
|
-
|
|
377
|
+
simulationOrigin,
|
|
358
378
|
chainInfo,
|
|
359
379
|
feeOptions.gasSettings,
|
|
360
380
|
blockHeader,
|
|
@@ -363,14 +383,13 @@ export abstract class BaseWallet implements Wallet {
|
|
|
363
383
|
)
|
|
364
384
|
: Promise.resolve([]),
|
|
365
385
|
remainingCalls.length > 0
|
|
366
|
-
? this.simulateViaEntrypoint(
|
|
367
|
-
|
|
368
|
-
opts.from,
|
|
386
|
+
? this.simulateViaEntrypoint(remainingPayload, {
|
|
387
|
+
from: opts.from,
|
|
369
388
|
feeOptions,
|
|
370
|
-
this.scopesFrom(opts.from, opts.additionalScopes),
|
|
371
|
-
opts.skipTxValidation,
|
|
372
|
-
opts.skipFeeEnforcement ?? true,
|
|
373
|
-
)
|
|
389
|
+
scopes: this.scopesFrom(opts.from, opts.additionalScopes),
|
|
390
|
+
skipTxValidation: opts.skipTxValidation,
|
|
391
|
+
skipFeeEnforcement: opts.skipFeeEnforcement ?? true,
|
|
392
|
+
})
|
|
374
393
|
: Promise.resolve(null),
|
|
375
394
|
]);
|
|
376
395
|
|
|
@@ -394,7 +413,10 @@ export abstract class BaseWallet implements Wallet {
|
|
|
394
413
|
const feeOptions = await this.completeFeeOptions(opts.from, executionPayload.feePayer, opts.fee?.gasSettings);
|
|
395
414
|
const txRequest = await this.createTxExecutionRequestFromPayloadAndFee(executionPayload, opts.from, feeOptions);
|
|
396
415
|
const provenTx = await this.pxe.proveTx(txRequest, this.scopesFrom(opts.from, opts.additionalScopes));
|
|
397
|
-
const offchainOutput = extractOffchainOutput(
|
|
416
|
+
const offchainOutput = extractOffchainOutput(
|
|
417
|
+
provenTx.getOffchainEffects(),
|
|
418
|
+
provenTx.publicInputs.constants.anchorBlockHeader.globalVariables.timestamp,
|
|
419
|
+
);
|
|
398
420
|
const tx = await provenTx.toTx();
|
|
399
421
|
const txHash = tx.getTxHash();
|
|
400
422
|
if (await this.aztecNode.getTxEffect(txHash)) {
|
|
@@ -451,7 +473,7 @@ export abstract class BaseWallet implements Wallet {
|
|
|
451
473
|
}
|
|
452
474
|
|
|
453
475
|
executeUtility(call: FunctionCall, opts: ExecuteUtilityOptions): Promise<UtilityExecutionResult> {
|
|
454
|
-
return this.pxe.executeUtility(call, { authwits: opts.authWitnesses, scopes:
|
|
476
|
+
return this.pxe.executeUtility(call, { authwits: opts.authWitnesses, scopes: opts.scopes });
|
|
455
477
|
}
|
|
456
478
|
|
|
457
479
|
async getPrivateEvents<T>(
|
|
@@ -474,17 +496,39 @@ export abstract class BaseWallet implements Wallet {
|
|
|
474
496
|
return decodedEvents;
|
|
475
497
|
}
|
|
476
498
|
|
|
499
|
+
/**
|
|
500
|
+
* Returns metadata about a contract, including whether it has been initialized, published, and updated.
|
|
501
|
+
* @param address - The contract address to query.
|
|
502
|
+
*/
|
|
477
503
|
async getContractMetadata(address: AztecAddress) {
|
|
478
504
|
const instance = await this.pxe.getContractInstance(address);
|
|
479
|
-
const
|
|
480
|
-
|
|
481
|
-
|
|
505
|
+
const publiclyRegisteredContractPromise = this.aztecNode.getContract(address);
|
|
506
|
+
|
|
507
|
+
let initializationStatus: ContractInitializationStatus;
|
|
508
|
+
if (instance) {
|
|
509
|
+
// We have the instance, so we can compute the private initialization nullifier (which includes init_hash and is
|
|
510
|
+
// emitted by both private and public initializers) and get a definitive INITIALIZED/UNINITIALIZED answer.
|
|
511
|
+
const initNullifier = await computeSiloedPrivateInitializationNullifier(address, instance.initializationHash);
|
|
512
|
+
const witness = await this.aztecNode.getNullifierMembershipWitness('latest', initNullifier);
|
|
513
|
+
initializationStatus = witness
|
|
514
|
+
? ContractInitializationStatus.INITIALIZED
|
|
515
|
+
: ContractInitializationStatus.UNINITIALIZED;
|
|
516
|
+
} else {
|
|
517
|
+
// Without the instance we lack the init_hash needed for the private nullifier. We fall back to checking the
|
|
518
|
+
// public initialization nullifier (computed from address alone). Not all contracts emit it (only those with
|
|
519
|
+
// public functions that require initialization checks), so its absence doesn't mean the contract is
|
|
520
|
+
// uninitialized.
|
|
521
|
+
const publicNullifier = await computeSiloedPublicInitializationNullifier(address);
|
|
522
|
+
const witness = await this.aztecNode.getNullifierMembershipWitness('latest', publicNullifier);
|
|
523
|
+
initializationStatus = witness ? ContractInitializationStatus.INITIALIZED : ContractInitializationStatus.UNKNOWN;
|
|
524
|
+
}
|
|
525
|
+
const publiclyRegisteredContract = await publiclyRegisteredContractPromise;
|
|
482
526
|
const isContractUpdated =
|
|
483
527
|
publiclyRegisteredContract &&
|
|
484
528
|
!publiclyRegisteredContract.currentContractClassId.equals(publiclyRegisteredContract.originalContractClassId);
|
|
485
529
|
return {
|
|
486
530
|
instance: instance ?? undefined,
|
|
487
|
-
|
|
531
|
+
initializationStatus,
|
|
488
532
|
isContractPublished: !!publiclyRegisteredContract,
|
|
489
533
|
isContractUpdated: !!isContractUpdated,
|
|
490
534
|
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';
|