@aztec/wallet-sdk 0.0.1-commit.2d9cb6034 → 0.0.1-commit.2e20a94
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 +35 -30
- package/dest/base-wallet/base_wallet.d.ts.map +1 -1
- package/dest/base-wallet/base_wallet.js +69 -35
- package/dest/base-wallet/index.d.ts +2 -2
- package/dest/base-wallet/index.d.ts.map +1 -1
- 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 +97 -58
- package/src/base-wallet/index.ts +6 -1
- 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
|
*/
|
|
@@ -34,8 +33,22 @@ export type FeeOptions = {
|
|
|
34
33
|
export type SimulateViaEntrypointOptions = Pick<SimulateOptions, 'from' | 'additionalScopes' | 'skipTxValidation' | 'skipFeeEnforcement'> & {
|
|
35
34
|
/** Fee options for the entrypoint */
|
|
36
35
|
feeOptions: FeeOptions;
|
|
37
|
-
|
|
38
|
-
|
|
36
|
+
};
|
|
37
|
+
/** Options for `completeFeeOptions`. */
|
|
38
|
+
export type CompleteFeeOptionsConfig = {
|
|
39
|
+
/** The address where the transaction is being sent from. */
|
|
40
|
+
from: AztecAddress | NoFrom;
|
|
41
|
+
/** The address paying for fees (if any fee payment method is embedded in the execution payload). */
|
|
42
|
+
feePayer?: AztecAddress;
|
|
43
|
+
/** User-provided partial gas settings. */
|
|
44
|
+
gasSettings?: Partial<FieldsOf<GasSettings>>;
|
|
45
|
+
/** If true, returns gas settings with high gas limits for estimation. If false, uses fallback limits. */
|
|
46
|
+
forEstimation?: boolean;
|
|
47
|
+
/**
|
|
48
|
+
* Assumed network congestion level for fee prediction. Controls how aggressively the wallet
|
|
49
|
+
* estimates future fees. Defaults to Limit (worst case) when not specified.
|
|
50
|
+
*/
|
|
51
|
+
congestionEstimate?: ManaUsageEstimate;
|
|
39
52
|
};
|
|
40
53
|
/**
|
|
41
54
|
* A base class for Wallet implementations
|
|
@@ -78,30 +91,15 @@ export declare abstract class BaseWallet implements Wallet {
|
|
|
78
91
|
batch<const T extends readonly BatchedMethod[]>(methods: T): Promise<BatchResults<T>>;
|
|
79
92
|
/**
|
|
80
93
|
* Completes partial user-provided fee options with wallet defaults.
|
|
81
|
-
* @param
|
|
82
|
-
* @param feePayer - The address paying for fees (if any fee payment method is embedded in the execution payload)
|
|
83
|
-
* @param gasSettings - User-provided partial gas settings
|
|
84
|
-
* @returns - Complete fee options that can be used to create a transaction execution request
|
|
94
|
+
* @param config - Fee completion config.
|
|
85
95
|
*/
|
|
86
|
-
protected completeFeeOptions(
|
|
96
|
+
protected completeFeeOptions(config: CompleteFeeOptionsConfig): Promise<FeeOptions>;
|
|
87
97
|
/**
|
|
88
|
-
*
|
|
89
|
-
*
|
|
90
|
-
* to
|
|
91
|
-
* @param from - The address where the transaction is being sent from
|
|
92
|
-
* @param feePayer - The address paying for fees (if any fee payment method is embedded in the execution payload)
|
|
93
|
-
* @param gasSettings - User-provided partial gas settings
|
|
98
|
+
* Returns the worst-case min fee across predicted future slots.
|
|
99
|
+
* Falls back to getCurrentMinFees if the node doesn't support getPredictedMinFees.
|
|
100
|
+
* @param estimate - The mana usage estimate to use for fee prediction. Defaults to Limit for conservative estimation.
|
|
94
101
|
*/
|
|
95
|
-
protected
|
|
96
|
-
/**
|
|
97
|
-
* A wallet-provided fallback fee payment method that is used only if the transaction that is being constructed
|
|
98
|
-
* doesn't already include one
|
|
99
|
-
*/
|
|
100
|
-
walletFeePaymentMethod?: FeePaymentMethod | undefined;
|
|
101
|
-
/** Configuration options for the account to properly handle the selected fee payment method */
|
|
102
|
-
accountFeePaymentMethodOptions?: AccountFeePaymentMethodOptions | undefined;
|
|
103
|
-
gasSettings: GasSettings;
|
|
104
|
-
}>;
|
|
102
|
+
protected getMinFees(estimate?: ManaUsageEstimate): Promise<GasFees>;
|
|
105
103
|
registerSender(address: AztecAddress, _alias?: string): Promise<AztecAddress>;
|
|
106
104
|
registerContract(instance: ContractInstanceWithAddress, artifact?: ContractArtifact, secretKey?: Fr): Promise<ContractInstanceWithAddress>;
|
|
107
105
|
/**
|
|
@@ -109,7 +107,14 @@ export declare abstract class BaseWallet implements Wallet {
|
|
|
109
107
|
* @param executionPayload - The execution payload to simulate.
|
|
110
108
|
* @param opts - Simulation options.
|
|
111
109
|
*/
|
|
112
|
-
protected simulateViaEntrypoint(executionPayload: ExecutionPayload, opts: SimulateViaEntrypointOptions): Promise<
|
|
110
|
+
protected simulateViaEntrypoint(executionPayload: ExecutionPayload, opts: SimulateViaEntrypointOptions): Promise<TxSimulationResultWithAppOffset>;
|
|
111
|
+
/**
|
|
112
|
+
* Computes the index where the app's calls begin in the flattened array of calls (0 = entrypoint/root, 1..N = fee
|
|
113
|
+
* calls, N+1 = app).
|
|
114
|
+
* @param from - The sender address, or NO_FROM for the default entrypoint.
|
|
115
|
+
* @param feeOptions - Fee options containing the wallet fee payment method.
|
|
116
|
+
*/
|
|
117
|
+
protected computeAppCallOffset(from: AztecAddress | NoFrom, feeOptions: FeeOptions): Promise<number>;
|
|
113
118
|
/**
|
|
114
119
|
* Simulates a transaction, optimizing leading public static calls by running them directly
|
|
115
120
|
* on the node while sending the remaining calls through the standard PXE path.
|
|
@@ -118,7 +123,7 @@ export declare abstract class BaseWallet implements Wallet {
|
|
|
118
123
|
* @param opts - Simulation options (from address, fee settings, etc.).
|
|
119
124
|
* @returns The merged simulation result.
|
|
120
125
|
*/
|
|
121
|
-
simulateTx(executionPayload: ExecutionPayload, opts: SimulateOptions): Promise<
|
|
126
|
+
simulateTx(executionPayload: ExecutionPayload, opts: SimulateOptions): Promise<TxSimulationResultWithAppOffset>;
|
|
122
127
|
profileTx(executionPayload: ExecutionPayload, opts: ProfileOptions): Promise<TxProfileResult>;
|
|
123
128
|
sendTx<W extends InteractionWaitOptions = undefined>(executionPayload: ExecutionPayload, opts: SendOptions<W>): Promise<SendReturn<W>>;
|
|
124
129
|
/**
|
|
@@ -145,4 +150,4 @@ export declare abstract class BaseWallet implements Wallet {
|
|
|
145
150
|
isContractClassPubliclyRegistered: boolean;
|
|
146
151
|
}>;
|
|
147
152
|
}
|
|
148
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
153
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZV93YWxsZXQuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9iYXNlLXdhbGxldC9iYXNlX3dhbGxldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFL0QsT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLGVBQWUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2pGLE9BQU8sRUFDTCxLQUFLLHNCQUFzQixFQUUzQixLQUFLLFVBQVUsRUFFaEIsTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRTVELE9BQU8sRUFDTCxLQUFLLE9BQU8sRUFDWixLQUFLLGVBQWUsRUFDcEIsS0FBSyxZQUFZLEVBQ2pCLEtBQUssYUFBYSxFQUNsQiw0QkFBNEIsRUFDNUIsS0FBSyxxQkFBcUIsRUFDMUIsS0FBSyxZQUFZLEVBQ2pCLEtBQUssa0JBQWtCLEVBQ3ZCLEtBQUssY0FBYyxFQUNuQixLQUFLLFdBQVcsRUFDaEIsS0FBSyxlQUFlLEVBQ3BCLCtCQUErQixFQUMvQixLQUFLLE1BQU0sRUFDWCxLQUFLLGtCQUFrQixFQUN4QixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFBRSw4QkFBOEIsRUFBd0MsTUFBTSw0QkFBNEIsQ0FBQztBQUVsSCxPQUFPLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFcEQsT0FBTyxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFeEQsT0FBTyxLQUFLLEVBQUUsR0FBRyxFQUFzQixNQUFNLG1CQUFtQixDQUFDO0FBQ2pFLE9BQU8sRUFDTCxLQUFLLGdCQUFnQixFQUNyQixLQUFLLHVCQUF1QixFQUM1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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base_wallet.d.ts","sourceRoot":"","sources":["../../src/base-wallet/base_wallet.ts"],"names":[],"mappings":"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;
|
|
1
|
+
{"version":3,"file":"base_wallet.d.ts","sourceRoot":"","sources":["../../src/base-wallet/base_wallet.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +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';
|
|
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
|
+
import { ContractInitializationStatus, TxSimulationResultWithAppOffset } from '@aztec/aztec.js/wallet';
|
|
6
5
|
import { AccountFeePaymentMethodOptions } from '@aztec/entrypoints/account';
|
|
7
6
|
import { DefaultEntrypoint } from '@aztec/entrypoints/default';
|
|
8
7
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
@@ -12,7 +11,7 @@ import { decodeFromAbi } from '@aztec/stdlib/abi';
|
|
|
12
11
|
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
13
12
|
import { computePartialAddress, getContractClassFromArtifact } from '@aztec/stdlib/contract';
|
|
14
13
|
import { SimulationError } from '@aztec/stdlib/errors';
|
|
15
|
-
import { Gas, GasSettings } from '@aztec/stdlib/gas';
|
|
14
|
+
import { Gas, GasFees, GasSettings, ManaUsageEstimate } from '@aztec/stdlib/gas';
|
|
16
15
|
import { computeSiloedPrivateInitializationNullifier, computeSiloedPublicInitializationNullifier } from '@aztec/stdlib/hash';
|
|
17
16
|
import { mergeExecutionPayloads } from '@aztec/stdlib/tx';
|
|
18
17
|
import { inspect } from 'util';
|
|
@@ -125,12 +124,10 @@ import { buildMergedSimulationResult, extractOptimizablePublicStaticCalls, simul
|
|
|
125
124
|
}
|
|
126
125
|
/**
|
|
127
126
|
* Completes partial user-provided fee options with wallet defaults.
|
|
128
|
-
* @param
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
*/ async completeFeeOptions(from, feePayer, gasSettings) {
|
|
133
|
-
const maxFeesPerGas = gasSettings?.maxFeesPerGas ?? (await this.aztecNode.getCurrentMinFees()).mul(1 + this.minFeePadding);
|
|
127
|
+
* @param config - Fee completion config.
|
|
128
|
+
*/ async completeFeeOptions(config) {
|
|
129
|
+
const { from, feePayer, gasSettings, forEstimation, congestionEstimate } = config;
|
|
130
|
+
const maxFeesPerGas = gasSettings?.maxFeesPerGas ?? (await this.getMinFees(congestionEstimate)).mul(1 + this.minFeePadding);
|
|
134
131
|
let accountFeePaymentMethodOptions;
|
|
135
132
|
// If from is an address, we need to determine the appropriate fee payment method options for the
|
|
136
133
|
// account contract entrypoint to use
|
|
@@ -145,10 +142,15 @@ import { buildMergedSimulationResult, extractOptimizablePublicStaticCalls, simul
|
|
|
145
142
|
accountFeePaymentMethodOptions = from.equals(feePayer) ? AccountFeePaymentMethodOptions.FEE_JUICE_WITH_CLAIM : AccountFeePaymentMethodOptions.EXTERNAL;
|
|
146
143
|
}
|
|
147
144
|
}
|
|
148
|
-
const
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
145
|
+
const gasSettingsOverrides = {
|
|
146
|
+
gasLimits: gasSettings?.gasLimits ? Gas.from(gasSettings.gasLimits) : undefined,
|
|
147
|
+
teardownGasLimits: gasSettings?.teardownGasLimits ? Gas.from(gasSettings.teardownGasLimits) : undefined,
|
|
148
|
+
maxFeesPerGas,
|
|
149
|
+
maxPriorityFeesPerGas: gasSettings?.maxPriorityFeesPerGas ?? GasFees.empty()
|
|
150
|
+
};
|
|
151
|
+
// When estimating gas (simulation), use high limits so the simulation doesn't run out of gas.
|
|
152
|
+
// When sending for real, use protocol max limits that the network will actually accept.
|
|
153
|
+
const fullGasSettings = forEstimation ? GasSettings.forEstimation(gasSettingsOverrides) : GasSettings.fallback(gasSettingsOverrides);
|
|
152
154
|
this.log.debug(`Using L2 gas settings`, fullGasSettings);
|
|
153
155
|
return {
|
|
154
156
|
gasSettings: fullGasSettings,
|
|
@@ -157,22 +159,24 @@ import { buildMergedSimulationResult, extractOptimizablePublicStaticCalls, simul
|
|
|
157
159
|
};
|
|
158
160
|
}
|
|
159
161
|
/**
|
|
160
|
-
*
|
|
161
|
-
*
|
|
162
|
-
* to
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
162
|
+
* Returns the worst-case min fee across predicted future slots.
|
|
163
|
+
* Falls back to getCurrentMinFees if the node doesn't support getPredictedMinFees.
|
|
164
|
+
* @param estimate - The mana usage estimate to use for fee prediction. Defaults to Limit for conservative estimation.
|
|
165
|
+
*/ async getMinFees(estimate = ManaUsageEstimate.Limit) {
|
|
166
|
+
try {
|
|
167
|
+
const predicted = await this.aztecNode.getPredictedMinFees(estimate);
|
|
168
|
+
if (predicted.length === 0) {
|
|
169
|
+
return this.aztecNode.getCurrentMinFees();
|
|
170
|
+
}
|
|
171
|
+
return predicted.reduce((worst, fees)=>fees.feePerL2Gas > worst.feePerL2Gas ? fees : worst);
|
|
172
|
+
} catch (err) {
|
|
173
|
+
// Fallback for old nodes that don't support getPredictedMinFees.
|
|
174
|
+
// Only fall back on method-not-found errors (JSON-RPC code -32601); rethrow others.
|
|
175
|
+
if (err?.cause?.code === -32601 || err?.message?.includes('Method not found')) {
|
|
176
|
+
return this.aztecNode.getCurrentMinFees();
|
|
177
|
+
}
|
|
178
|
+
throw err;
|
|
179
|
+
}
|
|
176
180
|
}
|
|
177
181
|
registerSender(address, _alias = '') {
|
|
178
182
|
return this.pxe.registerSender(address);
|
|
@@ -215,12 +219,26 @@ import { buildMergedSimulationResult, extractOptimizablePublicStaticCalls, simul
|
|
|
215
219
|
* @param opts - Simulation options.
|
|
216
220
|
*/ async simulateViaEntrypoint(executionPayload, opts) {
|
|
217
221
|
const txRequest = await this.createTxExecutionRequestFromPayloadAndFee(executionPayload, opts.from, opts.feeOptions);
|
|
218
|
-
|
|
222
|
+
const result = await this.pxe.simulateTx(txRequest, {
|
|
219
223
|
simulatePublic: true,
|
|
220
224
|
skipTxValidation: opts.skipTxValidation,
|
|
221
225
|
skipFeeEnforcement: opts.skipFeeEnforcement,
|
|
222
|
-
scopes: opts.
|
|
226
|
+
scopes: this.scopesFrom(opts.from, opts.additionalScopes)
|
|
223
227
|
});
|
|
228
|
+
const appCallOffset = await this.computeAppCallOffset(opts.from, opts.feeOptions);
|
|
229
|
+
return TxSimulationResultWithAppOffset.fromResultAndOffset(result, appCallOffset);
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Computes the index where the app's calls begin in the flattened array of calls (0 = entrypoint/root, 1..N = fee
|
|
233
|
+
* calls, N+1 = app).
|
|
234
|
+
* @param from - The sender address, or NO_FROM for the default entrypoint.
|
|
235
|
+
* @param feeOptions - Fee options containing the wallet fee payment method.
|
|
236
|
+
*/ async computeAppCallOffset(from, feeOptions) {
|
|
237
|
+
if (from === NO_FROM) {
|
|
238
|
+
return 0;
|
|
239
|
+
}
|
|
240
|
+
const feeExecutionPayload = await feeOptions.walletFeePaymentMethod?.getExecutionPayload();
|
|
241
|
+
return (feeExecutionPayload?.calls.length ?? 0) + 1; // +1 for entrypoint
|
|
224
242
|
}
|
|
225
243
|
/**
|
|
226
244
|
* Simulates a transaction, optimizing leading public static calls by running them directly
|
|
@@ -230,7 +248,13 @@ import { buildMergedSimulationResult, extractOptimizablePublicStaticCalls, simul
|
|
|
230
248
|
* @param opts - Simulation options (from address, fee settings, etc.).
|
|
231
249
|
* @returns The merged simulation result.
|
|
232
250
|
*/ async simulateTx(executionPayload, opts) {
|
|
233
|
-
const feeOptions =
|
|
251
|
+
const feeOptions = await this.completeFeeOptions({
|
|
252
|
+
from: opts.from,
|
|
253
|
+
feePayer: executionPayload.feePayer,
|
|
254
|
+
gasSettings: opts.fee?.gasSettings,
|
|
255
|
+
forEstimation: true,
|
|
256
|
+
congestionEstimate: opts.fee?.congestionEstimate
|
|
257
|
+
});
|
|
234
258
|
const { optimizableCalls, remainingCalls } = extractOptimizablePublicStaticCalls(executionPayload);
|
|
235
259
|
const remainingPayload = {
|
|
236
260
|
...executionPayload,
|
|
@@ -251,7 +275,7 @@ import { buildMergedSimulationResult, extractOptimizablePublicStaticCalls, simul
|
|
|
251
275
|
remainingCalls.length > 0 ? this.simulateViaEntrypoint(remainingPayload, {
|
|
252
276
|
from: opts.from,
|
|
253
277
|
feeOptions,
|
|
254
|
-
|
|
278
|
+
additionalScopes: opts.additionalScopes,
|
|
255
279
|
skipTxValidation: opts.skipTxValidation,
|
|
256
280
|
skipFeeEnforcement: opts.skipFeeEnforcement ?? true
|
|
257
281
|
}) : Promise.resolve(null)
|
|
@@ -259,7 +283,12 @@ import { buildMergedSimulationResult, extractOptimizablePublicStaticCalls, simul
|
|
|
259
283
|
return buildMergedSimulationResult(optimizedResults, normalResult);
|
|
260
284
|
}
|
|
261
285
|
async profileTx(executionPayload, opts) {
|
|
262
|
-
const feeOptions = await this.completeFeeOptions(
|
|
286
|
+
const feeOptions = await this.completeFeeOptions({
|
|
287
|
+
from: opts.from,
|
|
288
|
+
feePayer: executionPayload.feePayer,
|
|
289
|
+
gasSettings: opts.fee?.gasSettings,
|
|
290
|
+
congestionEstimate: opts.fee?.congestionEstimate
|
|
291
|
+
});
|
|
263
292
|
const txRequest = await this.createTxExecutionRequestFromPayloadAndFee(executionPayload, opts.from, feeOptions);
|
|
264
293
|
return this.pxe.profileTx(txRequest, {
|
|
265
294
|
profileMode: opts.profileMode,
|
|
@@ -268,7 +297,12 @@ import { buildMergedSimulationResult, extractOptimizablePublicStaticCalls, simul
|
|
|
268
297
|
});
|
|
269
298
|
}
|
|
270
299
|
async sendTx(executionPayload, opts) {
|
|
271
|
-
const feeOptions = await this.completeFeeOptions(
|
|
300
|
+
const feeOptions = await this.completeFeeOptions({
|
|
301
|
+
from: opts.from,
|
|
302
|
+
feePayer: executionPayload.feePayer,
|
|
303
|
+
gasSettings: opts.fee?.gasSettings,
|
|
304
|
+
congestionEstimate: opts.fee?.congestionEstimate
|
|
305
|
+
});
|
|
272
306
|
const txRequest = await this.createTxExecutionRequestFromPayloadAndFee(executionPayload, opts.from, feeOptions);
|
|
273
307
|
const provenTx = await this.pxe.proveTx(txRequest, this.scopesFrom(opts.from, opts.additionalScopes));
|
|
274
308
|
const offchainOutput = extractOffchainOutput(provenTx.getOffchainEffects(), provenTx.publicInputs.constants.anchorBlockHeader.globalVariables.timestamp);
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export { BaseWallet, type FeeOptions, type SimulateViaEntrypointOptions } from './base_wallet.js';
|
|
1
|
+
export { BaseWallet, type CompleteFeeOptionsConfig, type FeeOptions, type SimulateViaEntrypointOptions, } from './base_wallet.js';
|
|
2
2
|
export { simulateViaNode, buildMergedSimulationResult, extractOptimizablePublicStaticCalls } from './utils.js';
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9iYXNlLXdhbGxldC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsVUFBVSxFQUNWLEtBQUssd0JBQXdCLEVBQzdCLEtBQUssVUFBVSxFQUNmLEtBQUssNEJBQTRCLEdBQ2xDLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxFQUFFLGVBQWUsRUFBRSwyQkFBMkIsRUFBRSxtQ0FBbUMsRUFBRSxNQUFNLFlBQVksQ0FBQyJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/base-wallet/index.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/base-wallet/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,KAAK,wBAAwB,EAC7B,KAAK,UAAU,EACf,KAAK,4BAA4B,GAClC,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,eAAe,EAAE,2BAA2B,EAAE,mCAAmC,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -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.2e20a94",
|
|
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.2e20a94",
|
|
79
|
+
"@aztec/constants": "0.0.1-commit.2e20a94",
|
|
80
|
+
"@aztec/entrypoints": "0.0.1-commit.2e20a94",
|
|
81
|
+
"@aztec/foundation": "0.0.1-commit.2e20a94",
|
|
82
|
+
"@aztec/pxe": "0.0.1-commit.2e20a94",
|
|
83
|
+
"@aztec/stdlib": "0.0.1-commit.2e20a94"
|
|
84
84
|
},
|
|
85
85
|
"devDependencies": {
|
|
86
|
-
"@aztec/noir-contracts.js": "0.0.1-commit.
|
|
86
|
+
"@aztec/noir-contracts.js": "0.0.1-commit.2e20a94",
|
|
87
87
|
"@jest/globals": "^30.0.0",
|
|
88
88
|
"@types/jest": "^30.0.0",
|
|
89
89
|
"@types/node": "^22.15.17",
|
|
@@ -21,15 +21,10 @@ 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';
|
|
27
|
-
import {
|
|
28
|
-
GAS_ESTIMATION_DA_GAS_LIMIT,
|
|
29
|
-
GAS_ESTIMATION_L2_GAS_LIMIT,
|
|
30
|
-
GAS_ESTIMATION_TEARDOWN_DA_GAS_LIMIT,
|
|
31
|
-
GAS_ESTIMATION_TEARDOWN_L2_GAS_LIMIT,
|
|
32
|
-
} from '@aztec/constants';
|
|
33
28
|
import { AccountFeePaymentMethodOptions, type DefaultAccountEntrypointOptions } from '@aztec/entrypoints/account';
|
|
34
29
|
import { DefaultEntrypoint } from '@aztec/entrypoints/default';
|
|
35
30
|
import type { ChainInfo } from '@aztec/entrypoints/interfaces';
|
|
@@ -52,7 +47,7 @@ import {
|
|
|
52
47
|
getContractClassFromArtifact,
|
|
53
48
|
} from '@aztec/stdlib/contract';
|
|
54
49
|
import { SimulationError } from '@aztec/stdlib/errors';
|
|
55
|
-
import { Gas, GasSettings } from '@aztec/stdlib/gas';
|
|
50
|
+
import { Gas, GasFees, GasSettings, ManaUsageEstimate } from '@aztec/stdlib/gas';
|
|
56
51
|
import {
|
|
57
52
|
computeSiloedPrivateInitializationNullifier,
|
|
58
53
|
computeSiloedPublicInitializationNullifier,
|
|
@@ -60,12 +55,12 @@ import {
|
|
|
60
55
|
import type { AztecNode } from '@aztec/stdlib/interfaces/client';
|
|
61
56
|
import {
|
|
62
57
|
BlockHeader,
|
|
58
|
+
ExecutionPayload,
|
|
63
59
|
type TxExecutionRequest,
|
|
64
60
|
type TxProfileResult,
|
|
65
|
-
TxSimulationResult,
|
|
66
61
|
type UtilityExecutionResult,
|
|
62
|
+
mergeExecutionPayloads,
|
|
67
63
|
} from '@aztec/stdlib/tx';
|
|
68
|
-
import { ExecutionPayload, mergeExecutionPayloads } from '@aztec/stdlib/tx';
|
|
69
64
|
|
|
70
65
|
import { inspect } from 'util';
|
|
71
66
|
|
|
@@ -93,9 +88,25 @@ export type SimulateViaEntrypointOptions = Pick<
|
|
|
93
88
|
> & {
|
|
94
89
|
/** Fee options for the entrypoint */
|
|
95
90
|
feeOptions: FeeOptions;
|
|
96
|
-
/** Scopes to use for the simulation */
|
|
97
|
-
scopes: AztecAddress[];
|
|
98
91
|
};
|
|
92
|
+
|
|
93
|
+
/** Options for `completeFeeOptions`. */
|
|
94
|
+
export type CompleteFeeOptionsConfig = {
|
|
95
|
+
/** The address where the transaction is being sent from. */
|
|
96
|
+
from: AztecAddress | NoFrom;
|
|
97
|
+
/** The address paying for fees (if any fee payment method is embedded in the execution payload). */
|
|
98
|
+
feePayer?: AztecAddress;
|
|
99
|
+
/** User-provided partial gas settings. */
|
|
100
|
+
gasSettings?: Partial<FieldsOf<GasSettings>>;
|
|
101
|
+
/** If true, returns gas settings with high gas limits for estimation. If false, uses fallback limits. */
|
|
102
|
+
forEstimation?: boolean;
|
|
103
|
+
/**
|
|
104
|
+
* Assumed network congestion level for fee prediction. Controls how aggressively the wallet
|
|
105
|
+
* estimates future fees. Defaults to Limit (worst case) when not specified.
|
|
106
|
+
*/
|
|
107
|
+
congestionEstimate?: ManaUsageEstimate;
|
|
108
|
+
};
|
|
109
|
+
|
|
99
110
|
/**
|
|
100
111
|
* A base class for Wallet implementations
|
|
101
112
|
*/
|
|
@@ -214,18 +225,12 @@ export abstract class BaseWallet implements Wallet {
|
|
|
214
225
|
|
|
215
226
|
/**
|
|
216
227
|
* Completes partial user-provided fee options with wallet defaults.
|
|
217
|
-
* @param
|
|
218
|
-
* @param feePayer - The address paying for fees (if any fee payment method is embedded in the execution payload)
|
|
219
|
-
* @param gasSettings - User-provided partial gas settings
|
|
220
|
-
* @returns - Complete fee options that can be used to create a transaction execution request
|
|
228
|
+
* @param config - Fee completion config.
|
|
221
229
|
*/
|
|
222
|
-
protected async completeFeeOptions(
|
|
223
|
-
from
|
|
224
|
-
feePayer?: AztecAddress,
|
|
225
|
-
gasSettings?: Partial<FieldsOf<GasSettings>>,
|
|
226
|
-
): Promise<FeeOptions> {
|
|
230
|
+
protected async completeFeeOptions(config: CompleteFeeOptionsConfig): Promise<FeeOptions> {
|
|
231
|
+
const { from, feePayer, gasSettings, forEstimation, congestionEstimate } = config;
|
|
227
232
|
const maxFeesPerGas =
|
|
228
|
-
gasSettings?.maxFeesPerGas ?? (await this.
|
|
233
|
+
gasSettings?.maxFeesPerGas ?? (await this.getMinFees(congestionEstimate)).mul(1 + this.minFeePadding);
|
|
229
234
|
let accountFeePaymentMethodOptions;
|
|
230
235
|
// If from is an address, we need to determine the appropriate fee payment method options for the
|
|
231
236
|
// account contract entrypoint to use
|
|
@@ -242,7 +247,17 @@ export abstract class BaseWallet implements Wallet {
|
|
|
242
247
|
: AccountFeePaymentMethodOptions.EXTERNAL;
|
|
243
248
|
}
|
|
244
249
|
}
|
|
245
|
-
const
|
|
250
|
+
const gasSettingsOverrides = {
|
|
251
|
+
gasLimits: gasSettings?.gasLimits ? Gas.from(gasSettings.gasLimits) : undefined,
|
|
252
|
+
teardownGasLimits: gasSettings?.teardownGasLimits ? Gas.from(gasSettings.teardownGasLimits) : undefined,
|
|
253
|
+
maxFeesPerGas,
|
|
254
|
+
maxPriorityFeesPerGas: gasSettings?.maxPriorityFeesPerGas ?? GasFees.empty(),
|
|
255
|
+
};
|
|
256
|
+
// When estimating gas (simulation), use high limits so the simulation doesn't run out of gas.
|
|
257
|
+
// When sending for real, use protocol max limits that the network will actually accept.
|
|
258
|
+
const fullGasSettings = forEstimation
|
|
259
|
+
? GasSettings.forEstimation(gasSettingsOverrides)
|
|
260
|
+
: GasSettings.fallback(gasSettingsOverrides);
|
|
246
261
|
this.log.debug(`Using L2 gas settings`, fullGasSettings);
|
|
247
262
|
return {
|
|
248
263
|
gasSettings: fullGasSettings,
|
|
@@ -252,34 +267,25 @@ export abstract class BaseWallet implements Wallet {
|
|
|
252
267
|
}
|
|
253
268
|
|
|
254
269
|
/**
|
|
255
|
-
*
|
|
256
|
-
*
|
|
257
|
-
* to
|
|
258
|
-
* @param from - The address where the transaction is being sent from
|
|
259
|
-
* @param feePayer - The address paying for fees (if any fee payment method is embedded in the execution payload)
|
|
260
|
-
* @param gasSettings - User-provided partial gas settings
|
|
270
|
+
* Returns the worst-case min fee across predicted future slots.
|
|
271
|
+
* Falls back to getCurrentMinFees if the node doesn't support getPredictedMinFees.
|
|
272
|
+
* @param estimate - The mana usage estimate to use for fee prediction. Defaults to Limit for conservative estimation.
|
|
261
273
|
*/
|
|
262
|
-
protected async
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
maxPriorityFeesPerGas,
|
|
278
|
-
);
|
|
279
|
-
return {
|
|
280
|
-
...defaultFeeOptions,
|
|
281
|
-
gasSettings: gasSettingsForEstimation,
|
|
282
|
-
};
|
|
274
|
+
protected async getMinFees(estimate: ManaUsageEstimate = ManaUsageEstimate.Limit): Promise<GasFees> {
|
|
275
|
+
try {
|
|
276
|
+
const predicted = await this.aztecNode.getPredictedMinFees(estimate);
|
|
277
|
+
if (predicted.length === 0) {
|
|
278
|
+
return this.aztecNode.getCurrentMinFees();
|
|
279
|
+
}
|
|
280
|
+
return predicted.reduce((worst, fees) => (fees.feePerL2Gas > worst.feePerL2Gas ? fees : worst));
|
|
281
|
+
} catch (err: any) {
|
|
282
|
+
// Fallback for old nodes that don't support getPredictedMinFees.
|
|
283
|
+
// Only fall back on method-not-found errors (JSON-RPC code -32601); rethrow others.
|
|
284
|
+
if (err?.cause?.code === -32601 || err?.message?.includes('Method not found')) {
|
|
285
|
+
return this.aztecNode.getCurrentMinFees();
|
|
286
|
+
}
|
|
287
|
+
throw err;
|
|
288
|
+
}
|
|
283
289
|
}
|
|
284
290
|
|
|
285
291
|
registerSender(address: AztecAddress, _alias: string = ''): Promise<AztecAddress> {
|
|
@@ -335,12 +341,28 @@ export abstract class BaseWallet implements Wallet {
|
|
|
335
341
|
opts.from,
|
|
336
342
|
opts.feeOptions,
|
|
337
343
|
);
|
|
338
|
-
|
|
344
|
+
const result = await this.pxe.simulateTx(txRequest, {
|
|
339
345
|
simulatePublic: true,
|
|
340
346
|
skipTxValidation: opts.skipTxValidation,
|
|
341
347
|
skipFeeEnforcement: opts.skipFeeEnforcement,
|
|
342
|
-
scopes: opts.
|
|
348
|
+
scopes: this.scopesFrom(opts.from, opts.additionalScopes),
|
|
343
349
|
});
|
|
350
|
+
const appCallOffset = await this.computeAppCallOffset(opts.from, opts.feeOptions);
|
|
351
|
+
return TxSimulationResultWithAppOffset.fromResultAndOffset(result, appCallOffset);
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
/**
|
|
355
|
+
* Computes the index where the app's calls begin in the flattened array of calls (0 = entrypoint/root, 1..N = fee
|
|
356
|
+
* calls, N+1 = app).
|
|
357
|
+
* @param from - The sender address, or NO_FROM for the default entrypoint.
|
|
358
|
+
* @param feeOptions - Fee options containing the wallet fee payment method.
|
|
359
|
+
*/
|
|
360
|
+
protected async computeAppCallOffset(from: AztecAddress | NoFrom, feeOptions: FeeOptions): Promise<number> {
|
|
361
|
+
if (from === NO_FROM) {
|
|
362
|
+
return 0;
|
|
363
|
+
}
|
|
364
|
+
const feeExecutionPayload = await feeOptions.walletFeePaymentMethod?.getExecutionPayload();
|
|
365
|
+
return (feeExecutionPayload?.calls.length ?? 0) + 1; // +1 for entrypoint
|
|
344
366
|
}
|
|
345
367
|
|
|
346
368
|
/**
|
|
@@ -351,10 +373,17 @@ export abstract class BaseWallet implements Wallet {
|
|
|
351
373
|
* @param opts - Simulation options (from address, fee settings, etc.).
|
|
352
374
|
* @returns The merged simulation result.
|
|
353
375
|
*/
|
|
354
|
-
async simulateTx(
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
376
|
+
async simulateTx(
|
|
377
|
+
executionPayload: ExecutionPayload,
|
|
378
|
+
opts: SimulateOptions,
|
|
379
|
+
): Promise<TxSimulationResultWithAppOffset> {
|
|
380
|
+
const feeOptions = await this.completeFeeOptions({
|
|
381
|
+
from: opts.from,
|
|
382
|
+
feePayer: executionPayload.feePayer,
|
|
383
|
+
gasSettings: opts.fee?.gasSettings,
|
|
384
|
+
forEstimation: true,
|
|
385
|
+
congestionEstimate: opts.fee?.congestionEstimate,
|
|
386
|
+
});
|
|
358
387
|
const { optimizableCalls, remainingCalls } = extractOptimizablePublicStaticCalls(executionPayload);
|
|
359
388
|
const remainingPayload = { ...executionPayload, calls: remainingCalls };
|
|
360
389
|
|
|
@@ -386,7 +415,7 @@ export abstract class BaseWallet implements Wallet {
|
|
|
386
415
|
? this.simulateViaEntrypoint(remainingPayload, {
|
|
387
416
|
from: opts.from,
|
|
388
417
|
feeOptions,
|
|
389
|
-
|
|
418
|
+
additionalScopes: opts.additionalScopes,
|
|
390
419
|
skipTxValidation: opts.skipTxValidation,
|
|
391
420
|
skipFeeEnforcement: opts.skipFeeEnforcement ?? true,
|
|
392
421
|
})
|
|
@@ -397,7 +426,12 @@ export abstract class BaseWallet implements Wallet {
|
|
|
397
426
|
}
|
|
398
427
|
|
|
399
428
|
async profileTx(executionPayload: ExecutionPayload, opts: ProfileOptions): Promise<TxProfileResult> {
|
|
400
|
-
const feeOptions = await this.completeFeeOptions(
|
|
429
|
+
const feeOptions = await this.completeFeeOptions({
|
|
430
|
+
from: opts.from,
|
|
431
|
+
feePayer: executionPayload.feePayer,
|
|
432
|
+
gasSettings: opts.fee?.gasSettings,
|
|
433
|
+
congestionEstimate: opts.fee?.congestionEstimate,
|
|
434
|
+
});
|
|
401
435
|
const txRequest = await this.createTxExecutionRequestFromPayloadAndFee(executionPayload, opts.from, feeOptions);
|
|
402
436
|
return this.pxe.profileTx(txRequest, {
|
|
403
437
|
profileMode: opts.profileMode,
|
|
@@ -410,7 +444,12 @@ export abstract class BaseWallet implements Wallet {
|
|
|
410
444
|
executionPayload: ExecutionPayload,
|
|
411
445
|
opts: SendOptions<W>,
|
|
412
446
|
): Promise<SendReturn<W>> {
|
|
413
|
-
const feeOptions = await this.completeFeeOptions(
|
|
447
|
+
const feeOptions = await this.completeFeeOptions({
|
|
448
|
+
from: opts.from,
|
|
449
|
+
feePayer: executionPayload.feePayer,
|
|
450
|
+
gasSettings: opts.fee?.gasSettings,
|
|
451
|
+
congestionEstimate: opts.fee?.congestionEstimate,
|
|
452
|
+
});
|
|
414
453
|
const txRequest = await this.createTxExecutionRequestFromPayloadAndFee(executionPayload, opts.from, feeOptions);
|
|
415
454
|
const provenTx = await this.pxe.proveTx(txRequest, this.scopesFrom(opts.from, opts.additionalScopes));
|
|
416
455
|
const offchainOutput = extractOffchainOutput(
|
package/src/base-wallet/index.ts
CHANGED
|
@@ -1,2 +1,7 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export {
|
|
2
|
+
BaseWallet,
|
|
3
|
+
type CompleteFeeOptionsConfig,
|
|
4
|
+
type FeeOptions,
|
|
5
|
+
type SimulateViaEntrypointOptions,
|
|
6
|
+
} from './base_wallet.js';
|
|
2
7
|
export { simulateViaNode, buildMergedSimulationResult, extractOptimizablePublicStaticCalls } from './utils.js';
|
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
|
}
|