@aztec/wallet-sdk 0.0.1-commit.d1da697d6 → 0.0.1-commit.d20b825a7
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 +34 -10
- package/dest/base-wallet/base_wallet.d.ts.map +1 -1
- package/dest/base-wallet/base_wallet.js +72 -14
- package/dest/base-wallet/utils.d.ts +3 -2
- package/dest/base-wallet/utils.d.ts.map +1 -1
- package/dest/base-wallet/utils.js +3 -1
- package/package.json +8 -8
- package/src/base-wallet/base_wallet.ts +86 -14
- package/src/base-wallet/utils.ts +6 -4
|
@@ -2,7 +2,7 @@ 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, 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';
|
|
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';
|
|
@@ -12,10 +12,9 @@ import { type ContractArtifact, type EventMetadataDefinition, type FunctionCall
|
|
|
12
12
|
import type { AuthWitness } from '@aztec/stdlib/auth-witness';
|
|
13
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,
|
|
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
|
*/
|
|
@@ -31,11 +30,9 @@ export type FeeOptions = {
|
|
|
31
30
|
gasSettings: GasSettings;
|
|
32
31
|
};
|
|
33
32
|
/** Options for `simulateViaEntrypoint`. */
|
|
34
|
-
export type SimulateViaEntrypointOptions = Pick<SimulateOptions, 'from' | 'additionalScopes' | 'skipTxValidation' | 'skipFeeEnforcement'> & {
|
|
33
|
+
export type SimulateViaEntrypointOptions = Pick<SimulateOptions, 'from' | 'additionalScopes' | 'skipTxValidation' | 'skipFeeEnforcement' | 'sendMessagesAs'> & {
|
|
35
34
|
/** Fee options for the entrypoint */
|
|
36
35
|
feeOptions: FeeOptions;
|
|
37
|
-
/** Scopes to use for the simulation */
|
|
38
|
-
scopes: AztecAddress[];
|
|
39
36
|
};
|
|
40
37
|
/** Options for `completeFeeOptions`. */
|
|
41
38
|
export type CompleteFeeOptionsConfig = {
|
|
@@ -47,6 +44,11 @@ export type CompleteFeeOptionsConfig = {
|
|
|
47
44
|
gasSettings?: Partial<FieldsOf<GasSettings>>;
|
|
48
45
|
/** If true, returns gas settings with high gas limits for estimation. If false, uses fallback limits. */
|
|
49
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;
|
|
50
52
|
};
|
|
51
53
|
/**
|
|
52
54
|
* A base class for Wallet implementations
|
|
@@ -57,8 +59,17 @@ export declare abstract class BaseWallet implements Wallet {
|
|
|
57
59
|
protected log: import("@aztec/foundation/log").Logger;
|
|
58
60
|
protected minFeePadding: number;
|
|
59
61
|
protected cancellableTransactions: boolean;
|
|
62
|
+
private nodeInfoPromise;
|
|
60
63
|
protected constructor(pxe: PXE, aztecNode: AztecNode, log?: import("@aztec/foundation/log").Logger);
|
|
61
64
|
protected scopesFrom(from: AztecAddress | NoFrom, additionalScopes?: AztecAddress[]): AztecAddress[];
|
|
65
|
+
/**
|
|
66
|
+
* Picks the sender address PXE should tag private messages with. Returns `undefined` when there is no signing
|
|
67
|
+
* account (`from === NO_FROM`) and no explicit override; in that case any private log emitted by the tx will fail
|
|
68
|
+
* the contract-side `Sender for tags is not set` assertion unless `set_sender_for_tags` is called first.
|
|
69
|
+
* @param from - Tx sender, or `NO_FROM`.
|
|
70
|
+
* @param sendMessagesAs - Explicit override.
|
|
71
|
+
*/
|
|
72
|
+
protected senderForTagsFrom(from: AztecAddress | NoFrom, sendMessagesAs?: AztecAddress): AztecAddress | undefined;
|
|
62
73
|
protected abstract getAccountFromAddress(address: AztecAddress): Promise<Account>;
|
|
63
74
|
abstract getAccounts(): Promise<Aliased<AztecAddress>[]>;
|
|
64
75
|
/**
|
|
@@ -92,6 +103,12 @@ export declare abstract class BaseWallet implements Wallet {
|
|
|
92
103
|
* @param config - Fee completion config.
|
|
93
104
|
*/
|
|
94
105
|
protected completeFeeOptions(config: CompleteFeeOptionsConfig): Promise<FeeOptions>;
|
|
106
|
+
/**
|
|
107
|
+
* Returns the worst-case min fee across predicted future slots.
|
|
108
|
+
* Falls back to getCurrentMinFees if the node doesn't support getPredictedMinFees.
|
|
109
|
+
* @param estimate - The mana usage estimate to use for fee prediction. Defaults to Limit for conservative estimation.
|
|
110
|
+
*/
|
|
111
|
+
protected getMinFees(estimate?: ManaUsageEstimate): Promise<GasFees>;
|
|
95
112
|
registerSender(address: AztecAddress, _alias?: string): Promise<AztecAddress>;
|
|
96
113
|
registerContract(instance: ContractInstanceWithAddress, artifact?: ContractArtifact, secretKey?: Fr): Promise<ContractInstanceWithAddress>;
|
|
97
114
|
/**
|
|
@@ -99,7 +116,14 @@ export declare abstract class BaseWallet implements Wallet {
|
|
|
99
116
|
* @param executionPayload - The execution payload to simulate.
|
|
100
117
|
* @param opts - Simulation options.
|
|
101
118
|
*/
|
|
102
|
-
protected simulateViaEntrypoint(executionPayload: ExecutionPayload, opts: SimulateViaEntrypointOptions): Promise<
|
|
119
|
+
protected simulateViaEntrypoint(executionPayload: ExecutionPayload, opts: SimulateViaEntrypointOptions): Promise<TxSimulationResultWithAppOffset>;
|
|
120
|
+
/**
|
|
121
|
+
* Computes the index where the app's calls begin in the flattened array of calls (0 = entrypoint/root, 1..N = fee
|
|
122
|
+
* calls, N+1 = app).
|
|
123
|
+
* @param from - The sender address, or NO_FROM for the default entrypoint.
|
|
124
|
+
* @param feeOptions - Fee options containing the wallet fee payment method.
|
|
125
|
+
*/
|
|
126
|
+
protected computeAppCallOffset(from: AztecAddress | NoFrom, feeOptions: FeeOptions): Promise<number>;
|
|
103
127
|
/**
|
|
104
128
|
* Simulates a transaction, optimizing leading public static calls by running them directly
|
|
105
129
|
* on the node while sending the remaining calls through the standard PXE path.
|
|
@@ -108,7 +132,7 @@ export declare abstract class BaseWallet implements Wallet {
|
|
|
108
132
|
* @param opts - Simulation options (from address, fee settings, etc.).
|
|
109
133
|
* @returns The merged simulation result.
|
|
110
134
|
*/
|
|
111
|
-
simulateTx(executionPayload: ExecutionPayload, opts: SimulateOptions): Promise<
|
|
135
|
+
simulateTx(executionPayload: ExecutionPayload, opts: SimulateOptions): Promise<TxSimulationResultWithAppOffset>;
|
|
112
136
|
profileTx(executionPayload: ExecutionPayload, opts: ProfileOptions): Promise<TxProfileResult>;
|
|
113
137
|
sendTx<W extends InteractionWaitOptions = undefined>(executionPayload: ExecutionPayload, opts: SendOptions<W>): Promise<SendReturn<W>>;
|
|
114
138
|
/**
|
|
@@ -135,4 +159,4 @@ export declare abstract class BaseWallet implements Wallet {
|
|
|
135
159
|
isContractClassPubliclyRegistered: boolean;
|
|
136
160
|
}>;
|
|
137
161
|
}
|
|
138
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
162
|
+
//# 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":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAE/D,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AACjF,OAAO,EACL,KAAK,sBAAsB,EAE3B,KAAK,UAAU,EAEhB,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,4BAA4B,EAC5B,KAAK,qBAAqB,EAC1B,KAAK,YAAY,EACjB,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACnB,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,KAAK,MAAM,EACX,KAAK,kBAAkB,EACxB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,8BAA8B,EAAwC,MAAM,4BAA4B,CAAC;AAElH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AAEpD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAExD,OAAO,KAAK,EAAE,GAAG,EAAsB,MAAM,mBAAmB,CAAC;AACjE,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,uBAAuB,EAC5B,KAAK,YAAY,EAElB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EACL,KAAK,2BAA2B,
|
|
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,7 @@
|
|
|
1
1
|
import { NO_FROM } from '@aztec/aztec.js/account';
|
|
2
2
|
import { NO_WAIT, extractOffchainOutput } from '@aztec/aztec.js/contracts';
|
|
3
3
|
import { waitForTx } from '@aztec/aztec.js/node';
|
|
4
|
-
import { ContractInitializationStatus } from '@aztec/aztec.js/wallet';
|
|
4
|
+
import { ContractInitializationStatus, TxSimulationResultWithAppOffset } from '@aztec/aztec.js/wallet';
|
|
5
5
|
import { AccountFeePaymentMethodOptions } from '@aztec/entrypoints/account';
|
|
6
6
|
import { DefaultEntrypoint } from '@aztec/entrypoints/default';
|
|
7
7
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
@@ -11,7 +11,7 @@ import { decodeFromAbi } from '@aztec/stdlib/abi';
|
|
|
11
11
|
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
12
12
|
import { computePartialAddress, getContractClassFromArtifact } from '@aztec/stdlib/contract';
|
|
13
13
|
import { SimulationError } from '@aztec/stdlib/errors';
|
|
14
|
-
import { Gas, GasFees, GasSettings } from '@aztec/stdlib/gas';
|
|
14
|
+
import { Gas, GasFees, GasSettings, ManaUsageEstimate } from '@aztec/stdlib/gas';
|
|
15
15
|
import { computeSiloedPrivateInitializationNullifier, computeSiloedPublicInitializationNullifier } from '@aztec/stdlib/hash';
|
|
16
16
|
import { mergeExecutionPayloads } from '@aztec/stdlib/tx';
|
|
17
17
|
import { inspect } from 'util';
|
|
@@ -24,6 +24,9 @@ import { buildMergedSimulationResult, extractOptimizablePublicStaticCalls, simul
|
|
|
24
24
|
log;
|
|
25
25
|
minFeePadding;
|
|
26
26
|
cancellableTransactions;
|
|
27
|
+
// A wallet is instantiated for a particular chain, so chain info never changes during its lifetime.
|
|
28
|
+
// We cache it here because getChainInfo is called frequently (every tx simulation, send, auth wit, etc.).
|
|
29
|
+
nodeInfoPromise;
|
|
27
30
|
// Protected because we want to force wallets to instantiate their own PXE.
|
|
28
31
|
constructor(pxe, aztecNode, log = createLogger('wallet-sdk:base_wallet')){
|
|
29
32
|
this.pxe = pxe;
|
|
@@ -43,6 +46,15 @@ import { buildMergedSimulationResult, extractOptimizablePublicStaticCalls, simul
|
|
|
43
46
|
].map(AztecAddress.fromString);
|
|
44
47
|
}
|
|
45
48
|
/**
|
|
49
|
+
* Picks the sender address PXE should tag private messages with. Returns `undefined` when there is no signing
|
|
50
|
+
* account (`from === NO_FROM`) and no explicit override; in that case any private log emitted by the tx will fail
|
|
51
|
+
* the contract-side `Sender for tags is not set` assertion unless `set_sender_for_tags` is called first.
|
|
52
|
+
* @param from - Tx sender, or `NO_FROM`.
|
|
53
|
+
* @param sendMessagesAs - Explicit override.
|
|
54
|
+
*/ senderForTagsFrom(from, sendMessagesAs) {
|
|
55
|
+
return sendMessagesAs ?? (from === NO_FROM ? undefined : from);
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
46
58
|
* Returns the list of aliased contacts associated with the wallet.
|
|
47
59
|
* This base implementation directly returns PXE's senders, but note that in general contacts are a superset of senders.
|
|
48
60
|
* - Senders: Addresses we check during synching in case they sent us notes,
|
|
@@ -56,7 +68,10 @@ import { buildMergedSimulationResult, extractOptimizablePublicStaticCalls, simul
|
|
|
56
68
|
}));
|
|
57
69
|
}
|
|
58
70
|
async getChainInfo() {
|
|
59
|
-
|
|
71
|
+
if (!this.nodeInfoPromise) {
|
|
72
|
+
this.nodeInfoPromise = this.aztecNode.getNodeInfo();
|
|
73
|
+
}
|
|
74
|
+
const { l1ChainId, rollupVersion } = await this.nodeInfoPromise;
|
|
60
75
|
return {
|
|
61
76
|
chainId: new Fr(l1ChainId),
|
|
62
77
|
version: new Fr(rollupVersion)
|
|
@@ -126,8 +141,8 @@ import { buildMergedSimulationResult, extractOptimizablePublicStaticCalls, simul
|
|
|
126
141
|
* Completes partial user-provided fee options with wallet defaults.
|
|
127
142
|
* @param config - Fee completion config.
|
|
128
143
|
*/ async completeFeeOptions(config) {
|
|
129
|
-
const { from, feePayer, gasSettings, forEstimation } = config;
|
|
130
|
-
const maxFeesPerGas = gasSettings?.maxFeesPerGas ?? (await this.
|
|
144
|
+
const { from, feePayer, gasSettings, forEstimation, congestionEstimate } = config;
|
|
145
|
+
const maxFeesPerGas = gasSettings?.maxFeesPerGas ?? (await this.getMinFees(congestionEstimate)).mul(1 + this.minFeePadding);
|
|
131
146
|
let accountFeePaymentMethodOptions;
|
|
132
147
|
// If from is an address, we need to determine the appropriate fee payment method options for the
|
|
133
148
|
// account contract entrypoint to use
|
|
@@ -158,6 +173,26 @@ import { buildMergedSimulationResult, extractOptimizablePublicStaticCalls, simul
|
|
|
158
173
|
accountFeePaymentMethodOptions
|
|
159
174
|
};
|
|
160
175
|
}
|
|
176
|
+
/**
|
|
177
|
+
* Returns the worst-case min fee across predicted future slots.
|
|
178
|
+
* Falls back to getCurrentMinFees if the node doesn't support getPredictedMinFees.
|
|
179
|
+
* @param estimate - The mana usage estimate to use for fee prediction. Defaults to Limit for conservative estimation.
|
|
180
|
+
*/ async getMinFees(estimate = ManaUsageEstimate.Limit) {
|
|
181
|
+
try {
|
|
182
|
+
const predicted = await this.aztecNode.getPredictedMinFees(estimate);
|
|
183
|
+
if (predicted.length === 0) {
|
|
184
|
+
return this.aztecNode.getCurrentMinFees();
|
|
185
|
+
}
|
|
186
|
+
return predicted.reduce((worst, fees)=>fees.feePerL2Gas > worst.feePerL2Gas ? fees : worst);
|
|
187
|
+
} catch (err) {
|
|
188
|
+
// Fallback for old nodes that don't support getPredictedMinFees.
|
|
189
|
+
// Only fall back on method-not-found errors (JSON-RPC code -32601); rethrow others.
|
|
190
|
+
if (err?.cause?.code === -32601 || err?.message?.includes('Method not found')) {
|
|
191
|
+
return this.aztecNode.getCurrentMinFees();
|
|
192
|
+
}
|
|
193
|
+
throw err;
|
|
194
|
+
}
|
|
195
|
+
}
|
|
161
196
|
registerSender(address, _alias = '') {
|
|
162
197
|
return this.pxe.registerSender(address);
|
|
163
198
|
}
|
|
@@ -199,12 +234,27 @@ import { buildMergedSimulationResult, extractOptimizablePublicStaticCalls, simul
|
|
|
199
234
|
* @param opts - Simulation options.
|
|
200
235
|
*/ async simulateViaEntrypoint(executionPayload, opts) {
|
|
201
236
|
const txRequest = await this.createTxExecutionRequestFromPayloadAndFee(executionPayload, opts.from, opts.feeOptions);
|
|
202
|
-
|
|
237
|
+
const result = await this.pxe.simulateTx(txRequest, {
|
|
203
238
|
simulatePublic: true,
|
|
204
239
|
skipTxValidation: opts.skipTxValidation,
|
|
205
240
|
skipFeeEnforcement: opts.skipFeeEnforcement,
|
|
206
|
-
scopes: opts.
|
|
241
|
+
scopes: this.scopesFrom(opts.from, opts.additionalScopes),
|
|
242
|
+
senderForTags: this.senderForTagsFrom(opts.from, opts.sendMessagesAs)
|
|
207
243
|
});
|
|
244
|
+
const appCallOffset = await this.computeAppCallOffset(opts.from, opts.feeOptions);
|
|
245
|
+
return TxSimulationResultWithAppOffset.fromResultAndOffset(result, appCallOffset);
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* Computes the index where the app's calls begin in the flattened array of calls (0 = entrypoint/root, 1..N = fee
|
|
249
|
+
* calls, N+1 = app).
|
|
250
|
+
* @param from - The sender address, or NO_FROM for the default entrypoint.
|
|
251
|
+
* @param feeOptions - Fee options containing the wallet fee payment method.
|
|
252
|
+
*/ async computeAppCallOffset(from, feeOptions) {
|
|
253
|
+
if (from === NO_FROM) {
|
|
254
|
+
return 0;
|
|
255
|
+
}
|
|
256
|
+
const feeExecutionPayload = await feeOptions.walletFeePaymentMethod?.getExecutionPayload();
|
|
257
|
+
return (feeExecutionPayload?.calls.length ?? 0) + 1; // +1 for entrypoint
|
|
208
258
|
}
|
|
209
259
|
/**
|
|
210
260
|
* Simulates a transaction, optimizing leading public static calls by running them directly
|
|
@@ -218,7 +268,8 @@ import { buildMergedSimulationResult, extractOptimizablePublicStaticCalls, simul
|
|
|
218
268
|
from: opts.from,
|
|
219
269
|
feePayer: executionPayload.feePayer,
|
|
220
270
|
gasSettings: opts.fee?.gasSettings,
|
|
221
|
-
forEstimation: true
|
|
271
|
+
forEstimation: true,
|
|
272
|
+
congestionEstimate: opts.fee?.congestionEstimate
|
|
222
273
|
});
|
|
223
274
|
const { optimizableCalls, remainingCalls } = extractOptimizablePublicStaticCalls(executionPayload);
|
|
224
275
|
const remainingPayload = {
|
|
@@ -240,9 +291,10 @@ import { buildMergedSimulationResult, extractOptimizablePublicStaticCalls, simul
|
|
|
240
291
|
remainingCalls.length > 0 ? this.simulateViaEntrypoint(remainingPayload, {
|
|
241
292
|
from: opts.from,
|
|
242
293
|
feeOptions,
|
|
243
|
-
|
|
294
|
+
additionalScopes: opts.additionalScopes,
|
|
244
295
|
skipTxValidation: opts.skipTxValidation,
|
|
245
|
-
skipFeeEnforcement: opts.skipFeeEnforcement ?? true
|
|
296
|
+
skipFeeEnforcement: opts.skipFeeEnforcement ?? true,
|
|
297
|
+
sendMessagesAs: opts.sendMessagesAs
|
|
246
298
|
}) : Promise.resolve(null)
|
|
247
299
|
]);
|
|
248
300
|
return buildMergedSimulationResult(optimizedResults, normalResult);
|
|
@@ -251,23 +303,29 @@ import { buildMergedSimulationResult, extractOptimizablePublicStaticCalls, simul
|
|
|
251
303
|
const feeOptions = await this.completeFeeOptions({
|
|
252
304
|
from: opts.from,
|
|
253
305
|
feePayer: executionPayload.feePayer,
|
|
254
|
-
gasSettings: opts.fee?.gasSettings
|
|
306
|
+
gasSettings: opts.fee?.gasSettings,
|
|
307
|
+
congestionEstimate: opts.fee?.congestionEstimate
|
|
255
308
|
});
|
|
256
309
|
const txRequest = await this.createTxExecutionRequestFromPayloadAndFee(executionPayload, opts.from, feeOptions);
|
|
257
310
|
return this.pxe.profileTx(txRequest, {
|
|
258
311
|
profileMode: opts.profileMode,
|
|
259
312
|
skipProofGeneration: opts.skipProofGeneration ?? true,
|
|
260
|
-
scopes: this.scopesFrom(opts.from, opts.additionalScopes)
|
|
313
|
+
scopes: this.scopesFrom(opts.from, opts.additionalScopes),
|
|
314
|
+
senderForTags: this.senderForTagsFrom(opts.from, opts.sendMessagesAs)
|
|
261
315
|
});
|
|
262
316
|
}
|
|
263
317
|
async sendTx(executionPayload, opts) {
|
|
264
318
|
const feeOptions = await this.completeFeeOptions({
|
|
265
319
|
from: opts.from,
|
|
266
320
|
feePayer: executionPayload.feePayer,
|
|
267
|
-
gasSettings: opts.fee?.gasSettings
|
|
321
|
+
gasSettings: opts.fee?.gasSettings,
|
|
322
|
+
congestionEstimate: opts.fee?.congestionEstimate
|
|
268
323
|
});
|
|
269
324
|
const txRequest = await this.createTxExecutionRequestFromPayloadAndFee(executionPayload, opts.from, feeOptions);
|
|
270
|
-
const provenTx = await this.pxe.proveTx(txRequest,
|
|
325
|
+
const provenTx = await this.pxe.proveTx(txRequest, {
|
|
326
|
+
scopes: this.scopesFrom(opts.from, opts.additionalScopes),
|
|
327
|
+
senderForTags: this.senderForTagsFrom(opts.from, opts.sendMessagesAs)
|
|
328
|
+
});
|
|
271
329
|
const offchainOutput = extractOffchainOutput(provenTx.getOffchainEffects(), provenTx.publicInputs.constants.anchorBlockHeader.globalVariables.timestamp);
|
|
272
330
|
const tx = await provenTx.toTx();
|
|
273
331
|
const txHash = tx.getTxHash();
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { AztecNode } from '@aztec/aztec.js/node';
|
|
2
|
+
import { TxSimulationResultWithAppOffset } from '@aztec/aztec.js/wallet';
|
|
2
3
|
import type { ChainInfo } from '@aztec/entrypoints/interfaces';
|
|
3
4
|
import type { ContractNameResolver } from '@aztec/pxe/client/lazy';
|
|
4
5
|
import { type FunctionCall } from '@aztec/stdlib/abi';
|
|
@@ -45,5 +46,5 @@ export declare function simulateViaNode(node: AztecNode, publicStaticCalls: Func
|
|
|
45
46
|
* @param normalResult - Result from normal simulation (null if all calls were optimized).
|
|
46
47
|
* @returns A single TxSimulationResult with return values in original call order.
|
|
47
48
|
*/
|
|
48
|
-
export declare function buildMergedSimulationResult(optimizedResults: TxSimulationResult[], normalResult:
|
|
49
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
49
|
+
export declare function buildMergedSimulationResult(optimizedResults: TxSimulationResult[], normalResult: TxSimulationResultWithAppOffset | null): TxSimulationResultWithAppOffset;
|
|
50
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9iYXNlLXdhbGxldC91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUV6RSxPQUFPLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUkvRCxPQUFPLEtBQUssRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBR25FLE9BQU8sRUFBRSxLQUFLLFlBQVksRUFBb0IsTUFBTSxtQkFBbUIsQ0FBQztBQUN4RSxPQUFPLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNoRSxPQUFPLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQVFyRCxPQUFPLEVBQ0wsS0FBSyxXQUFXLEVBQ2hCLEtBQUssZ0JBQWdCLEVBT3JCLGtCQUFrQixFQUNuQixNQUFNLGtCQUFrQixDQUFDO0FBRTFCOzs7Ozs7Ozs7R0FTRztBQUNILHdCQUFnQixtQ0FBbUMsQ0FBQyxPQUFPLEVBQUUsZ0JBQWdCLEdBQUc7SUFDOUUsdUVBQXVFO0lBQ3ZFLGdCQUFnQixFQUFFLFlBQVksRUFBRSxDQUFDO0lBQ2pDLDJCQUEyQjtJQUMzQixjQUFjLEVBQUUsWUFBWSxFQUFFLENBQUM7Q0FDaEMsQ0FPQTtBQXVHRDs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCx3QkFBc0IsZUFBZSxDQUNuQyxJQUFJLEVBQUUsU0FBUyxFQUNmLGlCQUFpQixFQUFFLFlBQVksRUFBRSxFQUNqQyxJQUFJLEVBQUUsWUFBWSxFQUNsQixTQUFTLEVBQUUsU0FBUyxFQUNwQixXQUFXLEVBQUUsV0FBVyxFQUN4QixXQUFXLEVBQUUsV0FBVyxFQUN4QixrQkFBa0IscUJBQWdCLEVBQ2xDLGVBQWUsRUFBRSxvQkFBb0IsR0FDcEMsT0FBTyxDQUFDLGtCQUFrQixFQUFFLENBQUMsQ0F3Qi9CO0FBRUQ7Ozs7Ozs7OztHQVNHO0FBQ0gsd0JBQWdCLDJCQUEyQixDQUN6QyxnQkFBZ0IsRUFBRSxrQkFBa0IsRUFBRSxFQUN0QyxZQUFZLEVBQUUsK0JBQStCLEdBQUcsSUFBSSxHQUNuRCwrQkFBK0IsQ0FxQmpDIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/base-wallet/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/base-wallet/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,+BAA+B,EAAE,MAAM,wBAAwB,CAAC;AAEzE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAI/D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAGnE,OAAO,EAAE,KAAK,YAAY,EAAoB,MAAM,mBAAmB,CAAC;AACxE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAQrD,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,gBAAgB,EAOrB,kBAAkB,EACnB,MAAM,kBAAkB,CAAC;AAE1B;;;;;;;;;GASG;AACH,wBAAgB,mCAAmC,CAAC,OAAO,EAAE,gBAAgB,GAAG;IAC9E,uEAAuE;IACvE,gBAAgB,EAAE,YAAY,EAAE,CAAC;IACjC,2BAA2B;IAC3B,cAAc,EAAE,YAAY,EAAE,CAAC;CAChC,CAOA;AAuGD;;;;;;;;;;;;GAYG;AACH,wBAAsB,eAAe,CACnC,IAAI,EAAE,SAAS,EACf,iBAAiB,EAAE,YAAY,EAAE,EACjC,IAAI,EAAE,YAAY,EAClB,SAAS,EAAE,SAAS,EACpB,WAAW,EAAE,WAAW,EACxB,WAAW,EAAE,WAAW,EACxB,kBAAkB,qBAAgB,EAClC,eAAe,EAAE,oBAAoB,GACpC,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAwB/B;AAED;;;;;;;;;GASG;AACH,wBAAgB,2BAA2B,CACzC,gBAAgB,EAAE,kBAAkB,EAAE,EACtC,YAAY,EAAE,+BAA+B,GAAG,IAAI,GACnD,+BAA+B,CAqBjC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { TxSimulationResultWithAppOffset } from '@aztec/aztec.js/wallet';
|
|
1
2
|
import { MAX_ENQUEUED_CALLS_PER_CALL } from '@aztec/constants';
|
|
2
3
|
import { makeTuple } from '@aztec/foundation/array';
|
|
3
4
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
@@ -127,5 +128,6 @@ import { HashedValues, PrivateCallExecutionResult, PrivateExecutionResult, Tx, T
|
|
|
127
128
|
...baseResult.publicOutput,
|
|
128
129
|
publicReturnValues: allReturnValues
|
|
129
130
|
} : undefined;
|
|
130
|
-
|
|
131
|
+
const merged = new TxSimulationResult(baseResult.privateExecutionResult, baseResult.publicInputs, mergedPublicOutput, normalResult?.stats);
|
|
132
|
+
return TxSimulationResultWithAppOffset.fromResultAndOffset(merged, normalResult?.appCallOffset ?? 0);
|
|
131
133
|
}
|
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.d20b825a7",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": {
|
|
7
7
|
"./base-wallet": "./dest/base-wallet/index.js",
|
|
@@ -75,15 +75,15 @@
|
|
|
75
75
|
]
|
|
76
76
|
},
|
|
77
77
|
"dependencies": {
|
|
78
|
-
"@aztec/aztec.js": "0.0.1-commit.
|
|
79
|
-
"@aztec/constants": "0.0.1-commit.
|
|
80
|
-
"@aztec/entrypoints": "0.0.1-commit.
|
|
81
|
-
"@aztec/foundation": "0.0.1-commit.
|
|
82
|
-
"@aztec/pxe": "0.0.1-commit.
|
|
83
|
-
"@aztec/stdlib": "0.0.1-commit.
|
|
78
|
+
"@aztec/aztec.js": "0.0.1-commit.d20b825a7",
|
|
79
|
+
"@aztec/constants": "0.0.1-commit.d20b825a7",
|
|
80
|
+
"@aztec/entrypoints": "0.0.1-commit.d20b825a7",
|
|
81
|
+
"@aztec/foundation": "0.0.1-commit.d20b825a7",
|
|
82
|
+
"@aztec/pxe": "0.0.1-commit.d20b825a7",
|
|
83
|
+
"@aztec/stdlib": "0.0.1-commit.d20b825a7"
|
|
84
84
|
},
|
|
85
85
|
"devDependencies": {
|
|
86
|
-
"@aztec/noir-contracts.js": "0.0.1-commit.
|
|
86
|
+
"@aztec/noir-contracts.js": "0.0.1-commit.d20b825a7",
|
|
87
87
|
"@jest/globals": "^30.0.0",
|
|
88
88
|
"@types/jest": "^30.0.0",
|
|
89
89
|
"@types/node": "^22.15.17",
|
|
@@ -21,6 +21,7 @@ import {
|
|
|
21
21
|
type ProfileOptions,
|
|
22
22
|
type SendOptions,
|
|
23
23
|
type SimulateOptions,
|
|
24
|
+
TxSimulationResultWithAppOffset,
|
|
24
25
|
type Wallet,
|
|
25
26
|
type WalletCapabilities,
|
|
26
27
|
} from '@aztec/aztec.js/wallet';
|
|
@@ -42,11 +43,12 @@ import type { AuthWitness } from '@aztec/stdlib/auth-witness';
|
|
|
42
43
|
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
43
44
|
import {
|
|
44
45
|
type ContractInstanceWithAddress,
|
|
46
|
+
type NodeInfo,
|
|
45
47
|
computePartialAddress,
|
|
46
48
|
getContractClassFromArtifact,
|
|
47
49
|
} from '@aztec/stdlib/contract';
|
|
48
50
|
import { SimulationError } from '@aztec/stdlib/errors';
|
|
49
|
-
import { Gas, GasFees, GasSettings } from '@aztec/stdlib/gas';
|
|
51
|
+
import { Gas, GasFees, GasSettings, ManaUsageEstimate } from '@aztec/stdlib/gas';
|
|
50
52
|
import {
|
|
51
53
|
computeSiloedPrivateInitializationNullifier,
|
|
52
54
|
computeSiloedPublicInitializationNullifier,
|
|
@@ -54,12 +56,12 @@ import {
|
|
|
54
56
|
import type { AztecNode } from '@aztec/stdlib/interfaces/client';
|
|
55
57
|
import {
|
|
56
58
|
BlockHeader,
|
|
59
|
+
ExecutionPayload,
|
|
57
60
|
type TxExecutionRequest,
|
|
58
61
|
type TxProfileResult,
|
|
59
|
-
TxSimulationResult,
|
|
60
62
|
type UtilityExecutionResult,
|
|
63
|
+
mergeExecutionPayloads,
|
|
61
64
|
} from '@aztec/stdlib/tx';
|
|
62
|
-
import { ExecutionPayload, mergeExecutionPayloads } from '@aztec/stdlib/tx';
|
|
63
65
|
|
|
64
66
|
import { inspect } from 'util';
|
|
65
67
|
|
|
@@ -83,12 +85,10 @@ export type FeeOptions = {
|
|
|
83
85
|
/** Options for `simulateViaEntrypoint`. */
|
|
84
86
|
export type SimulateViaEntrypointOptions = Pick<
|
|
85
87
|
SimulateOptions,
|
|
86
|
-
'from' | 'additionalScopes' | 'skipTxValidation' | 'skipFeeEnforcement'
|
|
88
|
+
'from' | 'additionalScopes' | 'skipTxValidation' | 'skipFeeEnforcement' | 'sendMessagesAs'
|
|
87
89
|
> & {
|
|
88
90
|
/** Fee options for the entrypoint */
|
|
89
91
|
feeOptions: FeeOptions;
|
|
90
|
-
/** Scopes to use for the simulation */
|
|
91
|
-
scopes: AztecAddress[];
|
|
92
92
|
};
|
|
93
93
|
|
|
94
94
|
/** Options for `completeFeeOptions`. */
|
|
@@ -101,6 +101,11 @@ export type CompleteFeeOptionsConfig = {
|
|
|
101
101
|
gasSettings?: Partial<FieldsOf<GasSettings>>;
|
|
102
102
|
/** If true, returns gas settings with high gas limits for estimation. If false, uses fallback limits. */
|
|
103
103
|
forEstimation?: boolean;
|
|
104
|
+
/**
|
|
105
|
+
* Assumed network congestion level for fee prediction. Controls how aggressively the wallet
|
|
106
|
+
* estimates future fees. Defaults to Limit (worst case) when not specified.
|
|
107
|
+
*/
|
|
108
|
+
congestionEstimate?: ManaUsageEstimate;
|
|
104
109
|
};
|
|
105
110
|
|
|
106
111
|
/**
|
|
@@ -109,6 +114,9 @@ export type CompleteFeeOptionsConfig = {
|
|
|
109
114
|
export abstract class BaseWallet implements Wallet {
|
|
110
115
|
protected minFeePadding = 0.5;
|
|
111
116
|
protected cancellableTransactions = false;
|
|
117
|
+
// A wallet is instantiated for a particular chain, so chain info never changes during its lifetime.
|
|
118
|
+
// We cache it here because getChainInfo is called frequently (every tx simulation, send, auth wit, etc.).
|
|
119
|
+
private nodeInfoPromise: Promise<NodeInfo> | undefined;
|
|
112
120
|
|
|
113
121
|
// Protected because we want to force wallets to instantiate their own PXE.
|
|
114
122
|
protected constructor(
|
|
@@ -123,6 +131,17 @@ export abstract class BaseWallet implements Wallet {
|
|
|
123
131
|
return [...scopeSet].map(AztecAddress.fromString);
|
|
124
132
|
}
|
|
125
133
|
|
|
134
|
+
/**
|
|
135
|
+
* Picks the sender address PXE should tag private messages with. Returns `undefined` when there is no signing
|
|
136
|
+
* account (`from === NO_FROM`) and no explicit override; in that case any private log emitted by the tx will fail
|
|
137
|
+
* the contract-side `Sender for tags is not set` assertion unless `set_sender_for_tags` is called first.
|
|
138
|
+
* @param from - Tx sender, or `NO_FROM`.
|
|
139
|
+
* @param sendMessagesAs - Explicit override.
|
|
140
|
+
*/
|
|
141
|
+
protected senderForTagsFrom(from: AztecAddress | NoFrom, sendMessagesAs?: AztecAddress): AztecAddress | undefined {
|
|
142
|
+
return sendMessagesAs ?? (from === NO_FROM ? undefined : from);
|
|
143
|
+
}
|
|
144
|
+
|
|
126
145
|
protected abstract getAccountFromAddress(address: AztecAddress): Promise<Account>;
|
|
127
146
|
|
|
128
147
|
abstract getAccounts(): Promise<Aliased<AztecAddress>[]>;
|
|
@@ -140,7 +159,10 @@ export abstract class BaseWallet implements Wallet {
|
|
|
140
159
|
}
|
|
141
160
|
|
|
142
161
|
async getChainInfo(): Promise<ChainInfo> {
|
|
143
|
-
|
|
162
|
+
if (!this.nodeInfoPromise) {
|
|
163
|
+
this.nodeInfoPromise = this.aztecNode.getNodeInfo();
|
|
164
|
+
}
|
|
165
|
+
const { l1ChainId, rollupVersion } = await this.nodeInfoPromise;
|
|
144
166
|
return { chainId: new Fr(l1ChainId), version: new Fr(rollupVersion) };
|
|
145
167
|
}
|
|
146
168
|
|
|
@@ -224,9 +246,9 @@ export abstract class BaseWallet implements Wallet {
|
|
|
224
246
|
* @param config - Fee completion config.
|
|
225
247
|
*/
|
|
226
248
|
protected async completeFeeOptions(config: CompleteFeeOptionsConfig): Promise<FeeOptions> {
|
|
227
|
-
const { from, feePayer, gasSettings, forEstimation } = config;
|
|
249
|
+
const { from, feePayer, gasSettings, forEstimation, congestionEstimate } = config;
|
|
228
250
|
const maxFeesPerGas =
|
|
229
|
-
gasSettings?.maxFeesPerGas ?? (await this.
|
|
251
|
+
gasSettings?.maxFeesPerGas ?? (await this.getMinFees(congestionEstimate)).mul(1 + this.minFeePadding);
|
|
230
252
|
let accountFeePaymentMethodOptions;
|
|
231
253
|
// If from is an address, we need to determine the appropriate fee payment method options for the
|
|
232
254
|
// account contract entrypoint to use
|
|
@@ -262,6 +284,28 @@ export abstract class BaseWallet implements Wallet {
|
|
|
262
284
|
};
|
|
263
285
|
}
|
|
264
286
|
|
|
287
|
+
/**
|
|
288
|
+
* Returns the worst-case min fee across predicted future slots.
|
|
289
|
+
* Falls back to getCurrentMinFees if the node doesn't support getPredictedMinFees.
|
|
290
|
+
* @param estimate - The mana usage estimate to use for fee prediction. Defaults to Limit for conservative estimation.
|
|
291
|
+
*/
|
|
292
|
+
protected async getMinFees(estimate: ManaUsageEstimate = ManaUsageEstimate.Limit): Promise<GasFees> {
|
|
293
|
+
try {
|
|
294
|
+
const predicted = await this.aztecNode.getPredictedMinFees(estimate);
|
|
295
|
+
if (predicted.length === 0) {
|
|
296
|
+
return this.aztecNode.getCurrentMinFees();
|
|
297
|
+
}
|
|
298
|
+
return predicted.reduce((worst, fees) => (fees.feePerL2Gas > worst.feePerL2Gas ? fees : worst));
|
|
299
|
+
} catch (err: any) {
|
|
300
|
+
// Fallback for old nodes that don't support getPredictedMinFees.
|
|
301
|
+
// Only fall back on method-not-found errors (JSON-RPC code -32601); rethrow others.
|
|
302
|
+
if (err?.cause?.code === -32601 || err?.message?.includes('Method not found')) {
|
|
303
|
+
return this.aztecNode.getCurrentMinFees();
|
|
304
|
+
}
|
|
305
|
+
throw err;
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
|
|
265
309
|
registerSender(address: AztecAddress, _alias: string = ''): Promise<AztecAddress> {
|
|
266
310
|
return this.pxe.registerSender(address);
|
|
267
311
|
}
|
|
@@ -315,12 +359,29 @@ export abstract class BaseWallet implements Wallet {
|
|
|
315
359
|
opts.from,
|
|
316
360
|
opts.feeOptions,
|
|
317
361
|
);
|
|
318
|
-
|
|
362
|
+
const result = await this.pxe.simulateTx(txRequest, {
|
|
319
363
|
simulatePublic: true,
|
|
320
364
|
skipTxValidation: opts.skipTxValidation,
|
|
321
365
|
skipFeeEnforcement: opts.skipFeeEnforcement,
|
|
322
|
-
scopes: opts.
|
|
366
|
+
scopes: this.scopesFrom(opts.from, opts.additionalScopes),
|
|
367
|
+
senderForTags: this.senderForTagsFrom(opts.from, opts.sendMessagesAs),
|
|
323
368
|
});
|
|
369
|
+
const appCallOffset = await this.computeAppCallOffset(opts.from, opts.feeOptions);
|
|
370
|
+
return TxSimulationResultWithAppOffset.fromResultAndOffset(result, appCallOffset);
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
/**
|
|
374
|
+
* Computes the index where the app's calls begin in the flattened array of calls (0 = entrypoint/root, 1..N = fee
|
|
375
|
+
* calls, N+1 = app).
|
|
376
|
+
* @param from - The sender address, or NO_FROM for the default entrypoint.
|
|
377
|
+
* @param feeOptions - Fee options containing the wallet fee payment method.
|
|
378
|
+
*/
|
|
379
|
+
protected async computeAppCallOffset(from: AztecAddress | NoFrom, feeOptions: FeeOptions): Promise<number> {
|
|
380
|
+
if (from === NO_FROM) {
|
|
381
|
+
return 0;
|
|
382
|
+
}
|
|
383
|
+
const feeExecutionPayload = await feeOptions.walletFeePaymentMethod?.getExecutionPayload();
|
|
384
|
+
return (feeExecutionPayload?.calls.length ?? 0) + 1; // +1 for entrypoint
|
|
324
385
|
}
|
|
325
386
|
|
|
326
387
|
/**
|
|
@@ -331,12 +392,16 @@ export abstract class BaseWallet implements Wallet {
|
|
|
331
392
|
* @param opts - Simulation options (from address, fee settings, etc.).
|
|
332
393
|
* @returns The merged simulation result.
|
|
333
394
|
*/
|
|
334
|
-
async simulateTx(
|
|
395
|
+
async simulateTx(
|
|
396
|
+
executionPayload: ExecutionPayload,
|
|
397
|
+
opts: SimulateOptions,
|
|
398
|
+
): Promise<TxSimulationResultWithAppOffset> {
|
|
335
399
|
const feeOptions = await this.completeFeeOptions({
|
|
336
400
|
from: opts.from,
|
|
337
401
|
feePayer: executionPayload.feePayer,
|
|
338
402
|
gasSettings: opts.fee?.gasSettings,
|
|
339
403
|
forEstimation: true,
|
|
404
|
+
congestionEstimate: opts.fee?.congestionEstimate,
|
|
340
405
|
});
|
|
341
406
|
const { optimizableCalls, remainingCalls } = extractOptimizablePublicStaticCalls(executionPayload);
|
|
342
407
|
const remainingPayload = { ...executionPayload, calls: remainingCalls };
|
|
@@ -369,9 +434,10 @@ export abstract class BaseWallet implements Wallet {
|
|
|
369
434
|
? this.simulateViaEntrypoint(remainingPayload, {
|
|
370
435
|
from: opts.from,
|
|
371
436
|
feeOptions,
|
|
372
|
-
|
|
437
|
+
additionalScopes: opts.additionalScopes,
|
|
373
438
|
skipTxValidation: opts.skipTxValidation,
|
|
374
439
|
skipFeeEnforcement: opts.skipFeeEnforcement ?? true,
|
|
440
|
+
sendMessagesAs: opts.sendMessagesAs,
|
|
375
441
|
})
|
|
376
442
|
: Promise.resolve(null),
|
|
377
443
|
]);
|
|
@@ -384,12 +450,14 @@ export abstract class BaseWallet implements Wallet {
|
|
|
384
450
|
from: opts.from,
|
|
385
451
|
feePayer: executionPayload.feePayer,
|
|
386
452
|
gasSettings: opts.fee?.gasSettings,
|
|
453
|
+
congestionEstimate: opts.fee?.congestionEstimate,
|
|
387
454
|
});
|
|
388
455
|
const txRequest = await this.createTxExecutionRequestFromPayloadAndFee(executionPayload, opts.from, feeOptions);
|
|
389
456
|
return this.pxe.profileTx(txRequest, {
|
|
390
457
|
profileMode: opts.profileMode,
|
|
391
458
|
skipProofGeneration: opts.skipProofGeneration ?? true,
|
|
392
459
|
scopes: this.scopesFrom(opts.from, opts.additionalScopes),
|
|
460
|
+
senderForTags: this.senderForTagsFrom(opts.from, opts.sendMessagesAs),
|
|
393
461
|
});
|
|
394
462
|
}
|
|
395
463
|
|
|
@@ -401,9 +469,13 @@ export abstract class BaseWallet implements Wallet {
|
|
|
401
469
|
from: opts.from,
|
|
402
470
|
feePayer: executionPayload.feePayer,
|
|
403
471
|
gasSettings: opts.fee?.gasSettings,
|
|
472
|
+
congestionEstimate: opts.fee?.congestionEstimate,
|
|
404
473
|
});
|
|
405
474
|
const txRequest = await this.createTxExecutionRequestFromPayloadAndFee(executionPayload, opts.from, feeOptions);
|
|
406
|
-
const provenTx = await this.pxe.proveTx(txRequest,
|
|
475
|
+
const provenTx = await this.pxe.proveTx(txRequest, {
|
|
476
|
+
scopes: this.scopesFrom(opts.from, opts.additionalScopes),
|
|
477
|
+
senderForTags: this.senderForTagsFrom(opts.from, opts.sendMessagesAs),
|
|
478
|
+
});
|
|
407
479
|
const offchainOutput = extractOffchainOutput(
|
|
408
480
|
provenTx.getOffchainEffects(),
|
|
409
481
|
provenTx.publicInputs.constants.anchorBlockHeader.globalVariables.timestamp,
|
package/src/base-wallet/utils.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { AztecNode } from '@aztec/aztec.js/node';
|
|
2
|
+
import { TxSimulationResultWithAppOffset } from '@aztec/aztec.js/wallet';
|
|
2
3
|
import { MAX_ENQUEUED_CALLS_PER_CALL } from '@aztec/constants';
|
|
3
4
|
import type { ChainInfo } from '@aztec/entrypoints/interfaces';
|
|
4
5
|
import { makeTuple } from '@aztec/foundation/array';
|
|
@@ -214,13 +215,13 @@ export async function simulateViaNode(
|
|
|
214
215
|
*/
|
|
215
216
|
export function buildMergedSimulationResult(
|
|
216
217
|
optimizedResults: TxSimulationResult[],
|
|
217
|
-
normalResult:
|
|
218
|
-
):
|
|
218
|
+
normalResult: TxSimulationResultWithAppOffset | null,
|
|
219
|
+
): TxSimulationResultWithAppOffset {
|
|
219
220
|
const optimizedReturnValues = optimizedResults.flatMap(r => r.publicOutput?.publicReturnValues ?? []);
|
|
220
221
|
const normalReturnValues = normalResult?.publicOutput?.publicReturnValues ?? [];
|
|
221
222
|
const allReturnValues = [...optimizedReturnValues, ...normalReturnValues];
|
|
222
223
|
|
|
223
|
-
const baseResult = normalResult ?? optimizedResults[0];
|
|
224
|
+
const baseResult: TxSimulationResult = normalResult ?? optimizedResults[0];
|
|
224
225
|
|
|
225
226
|
const mergedPublicOutput: PublicSimulationOutput | undefined = baseResult.publicOutput
|
|
226
227
|
? {
|
|
@@ -229,10 +230,11 @@ export function buildMergedSimulationResult(
|
|
|
229
230
|
}
|
|
230
231
|
: undefined;
|
|
231
232
|
|
|
232
|
-
|
|
233
|
+
const merged = new TxSimulationResult(
|
|
233
234
|
baseResult.privateExecutionResult,
|
|
234
235
|
baseResult.publicInputs,
|
|
235
236
|
mergedPublicOutput,
|
|
236
237
|
normalResult?.stats,
|
|
237
238
|
);
|
|
239
|
+
return TxSimulationResultWithAppOffset.fromResultAndOffset(merged, normalResult?.appCallOffset ?? 0);
|
|
238
240
|
}
|