@walletmesh/aztec-rpc-wallet 0.1.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.
Files changed (108) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/LICENSE +201 -0
  3. package/README.md +260 -0
  4. package/dist/.tsbuildinfo +1 -0
  5. package/dist/aztecRemoteWallet.d.ts +73 -0
  6. package/dist/aztecRemoteWallet.d.ts.map +1 -0
  7. package/dist/aztecRemoteWallet.js +354 -0
  8. package/dist/chainProvider.d.ts +56 -0
  9. package/dist/chainProvider.d.ts.map +1 -0
  10. package/dist/chainProvider.js +98 -0
  11. package/dist/contractArtifactCache.d.ts +50 -0
  12. package/dist/contractArtifactCache.d.ts.map +1 -0
  13. package/dist/contractArtifactCache.js +66 -0
  14. package/dist/errors.d.ts +50 -0
  15. package/dist/errors.d.ts.map +1 -0
  16. package/dist/errors.js +62 -0
  17. package/dist/handlers/aztecAccountWallet.d.ts +4 -0
  18. package/dist/handlers/aztecAccountWallet.d.ts.map +1 -0
  19. package/dist/handlers/aztecAccountWallet.js +329 -0
  20. package/dist/handlers/transactions.d.ts +21 -0
  21. package/dist/handlers/transactions.d.ts.map +1 -0
  22. package/dist/handlers/transactions.js +90 -0
  23. package/dist/handlers.d.ts +27 -0
  24. package/dist/handlers.d.ts.map +1 -0
  25. package/dist/handlers.js +55 -0
  26. package/dist/index.d.ts +58 -0
  27. package/dist/index.d.ts.map +1 -0
  28. package/dist/index.js +33 -0
  29. package/dist/provider.d.ts +105 -0
  30. package/dist/provider.d.ts.map +1 -0
  31. package/dist/provider.js +160 -0
  32. package/dist/serializers/account.d.ts +167 -0
  33. package/dist/serializers/account.d.ts.map +1 -0
  34. package/dist/serializers/account.js +245 -0
  35. package/dist/serializers/contract-utils.d.ts +40 -0
  36. package/dist/serializers/contract-utils.d.ts.map +1 -0
  37. package/dist/serializers/contract-utils.js +102 -0
  38. package/dist/serializers/contract.d.ts +168 -0
  39. package/dist/serializers/contract.d.ts.map +1 -0
  40. package/dist/serializers/contract.js +268 -0
  41. package/dist/serializers/core.d.ts +110 -0
  42. package/dist/serializers/core.d.ts.map +1 -0
  43. package/dist/serializers/core.js +130 -0
  44. package/dist/serializers/index.d.ts +28 -0
  45. package/dist/serializers/index.d.ts.map +1 -0
  46. package/dist/serializers/index.js +159 -0
  47. package/dist/serializers/log.d.ts +113 -0
  48. package/dist/serializers/log.d.ts.map +1 -0
  49. package/dist/serializers/log.js +231 -0
  50. package/dist/serializers/note.d.ts +127 -0
  51. package/dist/serializers/note.d.ts.map +1 -0
  52. package/dist/serializers/note.js +182 -0
  53. package/dist/serializers/transaction-utils.d.ts +107 -0
  54. package/dist/serializers/transaction-utils.d.ts.map +1 -0
  55. package/dist/serializers/transaction-utils.js +130 -0
  56. package/dist/serializers/transaction.d.ts +103 -0
  57. package/dist/serializers/transaction.d.ts.map +1 -0
  58. package/dist/serializers/transaction.js +238 -0
  59. package/dist/serializers/types.d.ts +49 -0
  60. package/dist/serializers/types.d.ts.map +1 -0
  61. package/dist/serializers/types.js +22 -0
  62. package/dist/types.d.ts +391 -0
  63. package/dist/types.d.ts.map +1 -0
  64. package/dist/types.js +8 -0
  65. package/dist/wallet.d.ts +62 -0
  66. package/dist/wallet.d.ts.map +1 -0
  67. package/dist/wallet.js +77 -0
  68. package/package.json +44 -0
  69. package/src/aztecRemoteWallet.test.ts +542 -0
  70. package/src/aztecRemoteWallet.ts +484 -0
  71. package/src/chainProvider.test.ts +322 -0
  72. package/src/chainProvider.ts +122 -0
  73. package/src/contractArtifactCache.test.ts +126 -0
  74. package/src/contractArtifactCache.ts +75 -0
  75. package/src/errors.ts +71 -0
  76. package/src/handlers/aztecAccountWallet.test.ts +720 -0
  77. package/src/handlers/aztecAccountWallet.ts +593 -0
  78. package/src/handlers/transactions.ts +110 -0
  79. package/src/handlers.test.ts +270 -0
  80. package/src/handlers.ts +70 -0
  81. package/src/index.test.ts +23 -0
  82. package/src/index.ts +64 -0
  83. package/src/provider.test.ts +276 -0
  84. package/src/provider.ts +189 -0
  85. package/src/serializers/account.test.ts +125 -0
  86. package/src/serializers/account.ts +319 -0
  87. package/src/serializers/contract-utils.ts +104 -0
  88. package/src/serializers/contract.test.ts +162 -0
  89. package/src/serializers/contract.ts +350 -0
  90. package/src/serializers/core.test.ts +56 -0
  91. package/src/serializers/core.ts +141 -0
  92. package/src/serializers/index.test.ts +122 -0
  93. package/src/serializers/index.ts +213 -0
  94. package/src/serializers/log.test.ts +119 -0
  95. package/src/serializers/log.ts +283 -0
  96. package/src/serializers/note.test.ts +100 -0
  97. package/src/serializers/note.ts +227 -0
  98. package/src/serializers/transaction-utils.ts +237 -0
  99. package/src/serializers/transaction.test.ts +153 -0
  100. package/src/serializers/transaction.ts +342 -0
  101. package/src/serializers/types.ts +58 -0
  102. package/src/types.ts +295 -0
  103. package/src/wallet.test.ts +275 -0
  104. package/src/wallet.ts +94 -0
  105. package/tsconfig.build.json +6 -0
  106. package/tsconfig.json +11 -0
  107. package/typedoc.json +15 -0
  108. package/vitest.config.ts +10 -0
@@ -0,0 +1,593 @@
1
+ import type { AccountWallet } from '@aztec/aztec.js';
2
+ import { AztecWalletError } from '../errors.js';
3
+ import type { AztecWalletContext, AztecWalletMethodMap } from '../types.js';
4
+
5
+ export const AZTEC_WALLET_METHODS: (keyof AztecWalletMethodMap)[] = [
6
+ 'aztec_getBlock',
7
+ 'aztec_getBlockNumber',
8
+ 'aztec_getChainId',
9
+ 'aztec_getVersion',
10
+ 'aztec_getNodeInfo',
11
+ 'aztec_getCurrentBaseFees',
12
+ 'aztec_setScopes',
13
+ 'aztec_getScopes',
14
+ 'aztec_isL1ToL2MessageSynced',
15
+ 'aztec_getL1ToL2MembershipWitness',
16
+ 'aztec_addCapsule',
17
+ 'aztec_getAddress',
18
+ 'aztec_getCompleteAddress',
19
+ 'aztec_registerAccount',
20
+ 'aztec_getRegisteredAccounts',
21
+ 'aztec_addAuthWitness',
22
+ 'aztec_getAuthWitness',
23
+ 'aztec_createAuthWit',
24
+ 'aztec_registerSender',
25
+ 'aztec_getSenders',
26
+ 'aztec_removeSender',
27
+ 'aztec_getContracts',
28
+ 'aztec_getContractInstance',
29
+ 'aztec_getContractClass',
30
+ 'aztec_getContractArtifact',
31
+ 'aztec_isContractClassPubliclyRegistered',
32
+ 'aztec_isContractPubliclyDeployed',
33
+ 'aztec_isContractInitialized',
34
+ 'aztec_registerContract',
35
+ 'aztec_registerContractClass',
36
+ 'aztec_getPublicStorageAt',
37
+ 'aztec_createTxExecutionRequest',
38
+ 'aztec_proveTx',
39
+ 'aztec_sendTx',
40
+ 'aztec_getTxEffect',
41
+ 'aztec_getTxReceipt',
42
+ 'aztec_simulateTx',
43
+ 'aztec_simulateUnconstrained',
44
+ 'aztec_getIncomingNotes',
45
+ 'aztec_addNote',
46
+ 'aztec_addNullifiedNote',
47
+ 'aztec_getUnencryptedLogs',
48
+ 'aztec_getContractClassLogs',
49
+ 'aztec_getEncryptedEvents',
50
+ 'aztec_getUnencryptedEvents',
51
+ ] as const;
52
+
53
+ // Handler functions with proper type safety
54
+ async function handleGetBlock(
55
+ wallet: AccountWallet,
56
+ params: AztecWalletMethodMap['aztec_getBlock']['params'],
57
+ ): Promise<AztecWalletMethodMap['aztec_getBlock']['result']> {
58
+ const block = await wallet.getBlock(params.number);
59
+ if (!block) throw new AztecWalletError('blockNotFound', 'aztec_getBlock');
60
+ return block;
61
+ }
62
+
63
+ async function handleGetBlockNumber(
64
+ wallet: AccountWallet,
65
+ ): Promise<AztecWalletMethodMap['aztec_getBlockNumber']['result']> {
66
+ return await wallet.getBlockNumber();
67
+ }
68
+
69
+ async function handleGetChainId(
70
+ wallet: AccountWallet,
71
+ ): Promise<AztecWalletMethodMap['aztec_getChainId']['result']> {
72
+ return Number(wallet.getChainId());
73
+ }
74
+
75
+ async function handleGetVersion(
76
+ wallet: AccountWallet,
77
+ ): Promise<AztecWalletMethodMap['aztec_getVersion']['result']> {
78
+ return Number(wallet.getVersion());
79
+ }
80
+
81
+ async function handleGetNodeInfo(
82
+ wallet: AccountWallet,
83
+ ): Promise<AztecWalletMethodMap['aztec_getNodeInfo']['result']> {
84
+ return await wallet.getNodeInfo();
85
+ }
86
+
87
+ async function handleGetCurrentBaseFees(
88
+ wallet: AccountWallet,
89
+ ): Promise<AztecWalletMethodMap['aztec_getCurrentBaseFees']['result']> {
90
+ return await wallet.getCurrentBaseFees();
91
+ }
92
+
93
+ async function handleSetScopes(
94
+ wallet: AccountWallet,
95
+ params: AztecWalletMethodMap['aztec_setScopes']['params'],
96
+ ): Promise<AztecWalletMethodMap['aztec_setScopes']['result']> {
97
+ await wallet.setScopes(params.scopes);
98
+ return true;
99
+ }
100
+
101
+ async function handleGetScopes(
102
+ wallet: AccountWallet,
103
+ ): Promise<AztecWalletMethodMap['aztec_getScopes']['result']> {
104
+ const scopes = await wallet.getScopes();
105
+ return scopes ?? [];
106
+ }
107
+
108
+ async function handleAddCapsule(
109
+ wallet: AccountWallet,
110
+ params: AztecWalletMethodMap['aztec_addCapsule']['params'],
111
+ ): Promise<AztecWalletMethodMap['aztec_addCapsule']['result']> {
112
+ await wallet.addCapsule(params.capsule);
113
+ return true;
114
+ }
115
+
116
+ async function handleGetAddress(
117
+ wallet: AccountWallet,
118
+ ): Promise<AztecWalletMethodMap['aztec_getAddress']['result']> {
119
+ return wallet.getAddress();
120
+ }
121
+
122
+ async function handleGetCompleteAddress(
123
+ wallet: AccountWallet,
124
+ ): Promise<AztecWalletMethodMap['aztec_getCompleteAddress']['result']> {
125
+ return wallet.getCompleteAddress();
126
+ }
127
+
128
+ async function handleRegisterAccount(
129
+ wallet: AccountWallet,
130
+ params: AztecWalletMethodMap['aztec_registerAccount']['params'],
131
+ ): Promise<AztecWalletMethodMap['aztec_registerAccount']['result']> {
132
+ return await wallet.registerAccount(params.secretKey, params.partialAddress);
133
+ }
134
+
135
+ async function handleGetRegisteredAccounts(
136
+ wallet: AccountWallet,
137
+ ): Promise<AztecWalletMethodMap['aztec_getRegisteredAccounts']['result']> {
138
+ return await wallet.getRegisteredAccounts();
139
+ }
140
+
141
+ async function handleRegisterSender(
142
+ wallet: AccountWallet,
143
+ params: AztecWalletMethodMap['aztec_registerSender']['params'],
144
+ ): Promise<AztecWalletMethodMap['aztec_registerSender']['result']> {
145
+ return await wallet.registerSender(params.sender);
146
+ }
147
+
148
+ async function handleGetSenders(
149
+ wallet: AccountWallet,
150
+ ): Promise<AztecWalletMethodMap['aztec_getSenders']['result']> {
151
+ return await wallet.getSenders();
152
+ }
153
+
154
+ async function handleRemoveSender(
155
+ wallet: AccountWallet,
156
+ params: AztecWalletMethodMap['aztec_removeSender']['params'],
157
+ ): Promise<AztecWalletMethodMap['aztec_removeSender']['result']> {
158
+ await wallet.removeSender(params.sender);
159
+ return true;
160
+ }
161
+
162
+ async function handleAddAuthWitness(
163
+ wallet: AccountWallet,
164
+ params: AztecWalletMethodMap['aztec_addAuthWitness']['params'],
165
+ ): Promise<AztecWalletMethodMap['aztec_addAuthWitness']['result']> {
166
+ await wallet.addAuthWitness(params.authWitness);
167
+ return true;
168
+ }
169
+
170
+ async function handleGetAuthWitness(
171
+ wallet: AccountWallet,
172
+ params: AztecWalletMethodMap['aztec_getAuthWitness']['params'],
173
+ ): Promise<AztecWalletMethodMap['aztec_getAuthWitness']['result']> {
174
+ const witness = await wallet.getAuthWitness(params.messageHash);
175
+ if (!witness) throw new AztecWalletError('authWitnessNotFound', 'aztec_getAuthWitness');
176
+ return witness;
177
+ }
178
+
179
+ async function handleCreateAuthWit(
180
+ wallet: AccountWallet,
181
+ params: AztecWalletMethodMap['aztec_createAuthWit']['params'],
182
+ ): Promise<AztecWalletMethodMap['aztec_createAuthWit']['result']> {
183
+ return await wallet.createAuthWit(params.intent);
184
+ }
185
+
186
+ async function handleL1ToL2MessageSynced(
187
+ wallet: AccountWallet,
188
+ params: AztecWalletMethodMap['aztec_isL1ToL2MessageSynced']['params'],
189
+ ): Promise<AztecWalletMethodMap['aztec_isL1ToL2MessageSynced']['result']> {
190
+ return await wallet.isL1ToL2MessageSynced(params.l1ToL2Message);
191
+ }
192
+
193
+ async function handleGetContracts(
194
+ wallet: AccountWallet,
195
+ ): Promise<AztecWalletMethodMap['aztec_getContracts']['result']> {
196
+ return await wallet.getContracts();
197
+ }
198
+
199
+ async function handleGetContractInstance(
200
+ wallet: AccountWallet,
201
+ params: AztecWalletMethodMap['aztec_getContractInstance']['params'],
202
+ ): Promise<AztecWalletMethodMap['aztec_getContractInstance']['result']> {
203
+ const instance = await wallet.getContractInstance(params.address);
204
+ if (!instance) throw new AztecWalletError('contractInstanceNotRegistered', 'aztec_getContractInstance');
205
+ return instance;
206
+ }
207
+
208
+ async function handleGetContractClass(
209
+ wallet: AccountWallet,
210
+ params: AztecWalletMethodMap['aztec_getContractClass']['params'],
211
+ ): Promise<AztecWalletMethodMap['aztec_getContractClass']['result']> {
212
+ const contractClass = await wallet.getContractClass(params.id);
213
+ if (!contractClass) throw new AztecWalletError('contractClassNotRegistered', 'aztec_getContractClass');
214
+ return contractClass;
215
+ }
216
+
217
+ async function handleGetContractArtifact(
218
+ wallet: AccountWallet,
219
+ params: AztecWalletMethodMap['aztec_getContractArtifact']['params'],
220
+ ): Promise<AztecWalletMethodMap['aztec_getContractArtifact']['result']> {
221
+ const artifact = await wallet.getContractArtifact(params.id);
222
+ if (!artifact) throw new AztecWalletError('contractClassNotRegistered', 'aztec_getContractArtifact');
223
+ return artifact;
224
+ }
225
+
226
+ async function handleIsContractClassPubliclyRegistered(
227
+ wallet: AccountWallet,
228
+ params: AztecWalletMethodMap['aztec_isContractClassPubliclyRegistered']['params'],
229
+ ): Promise<AztecWalletMethodMap['aztec_isContractClassPubliclyRegistered']['result']> {
230
+ return await wallet.isContractClassPubliclyRegistered(params.id);
231
+ }
232
+
233
+ async function handleIsContractPubliclyDeployed(
234
+ wallet: AccountWallet,
235
+ params: AztecWalletMethodMap['aztec_isContractPubliclyDeployed']['params'],
236
+ ): Promise<AztecWalletMethodMap['aztec_isContractPubliclyDeployed']['result']> {
237
+ return await wallet.isContractPubliclyDeployed(params.address);
238
+ }
239
+
240
+ async function handleIsContractInitialized(
241
+ wallet: AccountWallet,
242
+ params: AztecWalletMethodMap['aztec_isContractInitialized']['params'],
243
+ ): Promise<AztecWalletMethodMap['aztec_isContractInitialized']['result']> {
244
+ return await wallet.isContractInitialized(params.address);
245
+ }
246
+
247
+ async function handleRegisterContract(
248
+ wallet: AccountWallet,
249
+ params: AztecWalletMethodMap['aztec_registerContract']['params'],
250
+ ): Promise<AztecWalletMethodMap['aztec_registerContract']['result']> {
251
+ const { instance, artifact } = params;
252
+ await wallet.registerContract({ instance, artifact });
253
+ return true;
254
+ }
255
+
256
+ async function handleRegisterContractClass(
257
+ wallet: AccountWallet,
258
+ params: AztecWalletMethodMap['aztec_registerContractClass']['params'],
259
+ ): Promise<AztecWalletMethodMap['aztec_registerContractClass']['result']> {
260
+ const { artifact } = params;
261
+ await wallet.registerContractClass(artifact);
262
+ return true;
263
+ }
264
+
265
+ async function handleGetTxReceipt(
266
+ wallet: AccountWallet,
267
+ params: AztecWalletMethodMap['aztec_getTxReceipt']['params'],
268
+ ): Promise<AztecWalletMethodMap['aztec_getTxReceipt']['result']> {
269
+ const receipt = await wallet.getTxReceipt(params.txHash);
270
+ if (!receipt) throw new AztecWalletError('transactionNotFound', 'aztec_getTxReceipt');
271
+ return receipt;
272
+ }
273
+
274
+ async function handleSimulateTx(
275
+ wallet: AccountWallet,
276
+ params: AztecWalletMethodMap['aztec_simulateTx']['params'],
277
+ ): Promise<AztecWalletMethodMap['aztec_simulateTx']['result']> {
278
+ const { txRequest, simulatePublic, msgSender, skipTxValidation, enforceFeePayment, profile } = params;
279
+ return await wallet.simulateTx(
280
+ txRequest,
281
+ simulatePublic,
282
+ msgSender,
283
+ skipTxValidation,
284
+ enforceFeePayment,
285
+ profile,
286
+ );
287
+ }
288
+
289
+ async function handleSimulateUnconstrained(
290
+ wallet: AccountWallet,
291
+ params: AztecWalletMethodMap['aztec_simulateUnconstrained']['params'],
292
+ ): Promise<AztecWalletMethodMap['aztec_simulateUnconstrained']['result']> {
293
+ const { functionName, args, to, from } = params;
294
+ return await wallet.simulateUnconstrained(functionName, args, to, from);
295
+ }
296
+
297
+ async function handleCreateTxExecutionRequest(
298
+ wallet: AccountWallet,
299
+ params: AztecWalletMethodMap['aztec_createTxExecutionRequest']['params'],
300
+ ): Promise<AztecWalletMethodMap['aztec_createTxExecutionRequest']['result']> {
301
+ return await wallet.createTxExecutionRequest(params.exec);
302
+ }
303
+
304
+ async function handleProveTx(
305
+ wallet: AccountWallet,
306
+ params: AztecWalletMethodMap['aztec_proveTx']['params'],
307
+ ): Promise<AztecWalletMethodMap['aztec_proveTx']['result']> {
308
+ return await wallet.proveTx(params.txRequest, params.privateExecutionResult);
309
+ }
310
+
311
+ async function handleSendTx(
312
+ wallet: AccountWallet,
313
+ params: AztecWalletMethodMap['aztec_sendTx']['params'],
314
+ ): Promise<AztecWalletMethodMap['aztec_sendTx']['result']> {
315
+ return await wallet.sendTx(params.tx);
316
+ }
317
+
318
+ async function handleGetTxEffect(
319
+ wallet: AccountWallet,
320
+ params: AztecWalletMethodMap['aztec_getTxEffect']['params'],
321
+ ): Promise<AztecWalletMethodMap['aztec_getTxEffect']['result']> {
322
+ const effect = await wallet.getTxEffect(params.txHash);
323
+ if (!effect) throw new AztecWalletError('transactionNotFound', 'aztec_getTxEffect');
324
+ return effect;
325
+ }
326
+
327
+ async function handleGetPublicStorageAt(
328
+ wallet: AccountWallet,
329
+ params: AztecWalletMethodMap['aztec_getPublicStorageAt']['params'],
330
+ ): Promise<AztecWalletMethodMap['aztec_getPublicStorageAt']['result']> {
331
+ return await wallet.getPublicStorageAt(params.contract, params.storageSlot);
332
+ }
333
+
334
+ async function handleGetIncomingNotes(
335
+ wallet: AccountWallet,
336
+ params: AztecWalletMethodMap['aztec_getIncomingNotes']['params'],
337
+ ): Promise<AztecWalletMethodMap['aztec_getIncomingNotes']['result']> {
338
+ return await wallet.getIncomingNotes(params.filter);
339
+ }
340
+
341
+ async function handleAddNote(
342
+ wallet: AccountWallet,
343
+ params: AztecWalletMethodMap['aztec_addNote']['params'],
344
+ ): Promise<AztecWalletMethodMap['aztec_addNote']['result']> {
345
+ await wallet.addNote(params.note);
346
+ return true;
347
+ }
348
+
349
+ async function handleAddNullifiedNote(
350
+ wallet: AccountWallet,
351
+ params: AztecWalletMethodMap['aztec_addNullifiedNote']['params'],
352
+ ): Promise<AztecWalletMethodMap['aztec_addNullifiedNote']['result']> {
353
+ await wallet.addNullifiedNote(params.note);
354
+ return true;
355
+ }
356
+
357
+ async function handleGetUnencryptedLogs(
358
+ wallet: AccountWallet,
359
+ params: AztecWalletMethodMap['aztec_getUnencryptedLogs']['params'],
360
+ ): Promise<AztecWalletMethodMap['aztec_getUnencryptedLogs']['result']> {
361
+ return await wallet.getUnencryptedLogs(params.filter);
362
+ }
363
+
364
+ async function handleGetContractClassLogs(
365
+ wallet: AccountWallet,
366
+ params: AztecWalletMethodMap['aztec_getContractClassLogs']['params'],
367
+ ): Promise<AztecWalletMethodMap['aztec_getContractClassLogs']['result']> {
368
+ return await wallet.getContractClassLogs(params.filter);
369
+ }
370
+
371
+ async function handleGetEncryptedEvents(
372
+ wallet: AccountWallet,
373
+ params: AztecWalletMethodMap['aztec_getEncryptedEvents']['params'],
374
+ ): Promise<AztecWalletMethodMap['aztec_getEncryptedEvents']['result']> {
375
+ const { event, from, limit, vpks } = params;
376
+ return await wallet.getEncryptedEvents(event, from, limit, vpks);
377
+ }
378
+
379
+ async function handleGetUnencryptedEvents(
380
+ wallet: AccountWallet,
381
+ params: AztecWalletMethodMap['aztec_getUnencryptedEvents']['params'],
382
+ ): Promise<AztecWalletMethodMap['aztec_getUnencryptedEvents']['result']> {
383
+ const { event, from, limit } = params;
384
+ return await wallet.getUnencryptedEvents(event, from, limit);
385
+ }
386
+
387
+ async function handleL1ToL2MembershipWitness(
388
+ wallet: AccountWallet,
389
+ params: AztecWalletMethodMap['aztec_getL1ToL2MembershipWitness']['params'],
390
+ ): Promise<AztecWalletMethodMap['aztec_getL1ToL2MembershipWitness']['result']> {
391
+ const { contractAddress, messageHash, secret } = params;
392
+ return await wallet.getL1ToL2MembershipWitness(contractAddress, messageHash, secret);
393
+ }
394
+
395
+ export async function aztecWalletHandler<M extends keyof AztecWalletMethodMap>(
396
+ context: AztecWalletContext,
397
+ method: M,
398
+ params: AztecWalletMethodMap[M]['params'],
399
+ ): Promise<AztecWalletMethodMap[M]['result']> {
400
+ switch (method) {
401
+ // Chain methods
402
+ case 'aztec_getBlock':
403
+ return handleGetBlock(context.wallet, params as AztecWalletMethodMap['aztec_getBlock']['params']);
404
+ case 'aztec_getBlockNumber':
405
+ return handleGetBlockNumber(context.wallet);
406
+ case 'aztec_getChainId':
407
+ return handleGetChainId(context.wallet);
408
+ case 'aztec_getVersion':
409
+ return handleGetVersion(context.wallet);
410
+ case 'aztec_getNodeInfo':
411
+ return handleGetNodeInfo(context.wallet);
412
+ case 'aztec_getCurrentBaseFees':
413
+ return handleGetCurrentBaseFees(context.wallet);
414
+
415
+ // Scopes methods
416
+ case 'aztec_setScopes':
417
+ return handleSetScopes(context.wallet, params as AztecWalletMethodMap['aztec_setScopes']['params']);
418
+ case 'aztec_getScopes':
419
+ return handleGetScopes(context.wallet);
420
+
421
+ // L1->L2 Messages methods
422
+ case 'aztec_isL1ToL2MessageSynced':
423
+ return handleL1ToL2MessageSynced(
424
+ context.wallet,
425
+ params as AztecWalletMethodMap['aztec_isL1ToL2MessageSynced']['params'],
426
+ );
427
+ case 'aztec_getL1ToL2MembershipWitness':
428
+ return handleL1ToL2MembershipWitness(
429
+ context.wallet,
430
+ params as AztecWalletMethodMap['aztec_getL1ToL2MembershipWitness']['params'],
431
+ );
432
+
433
+ // Capsules methods
434
+ case 'aztec_addCapsule':
435
+ return handleAddCapsule(context.wallet, params as AztecWalletMethodMap['aztec_addCapsule']['params']);
436
+
437
+ // Accounts methods
438
+ case 'aztec_getAddress':
439
+ return handleGetAddress(context.wallet);
440
+ case 'aztec_getCompleteAddress':
441
+ return handleGetCompleteAddress(context.wallet);
442
+ case 'aztec_registerAccount':
443
+ return handleRegisterAccount(
444
+ context.wallet,
445
+ params as AztecWalletMethodMap['aztec_registerAccount']['params'],
446
+ );
447
+ case 'aztec_getRegisteredAccounts':
448
+ return handleGetRegisteredAccounts(context.wallet);
449
+
450
+ // AuthWitness methods
451
+ case 'aztec_addAuthWitness':
452
+ return handleAddAuthWitness(
453
+ context.wallet,
454
+ params as AztecWalletMethodMap['aztec_addAuthWitness']['params'],
455
+ );
456
+ case 'aztec_getAuthWitness':
457
+ return handleGetAuthWitness(
458
+ context.wallet,
459
+ params as AztecWalletMethodMap['aztec_getAuthWitness']['params'],
460
+ );
461
+ case 'aztec_createAuthWit':
462
+ return handleCreateAuthWit(
463
+ context.wallet,
464
+ params as AztecWalletMethodMap['aztec_createAuthWit']['params'],
465
+ );
466
+
467
+ // Senders methods
468
+ case 'aztec_registerSender':
469
+ return handleRegisterSender(
470
+ context.wallet,
471
+ params as AztecWalletMethodMap['aztec_registerSender']['params'],
472
+ );
473
+ case 'aztec_getSenders':
474
+ return handleGetSenders(context.wallet);
475
+ case 'aztec_removeSender':
476
+ return handleRemoveSender(
477
+ context.wallet,
478
+ params as AztecWalletMethodMap['aztec_removeSender']['params'],
479
+ );
480
+
481
+ // Contracts methods
482
+ case 'aztec_getContracts':
483
+ return handleGetContracts(context.wallet);
484
+ case 'aztec_getContractInstance':
485
+ return handleGetContractInstance(
486
+ context.wallet,
487
+ params as AztecWalletMethodMap['aztec_getContractInstance']['params'],
488
+ );
489
+ case 'aztec_getContractClass':
490
+ return handleGetContractClass(
491
+ context.wallet,
492
+ params as AztecWalletMethodMap['aztec_getContractClass']['params'],
493
+ );
494
+ case 'aztec_getContractArtifact':
495
+ return handleGetContractArtifact(
496
+ context.wallet,
497
+ params as AztecWalletMethodMap['aztec_getContractArtifact']['params'],
498
+ );
499
+ case 'aztec_isContractClassPubliclyRegistered':
500
+ return handleIsContractClassPubliclyRegistered(
501
+ context.wallet,
502
+ params as AztecWalletMethodMap['aztec_isContractClassPubliclyRegistered']['params'],
503
+ );
504
+ case 'aztec_isContractPubliclyDeployed':
505
+ return handleIsContractPubliclyDeployed(
506
+ context.wallet,
507
+ params as AztecWalletMethodMap['aztec_isContractPubliclyDeployed']['params'],
508
+ );
509
+ case 'aztec_isContractInitialized':
510
+ return handleIsContractInitialized(
511
+ context.wallet,
512
+ params as AztecWalletMethodMap['aztec_isContractInitialized']['params'],
513
+ );
514
+ case 'aztec_registerContract':
515
+ return handleRegisterContract(
516
+ context.wallet,
517
+ params as AztecWalletMethodMap['aztec_registerContract']['params'],
518
+ );
519
+ case 'aztec_registerContractClass':
520
+ return handleRegisterContractClass(
521
+ context.wallet,
522
+ params as AztecWalletMethodMap['aztec_registerContractClass']['params'],
523
+ );
524
+ case 'aztec_getPublicStorageAt':
525
+ return handleGetPublicStorageAt(
526
+ context.wallet,
527
+ params as AztecWalletMethodMap['aztec_getPublicStorageAt']['params'],
528
+ );
529
+
530
+ // Transactions methods
531
+ case 'aztec_createTxExecutionRequest':
532
+ return handleCreateTxExecutionRequest(
533
+ context.wallet,
534
+ params as AztecWalletMethodMap['aztec_createTxExecutionRequest']['params'],
535
+ );
536
+ case 'aztec_proveTx':
537
+ return handleProveTx(context.wallet, params as AztecWalletMethodMap['aztec_proveTx']['params']);
538
+ case 'aztec_sendTx':
539
+ return handleSendTx(context.wallet, params as AztecWalletMethodMap['aztec_sendTx']['params']);
540
+ case 'aztec_getTxEffect':
541
+ return handleGetTxEffect(context.wallet, params as AztecWalletMethodMap['aztec_getTxEffect']['params']);
542
+ case 'aztec_getTxReceipt':
543
+ return handleGetTxReceipt(
544
+ context.wallet,
545
+ params as AztecWalletMethodMap['aztec_getTxReceipt']['params'],
546
+ );
547
+ case 'aztec_simulateTx':
548
+ return handleSimulateTx(context.wallet, params as AztecWalletMethodMap['aztec_simulateTx']['params']);
549
+ case 'aztec_simulateUnconstrained':
550
+ return handleSimulateUnconstrained(
551
+ context.wallet,
552
+ params as AztecWalletMethodMap['aztec_simulateUnconstrained']['params'],
553
+ );
554
+
555
+ // Notes methods
556
+ case 'aztec_getIncomingNotes':
557
+ return handleGetIncomingNotes(
558
+ context.wallet,
559
+ params as AztecWalletMethodMap['aztec_getIncomingNotes']['params'],
560
+ );
561
+ case 'aztec_addNote':
562
+ return handleAddNote(context.wallet, params as AztecWalletMethodMap['aztec_addNote']['params']);
563
+ case 'aztec_addNullifiedNote':
564
+ return handleAddNullifiedNote(
565
+ context.wallet,
566
+ params as AztecWalletMethodMap['aztec_addNullifiedNote']['params'],
567
+ );
568
+
569
+ // Logs methods
570
+ case 'aztec_getUnencryptedLogs':
571
+ return handleGetUnencryptedLogs(
572
+ context.wallet,
573
+ params as AztecWalletMethodMap['aztec_getUnencryptedLogs']['params'],
574
+ );
575
+ case 'aztec_getContractClassLogs':
576
+ return handleGetContractClassLogs(
577
+ context.wallet,
578
+ params as AztecWalletMethodMap['aztec_getContractClassLogs']['params'],
579
+ );
580
+ case 'aztec_getEncryptedEvents':
581
+ return handleGetEncryptedEvents(
582
+ context.wallet,
583
+ params as AztecWalletMethodMap['aztec_getEncryptedEvents']['params'],
584
+ );
585
+ case 'aztec_getUnencryptedEvents':
586
+ return handleGetUnencryptedEvents(
587
+ context.wallet,
588
+ params as AztecWalletMethodMap['aztec_getUnencryptedEvents']['params'],
589
+ );
590
+ default:
591
+ throw new AztecWalletError('invalidRequest', `Method not supported: ${String(method)}`);
592
+ }
593
+ }
@@ -0,0 +1,110 @@
1
+ import {
2
+ AuthWitness,
3
+ AztecAddress,
4
+ Contract,
5
+ NoFeePaymentMethod,
6
+ type ContractArtifact,
7
+ } from '@aztec/aztec.js';
8
+
9
+ import { GasSettings } from '@aztec/circuits.js';
10
+ import type { ExecutionRequestInit } from '@aztec/aztec.js/entrypoint';
11
+
12
+ import type { AztecWalletContext, TransactionFunctionCall, TransactionParams } from '../types.js';
13
+ import { AztecWalletError } from '../errors.js';
14
+
15
+ /**
16
+ * Handles the 'aztec_sendTransaction' JSON-RPC method.
17
+ * Sends transactions to the Aztec network and returns the transaction hash.
18
+ * @param params - The transaction parameters
19
+ * @param params.functionCalls - Array of function calls to execute
20
+ * @param params.authwits - Optional array of authorization witnesses for the transaction
21
+ * @returns A Promise that resolves to the transaction hash string
22
+ */
23
+ export async function sendTransaction(
24
+ context: AztecWalletContext,
25
+ params: TransactionParams,
26
+ ): Promise<string> {
27
+ try {
28
+ // Setup the execution request without the calls for now
29
+ const executionRequestInit: ExecutionRequestInit = {
30
+ calls: [],
31
+ authWitnesses: params.authwits?.map(AuthWitness.fromString) ?? [],
32
+ // TODO: Figure out what we should be doing with this fee parameter
33
+ fee: {
34
+ paymentMethod: new NoFeePaymentMethod(),
35
+ gasSettings: GasSettings.default({ maxFeesPerGas: await context.wallet.getCurrentBaseFees() }),
36
+ },
37
+ };
38
+
39
+ // Get artifacts and contracts first
40
+ const contractMap = new Map<string, { contract: Contract; artifact: ContractArtifact }>();
41
+ for (const c of params.functionCalls) {
42
+ const contractAddress = AztecAddress.fromString(c.contractAddress);
43
+ if (!contractMap.has(c.contractAddress)) {
44
+ const artifact = await context.contractArtifactCache.getContractArtifact(contractAddress);
45
+ const contract = await Contract.at(contractAddress, artifact, context.wallet);
46
+ contractMap.set(c.contractAddress, { contract, artifact });
47
+ }
48
+ }
49
+
50
+ // Now build the execution request
51
+ for (const c of params.functionCalls) {
52
+ // biome-ignore lint/style/noNonNullAssertion: we know the contract is in the map
53
+ const { contract } = contractMap.get(c.contractAddress)!;
54
+ const functionCall = contract.methods[c.functionName](...c.args);
55
+ executionRequestInit.calls.push(await functionCall.request());
56
+ }
57
+ const txExecutionRequest = await context.wallet.createTxExecutionRequest(executionRequestInit);
58
+ const simulatedTx = await context.wallet.simulateTx(txExecutionRequest, true /* simulatePublic */);
59
+ const txProvingResult = await context.wallet.proveTx(
60
+ txExecutionRequest,
61
+ simulatedTx.privateExecutionResult,
62
+ );
63
+ const txHash = await context.wallet.sendTx(txProvingResult.toTx());
64
+ return txHash.toString();
65
+ } catch (error) {
66
+ throw new AztecWalletError('unknownInternalError');
67
+ }
68
+ }
69
+
70
+ /**
71
+ * Handles the 'aztec_simulateTransaction' JSON-RPC method.
72
+ * Simulates a transaction without submitting it to the network.
73
+ * @param params - The transaction parameters to simulate
74
+ * @param params.contractAddress - The target contract address
75
+ * @param params.functionName - The contract function to call
76
+ * @param params.args - The function arguments
77
+ * @returns A Promise that resolves to the simulation result
78
+ */
79
+ export async function simulateTransaction(
80
+ context: AztecWalletContext,
81
+ params: TransactionFunctionCall,
82
+ ): Promise<unknown> {
83
+ try {
84
+ const { contractAddress, functionName, args } = params;
85
+ const addr = AztecAddress.fromString(contractAddress);
86
+ const artifact = await context.contractArtifactCache.getContractArtifact(addr);
87
+ const contract = await Contract.at(addr, artifact, context.wallet);
88
+ const result = await contract.methods[functionName](...args).simulate();
89
+ // TODO: Is this sufficient for serializing the result?
90
+ switch (typeof result) {
91
+ case 'string':
92
+ return result;
93
+ case 'bigint':
94
+ return result.toString();
95
+ case 'object':
96
+ if (result instanceof Uint8Array) {
97
+ return Buffer.from(result).toString('hex');
98
+ }
99
+ return result;
100
+ default:
101
+ return result;
102
+ }
103
+ } catch (error) {
104
+ if (error instanceof AztecWalletError) {
105
+ throw error;
106
+ }
107
+ console.error('Error simulating transaction:', error);
108
+ throw new AztecWalletError('unknownInternalError', 'aztec_simulateTransaction');
109
+ }
110
+ }