@walletmesh/aztec-rpc-wallet 0.3.0 → 0.4.0
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/CHANGELOG.md +26 -0
- package/README.md +290 -228
- package/dist/.tsbuildinfo +1 -1
- package/dist/client/aztec-dapp-wallet.d.ts +401 -0
- package/dist/client/aztec-dapp-wallet.d.ts.map +1 -0
- package/dist/client/aztec-dapp-wallet.js +705 -0
- package/dist/client/aztec-router-provider.d.ts +58 -0
- package/dist/client/aztec-router-provider.d.ts.map +1 -0
- package/dist/client/aztec-router-provider.js +62 -0
- package/dist/client/helpers.d.ts +44 -0
- package/dist/client/helpers.d.ts.map +1 -0
- package/dist/client/helpers.js +79 -0
- package/dist/client/register-serializers.d.ts +41 -0
- package/dist/client/register-serializers.d.ts.map +1 -0
- package/dist/client/register-serializers.js +97 -0
- package/dist/contractArtifactCache.d.ts +49 -32
- package/dist/contractArtifactCache.d.ts.map +1 -1
- package/dist/contractArtifactCache.js +47 -34
- package/dist/errors.d.ts +50 -8
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +50 -10
- package/dist/index.d.ts +53 -40
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +52 -17
- package/dist/types.d.ts +345 -268
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +10 -8
- package/dist/wallet/create-node.d.ts +73 -0
- package/dist/wallet/create-node.d.ts.map +1 -0
- package/dist/wallet/create-node.js +99 -0
- package/dist/wallet/handlers/account.d.ts +67 -0
- package/dist/wallet/handlers/account.d.ts.map +1 -0
- package/dist/wallet/handlers/account.js +85 -0
- package/dist/wallet/handlers/contract-interaction.d.ts +77 -0
- package/dist/wallet/handlers/contract-interaction.d.ts.map +1 -0
- package/dist/wallet/handlers/contract-interaction.js +219 -0
- package/dist/wallet/handlers/contract.d.ts +96 -0
- package/dist/wallet/handlers/contract.d.ts.map +1 -0
- package/dist/wallet/handlers/contract.js +146 -0
- package/dist/wallet/handlers/event.d.ts +62 -0
- package/dist/wallet/handlers/event.d.ts.map +1 -0
- package/dist/wallet/handlers/event.js +85 -0
- package/dist/wallet/handlers/index.d.ts +88 -0
- package/dist/wallet/handlers/index.d.ts.map +1 -0
- package/dist/wallet/handlers/index.js +47 -0
- package/dist/wallet/handlers/node.d.ts +117 -0
- package/dist/wallet/handlers/node.d.ts.map +1 -0
- package/dist/wallet/handlers/node.js +196 -0
- package/dist/wallet/handlers/senders.d.ts +70 -0
- package/dist/wallet/handlers/senders.d.ts.map +1 -0
- package/dist/wallet/handlers/senders.js +92 -0
- package/dist/wallet/handlers/transaction.d.ts +123 -0
- package/dist/wallet/handlers/transaction.d.ts.map +1 -0
- package/dist/wallet/handlers/transaction.js +191 -0
- package/dist/wallet/serializers.d.ts +75 -0
- package/dist/wallet/serializers.d.ts.map +1 -0
- package/dist/wallet/serializers.js +501 -0
- package/docs/README.md +290 -229
- package/docs/classes/AztecDappWallet.md +1304 -0
- package/docs/classes/AztecRouterProvider.md +1058 -0
- package/docs/classes/AztecWalletError.md +124 -47
- package/docs/classes/ContractArtifactCache.md +48 -31
- package/docs/functions/connectAztec.md +62 -0
- package/docs/functions/createAztecWallet.md +46 -0
- package/docs/functions/createAztecWalletNode.md +96 -0
- package/docs/functions/registerAztecSerializers.md +61 -0
- package/docs/functions/registerWalletAztecSerializers.md +39 -0
- package/docs/globals.md +16 -14
- package/docs/interfaces/AztecHandlerContext.md +54 -0
- package/docs/interfaces/AztecWalletContext.md +50 -0
- package/docs/interfaces/AztecWalletMethodMap.md +471 -470
- package/docs/type-aliases/AztecChainId.md +16 -3
- package/docs/variables/ALL_AZTEC_METHODS.md +20 -0
- package/docs/variables/AztecWalletErrorMap.md +9 -4
- package/docs/variables/AztecWalletSerializer.md +45 -0
- package/package.json +9 -9
- package/src/client/aztec-dapp-wallet.test.ts +628 -0
- package/src/client/aztec-dapp-wallet.ts +879 -0
- package/src/client/aztec-router-provider.test.ts +235 -0
- package/src/client/aztec-router-provider.ts +64 -0
- package/src/client/helpers.test.ts +187 -0
- package/src/client/helpers.ts +91 -0
- package/src/client/register-serializers.ts +108 -0
- package/src/contractArtifactCache.test.ts +21 -10
- package/src/contractArtifactCache.ts +54 -35
- package/src/errors.ts +58 -10
- package/src/index.test.ts +2 -6
- package/src/index.ts +73 -37
- package/src/types.ts +379 -217
- package/src/wallet/create-node.test.ts +332 -0
- package/src/wallet/create-node.ts +120 -0
- package/src/wallet/handlers/account.test.ts +172 -0
- package/src/wallet/handlers/account.ts +99 -0
- package/src/wallet/handlers/contract-interaction.test.ts +248 -0
- package/src/wallet/handlers/contract-interaction.ts +269 -0
- package/src/wallet/handlers/contract.test.ts +245 -0
- package/src/wallet/handlers/contract.ts +174 -0
- package/src/wallet/handlers/event.test.ts +216 -0
- package/src/wallet/handlers/event.ts +99 -0
- package/src/wallet/handlers/index.ts +84 -0
- package/src/wallet/handlers/node.test.ts +304 -0
- package/src/wallet/handlers/node.ts +230 -0
- package/src/wallet/handlers/senders.test.ts +172 -0
- package/src/wallet/handlers/senders.ts +106 -0
- package/src/wallet/handlers/transaction.test.ts +371 -0
- package/src/wallet/handlers/transaction.ts +239 -0
- package/src/wallet/serializers.test.ts +253 -0
- package/src/wallet/serializers.ts +586 -0
- package/typedoc.json +23 -1
- package/dist/aztecRemoteWallet.d.ts +0 -70
- package/dist/aztecRemoteWallet.d.ts.map +0 -1
- package/dist/aztecRemoteWallet.js +0 -335
- package/dist/chainProvider.d.ts +0 -56
- package/dist/chainProvider.d.ts.map +0 -1
- package/dist/chainProvider.js +0 -98
- package/dist/handlers/aztecAccountWallet.d.ts +0 -4
- package/dist/handlers/aztecAccountWallet.d.ts.map +0 -1
- package/dist/handlers/aztecAccountWallet.js +0 -296
- package/dist/handlers/transactions.d.ts +0 -21
- package/dist/handlers/transactions.d.ts.map +0 -1
- package/dist/handlers/transactions.js +0 -98
- package/dist/handlers.d.ts +0 -27
- package/dist/handlers.d.ts.map +0 -1
- package/dist/handlers.js +0 -55
- package/dist/provider.d.ts +0 -105
- package/dist/provider.d.ts.map +0 -1
- package/dist/provider.js +0 -160
- package/dist/serializers/account.d.ts +0 -164
- package/dist/serializers/account.d.ts.map +0 -1
- package/dist/serializers/account.js +0 -244
- package/dist/serializers/contract.d.ts +0 -62
- package/dist/serializers/contract.d.ts.map +0 -1
- package/dist/serializers/contract.js +0 -130
- package/dist/serializers/index.d.ts +0 -21
- package/dist/serializers/index.d.ts.map +0 -1
- package/dist/serializers/index.js +0 -154
- package/dist/serializers/log.d.ts +0 -66
- package/dist/serializers/log.d.ts.map +0 -1
- package/dist/serializers/log.js +0 -222
- package/dist/serializers/note.d.ts +0 -124
- package/dist/serializers/note.d.ts.map +0 -1
- package/dist/serializers/note.js +0 -208
- package/dist/serializers/transaction.d.ts +0 -99
- package/dist/serializers/transaction.d.ts.map +0 -1
- package/dist/serializers/transaction.js +0 -275
- package/dist/wallet.d.ts +0 -62
- package/dist/wallet.d.ts.map +0 -1
- package/dist/wallet.js +0 -77
- package/docs/classes/AztecChainProvider.md +0 -553
- package/docs/classes/AztecChainWallet.md +0 -409
- package/docs/classes/AztecProvider.md +0 -1112
- package/docs/interfaces/AztecWalletBaseMethodMap.md +0 -135
- package/docs/interfaces/AztecWalletEventMap.md +0 -17
- package/docs/type-aliases/AztecChainWalletMiddleware.md +0 -13
- package/docs/type-aliases/AztecWalletContext.md +0 -29
- package/docs/type-aliases/AztecWalletMethodHandler.md +0 -37
- package/docs/type-aliases/AztecWalletMiddleware.md +0 -13
- package/docs/type-aliases/AztecWalletRouterClient.md +0 -13
- package/docs/type-aliases/TransactionFunctionCall.md +0 -33
- package/docs/type-aliases/TransactionParams.md +0 -27
- package/src/aztecRemoteWallet.test.ts +0 -504
- package/src/aztecRemoteWallet.ts +0 -467
- package/src/chainProvider.test.ts +0 -401
- package/src/chainProvider.ts +0 -116
- package/src/handlers/aztecAccountWallet.test.ts +0 -649
- package/src/handlers/aztecAccountWallet.ts +0 -532
- package/src/handlers/transactions.ts +0 -124
- package/src/handlers.test.ts +0 -270
- package/src/handlers.ts +0 -70
- package/src/provider.test.ts +0 -274
- package/src/provider.ts +0 -189
- package/src/serializers/account.test.ts +0 -125
- package/src/serializers/account.ts +0 -301
- package/src/serializers/contract.test.ts +0 -24
- package/src/serializers/contract.ts +0 -183
- package/src/serializers/index.test.ts +0 -136
- package/src/serializers/index.ts +0 -191
- package/src/serializers/log.test.ts +0 -286
- package/src/serializers/log.ts +0 -292
- package/src/serializers/note.test.ts +0 -125
- package/src/serializers/note.ts +0 -250
- package/src/serializers/transaction.test.ts +0 -320
- package/src/serializers/transaction.ts +0 -409
- package/src/wallet.test.ts +0 -275
- package/src/wallet.ts +0 -94
@@ -0,0 +1,705 @@
|
|
1
|
+
import { Contract, DeploySentTx, SentTx } from '@aztec/aztec.js';
|
2
|
+
import { DefaultAccountEntrypoint } from '@aztec/entrypoints/account';
|
3
|
+
import { createLogger } from '@aztec/foundation/log';
|
4
|
+
const logger = createLogger('aztec-rpc-wallet:dapp-wallet');
|
5
|
+
/**
|
6
|
+
* RPC-based AuthWitnessProvider that delegates auth witness creation to the wallet via RPC.
|
7
|
+
* This allows the DefaultAccountEntrypoint to create auth witnesses through the remote wallet.
|
8
|
+
* @internal
|
9
|
+
*/
|
10
|
+
class RPCAuthWitnessProvider {
|
11
|
+
constructor(wallet) {
|
12
|
+
this.wallet = wallet;
|
13
|
+
}
|
14
|
+
/**
|
15
|
+
* Creates an authorization witness for the given message hash.
|
16
|
+
* Delegates the call to the underlying AztecDappWallet instance.
|
17
|
+
* @param messageHash - The message hash to authorize.
|
18
|
+
* @returns A promise that resolves to the AuthWitness.
|
19
|
+
*/
|
20
|
+
async createAuthWit(messageHash) {
|
21
|
+
return this.wallet.createAuthWit(messageHash);
|
22
|
+
}
|
23
|
+
}
|
24
|
+
/**
|
25
|
+
* Aztec DApp Wallet that implements the aztec.js {@link Wallet} interface.
|
26
|
+
* This class provides a client-side representation of an Aztec wallet,
|
27
|
+
* interacting with a remote wallet implementation (typically an {@link AccountWallet}
|
28
|
+
* managed by a {@link JSONRPCNode} created via `createAztecWalletNode`)
|
29
|
+
* through the WalletMesh router system.
|
30
|
+
*
|
31
|
+
* It requires an {@link AztecRouterProvider} instance to handle the
|
32
|
+
* serialization and deserialization of Aztec-specific types (e.g., `AztecAddress`, `Fr`)
|
33
|
+
* when communicating with the router.
|
34
|
+
*
|
35
|
+
* An instance of this wallet should typically be created using the
|
36
|
+
* {@link createAztecWallet} helper function, which also handles initialization.
|
37
|
+
*
|
38
|
+
* @example
|
39
|
+
* ```typescript
|
40
|
+
* // Assuming 'provider' is an initialized AztecRouterProvider
|
41
|
+
* const wallet = await createAztecWallet(provider, 'aztec:mainnet');
|
42
|
+
* const address = wallet.getAddress(); // Synchronous access after initialization
|
43
|
+
* const txHash = await wallet.sendTx(someTx);
|
44
|
+
* ```
|
45
|
+
*/
|
46
|
+
export class AztecDappWallet {
|
47
|
+
/**
|
48
|
+
* Creates an instance of AztecDappWallet.
|
49
|
+
* Note: Prefer using the {@link createAztecWallet} helper function for creating
|
50
|
+
* and initializing wallet instances.
|
51
|
+
*
|
52
|
+
* @param routerProvider - The AztecRouterProvider instance used for communication.
|
53
|
+
* @param chainId - The Aztec chain ID this wallet is associated with.
|
54
|
+
*/
|
55
|
+
constructor(routerProvider, chainId) {
|
56
|
+
this.routerProvider = routerProvider;
|
57
|
+
this.chainId = chainId;
|
58
|
+
}
|
59
|
+
/**
|
60
|
+
* Gets the chain ID for this wallet.
|
61
|
+
* This value is cached during initialization.
|
62
|
+
* @returns The chain ID as an Fr.
|
63
|
+
* @throws If the wallet is not initialized (e.g., if not created via `createAztecWallet`).
|
64
|
+
*/
|
65
|
+
getChainId() {
|
66
|
+
if (!this.cachedChainId) {
|
67
|
+
throw new Error('Chain ID not initialized. Call createAztecWallet() to properly initialize the wallet.');
|
68
|
+
}
|
69
|
+
return this.cachedChainId;
|
70
|
+
}
|
71
|
+
/**
|
72
|
+
* Asynchronously fetches the chain ID from the remote wallet via an RPC call.
|
73
|
+
* This method directly queries the connected wallet node.
|
74
|
+
*
|
75
|
+
* @returns A promise that resolves to the chain ID as an {@link Fr}.
|
76
|
+
* @see {@link AztecWalletMethodMap.aztec_getChainId}
|
77
|
+
*/
|
78
|
+
async getChainIdAsync() {
|
79
|
+
const chainId = await this.routerProvider.call(this.chainId, {
|
80
|
+
method: 'aztec_getChainId',
|
81
|
+
});
|
82
|
+
return chainId;
|
83
|
+
}
|
84
|
+
/**
|
85
|
+
* Gets the version of the wallet (typically PXE version).
|
86
|
+
* This value is cached during initialization.
|
87
|
+
* @returns The wallet version as an Fr.
|
88
|
+
* @throws If the wallet is not initialized.
|
89
|
+
*/
|
90
|
+
getVersion() {
|
91
|
+
if (!this.cachedVersion) {
|
92
|
+
throw new Error('Wallet version not initialized. Call createAztecWallet() to properly initialize the wallet.');
|
93
|
+
}
|
94
|
+
return this.cachedVersion;
|
95
|
+
}
|
96
|
+
/**
|
97
|
+
* Asynchronously fetches the wallet version (typically the PXE version) from the remote wallet via an RPC call.
|
98
|
+
* This method directly queries the connected wallet node.
|
99
|
+
*
|
100
|
+
* @returns A promise that resolves to the wallet version as an {@link Fr}.
|
101
|
+
* @see {@link AztecWalletMethodMap.aztec_getVersion}
|
102
|
+
*/
|
103
|
+
async getVersionAsync() {
|
104
|
+
const version = await this.routerProvider.call(this.chainId, {
|
105
|
+
method: 'aztec_getVersion',
|
106
|
+
});
|
107
|
+
return version;
|
108
|
+
}
|
109
|
+
/**
|
110
|
+
* Gets the primary Aztec address for this wallet.
|
111
|
+
* This value is cached during initialization.
|
112
|
+
* Implements {@link Wallet.getAddress}.
|
113
|
+
* @returns The wallet's AztecAddress.
|
114
|
+
* @throws If the wallet is not initialized.
|
115
|
+
*/
|
116
|
+
getAddress() {
|
117
|
+
if (!this.cachedAddress) {
|
118
|
+
throw new Error('Wallet not initialized. Call createAztecWallet() to properly initialize the wallet.');
|
119
|
+
}
|
120
|
+
return this.cachedAddress;
|
121
|
+
}
|
122
|
+
/**
|
123
|
+
* Asynchronously fetches the primary Aztec address from the remote wallet via an RPC call.
|
124
|
+
* This method directly queries the connected wallet node.
|
125
|
+
*
|
126
|
+
* @returns A promise that resolves to the wallet's {@link AztecAddress}.
|
127
|
+
* @see {@link AztecWalletMethodMap.aztec_getAddress}
|
128
|
+
*/
|
129
|
+
async getAddressAsync() {
|
130
|
+
const address = await this.routerProvider.call(this.chainId, {
|
131
|
+
method: 'aztec_getAddress',
|
132
|
+
});
|
133
|
+
return address;
|
134
|
+
}
|
135
|
+
/**
|
136
|
+
* Gets the complete address (including public keys) for this wallet.
|
137
|
+
* This value is cached during initialization.
|
138
|
+
* Implements {@link Wallet.getCompleteAddress}.
|
139
|
+
* @returns The wallet's CompleteAddress.
|
140
|
+
* @throws If the wallet is not initialized.
|
141
|
+
*/
|
142
|
+
getCompleteAddress() {
|
143
|
+
if (!this.cachedCompleteAddress) {
|
144
|
+
throw new Error('Wallet not initialized. Call createAztecWallet() to properly initialize the wallet.');
|
145
|
+
}
|
146
|
+
return this.cachedCompleteAddress;
|
147
|
+
}
|
148
|
+
/**
|
149
|
+
* Asynchronously fetches the complete address (including public keys) from the remote wallet via an RPC call.
|
150
|
+
* This method directly queries the connected wallet node.
|
151
|
+
*
|
152
|
+
* @returns A promise that resolves to the wallet's {@link CompleteAddress}.
|
153
|
+
* @see {@link AztecWalletMethodMap.aztec_getCompleteAddress}
|
154
|
+
*/
|
155
|
+
async getCompleteAddressAsync() {
|
156
|
+
const result = await this.routerProvider.call(this.chainId, {
|
157
|
+
method: 'aztec_getCompleteAddress',
|
158
|
+
});
|
159
|
+
return result;
|
160
|
+
}
|
161
|
+
/**
|
162
|
+
* Fetches and caches values (address, chain ID, version) that are accessed synchronously.
|
163
|
+
* @internal
|
164
|
+
*/
|
165
|
+
async fetchCachedValues() {
|
166
|
+
const completeAddress = await this.getCompleteAddressAsync();
|
167
|
+
this.cachedCompleteAddress = completeAddress;
|
168
|
+
this.cachedAddress = completeAddress.address;
|
169
|
+
this.cachedChainId = await this.getChainIdAsync();
|
170
|
+
this.cachedVersion = await this.getVersionAsync();
|
171
|
+
}
|
172
|
+
/**
|
173
|
+
* Initializes the wallet instance by fetching and caching necessary values.
|
174
|
+
* This method is called by {@link createAztecWallet}.
|
175
|
+
* @internal
|
176
|
+
*/
|
177
|
+
async initialize() {
|
178
|
+
try {
|
179
|
+
await this.fetchCachedValues();
|
180
|
+
// Initialize the auth provider and entrypoint
|
181
|
+
if (!this.cachedAddress || !this.cachedChainId || !this.cachedVersion) {
|
182
|
+
throw new Error('Failed to initialize wallet: missing required cached values');
|
183
|
+
}
|
184
|
+
this.authProvider = new RPCAuthWitnessProvider(this);
|
185
|
+
this.entrypoint = new DefaultAccountEntrypoint(this.cachedAddress, this.authProvider, this.cachedChainId.toNumber(), this.cachedVersion.toNumber());
|
186
|
+
logger.debug(`AztecDappWallet initialized: ${this.cachedAddress?.toString()}`);
|
187
|
+
}
|
188
|
+
catch (error) {
|
189
|
+
logger.warn('AztecDappWallet.initialize: Failed to initialize wallet addresses:', error);
|
190
|
+
throw error;
|
191
|
+
}
|
192
|
+
}
|
193
|
+
/**
|
194
|
+
* Registers an authorized sender for this account by making an RPC call to the remote wallet.
|
195
|
+
* Implements {@link Wallet.registerSender}.
|
196
|
+
* @param address - The {@link AztecAddress} of the sender to register.
|
197
|
+
* @returns A promise that resolves to the registered sender's {@link AztecAddress}.
|
198
|
+
* @see {@link AztecWalletMethodMap.aztec_registerSender}
|
199
|
+
*/
|
200
|
+
async registerSender(address) {
|
201
|
+
await this.routerProvider.call(this.chainId, {
|
202
|
+
method: 'aztec_registerSender',
|
203
|
+
params: { sender: address },
|
204
|
+
});
|
205
|
+
return address; // Return the registered address
|
206
|
+
}
|
207
|
+
/**
|
208
|
+
* Retrieves the list of registered senders for this account by making an RPC call to the remote wallet.
|
209
|
+
* Implements {@link Wallet.getSenders}.
|
210
|
+
* @returns A promise that resolves to an array of {@link AztecAddress} objects.
|
211
|
+
* @see {@link AztecWalletMethodMap.aztec_getSenders}
|
212
|
+
*/
|
213
|
+
async getSenders() {
|
214
|
+
const result = await this.routerProvider.call(this.chainId, {
|
215
|
+
method: 'aztec_getSenders',
|
216
|
+
});
|
217
|
+
return result;
|
218
|
+
}
|
219
|
+
/**
|
220
|
+
* Removes an authorized sender from this account by making an RPC call to the remote wallet.
|
221
|
+
* Implements {@link Wallet.removeSender}.
|
222
|
+
* @param sender - The {@link AztecAddress} of the sender to remove.
|
223
|
+
* @returns A promise that resolves when the sender is removed by the remote wallet.
|
224
|
+
* @see {@link AztecWalletMethodMap.aztec_removeSender}
|
225
|
+
*/
|
226
|
+
async removeSender(sender) {
|
227
|
+
await this.routerProvider.call(this.chainId, {
|
228
|
+
method: 'aztec_removeSender',
|
229
|
+
params: { sender },
|
230
|
+
});
|
231
|
+
}
|
232
|
+
/**
|
233
|
+
* Registers a deployed contract instance with the remote wallet via an RPC call.
|
234
|
+
* Implements {@link Wallet.registerContract}.
|
235
|
+
* @param contract - An object containing the contract's {@link ContractInstanceWithAddress} and optionally its {@link ContractArtifact}.
|
236
|
+
* @returns A promise that resolves when the contract is registered by the remote wallet.
|
237
|
+
* @see {@link AztecWalletMethodMap.aztec_registerContract}
|
238
|
+
*/
|
239
|
+
async registerContract(contract) {
|
240
|
+
const params = {
|
241
|
+
instance: contract.instance,
|
242
|
+
};
|
243
|
+
if (contract.artifact !== undefined) {
|
244
|
+
params.artifact = contract.artifact;
|
245
|
+
}
|
246
|
+
await this.routerProvider.call(this.chainId, {
|
247
|
+
method: 'aztec_registerContract',
|
248
|
+
params,
|
249
|
+
});
|
250
|
+
}
|
251
|
+
/**
|
252
|
+
* Registers a contract class (artifact/bytecode) with the remote wallet via an RPC call.
|
253
|
+
* Implements {@link Wallet.registerContractClass}.
|
254
|
+
* @param artifact - The {@link ContractArtifact} to register.
|
255
|
+
* @returns A promise that resolves when the class is registered by the remote wallet.
|
256
|
+
* @see {@link AztecWalletMethodMap.aztec_registerContractClass}
|
257
|
+
*/
|
258
|
+
async registerContractClass(artifact) {
|
259
|
+
await this.routerProvider.call(this.chainId, {
|
260
|
+
method: 'aztec_registerContractClass',
|
261
|
+
params: { artifact },
|
262
|
+
});
|
263
|
+
}
|
264
|
+
/**
|
265
|
+
* Retrieves information about the connected Aztec node via an RPC call.
|
266
|
+
* Implements {@link Wallet.getNodeInfo}.
|
267
|
+
* @returns A promise that resolves to the {@link NodeInfo}.
|
268
|
+
* @see {@link AztecWalletMethodMap.aztec_getNodeInfo}
|
269
|
+
*/
|
270
|
+
async getNodeInfo() {
|
271
|
+
const result = await this.routerProvider.call(this.chainId, {
|
272
|
+
method: 'aztec_getNodeInfo',
|
273
|
+
});
|
274
|
+
return result;
|
275
|
+
}
|
276
|
+
/**
|
277
|
+
* Retrieves information about the PXE service via an RPC call.
|
278
|
+
* Implements {@link Wallet.getPXEInfo}.
|
279
|
+
* @returns A promise that resolves to the {@link PXEInfo}.
|
280
|
+
* @see {@link AztecWalletMethodMap.aztec_getPXEInfo}
|
281
|
+
*/
|
282
|
+
async getPXEInfo() {
|
283
|
+
const result = await this.routerProvider.call(this.chainId, {
|
284
|
+
method: 'aztec_getPXEInfo',
|
285
|
+
});
|
286
|
+
return result;
|
287
|
+
}
|
288
|
+
/**
|
289
|
+
* Retrieves a specific L2 block by its number via an RPC call.
|
290
|
+
* Implements {@link Wallet.getBlock}.
|
291
|
+
* @param number - The block number to retrieve.
|
292
|
+
* @returns A promise that resolves to the {@link L2Block} or `undefined` if not found.
|
293
|
+
* @see {@link AztecWalletMethodMap.aztec_getBlock}
|
294
|
+
*/
|
295
|
+
async getBlock(number) {
|
296
|
+
const result = await this.routerProvider.call(this.chainId, {
|
297
|
+
method: 'aztec_getBlock',
|
298
|
+
params: { number },
|
299
|
+
});
|
300
|
+
return result;
|
301
|
+
}
|
302
|
+
/**
|
303
|
+
* Retrieves the current L2 block number via an RPC call.
|
304
|
+
* Implements {@link Wallet.getBlockNumber}.
|
305
|
+
* @returns A promise that resolves to the current block number.
|
306
|
+
* @see {@link AztecWalletMethodMap.aztec_getBlockNumber}
|
307
|
+
*/
|
308
|
+
async getBlockNumber() {
|
309
|
+
const result = await this.routerProvider.call(this.chainId, {
|
310
|
+
method: 'aztec_getBlockNumber',
|
311
|
+
});
|
312
|
+
return result;
|
313
|
+
}
|
314
|
+
/**
|
315
|
+
* Retrieves the current base gas fees on the network via an RPC call.
|
316
|
+
* Implements {@link Wallet.getCurrentBaseFees}.
|
317
|
+
* @returns A promise that resolves to the {@link GasFees}.
|
318
|
+
* @see {@link AztecWalletMethodMap.aztec_getCurrentBaseFees}
|
319
|
+
*/
|
320
|
+
async getCurrentBaseFees() {
|
321
|
+
const result = await this.routerProvider.call(this.chainId, {
|
322
|
+
method: 'aztec_getCurrentBaseFees',
|
323
|
+
});
|
324
|
+
return result;
|
325
|
+
}
|
326
|
+
/**
|
327
|
+
* Creates a transaction execution request using the wallet's entrypoint.
|
328
|
+
* Implements {@link Wallet.createTxExecutionRequest}.
|
329
|
+
* @param exec - The execution payload.
|
330
|
+
* @param fee - Fee payment options.
|
331
|
+
* @param options - Transaction execution options.
|
332
|
+
* @returns A promise that resolves to the TxExecutionRequest.
|
333
|
+
* @throws If the wallet or its entrypoint is not initialized.
|
334
|
+
*/
|
335
|
+
async createTxExecutionRequest(exec, fee, options) {
|
336
|
+
if (!this.entrypoint) {
|
337
|
+
throw new Error('Wallet not initialized. Call createAztecWallet() to properly initialize the wallet.');
|
338
|
+
}
|
339
|
+
// Use the local entrypoint to create the transaction execution request
|
340
|
+
// The entrypoint will use the RPCAuthWitnessProvider to create auth witnesses via RPC
|
341
|
+
return this.entrypoint.createTxExecutionRequest(exec, fee, options);
|
342
|
+
}
|
343
|
+
async createAuthWit(intent) {
|
344
|
+
const result = await this.routerProvider.call(this.chainId, {
|
345
|
+
method: 'aztec_createAuthWit',
|
346
|
+
params: { intent },
|
347
|
+
});
|
348
|
+
return result;
|
349
|
+
}
|
350
|
+
/**
|
351
|
+
* Proves a transaction execution request by making an RPC call to the remote wallet.
|
352
|
+
* Implements {@link Wallet.proveTx}.
|
353
|
+
* @param txRequest - The {@link TxExecutionRequest} to prove.
|
354
|
+
* @param privateExecutionResult - Optional {@link PrivateExecutionResult} from a private execution phase.
|
355
|
+
* @returns A promise that resolves to the {@link TxProvingResult}.
|
356
|
+
* @see {@link AztecWalletMethodMap.aztec_proveTx}
|
357
|
+
*/
|
358
|
+
async proveTx(txRequest, privateExecutionResult) {
|
359
|
+
logger.debug('AztecDappWallet.proveTx: Proving transaction with request:', txRequest);
|
360
|
+
if (privateExecutionResult) {
|
361
|
+
logger.debug('AztecDappWallet.proveTx: Proving transaction with privateExecutionResult:', privateExecutionResult);
|
362
|
+
}
|
363
|
+
else {
|
364
|
+
logger.debug('AztecDappWallet.proveTx: Proving transaction without privateExecutionResult.');
|
365
|
+
}
|
366
|
+
const params = {
|
367
|
+
txRequest,
|
368
|
+
};
|
369
|
+
if (privateExecutionResult) {
|
370
|
+
params.privateExecutionResult = privateExecutionResult;
|
371
|
+
}
|
372
|
+
const result = await this.routerProvider.call(this.chainId, {
|
373
|
+
method: 'aztec_proveTx',
|
374
|
+
params,
|
375
|
+
});
|
376
|
+
return result;
|
377
|
+
}
|
378
|
+
/**
|
379
|
+
* Sends a proven transaction to the network via an RPC call to the remote wallet.
|
380
|
+
* Implements {@link Wallet.sendTx}.
|
381
|
+
* @param tx - The proven {@link Tx} to send.
|
382
|
+
* @returns A promise that resolves to the {@link TxHash}.
|
383
|
+
* @see {@link AztecWalletMethodMap.aztec_sendTx}
|
384
|
+
*/
|
385
|
+
async sendTx(tx) {
|
386
|
+
const result = await this.routerProvider.call(this.chainId, {
|
387
|
+
method: 'aztec_sendTx',
|
388
|
+
params: { tx },
|
389
|
+
});
|
390
|
+
return result;
|
391
|
+
}
|
392
|
+
/**
|
393
|
+
* Retrieves the receipt for a given transaction hash via an RPC call to the remote wallet.
|
394
|
+
* Implements {@link Wallet.getTxReceipt}.
|
395
|
+
* @param txHash - The {@link TxHash} of the transaction.
|
396
|
+
* @returns A promise that resolves to the {@link TxReceipt}.
|
397
|
+
* @see {@link AztecWalletMethodMap.aztec_getTxReceipt}
|
398
|
+
*/
|
399
|
+
async getTxReceipt(txHash) {
|
400
|
+
const result = await this.routerProvider.call(this.chainId, {
|
401
|
+
method: 'aztec_getTxReceipt',
|
402
|
+
params: { txHash },
|
403
|
+
});
|
404
|
+
return result;
|
405
|
+
}
|
406
|
+
/**
|
407
|
+
* Simulates a transaction by making an RPC call to the remote wallet.
|
408
|
+
* Implements {@link Wallet.simulateTx}.
|
409
|
+
* @param txRequest - The {@link TxExecutionRequest} to simulate.
|
410
|
+
* @param simulatePublic - Whether to simulate public parts of the transaction.
|
411
|
+
* @param msgSender - Optional {@link AztecAddress} of the message sender for simulation context.
|
412
|
+
* @param skipTxValidation - Optional flag to skip transaction validation during simulation.
|
413
|
+
* @param skipFeeEnforcement - Optional flag to skip fee enforcement during simulation.
|
414
|
+
* @param scopes - Optional array of {@link AztecAddress} scopes for the simulation.
|
415
|
+
* @returns A promise that resolves to the {@link TxSimulationResult}.
|
416
|
+
* @see {@link AztecWalletMethodMap.aztec_simulateTx}
|
417
|
+
*/
|
418
|
+
async simulateTx(txRequest, simulatePublic, msgSender, skipTxValidation, skipFeeEnforcement, scopes) {
|
419
|
+
const params = {
|
420
|
+
txRequest,
|
421
|
+
};
|
422
|
+
if (simulatePublic !== undefined)
|
423
|
+
params.simulatePublic = simulatePublic;
|
424
|
+
if (msgSender !== undefined)
|
425
|
+
params.msgSender = msgSender;
|
426
|
+
if (skipTxValidation !== undefined)
|
427
|
+
params.skipTxValidation = skipTxValidation;
|
428
|
+
if (skipFeeEnforcement !== undefined)
|
429
|
+
params.skipFeeEnforcement = skipFeeEnforcement;
|
430
|
+
if (scopes !== undefined)
|
431
|
+
params.scopes = scopes;
|
432
|
+
const result = await this.routerProvider.call(this.chainId, {
|
433
|
+
method: 'aztec_simulateTx',
|
434
|
+
params,
|
435
|
+
});
|
436
|
+
return result;
|
437
|
+
}
|
438
|
+
/**
|
439
|
+
* Profiles a transaction for performance analysis by making an RPC call to the remote wallet.
|
440
|
+
* Implements {@link Wallet.profileTx}.
|
441
|
+
* @param txRequest - The {@link TxExecutionRequest} to profile.
|
442
|
+
* @param profileMode - The mode for profiling: 'gates', 'execution-steps', or 'full'.
|
443
|
+
* @param skipProofGeneration - Optional flag to skip proof generation during profiling.
|
444
|
+
* @param msgSender - Optional {@link AztecAddress} of the message sender for profiling context.
|
445
|
+
* @returns A promise that resolves to the {@link TxProfileResult}.
|
446
|
+
* @see {@link AztecWalletMethodMap.aztec_profileTx}
|
447
|
+
*/
|
448
|
+
async profileTx(txRequest, profileMode, skipProofGeneration, msgSender) {
|
449
|
+
const params = {
|
450
|
+
txRequest,
|
451
|
+
};
|
452
|
+
if (profileMode !== undefined)
|
453
|
+
params.profileMode = profileMode;
|
454
|
+
if (skipProofGeneration !== undefined)
|
455
|
+
params.skipProofGeneration = skipProofGeneration;
|
456
|
+
if (msgSender !== undefined)
|
457
|
+
params.msgSender = msgSender;
|
458
|
+
const result = await this.routerProvider.call(this.chainId, {
|
459
|
+
method: 'aztec_profileTx',
|
460
|
+
params,
|
461
|
+
});
|
462
|
+
return result;
|
463
|
+
}
|
464
|
+
/**
|
465
|
+
* Simulates a utility function call (view function) by making an RPC call to the remote wallet.
|
466
|
+
* Implements {@link Wallet.simulateUtility}.
|
467
|
+
* @param functionName - The name of the utility function to call.
|
468
|
+
* @param args - Arguments for the function call.
|
469
|
+
* @param to - The {@link AztecAddress} of the contract or account to call.
|
470
|
+
* @param authWits - Optional array of {@link AuthWitness} for authorization.
|
471
|
+
* @param from - Optional {@link AztecAddress} of the sender.
|
472
|
+
* @returns A promise that resolves to the {@link UtilitySimulationResult}.
|
473
|
+
* @see {@link AztecWalletMethodMap.aztec_simulateUtility}
|
474
|
+
*/
|
475
|
+
async simulateUtility(functionName, args, to, authWits, from) {
|
476
|
+
const params = {
|
477
|
+
functionName,
|
478
|
+
args,
|
479
|
+
to,
|
480
|
+
};
|
481
|
+
if (authWits !== undefined)
|
482
|
+
params.authWits = authWits;
|
483
|
+
if (from !== undefined)
|
484
|
+
params.from = from;
|
485
|
+
const result = await this.routerProvider.call(this.chainId, {
|
486
|
+
method: 'aztec_simulateUtility',
|
487
|
+
params,
|
488
|
+
});
|
489
|
+
return result;
|
490
|
+
}
|
491
|
+
/**
|
492
|
+
* Retrieves private events (encrypted logs) by making an RPC call to the remote wallet.
|
493
|
+
* Implements {@link Wallet.getPrivateEvents}.
|
494
|
+
* @template T - The expected type of the decoded event data.
|
495
|
+
* @param contractAddress - The {@link AztecAddress} of the contract emitting the events.
|
496
|
+
* @param eventMetadata - {@link EventMetadataDefinition} of the event to query.
|
497
|
+
* @param from - Starting block number (inclusive).
|
498
|
+
* @param numBlocks - Number of blocks to query from the `from` block.
|
499
|
+
* @param recipients - Array of {@link AztecAddress} recipients for the events.
|
500
|
+
* @returns A promise that resolves to an array of decoded event data of type `T`.
|
501
|
+
* @see {@link AztecWalletMethodMap.aztec_getPrivateEvents}
|
502
|
+
*/
|
503
|
+
async getPrivateEvents(contractAddress, eventMetadata, from, numBlocks, recipients) {
|
504
|
+
const result = await this.routerProvider.call(this.chainId, {
|
505
|
+
method: 'aztec_getPrivateEvents',
|
506
|
+
params: { contractAddress, eventMetadata, from, numBlocks, recipients },
|
507
|
+
});
|
508
|
+
return result;
|
509
|
+
}
|
510
|
+
/**
|
511
|
+
* Retrieves public events (unencrypted logs) by making an RPC call to the remote wallet.
|
512
|
+
* Implements {@link Wallet.getPublicEvents}.
|
513
|
+
* @template T - The expected type of the decoded event data.
|
514
|
+
* @param eventMetadata - {@link EventMetadataDefinition} of the event to query.
|
515
|
+
* @param from - Starting block number (inclusive).
|
516
|
+
* @param limit - Maximum number of events to return.
|
517
|
+
* @returns A promise that resolves to an array of decoded event data of type `T`.
|
518
|
+
* @see {@link AztecWalletMethodMap.aztec_getPublicEvents}
|
519
|
+
*/
|
520
|
+
async getPublicEvents(eventMetadata, from, limit) {
|
521
|
+
const result = await this.routerProvider.call(this.chainId, {
|
522
|
+
method: 'aztec_getPublicEvents',
|
523
|
+
params: { eventMetadata, from, limit },
|
524
|
+
});
|
525
|
+
return result;
|
526
|
+
}
|
527
|
+
/**
|
528
|
+
* Retrieves metadata for a specific contract by making an RPC call to the remote wallet.
|
529
|
+
* Implements {@link Wallet.getContractMetadata}.
|
530
|
+
* @param address - The {@link AztecAddress} of the contract.
|
531
|
+
* @returns A promise that resolves to the {@link ContractMetadata}.
|
532
|
+
* @see {@link AztecWalletMethodMap.aztec_getContractMetadata}
|
533
|
+
*/
|
534
|
+
async getContractMetadata(address) {
|
535
|
+
const result = await this.routerProvider.call(this.chainId, {
|
536
|
+
method: 'aztec_getContractMetadata',
|
537
|
+
params: { address },
|
538
|
+
});
|
539
|
+
return result;
|
540
|
+
}
|
541
|
+
/**
|
542
|
+
* Retrieves metadata for a contract class by making an RPC call to the remote wallet.
|
543
|
+
* Implements {@link Wallet.getContractClassMetadata}.
|
544
|
+
* @param id - The {@link Fr} ID of the contract class.
|
545
|
+
* @param includeArtifact - Optional flag to include the {@link ContractArtifact} in the metadata.
|
546
|
+
* @returns A promise that resolves to the {@link ContractClassMetadata}.
|
547
|
+
* @see {@link AztecWalletMethodMap.aztec_getContractClassMetadata}
|
548
|
+
*/
|
549
|
+
async getContractClassMetadata(id, includeArtifact) {
|
550
|
+
const params = { id };
|
551
|
+
if (includeArtifact !== undefined) {
|
552
|
+
params.includeArtifact = includeArtifact;
|
553
|
+
}
|
554
|
+
const result = await this.routerProvider.call(this.chainId, {
|
555
|
+
method: 'aztec_getContractClassMetadata',
|
556
|
+
params,
|
557
|
+
});
|
558
|
+
return result;
|
559
|
+
}
|
560
|
+
/**
|
561
|
+
* Updates a contract's artifact by re-registering its class with the remote wallet via an RPC call.
|
562
|
+
* Implements {@link Wallet.updateContract}.
|
563
|
+
* @param _contractAddress - The {@link AztecAddress} of the contract to update (often unused if primarily updating the class).
|
564
|
+
* @param artifact - The new {@link ContractArtifact}.
|
565
|
+
* @returns A promise that resolves when the update is complete on the remote wallet.
|
566
|
+
* @see {@link AztecWalletMethodMap.aztec_registerContractClass} (as this is what it typically calls)
|
567
|
+
*/
|
568
|
+
async updateContract(_contractAddress, artifact) {
|
569
|
+
await this.routerProvider.call(this.chainId, {
|
570
|
+
method: 'aztec_registerContractClass',
|
571
|
+
params: { artifact },
|
572
|
+
});
|
573
|
+
}
|
574
|
+
/**
|
575
|
+
* Retrieves a list of all contracts registered with the remote wallet via an RPC call.
|
576
|
+
* Implements {@link Wallet.getContracts}.
|
577
|
+
* @returns A promise that resolves to an array of {@link AztecAddress} objects for the contracts.
|
578
|
+
* @see {@link AztecWalletMethodMap.aztec_getContracts}
|
579
|
+
*/
|
580
|
+
async getContracts() {
|
581
|
+
const result = await this.routerProvider.call(this.chainId, {
|
582
|
+
method: 'aztec_getContracts',
|
583
|
+
});
|
584
|
+
return result;
|
585
|
+
}
|
586
|
+
/**
|
587
|
+
* Executes a transaction based on a {@link ContractFunctionInteraction}.
|
588
|
+
* This WalletMesh-specific helper method simplifies sending a transaction by deriving
|
589
|
+
* the necessary {@link ExecutionPayload} from the interaction and making an RPC call
|
590
|
+
* to the `aztec_wmExecuteTx` method on the remote wallet.
|
591
|
+
* The remote wallet is expected to handle fee configuration, proof generation, and submission.
|
592
|
+
*
|
593
|
+
* @param interaction - The {@link ContractFunctionInteraction} representing the desired contract call.
|
594
|
+
* @returns A {@link SentTx} object that can be used to track the transaction.
|
595
|
+
* @see {@link AztecWalletMethodMap.aztec_wmExecuteTx}
|
596
|
+
*/
|
597
|
+
async wmExecuteTx(interaction) {
|
598
|
+
// Extract the execution payload which contains the encoded function call
|
599
|
+
const executionPayload = await interaction.request();
|
600
|
+
// Send the high-level interaction details to the remote wallet
|
601
|
+
// Note: opts is not sent - the server-side wallet will handle fee configuration
|
602
|
+
const result = await this.routerProvider.call(this.chainId, {
|
603
|
+
method: 'aztec_wmExecuteTx',
|
604
|
+
params: {
|
605
|
+
executionPayload,
|
606
|
+
},
|
607
|
+
});
|
608
|
+
const txHashPromise = Promise.resolve(result);
|
609
|
+
return new SentTx(this, txHashPromise);
|
610
|
+
}
|
611
|
+
/**
|
612
|
+
* Simulates a transaction based on a {@link ContractFunctionInteraction}.
|
613
|
+
* This WalletMesh-specific helper method simplifies simulating a transaction by deriving
|
614
|
+
* the necessary {@link ExecutionPayload} from the interaction and making an RPC call
|
615
|
+
* to the `aztec_wmSimulateTx` method on the remote wallet.
|
616
|
+
*
|
617
|
+
* @param interaction - The {@link ContractFunctionInteraction} representing the desired contract call.
|
618
|
+
* @returns A promise that resolves to the {@link TxSimulationResult}.
|
619
|
+
* @remarks TODO(twt): This should return a more useful result, not the raw TxSimulationResult.
|
620
|
+
* Copying the logic from `aztec.js/src/contract/contract_function_interaction.ts`
|
621
|
+
* could work if we can get the Function ABI or maybe have `aztec_wmSimulateTx` return hints
|
622
|
+
* about how to interpret the result.
|
623
|
+
* @see {@link AztecWalletMethodMap.aztec_wmSimulateTx}
|
624
|
+
*/
|
625
|
+
async wmSimulateTx(interaction) {
|
626
|
+
// Extract the execution payload which contains the encoded function call
|
627
|
+
const executionPayload = await interaction.request();
|
628
|
+
// Send the high-level interaction details to the remote wallet for simulation
|
629
|
+
const result = (await this.routerProvider.call(this.chainId, {
|
630
|
+
method: 'aztec_wmSimulateTx',
|
631
|
+
params: {
|
632
|
+
executionPayload,
|
633
|
+
},
|
634
|
+
}));
|
635
|
+
// TODO(twt): This should return a more useful result, not the raw TxSimulationResult
|
636
|
+
// Copying the logic from https://github.com/AztecProtocol/aztec-packages/blob/next/yarn-project/aztec.js/src/contract/contract_function_interaction.ts
|
637
|
+
// could work if we can get the Function ABI or maybe have aztec_wmSimulateTx return hints about how to interpret the result.
|
638
|
+
return result;
|
639
|
+
}
|
640
|
+
/**
|
641
|
+
* Deploys a contract using its artifact and constructor arguments.
|
642
|
+
* This WalletMesh-specific helper method makes an RPC call to the `aztec_wmDeployContract`
|
643
|
+
* method on the remote wallet. The remote wallet handles the deployment process.
|
644
|
+
*
|
645
|
+
* @param artifact - The {@link ContractArtifact} of the contract to deploy.
|
646
|
+
* @param args - An array of arguments for the contract's constructor.
|
647
|
+
* @param constructorName - Optional name of the constructor function if the artifact has multiple.
|
648
|
+
* @returns A {@link DeploySentTx} object that can be used to track the deployment transaction
|
649
|
+
* and get the deployed contract instance.
|
650
|
+
* @see {@link AztecWalletMethodMap.aztec_wmDeployContract}
|
651
|
+
*/
|
652
|
+
async deployContract(artifact, args, constructorName) {
|
653
|
+
// Send the deployment request to the remote wallet
|
654
|
+
const result = (await this.routerProvider.call(this.chainId, {
|
655
|
+
method: 'aztec_wmDeployContract',
|
656
|
+
params: {
|
657
|
+
artifact,
|
658
|
+
args,
|
659
|
+
constructorName,
|
660
|
+
},
|
661
|
+
}));
|
662
|
+
// Create a promise that resolves with the transaction hash
|
663
|
+
const txHashPromise = Promise.resolve(result.txHash);
|
664
|
+
// Create the post-deploy constructor function
|
665
|
+
const postDeployCtor = async (address, wallet) => {
|
666
|
+
return Contract.at(address, artifact, wallet);
|
667
|
+
};
|
668
|
+
// Create the instance getter function
|
669
|
+
// This will compute the contract address from the artifact and deployment args
|
670
|
+
const instanceGetter = async () => {
|
671
|
+
// Use the deployed contract address returned by the server
|
672
|
+
// Only the address is used from this result by DeploySentTx
|
673
|
+
return {
|
674
|
+
address: result.contractAddress,
|
675
|
+
};
|
676
|
+
};
|
677
|
+
// Return a DeploySentTx instance
|
678
|
+
return new DeploySentTx(this, txHashPromise, postDeployCtor, instanceGetter);
|
679
|
+
}
|
680
|
+
}
|
681
|
+
/**
|
682
|
+
* Helper function to create and initialize an AztecDappWallet instance.
|
683
|
+
* This is the recommended way to instantiate an Aztec wallet for dApp use,
|
684
|
+
* as it ensures all necessary asynchronous setup (like fetching initial
|
685
|
+
* address and chain ID) is completed.
|
686
|
+
*
|
687
|
+
* @param provider - An {@link AztecRouterProvider} instance, which handles Aztec-specific type serialization.
|
688
|
+
* @param chainId - The Aztec chain ID (e.g., 'aztec:mainnet', 'aztec:31337') for the wallet. Defaults to 'aztec:mainnet'.
|
689
|
+
* @returns A promise that resolves to a fully initialized {@link AztecDappWallet} instance.
|
690
|
+
*
|
691
|
+
* @example
|
692
|
+
* ```typescript
|
693
|
+
* const dAppTransport = { send: ..., onMessage: ... }; // User-defined transport
|
694
|
+
* const provider = new AztecRouterProvider(dAppTransport);
|
695
|
+
* await provider.connect({ 'aztec:mainnet': ['aztec_getAddress'] }); // Connect first
|
696
|
+
* const wallet = await createAztecWallet(provider, 'aztec:mainnet');
|
697
|
+
* const address = wallet.getAddress(); // Now usable
|
698
|
+
* ```
|
699
|
+
*/
|
700
|
+
export async function createAztecWallet(provider, chainId = 'aztec:mainnet') {
|
701
|
+
const wallet = new AztecDappWallet(provider, chainId);
|
702
|
+
await wallet.initialize();
|
703
|
+
return wallet;
|
704
|
+
}
|
705
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXp0ZWMtZGFwcC13YWxsZXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY2xpZW50L2F6dGVjLWRhcHAtd2FsbGV0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWVBLE9BQU8sRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBbUJqRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFLckQsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLDhCQUE4QixDQUFDLENBQUM7QUFFNUQ7Ozs7R0FJRztBQUNILE1BQU0sc0JBQXNCO0lBQzFCLFlBQW9CLE1BQXVCO1FBQXZCLFdBQU0sR0FBTixNQUFNLENBQWlCO0lBQUcsQ0FBQztJQUUvQzs7Ozs7T0FLRztJQUNILEtBQUssQ0FBQyxhQUFhLENBQUMsV0FBd0I7UUFDMUMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNoRCxDQUFDO0NBQ0Y7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBcUJHO0FBQ0gsTUFBTSxPQUFPLGVBQWU7SUFRMUI7Ozs7Ozs7T0FPRztJQUNILFlBQ1UsY0FBbUMsRUFDbkMsT0FBcUI7UUFEckIsbUJBQWMsR0FBZCxjQUFjLENBQXFCO1FBQ25DLFlBQU8sR0FBUCxPQUFPLENBQWM7SUFDNUIsQ0FBQztJQUVKOzs7OztPQUtHO0lBQ0gsVUFBVTtRQUNSLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDeEIsTUFBTSxJQUFJLEtBQUssQ0FDYix1RkFBdUYsQ0FDeEYsQ0FBQztRQUNKLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDNUIsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILEtBQUssQ0FBQyxlQUFlO1FBQ25CLE1B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
|