@aztec/wallets 0.0.1-commit.e0f15ab9b → 0.0.1-commit.e304674f1
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/embedded/embedded_wallet.d.ts +23 -5
- package/dest/embedded/embedded_wallet.d.ts.map +1 -1
- package/dest/embedded/embedded_wallet.js +67 -30
- package/dest/embedded/entrypoints/browser.d.ts +2 -2
- package/dest/embedded/entrypoints/browser.d.ts.map +1 -1
- package/dest/embedded/entrypoints/browser.js +15 -5
- package/dest/embedded/entrypoints/node.d.ts +2 -2
- package/dest/embedded/entrypoints/node.d.ts.map +1 -1
- package/dest/embedded/entrypoints/node.js +15 -5
- package/package.json +10 -10
- package/src/embedded/embedded_wallet.ts +87 -32
- package/src/embedded/entrypoints/browser.ts +11 -6
- package/src/embedded/entrypoints/node.ts +11 -6
|
@@ -8,18 +8,33 @@ import type { PXEConfig, PXECreationOptions } from '@aztec/pxe/client/lazy';
|
|
|
8
8
|
import type { PXE } from '@aztec/pxe/server';
|
|
9
9
|
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
10
10
|
import type { AztecNode } from '@aztec/stdlib/interfaces/client';
|
|
11
|
-
import { ExecutionPayload, type TxSimulationResult } from '@aztec/stdlib/tx';
|
|
11
|
+
import { type ContractOverrides, ExecutionPayload, type TxSimulationResult } from '@aztec/stdlib/tx';
|
|
12
12
|
import { BaseWallet, type SimulateViaEntrypointOptions } from '@aztec/wallet-sdk/base-wallet';
|
|
13
13
|
import type { AccountContractsProvider } from './account-contract-providers/types.js';
|
|
14
14
|
import { type AccountType, WalletDB } from './wallet_db.js';
|
|
15
|
+
/** Options for the PXE instance created by the EmbeddedWallet. */
|
|
16
|
+
export type EmbeddedWalletPXEOptions = Partial<PXEConfig> & PXECreationOptions;
|
|
17
|
+
/** Splits a unified EmbeddedWalletPXEOptions into PXEConfig overrides and PXECreationOptions. */
|
|
18
|
+
export declare function splitPxeOptions(pxe?: EmbeddedWalletPXEOptions): {
|
|
19
|
+
config: Partial<PXEConfig>;
|
|
20
|
+
creation: PXECreationOptions;
|
|
21
|
+
};
|
|
15
22
|
export type EmbeddedWalletOptions = {
|
|
16
23
|
/** Parent logger. Child loggers are derived via createChild() for each subsystem. */
|
|
17
24
|
logger?: Logger;
|
|
18
25
|
/** Use ephemeral (in-memory) stores. Data will not persist across sessions. */
|
|
19
26
|
ephemeral?: boolean;
|
|
20
|
-
/**
|
|
27
|
+
/** PXE configuration and dependency overrides (custom store, prover, simulator). */
|
|
28
|
+
pxe?: EmbeddedWalletPXEOptions;
|
|
29
|
+
/**
|
|
30
|
+
* Override PXE configuration.
|
|
31
|
+
* @deprecated Use `pxe` instead.
|
|
32
|
+
*/
|
|
21
33
|
pxeConfig?: Partial<PXEConfig>;
|
|
22
|
-
/**
|
|
34
|
+
/**
|
|
35
|
+
* Advanced PXE creation options (custom store, prover, simulator).
|
|
36
|
+
* @deprecated Use `pxe` instead.
|
|
37
|
+
*/
|
|
23
38
|
pxeOptions?: PXECreationOptions;
|
|
24
39
|
};
|
|
25
40
|
export declare class EmbeddedWallet extends BaseWallet {
|
|
@@ -37,13 +52,16 @@ export declare class EmbeddedWallet extends BaseWallet {
|
|
|
37
52
|
* the necessary authwitnesses.
|
|
38
53
|
*/
|
|
39
54
|
sendTx<W extends InteractionWaitOptions = undefined>(executionPayload: ExecutionPayload, opts: SendOptions<W>): Promise<SendReturn<W>>;
|
|
55
|
+
/**
|
|
56
|
+
* Builds contract overrides for all provided addresses by replacing their account contracts with stub implementations.
|
|
57
|
+
*/
|
|
58
|
+
protected buildAccountOverrides(addresses: AztecAddress[]): Promise<ContractOverrides>;
|
|
40
59
|
/**
|
|
41
60
|
* Simulates calls via a stub account entrypoint, bypassing real account authorization.
|
|
42
61
|
* This allows kernelless simulation with contract overrides, skipping expensive
|
|
43
62
|
* private kernel circuit execution.
|
|
44
63
|
*/
|
|
45
64
|
protected simulateViaEntrypoint(executionPayload: ExecutionPayload, opts: SimulateViaEntrypointOptions): Promise<TxSimulationResult>;
|
|
46
|
-
private getFakeAccountDataFor;
|
|
47
65
|
protected createAccountInternal(type: AccountType, secret: Fr, salt: Fr, signingKey: Buffer): Promise<AccountManager>;
|
|
48
66
|
createAndStoreAccount(alias: string, type: AccountType, secret: Fr, salt: Fr, signingKey: Buffer): Promise<AccountManager>;
|
|
49
67
|
createSchnorrAccount(secret: Fr, salt: Fr, signingKey?: Fq, alias?: string): Promise<AccountManager>;
|
|
@@ -53,4 +71,4 @@ export declare class EmbeddedWallet extends BaseWallet {
|
|
|
53
71
|
setEstimatedGasPadding(value?: number): void;
|
|
54
72
|
stop(): Promise<void>;
|
|
55
73
|
}
|
|
56
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
74
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1iZWRkZWRfd2FsbGV0LmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZW1iZWRkZWQvZW1iZWRkZWRfd2FsbGV0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLE9BQU8sRUFBVyxNQUFNLHlCQUF5QixDQUFDO0FBRWhFLE9BQU8sRUFBRSxLQUFLLHNCQUFzQixFQUFFLEtBQUssVUFBVSxFQUErQixNQUFNLDJCQUEyQixDQUFDO0FBQ3RILE9BQU8sS0FBSyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNuRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFHeEQsT0FBTyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN4RCxPQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNwRCxPQUFPLEtBQUssRUFBRSxTQUFTLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM1RSxPQUFPLEtBQUssRUFBRSxHQUFHLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUM3QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFHM0QsT0FBTyxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFakUsT0FBTyxFQUNMLEtBQUssaUJBQWlCLEVBQ3RCLGdCQUFnQixFQUdoQixLQUFLLGtCQUFrQixFQUl4QixNQUFNLGtCQUFrQixDQUFDO0FBQzFCLE9BQU8sRUFBRSxVQUFVLEVBQUUsS0FBSyw0QkFBNEIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRTlGLE9BQU8sS0FBSyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDdEYsT0FBTyxFQUFFLEtBQUssV0FBVyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FB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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"embedded_wallet.d.ts","sourceRoot":"","sources":["../../src/embedded/embedded_wallet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAW,MAAM,yBAAyB,CAAC;AAEhE,OAAO,EAAE,KAAK,sBAAsB,EAAE,KAAK,UAAU,
|
|
1
|
+
{"version":3,"file":"embedded_wallet.d.ts","sourceRoot":"","sources":["../../src/embedded/embedded_wallet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAW,MAAM,yBAAyB,CAAC;AAEhE,OAAO,EAAE,KAAK,sBAAsB,EAAE,KAAK,UAAU,EAA+B,MAAM,2BAA2B,CAAC;AACtH,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAGxD,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AACxD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,KAAK,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5E,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAG3D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AAEjE,OAAO,EACL,KAAK,iBAAiB,EACtB,gBAAgB,EAGhB,KAAK,kBAAkB,EAIxB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,KAAK,4BAA4B,EAAE,MAAM,+BAA+B,CAAC;AAE9F,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,uCAAuC,CAAC;AACtF,OAAO,EAAE,KAAK,WAAW,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE5D,kEAAkE;AAClE,MAAM,MAAM,wBAAwB,GAAG,OAAO,CAAC,SAAS,CAAC,GAAG,kBAAkB,CAAC;AAE/E,iGAAiG;AACjG,wBAAgB,eAAe,CAAC,GAAG,CAAC,EAAE,wBAAwB,GAAG;IAC/D,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IAC3B,QAAQ,EAAE,kBAAkB,CAAC;CAC9B,CAMA;AAED,MAAM,MAAM,qBAAqB,GAAG;IAClC,qFAAqF;IACrF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,+EAA+E;IAC/E,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,oFAAoF;IACpF,GAAG,CAAC,EAAE,wBAAwB,CAAC;IAC/B;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IAC/B;;;OAGG;IACH,UAAU,CAAC,EAAE,kBAAkB,CAAC;CACjC,CAAC;AAIF,qBAAa,cAAe,SAAQ,UAAU;IAM1C,SAAS,CAAC,QAAQ,EAAE,QAAQ;IAC5B,SAAS,CAAC,gBAAgB,EAAE,wBAAwB;IANtD,SAAS,CAAC,mBAAmB,SAAiC;IAE9D,YACE,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,SAAS,EACV,QAAQ,EAAE,QAAQ,EAClB,gBAAgB,EAAE,wBAAwB,EACpD,GAAG,CAAC,EAAE,MAAM,EAGb;IAED,UAAgB,qBAAqB,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,CAU7E;IAED,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC,CAE9C;IAEc,cAAc,CAAC,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,yBAGjE;IAEc,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC,CAShE;IAED;;;;OAIG;IACmB,MAAM,CAAC,CAAC,SAAS,sBAAsB,GAAG,SAAS,EACvE,gBAAgB,EAAE,gBAAgB,EAClC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,GACnB,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CA+DxB;IAED;;OAEG;IACH,UAAgB,qBAAqB,CAAC,SAAS,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,iBAAiB,CAAC,CA8B3F;IAED;;;;OAIG;IACH,UAAyB,qBAAqB,CAC5C,gBAAgB,EAAE,gBAAgB,EAClC,IAAI,EAAE,4BAA4B,GACjC,OAAO,CAAC,kBAAkB,CAAC,CAyC7B;IAED,UAAgB,qBAAqB,CACnC,IAAI,EAAE,WAAW,EACjB,MAAM,EAAE,EAAE,EACV,IAAI,EAAE,EAAE,EACR,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,cAAc,CAAC,CAiCzB;IAEK,qBAAqB,CACzB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,WAAW,EACjB,MAAM,EAAE,EAAE,EACV,IAAI,EAAE,EAAE,EACR,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,cAAc,CAAC,CAIzB;IAED,oBAAoB,CAAC,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,UAAU,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAGnG;IAED,mBAAmB,CAAC,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAErG;IAED,mBAAmB,CAAC,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAErG;IAED,gBAAgB,CAAC,KAAK,CAAC,EAAE,MAAM,QAE9B;IAED,sBAAsB,CAAC,KAAK,CAAC,EAAE,MAAM,QAEpC;IAED,IAAI,kBAEH;CACF"}
|
|
@@ -7,8 +7,27 @@ import { Fq, Fr } from '@aztec/foundation/curves/bn254';
|
|
|
7
7
|
import { getContractInstanceFromInstantiationParams } from '@aztec/stdlib/contract';
|
|
8
8
|
import { GasSettings } from '@aztec/stdlib/gas';
|
|
9
9
|
import { deriveSigningKey } from '@aztec/stdlib/keys';
|
|
10
|
-
import { collectOffchainEffects, mergeExecutionPayloads } from '@aztec/stdlib/tx';
|
|
10
|
+
import { SimulationOverrides, TxStatus, collectOffchainEffects, mergeExecutionPayloads } from '@aztec/stdlib/tx';
|
|
11
11
|
import { BaseWallet } from '@aztec/wallet-sdk/base-wallet';
|
|
12
|
+
/** Splits a unified EmbeddedWalletPXEOptions into PXEConfig overrides and PXECreationOptions. */ export function splitPxeOptions(pxe) {
|
|
13
|
+
if (!pxe) {
|
|
14
|
+
return {
|
|
15
|
+
config: {},
|
|
16
|
+
creation: {}
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
const { loggers, loggerActorLabel, proverOrOptions, store, simulator, ...config } = pxe;
|
|
20
|
+
return {
|
|
21
|
+
config,
|
|
22
|
+
creation: {
|
|
23
|
+
loggers,
|
|
24
|
+
loggerActorLabel,
|
|
25
|
+
proverOrOptions,
|
|
26
|
+
store,
|
|
27
|
+
simulator
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
}
|
|
12
31
|
const DEFAULT_ESTIMATED_GAS_PADDING = 0.1;
|
|
13
32
|
export class EmbeddedWallet extends BaseWallet {
|
|
14
33
|
walletDB;
|
|
@@ -48,7 +67,12 @@ export class EmbeddedWallet extends BaseWallet {
|
|
|
48
67
|
* estimates actual gas usage and captures call authorization requests to generate
|
|
49
68
|
* the necessary authwitnesses.
|
|
50
69
|
*/ async sendTx(executionPayload, opts) {
|
|
51
|
-
const feeOptions = await this.
|
|
70
|
+
const feeOptions = await this.completeFeeOptions({
|
|
71
|
+
from: opts.from,
|
|
72
|
+
feePayer: executionPayload.feePayer,
|
|
73
|
+
gasSettings: opts.fee?.gasSettings,
|
|
74
|
+
forEstimation: true
|
|
75
|
+
});
|
|
52
76
|
// Simulate the transaction first to estimate gas and capture required
|
|
53
77
|
// private authwitnesses based on offchain effects.
|
|
54
78
|
const simulationResult = await this.simulateViaEntrypoint(executionPayload, {
|
|
@@ -83,6 +107,17 @@ export class EmbeddedWallet extends BaseWallet {
|
|
|
83
107
|
gasLimits: opts.fee?.gasSettings?.gasLimits ?? estimated.gasLimits,
|
|
84
108
|
teardownGasLimits: opts.fee?.gasSettings?.teardownGasLimits ?? estimated.teardownGasLimits
|
|
85
109
|
});
|
|
110
|
+
const waitOpts = typeof opts.wait === 'object' ? opts.wait : {};
|
|
111
|
+
if (!waitOpts?.waitForStatus) {
|
|
112
|
+
// Default to PROPOSED so the wait returns as soon as the tx lands in a proposed L2 block,
|
|
113
|
+
// rather than waiting until the end of the slot for the checkpoint to be published to L1.
|
|
114
|
+
// This is what makes MBPS (Multiple Blocks Per Slot) actually improve UX: with CHECKPOINTED
|
|
115
|
+
// we'd block until L1 inclusion regardless of how early in the slot the tx was sequenced.
|
|
116
|
+
// The tradeoff is a weaker guarantee — a proposed block only becomes canonical once it (or
|
|
117
|
+
// a later block in the same slot) is checkpointed, so a tx could be re-orged out if the
|
|
118
|
+
// proposer fails to publish to L1 (which should be rare, since they'd get slashed for it).
|
|
119
|
+
waitOpts.waitForStatus = TxStatus.PROPOSED;
|
|
120
|
+
}
|
|
86
121
|
return super.sendTx(executionPayload, {
|
|
87
122
|
...opts,
|
|
88
123
|
fee: {
|
|
@@ -92,6 +127,31 @@ export class EmbeddedWallet extends BaseWallet {
|
|
|
92
127
|
});
|
|
93
128
|
}
|
|
94
129
|
/**
|
|
130
|
+
* Builds contract overrides for all provided addresses by replacing their account contracts with stub implementations.
|
|
131
|
+
*/ async buildAccountOverrides(addresses) {
|
|
132
|
+
const accounts = await this.getAccounts();
|
|
133
|
+
const contracts = {};
|
|
134
|
+
const stubArtifact = await this.accountContracts.getStubAccountContractArtifact();
|
|
135
|
+
const filtered = accounts.filter((acc)=>addresses.some((addr)=>addr.equals(acc.item)));
|
|
136
|
+
for (const account of filtered){
|
|
137
|
+
const address = account.item;
|
|
138
|
+
const originalAccount = await this.getAccountFromAddress(address);
|
|
139
|
+
const completeAddress = originalAccount.getCompleteAddress();
|
|
140
|
+
const contractInstance = await this.pxe.getContractInstance(completeAddress.address);
|
|
141
|
+
if (!contractInstance) {
|
|
142
|
+
throw new Error(`No contract instance found for address: ${completeAddress.address} during account override building. This is a bug!`);
|
|
143
|
+
}
|
|
144
|
+
const stubInstance = await getContractInstanceFromInstantiationParams(stubArtifact, {
|
|
145
|
+
salt: Fr.random()
|
|
146
|
+
});
|
|
147
|
+
contracts[address.toString()] = {
|
|
148
|
+
instance: stubInstance,
|
|
149
|
+
artifact: stubArtifact
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
return contracts;
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
95
155
|
* Simulates calls via a stub account entrypoint, bypassing real account authorization.
|
|
96
156
|
* This allows kernelless simulation with contract overrides, skipping expensive
|
|
97
157
|
* private kernel circuit execution.
|
|
@@ -103,21 +163,16 @@ export class EmbeddedWallet extends BaseWallet {
|
|
|
103
163
|
executionPayload
|
|
104
164
|
]) : executionPayload;
|
|
105
165
|
const chainInfo = await this.getChainInfo();
|
|
106
|
-
|
|
166
|
+
const accountOverrides = await this.buildAccountOverrides(this.scopesFrom(from, opts.additionalScopes));
|
|
167
|
+
const overrides = new SimulationOverrides(accountOverrides);
|
|
107
168
|
let txRequest;
|
|
108
169
|
if (from === NO_FROM) {
|
|
109
170
|
const entrypoint = new DefaultEntrypoint();
|
|
110
171
|
txRequest = await entrypoint.createTxExecutionRequest(finalExecutionPayload, feeOptions.gasSettings, chainInfo);
|
|
111
172
|
} else {
|
|
112
|
-
const
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
[from.toString()]: {
|
|
116
|
-
instance,
|
|
117
|
-
artifact
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
};
|
|
173
|
+
const originalAccount = await this.getAccountFromAddress(from);
|
|
174
|
+
const completeAddress = originalAccount.getCompleteAddress();
|
|
175
|
+
const account = await this.accountContracts.createStubAccount(completeAddress);
|
|
121
176
|
const executionOptions = {
|
|
122
177
|
txNonce: Fr.random(),
|
|
123
178
|
cancellable: this.cancellableTransactions,
|
|
@@ -134,24 +189,6 @@ export class EmbeddedWallet extends BaseWallet {
|
|
|
134
189
|
scopes
|
|
135
190
|
});
|
|
136
191
|
}
|
|
137
|
-
async getFakeAccountDataFor(address) {
|
|
138
|
-
const originalAccount = await this.getAccountFromAddress(address);
|
|
139
|
-
const originalAddress = originalAccount.getCompleteAddress();
|
|
140
|
-
const contractInstance = await this.pxe.getContractInstance(originalAddress.address);
|
|
141
|
-
if (!contractInstance) {
|
|
142
|
-
throw new Error(`No contract instance found for address: ${originalAddress.address}`);
|
|
143
|
-
}
|
|
144
|
-
const stubAccount = await this.accountContracts.createStubAccount(originalAddress);
|
|
145
|
-
const stubArtifact = await this.accountContracts.getStubAccountContractArtifact();
|
|
146
|
-
const instance = await getContractInstanceFromInstantiationParams(stubArtifact, {
|
|
147
|
-
salt: Fr.random()
|
|
148
|
-
});
|
|
149
|
-
return {
|
|
150
|
-
account: stubAccount,
|
|
151
|
-
instance,
|
|
152
|
-
artifact: stubArtifact
|
|
153
|
-
};
|
|
154
|
-
}
|
|
155
192
|
async createAccountInternal(type, secret, salt, signingKey) {
|
|
156
193
|
let contract;
|
|
157
194
|
switch(type){
|
|
@@ -8,7 +8,7 @@ export declare class BrowserEmbeddedWallet extends EmbeddedWallet {
|
|
|
8
8
|
static create<T extends BrowserEmbeddedWallet = BrowserEmbeddedWallet>(this: new (pxe: PXE, aztecNode: AztecNode, walletDB: WalletDB, accountContracts: AccountContractsProvider, log?: Logger) => T, nodeOrUrl: string | AztecNode, options?: EmbeddedWalletOptions): Promise<T>;
|
|
9
9
|
}
|
|
10
10
|
export { BrowserEmbeddedWallet as EmbeddedWallet };
|
|
11
|
-
export type { EmbeddedWalletOptions } from '../embedded_wallet.js';
|
|
11
|
+
export type { EmbeddedWalletOptions, EmbeddedWalletPXEOptions } from '../embedded_wallet.js';
|
|
12
12
|
export { WalletDB } from '../wallet_db.js';
|
|
13
13
|
export type { AccountType } from '../wallet_db.js';
|
|
14
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJvd3Nlci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2VtYmVkZGVkL2VudHJ5cG9pbnRzL2Jyb3dzZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssU0FBUyxFQUF5QixNQUFNLHNCQUFzQixDQUFDO0FBQzdFLE9BQU8sRUFBRSxLQUFLLE1BQU0sRUFBZ0IsTUFBTSx1QkFBdUIsQ0FBQztBQUVsRSxPQUFPLEVBQUUsS0FBSyxHQUFHLEVBQXNDLE1BQU0sd0JBQXdCLENBQUM7QUFJdEYsT0FBTyxLQUFLLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUN2RixPQUFPLEVBQUUsY0FBYyxFQUFFLEtBQUsscUJBQXFCLEVBQW1CLE1BQU0sdUJBQXVCLENBQUM7QUFDcEcsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRTNDLHFCQUFhLHFCQUFzQixTQUFRLGNBQWM7SUFDdkQsT0FBYSxNQUFNLENBQUMsQ0FBQyxTQUFTLHFCQUFxQixHQUFHLHFCQUFxQixFQUN6RSxJQUFJLEVBQUUsS0FDSixHQUFHLEVBQUUsR0FBRyxFQUNSLFNBQVMsRUFBRSxTQUFTLEVBQ3BCLFFBQVEsRUFBRSxRQUFRLEVBQ2xCLGdCQUFnQixFQUFFLHdCQUF3QixFQUMxQyxHQUFHLENBQUMsRUFBRSxNQUFNLEtBQ1QsQ0FBQyxFQUNOLFNBQVMsRUFBRSxNQUFNLEdBQUcsU0FBUyxFQUM3QixPQUFPLEdBQUUscUJBQTBCLEdBQ2xDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FnRFo7Q0FDRjtBQUVELE9BQU8sRUFBRSxxQkFBcUIsSUFBSSxjQUFjLEVBQUUsQ0FBQztBQUNuRCxZQUFZLEVBQUUscUJBQXFCLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM3RixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsWUFBWSxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../../src/embedded/entrypoints/browser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAyB,MAAM,sBAAsB,CAAC;AAC7E,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,uBAAuB,CAAC;AAElE,OAAO,EAAE,KAAK,GAAG,EAAsC,MAAM,wBAAwB,CAAC;AAItF,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,wCAAwC,CAAC;AACvF,OAAO,EAAE,cAAc,EAAE,KAAK,qBAAqB,
|
|
1
|
+
{"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../../src/embedded/entrypoints/browser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAyB,MAAM,sBAAsB,CAAC;AAC7E,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,uBAAuB,CAAC;AAElE,OAAO,EAAE,KAAK,GAAG,EAAsC,MAAM,wBAAwB,CAAC;AAItF,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,wCAAwC,CAAC;AACvF,OAAO,EAAE,cAAc,EAAE,KAAK,qBAAqB,EAAmB,MAAM,uBAAuB,CAAC;AACpG,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE3C,qBAAa,qBAAsB,SAAQ,cAAc;IACvD,OAAa,MAAM,CAAC,CAAC,SAAS,qBAAqB,GAAG,qBAAqB,EACzE,IAAI,EAAE,KACJ,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,QAAQ,EAClB,gBAAgB,EAAE,wBAAwB,EAC1C,GAAG,CAAC,EAAE,MAAM,KACT,CAAC,EACN,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAAC,CAAC,CAAC,CAgDZ;CACF;AAED,OAAO,EAAE,qBAAqB,IAAI,cAAc,EAAE,CAAC;AACnD,YAAY,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AAC7F,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,YAAY,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -4,28 +4,38 @@ import { createStore, openTmpStore } from '@aztec/kv-store/indexeddb';
|
|
|
4
4
|
import { createPXE } from '@aztec/pxe/client/lazy';
|
|
5
5
|
import { getPXEConfig } from '@aztec/pxe/config';
|
|
6
6
|
import { LazyAccountContractsProvider } from '../account-contract-providers/lazy.js';
|
|
7
|
-
import { EmbeddedWallet } from '../embedded_wallet.js';
|
|
7
|
+
import { EmbeddedWallet, splitPxeOptions } from '../embedded_wallet.js';
|
|
8
8
|
import { WalletDB } from '../wallet_db.js';
|
|
9
9
|
export class BrowserEmbeddedWallet extends EmbeddedWallet {
|
|
10
10
|
static async create(nodeOrUrl, options = {}) {
|
|
11
11
|
const rootLogger = options.logger ?? createLogger('embedded-wallet');
|
|
12
12
|
const aztecNode = typeof nodeOrUrl === 'string' ? createAztecNodeClient(nodeOrUrl) : nodeOrUrl;
|
|
13
13
|
const l1Contracts = await aztecNode.getL1ContractAddresses();
|
|
14
|
+
// Support both the new unified `pxe` option and the deprecated `pxeConfig`/`pxeOptions`.
|
|
15
|
+
const { config: pxeConfigFromPxe, creation: pxeCreationFromPxe } = splitPxeOptions(options.pxe);
|
|
16
|
+
const mergedConfigOverrides = {
|
|
17
|
+
...options.pxeConfig,
|
|
18
|
+
...pxeConfigFromPxe
|
|
19
|
+
};
|
|
20
|
+
const mergedCreationOverrides = {
|
|
21
|
+
...options.pxeOptions,
|
|
22
|
+
...pxeCreationFromPxe
|
|
23
|
+
};
|
|
14
24
|
const pxeConfig = Object.assign(getPXEConfig(), {
|
|
15
|
-
proverEnabled:
|
|
25
|
+
proverEnabled: mergedConfigOverrides.proverEnabled ?? false,
|
|
16
26
|
dataDirectory: `pxe_data_${l1Contracts.rollupAddress}`,
|
|
17
|
-
...
|
|
27
|
+
...mergedConfigOverrides
|
|
18
28
|
});
|
|
19
29
|
if (options.ephemeral) {
|
|
20
30
|
delete pxeConfig.dataDirectory;
|
|
21
31
|
}
|
|
22
32
|
const pxeOptions = {
|
|
23
|
-
...
|
|
33
|
+
...mergedCreationOverrides,
|
|
24
34
|
loggers: {
|
|
25
35
|
store: rootLogger.createChild('pxe:data'),
|
|
26
36
|
pxe: rootLogger.createChild('pxe:service'),
|
|
27
37
|
prover: rootLogger.createChild('pxe:prover'),
|
|
28
|
-
...
|
|
38
|
+
...mergedCreationOverrides.loggers
|
|
29
39
|
}
|
|
30
40
|
};
|
|
31
41
|
const pxe = await createPXE(aztecNode, pxeConfig, pxeOptions);
|
|
@@ -8,7 +8,7 @@ export declare class NodeEmbeddedWallet extends EmbeddedWallet {
|
|
|
8
8
|
static create<T extends NodeEmbeddedWallet = NodeEmbeddedWallet>(this: new (pxe: PXE, aztecNode: AztecNode, walletDB: WalletDB, accountContracts: AccountContractsProvider, log?: Logger) => T, nodeOrUrl: string | AztecNode, options?: EmbeddedWalletOptions): Promise<T>;
|
|
9
9
|
}
|
|
10
10
|
export { NodeEmbeddedWallet as EmbeddedWallet };
|
|
11
|
-
export type { EmbeddedWalletOptions } from '../embedded_wallet.js';
|
|
11
|
+
export type { EmbeddedWalletOptions, EmbeddedWalletPXEOptions } from '../embedded_wallet.js';
|
|
12
12
|
export { WalletDB } from '../wallet_db.js';
|
|
13
13
|
export type { AccountType } from '../wallet_db.js';
|
|
14
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2VtYmVkZGVkL2VudHJ5cG9pbnRzL25vZGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLEtBQUssTUFBTSxFQUFnQixNQUFNLHVCQUF1QixDQUFDO0FBR2xFLE9BQU8sRUFBRSxLQUFLLEdBQUcsRUFBc0MsTUFBTSxtQkFBbUIsQ0FBQztBQUNqRixPQUFPLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUdqRSxPQUFPLEtBQUssRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxjQUFjLEVBQUUsS0FBSyxxQkFBcUIsRUFBbUIsTUFBTSx1QkFBdUIsQ0FBQztBQUNwRyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFM0MscUJBQWEsa0JBQW1CLFNBQVEsY0FBYztJQUNwRCxPQUFhLE1BQU0sQ0FBQyxDQUFDLFNBQVMsa0JBQWtCLEdBQUcsa0JBQWtCLEVBQ25FLElBQUksRUFBRSxLQUNKLEdBQUcsRUFBRSxHQUFHLEVBQ1IsU0FBUyxFQUFFLFNBQVMsRUFDcEIsUUFBUSxFQUFFLFFBQVEsRUFDbEIsZ0JBQWdCLEVBQUUsd0JBQXdCLEVBQzFDLEdBQUcsQ0FBQyxFQUFFLE1BQU0sS0FDVCxDQUFDLEVBQ04sU0FBUyxFQUFFLE1BQU0sR0FBRyxTQUFTLEVBQzdCLE9BQU8sR0FBRSxxQkFBMEIsR0FDbEMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQXNEWjtDQUNGO0FBRUQsT0FBTyxFQUFFLGtCQUFrQixJQUFJLGNBQWMsRUFBRSxDQUFDO0FBQ2hELFlBQVksRUFBRSxxQkFBcUIsRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzdGLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxZQUFZLEVBQUUsV0FBVyxFQUFFLE1BQU0saUJBQWlCLENBQUMifQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../../../src/embedded/entrypoints/node.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,uBAAuB,CAAC;AAGlE,OAAO,EAAE,KAAK,GAAG,EAAsC,MAAM,mBAAmB,CAAC;AACjF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AAGjE,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,wCAAwC,CAAC;AACvF,OAAO,EAAE,cAAc,EAAE,KAAK,qBAAqB,
|
|
1
|
+
{"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../../../src/embedded/entrypoints/node.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,uBAAuB,CAAC;AAGlE,OAAO,EAAE,KAAK,GAAG,EAAsC,MAAM,mBAAmB,CAAC;AACjF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AAGjE,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,wCAAwC,CAAC;AACvF,OAAO,EAAE,cAAc,EAAE,KAAK,qBAAqB,EAAmB,MAAM,uBAAuB,CAAC;AACpG,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE3C,qBAAa,kBAAmB,SAAQ,cAAc;IACpD,OAAa,MAAM,CAAC,CAAC,SAAS,kBAAkB,GAAG,kBAAkB,EACnE,IAAI,EAAE,KACJ,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,QAAQ,EAClB,gBAAgB,EAAE,wBAAwB,EAC1C,GAAG,CAAC,EAAE,MAAM,KACT,CAAC,EACN,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAAC,CAAC,CAAC,CAsDZ;CACF;AAED,OAAO,EAAE,kBAAkB,IAAI,cAAc,EAAE,CAAC;AAChD,YAAY,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AAC7F,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,YAAY,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -4,28 +4,38 @@ import { createStore, openTmpStore } from '@aztec/kv-store/lmdb-v2';
|
|
|
4
4
|
import { getPXEConfig } from '@aztec/pxe/config';
|
|
5
5
|
import { createPXE } from '@aztec/pxe/server';
|
|
6
6
|
import { BundleAccountContractsProvider } from '../account-contract-providers/bundle.js';
|
|
7
|
-
import { EmbeddedWallet } from '../embedded_wallet.js';
|
|
7
|
+
import { EmbeddedWallet, splitPxeOptions } from '../embedded_wallet.js';
|
|
8
8
|
import { WalletDB } from '../wallet_db.js';
|
|
9
9
|
export class NodeEmbeddedWallet extends EmbeddedWallet {
|
|
10
10
|
static async create(nodeOrUrl, options = {}) {
|
|
11
11
|
const rootLogger = options.logger ?? createLogger('embedded-wallet');
|
|
12
12
|
const aztecNode = typeof nodeOrUrl === 'string' ? createAztecNodeClient(nodeOrUrl) : nodeOrUrl;
|
|
13
13
|
const l1Contracts = await aztecNode.getL1ContractAddresses();
|
|
14
|
+
// Support both the new unified `pxe` option and the deprecated `pxeConfig`/`pxeOptions`.
|
|
15
|
+
const { config: pxeConfigFromPxe, creation: pxeCreationFromPxe } = splitPxeOptions(options.pxe);
|
|
16
|
+
const mergedConfigOverrides = {
|
|
17
|
+
...options.pxeConfig,
|
|
18
|
+
...pxeConfigFromPxe
|
|
19
|
+
};
|
|
20
|
+
const mergedCreationOverrides = {
|
|
21
|
+
...options.pxeOptions,
|
|
22
|
+
...pxeCreationFromPxe
|
|
23
|
+
};
|
|
14
24
|
const pxeConfig = Object.assign(getPXEConfig(), {
|
|
15
|
-
proverEnabled:
|
|
25
|
+
proverEnabled: mergedConfigOverrides.proverEnabled ?? false,
|
|
16
26
|
dataDirectory: `pxe_data_${l1Contracts.rollupAddress}`,
|
|
17
|
-
...
|
|
27
|
+
...mergedConfigOverrides
|
|
18
28
|
});
|
|
19
29
|
if (options.ephemeral) {
|
|
20
30
|
delete pxeConfig.dataDirectory;
|
|
21
31
|
}
|
|
22
32
|
const pxeOptions = {
|
|
23
|
-
...
|
|
33
|
+
...mergedCreationOverrides,
|
|
24
34
|
loggers: {
|
|
25
35
|
store: rootLogger.createChild('pxe:data'),
|
|
26
36
|
pxe: rootLogger.createChild('pxe:service'),
|
|
27
37
|
prover: rootLogger.createChild('pxe:prover'),
|
|
28
|
-
...
|
|
38
|
+
...mergedCreationOverrides.loggers
|
|
29
39
|
}
|
|
30
40
|
};
|
|
31
41
|
const pxe = await createPXE(aztecNode, pxeConfig, pxeOptions);
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/wallets",
|
|
3
3
|
"homepage": "https://github.com/AztecProtocol/aztec-packages/tree/master/yarn-project/wallets",
|
|
4
|
-
"version": "0.0.1-commit.
|
|
4
|
+
"version": "0.0.1-commit.e304674f1",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": {
|
|
7
7
|
"./embedded": {
|
|
@@ -27,15 +27,15 @@
|
|
|
27
27
|
"../package.common.json"
|
|
28
28
|
],
|
|
29
29
|
"dependencies": {
|
|
30
|
-
"@aztec/accounts": "0.0.1-commit.
|
|
31
|
-
"@aztec/aztec.js": "0.0.1-commit.
|
|
32
|
-
"@aztec/entrypoints": "0.0.1-commit.
|
|
33
|
-
"@aztec/foundation": "0.0.1-commit.
|
|
34
|
-
"@aztec/kv-store": "0.0.1-commit.
|
|
35
|
-
"@aztec/protocol-contracts": "0.0.1-commit.
|
|
36
|
-
"@aztec/pxe": "0.0.1-commit.
|
|
37
|
-
"@aztec/stdlib": "0.0.1-commit.
|
|
38
|
-
"@aztec/wallet-sdk": "0.0.1-commit.
|
|
30
|
+
"@aztec/accounts": "0.0.1-commit.e304674f1",
|
|
31
|
+
"@aztec/aztec.js": "0.0.1-commit.e304674f1",
|
|
32
|
+
"@aztec/entrypoints": "0.0.1-commit.e304674f1",
|
|
33
|
+
"@aztec/foundation": "0.0.1-commit.e304674f1",
|
|
34
|
+
"@aztec/kv-store": "0.0.1-commit.e304674f1",
|
|
35
|
+
"@aztec/protocol-contracts": "0.0.1-commit.e304674f1",
|
|
36
|
+
"@aztec/pxe": "0.0.1-commit.e304674f1",
|
|
37
|
+
"@aztec/stdlib": "0.0.1-commit.e304674f1",
|
|
38
|
+
"@aztec/wallet-sdk": "0.0.1-commit.e304674f1"
|
|
39
39
|
},
|
|
40
40
|
"devDependencies": {
|
|
41
41
|
"@jest/globals": "^30.0.0",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type Account, NO_FROM } from '@aztec/aztec.js/account';
|
|
2
2
|
import { CallAuthorizationRequest } from '@aztec/aztec.js/authorization';
|
|
3
|
-
import { type InteractionWaitOptions, type SendReturn, getGasLimits } from '@aztec/aztec.js/contracts';
|
|
3
|
+
import { type InteractionWaitOptions, type SendReturn, type WaitOpts, getGasLimits } from '@aztec/aztec.js/contracts';
|
|
4
4
|
import type { Aliased, SendOptions } from '@aztec/aztec.js/wallet';
|
|
5
5
|
import { AccountManager } from '@aztec/aztec.js/wallet';
|
|
6
6
|
import type { DefaultAccountEntrypointOptions } from '@aztec/entrypoints/account';
|
|
@@ -15,10 +15,12 @@ import { GasSettings } from '@aztec/stdlib/gas';
|
|
|
15
15
|
import type { AztecNode } from '@aztec/stdlib/interfaces/client';
|
|
16
16
|
import { deriveSigningKey } from '@aztec/stdlib/keys';
|
|
17
17
|
import {
|
|
18
|
+
type ContractOverrides,
|
|
18
19
|
ExecutionPayload,
|
|
19
20
|
SimulationOverrides,
|
|
20
21
|
type TxExecutionRequest,
|
|
21
22
|
type TxSimulationResult,
|
|
23
|
+
TxStatus,
|
|
22
24
|
collectOffchainEffects,
|
|
23
25
|
mergeExecutionPayloads,
|
|
24
26
|
} from '@aztec/stdlib/tx';
|
|
@@ -27,14 +29,37 @@ import { BaseWallet, type SimulateViaEntrypointOptions } from '@aztec/wallet-sdk
|
|
|
27
29
|
import type { AccountContractsProvider } from './account-contract-providers/types.js';
|
|
28
30
|
import { type AccountType, WalletDB } from './wallet_db.js';
|
|
29
31
|
|
|
32
|
+
/** Options for the PXE instance created by the EmbeddedWallet. */
|
|
33
|
+
export type EmbeddedWalletPXEOptions = Partial<PXEConfig> & PXECreationOptions;
|
|
34
|
+
|
|
35
|
+
/** Splits a unified EmbeddedWalletPXEOptions into PXEConfig overrides and PXECreationOptions. */
|
|
36
|
+
export function splitPxeOptions(pxe?: EmbeddedWalletPXEOptions): {
|
|
37
|
+
config: Partial<PXEConfig>;
|
|
38
|
+
creation: PXECreationOptions;
|
|
39
|
+
} {
|
|
40
|
+
if (!pxe) {
|
|
41
|
+
return { config: {}, creation: {} };
|
|
42
|
+
}
|
|
43
|
+
const { loggers, loggerActorLabel, proverOrOptions, store, simulator, ...config } = pxe;
|
|
44
|
+
return { config, creation: { loggers, loggerActorLabel, proverOrOptions, store, simulator } };
|
|
45
|
+
}
|
|
46
|
+
|
|
30
47
|
export type EmbeddedWalletOptions = {
|
|
31
48
|
/** Parent logger. Child loggers are derived via createChild() for each subsystem. */
|
|
32
49
|
logger?: Logger;
|
|
33
50
|
/** Use ephemeral (in-memory) stores. Data will not persist across sessions. */
|
|
34
51
|
ephemeral?: boolean;
|
|
35
|
-
/**
|
|
52
|
+
/** PXE configuration and dependency overrides (custom store, prover, simulator). */
|
|
53
|
+
pxe?: EmbeddedWalletPXEOptions;
|
|
54
|
+
/**
|
|
55
|
+
* Override PXE configuration.
|
|
56
|
+
* @deprecated Use `pxe` instead.
|
|
57
|
+
*/
|
|
36
58
|
pxeConfig?: Partial<PXEConfig>;
|
|
37
|
-
/**
|
|
59
|
+
/**
|
|
60
|
+
* Advanced PXE creation options (custom store, prover, simulator).
|
|
61
|
+
* @deprecated Use `pxe` instead.
|
|
62
|
+
*/
|
|
38
63
|
pxeOptions?: PXECreationOptions;
|
|
39
64
|
};
|
|
40
65
|
|
|
@@ -94,11 +119,12 @@ export class EmbeddedWallet extends BaseWallet {
|
|
|
94
119
|
executionPayload: ExecutionPayload,
|
|
95
120
|
opts: SendOptions<W>,
|
|
96
121
|
): Promise<SendReturn<W>> {
|
|
97
|
-
const feeOptions = await this.
|
|
98
|
-
opts.from,
|
|
99
|
-
executionPayload.feePayer,
|
|
100
|
-
opts.fee?.gasSettings,
|
|
101
|
-
|
|
122
|
+
const feeOptions = await this.completeFeeOptions({
|
|
123
|
+
from: opts.from,
|
|
124
|
+
feePayer: executionPayload.feePayer,
|
|
125
|
+
gasSettings: opts.fee?.gasSettings,
|
|
126
|
+
forEstimation: true,
|
|
127
|
+
});
|
|
102
128
|
|
|
103
129
|
// Simulate the transaction first to estimate gas and capture required
|
|
104
130
|
// private authwitnesses based on offchain effects.
|
|
@@ -139,12 +165,59 @@ export class EmbeddedWallet extends BaseWallet {
|
|
|
139
165
|
gasLimits: opts.fee?.gasSettings?.gasLimits ?? estimated.gasLimits,
|
|
140
166
|
teardownGasLimits: opts.fee?.gasSettings?.teardownGasLimits ?? estimated.teardownGasLimits,
|
|
141
167
|
});
|
|
168
|
+
const waitOpts: WaitOpts = typeof opts.wait === 'object' ? opts.wait : {};
|
|
169
|
+
|
|
170
|
+
if (!waitOpts?.waitForStatus) {
|
|
171
|
+
// Default to PROPOSED so the wait returns as soon as the tx lands in a proposed L2 block,
|
|
172
|
+
// rather than waiting until the end of the slot for the checkpoint to be published to L1.
|
|
173
|
+
// This is what makes MBPS (Multiple Blocks Per Slot) actually improve UX: with CHECKPOINTED
|
|
174
|
+
// we'd block until L1 inclusion regardless of how early in the slot the tx was sequenced.
|
|
175
|
+
// The tradeoff is a weaker guarantee — a proposed block only becomes canonical once it (or
|
|
176
|
+
// a later block in the same slot) is checkpointed, so a tx could be re-orged out if the
|
|
177
|
+
// proposer fails to publish to L1 (which should be rare, since they'd get slashed for it).
|
|
178
|
+
waitOpts!.waitForStatus = TxStatus.PROPOSED;
|
|
179
|
+
}
|
|
142
180
|
return super.sendTx(executionPayload, {
|
|
143
181
|
...opts,
|
|
144
182
|
fee: { ...opts.fee, gasSettings },
|
|
145
183
|
});
|
|
146
184
|
}
|
|
147
185
|
|
|
186
|
+
/**
|
|
187
|
+
* Builds contract overrides for all provided addresses by replacing their account contracts with stub implementations.
|
|
188
|
+
*/
|
|
189
|
+
protected async buildAccountOverrides(addresses: AztecAddress[]): Promise<ContractOverrides> {
|
|
190
|
+
const accounts = await this.getAccounts();
|
|
191
|
+
const contracts: ContractOverrides = {};
|
|
192
|
+
|
|
193
|
+
const stubArtifact = await this.accountContracts.getStubAccountContractArtifact();
|
|
194
|
+
|
|
195
|
+
const filtered = accounts.filter(acc => addresses.some(addr => addr.equals(acc.item)));
|
|
196
|
+
|
|
197
|
+
for (const account of filtered) {
|
|
198
|
+
const address = account.item;
|
|
199
|
+
const originalAccount = await this.getAccountFromAddress(address);
|
|
200
|
+
const completeAddress = originalAccount.getCompleteAddress();
|
|
201
|
+
const contractInstance = await this.pxe.getContractInstance(completeAddress.address);
|
|
202
|
+
if (!contractInstance) {
|
|
203
|
+
throw new Error(
|
|
204
|
+
`No contract instance found for address: ${completeAddress.address} during account override building. This is a bug!`,
|
|
205
|
+
);
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
const stubInstance = await getContractInstanceFromInstantiationParams(stubArtifact, {
|
|
209
|
+
salt: Fr.random(),
|
|
210
|
+
});
|
|
211
|
+
|
|
212
|
+
contracts[address.toString()] = {
|
|
213
|
+
instance: stubInstance,
|
|
214
|
+
artifact: stubArtifact,
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
return contracts;
|
|
219
|
+
}
|
|
220
|
+
|
|
148
221
|
/**
|
|
149
222
|
* Simulates calls via a stub account entrypoint, bypassing real account authorization.
|
|
150
223
|
* This allows kernelless simulation with contract overrides, skipping expensive
|
|
@@ -162,16 +235,17 @@ export class EmbeddedWallet extends BaseWallet {
|
|
|
162
235
|
: executionPayload;
|
|
163
236
|
const chainInfo = await this.getChainInfo();
|
|
164
237
|
|
|
165
|
-
|
|
238
|
+
const accountOverrides = await this.buildAccountOverrides(this.scopesFrom(from, opts.additionalScopes));
|
|
239
|
+
const overrides = new SimulationOverrides(accountOverrides);
|
|
240
|
+
|
|
166
241
|
let txRequest: TxExecutionRequest;
|
|
167
242
|
if (from === NO_FROM) {
|
|
168
243
|
const entrypoint = new DefaultEntrypoint();
|
|
169
244
|
txRequest = await entrypoint.createTxExecutionRequest(finalExecutionPayload, feeOptions.gasSettings, chainInfo);
|
|
170
245
|
} else {
|
|
171
|
-
const
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
};
|
|
246
|
+
const originalAccount = await this.getAccountFromAddress(from);
|
|
247
|
+
const completeAddress = originalAccount.getCompleteAddress();
|
|
248
|
+
const account = await this.accountContracts.createStubAccount(completeAddress);
|
|
175
249
|
const executionOptions: DefaultAccountEntrypointOptions = {
|
|
176
250
|
txNonce: Fr.random(),
|
|
177
251
|
cancellable: this.cancellableTransactions,
|
|
@@ -195,25 +269,6 @@ export class EmbeddedWallet extends BaseWallet {
|
|
|
195
269
|
});
|
|
196
270
|
}
|
|
197
271
|
|
|
198
|
-
private async getFakeAccountDataFor(address: AztecAddress) {
|
|
199
|
-
const originalAccount = await this.getAccountFromAddress(address);
|
|
200
|
-
const originalAddress = originalAccount.getCompleteAddress();
|
|
201
|
-
const contractInstance = await this.pxe.getContractInstance(originalAddress.address);
|
|
202
|
-
if (!contractInstance) {
|
|
203
|
-
throw new Error(`No contract instance found for address: ${originalAddress.address}`);
|
|
204
|
-
}
|
|
205
|
-
const stubAccount = await this.accountContracts.createStubAccount(originalAddress);
|
|
206
|
-
const stubArtifact = await this.accountContracts.getStubAccountContractArtifact();
|
|
207
|
-
const instance = await getContractInstanceFromInstantiationParams(stubArtifact, {
|
|
208
|
-
salt: Fr.random(),
|
|
209
|
-
});
|
|
210
|
-
return {
|
|
211
|
-
account: stubAccount,
|
|
212
|
-
instance,
|
|
213
|
-
artifact: stubArtifact,
|
|
214
|
-
};
|
|
215
|
-
}
|
|
216
|
-
|
|
217
272
|
protected async createAccountInternal(
|
|
218
273
|
type: AccountType,
|
|
219
274
|
secret: Fr,
|
|
@@ -6,7 +6,7 @@ import { type PXEConfig, getPXEConfig } from '@aztec/pxe/config';
|
|
|
6
6
|
|
|
7
7
|
import { LazyAccountContractsProvider } from '../account-contract-providers/lazy.js';
|
|
8
8
|
import type { AccountContractsProvider } from '../account-contract-providers/types.js';
|
|
9
|
-
import { EmbeddedWallet, type EmbeddedWalletOptions } from '../embedded_wallet.js';
|
|
9
|
+
import { EmbeddedWallet, type EmbeddedWalletOptions, splitPxeOptions } from '../embedded_wallet.js';
|
|
10
10
|
import { WalletDB } from '../wallet_db.js';
|
|
11
11
|
|
|
12
12
|
export class BrowserEmbeddedWallet extends EmbeddedWallet {
|
|
@@ -26,10 +26,15 @@ export class BrowserEmbeddedWallet extends EmbeddedWallet {
|
|
|
26
26
|
const aztecNode = typeof nodeOrUrl === 'string' ? createAztecNodeClient(nodeOrUrl) : nodeOrUrl;
|
|
27
27
|
const l1Contracts = await aztecNode.getL1ContractAddresses();
|
|
28
28
|
|
|
29
|
+
// Support both the new unified `pxe` option and the deprecated `pxeConfig`/`pxeOptions`.
|
|
30
|
+
const { config: pxeConfigFromPxe, creation: pxeCreationFromPxe } = splitPxeOptions(options.pxe);
|
|
31
|
+
const mergedConfigOverrides = { ...options.pxeConfig, ...pxeConfigFromPxe };
|
|
32
|
+
const mergedCreationOverrides: PXECreationOptions = { ...options.pxeOptions, ...pxeCreationFromPxe };
|
|
33
|
+
|
|
29
34
|
const pxeConfig: PXEConfig = Object.assign(getPXEConfig(), {
|
|
30
|
-
proverEnabled:
|
|
35
|
+
proverEnabled: mergedConfigOverrides.proverEnabled ?? false,
|
|
31
36
|
dataDirectory: `pxe_data_${l1Contracts.rollupAddress}`,
|
|
32
|
-
...
|
|
37
|
+
...mergedConfigOverrides,
|
|
33
38
|
});
|
|
34
39
|
|
|
35
40
|
if (options.ephemeral) {
|
|
@@ -37,12 +42,12 @@ export class BrowserEmbeddedWallet extends EmbeddedWallet {
|
|
|
37
42
|
}
|
|
38
43
|
|
|
39
44
|
const pxeOptions: PXECreationOptions = {
|
|
40
|
-
...
|
|
45
|
+
...mergedCreationOverrides,
|
|
41
46
|
loggers: {
|
|
42
47
|
store: rootLogger.createChild('pxe:data'),
|
|
43
48
|
pxe: rootLogger.createChild('pxe:service'),
|
|
44
49
|
prover: rootLogger.createChild('pxe:prover'),
|
|
45
|
-
...
|
|
50
|
+
...mergedCreationOverrides.loggers,
|
|
46
51
|
},
|
|
47
52
|
};
|
|
48
53
|
|
|
@@ -67,6 +72,6 @@ export class BrowserEmbeddedWallet extends EmbeddedWallet {
|
|
|
67
72
|
}
|
|
68
73
|
|
|
69
74
|
export { BrowserEmbeddedWallet as EmbeddedWallet };
|
|
70
|
-
export type { EmbeddedWalletOptions } from '../embedded_wallet.js';
|
|
75
|
+
export type { EmbeddedWalletOptions, EmbeddedWalletPXEOptions } from '../embedded_wallet.js';
|
|
71
76
|
export { WalletDB } from '../wallet_db.js';
|
|
72
77
|
export type { AccountType } from '../wallet_db.js';
|
|
@@ -7,7 +7,7 @@ import type { AztecNode } from '@aztec/stdlib/interfaces/client';
|
|
|
7
7
|
|
|
8
8
|
import { BundleAccountContractsProvider } from '../account-contract-providers/bundle.js';
|
|
9
9
|
import type { AccountContractsProvider } from '../account-contract-providers/types.js';
|
|
10
|
-
import { EmbeddedWallet, type EmbeddedWalletOptions } from '../embedded_wallet.js';
|
|
10
|
+
import { EmbeddedWallet, type EmbeddedWalletOptions, splitPxeOptions } from '../embedded_wallet.js';
|
|
11
11
|
import { WalletDB } from '../wallet_db.js';
|
|
12
12
|
|
|
13
13
|
export class NodeEmbeddedWallet extends EmbeddedWallet {
|
|
@@ -27,10 +27,15 @@ export class NodeEmbeddedWallet extends EmbeddedWallet {
|
|
|
27
27
|
const aztecNode = typeof nodeOrUrl === 'string' ? createAztecNodeClient(nodeOrUrl) : nodeOrUrl;
|
|
28
28
|
const l1Contracts = await aztecNode.getL1ContractAddresses();
|
|
29
29
|
|
|
30
|
+
// Support both the new unified `pxe` option and the deprecated `pxeConfig`/`pxeOptions`.
|
|
31
|
+
const { config: pxeConfigFromPxe, creation: pxeCreationFromPxe } = splitPxeOptions(options.pxe);
|
|
32
|
+
const mergedConfigOverrides = { ...options.pxeConfig, ...pxeConfigFromPxe };
|
|
33
|
+
const mergedCreationOverrides: PXECreationOptions = { ...options.pxeOptions, ...pxeCreationFromPxe };
|
|
34
|
+
|
|
30
35
|
const pxeConfig: PXEConfig = Object.assign(getPXEConfig(), {
|
|
31
|
-
proverEnabled:
|
|
36
|
+
proverEnabled: mergedConfigOverrides.proverEnabled ?? false,
|
|
32
37
|
dataDirectory: `pxe_data_${l1Contracts.rollupAddress}`,
|
|
33
|
-
...
|
|
38
|
+
...mergedConfigOverrides,
|
|
34
39
|
});
|
|
35
40
|
|
|
36
41
|
if (options.ephemeral) {
|
|
@@ -38,12 +43,12 @@ export class NodeEmbeddedWallet extends EmbeddedWallet {
|
|
|
38
43
|
}
|
|
39
44
|
|
|
40
45
|
const pxeOptions: PXECreationOptions = {
|
|
41
|
-
...
|
|
46
|
+
...mergedCreationOverrides,
|
|
42
47
|
loggers: {
|
|
43
48
|
store: rootLogger.createChild('pxe:data'),
|
|
44
49
|
pxe: rootLogger.createChild('pxe:service'),
|
|
45
50
|
prover: rootLogger.createChild('pxe:prover'),
|
|
46
|
-
...
|
|
51
|
+
...mergedCreationOverrides.loggers,
|
|
47
52
|
},
|
|
48
53
|
};
|
|
49
54
|
|
|
@@ -74,6 +79,6 @@ export class NodeEmbeddedWallet extends EmbeddedWallet {
|
|
|
74
79
|
}
|
|
75
80
|
|
|
76
81
|
export { NodeEmbeddedWallet as EmbeddedWallet };
|
|
77
|
-
export type { EmbeddedWalletOptions } from '../embedded_wallet.js';
|
|
82
|
+
export type { EmbeddedWalletOptions, EmbeddedWalletPXEOptions } from '../embedded_wallet.js';
|
|
78
83
|
export { WalletDB } from '../wallet_db.js';
|
|
79
84
|
export type { AccountType } from '../wallet_db.js';
|