@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,720 @@
1
+ import { describe, expect, it, vi, beforeEach } from 'vitest';
2
+ import type { AccountWallet } from '@aztec/aztec.js';
3
+ import { Fr, AztecAddress, TxHash, ExtendedNote, EventSelector } from '@aztec/aztec.js';
4
+ import type {
5
+ TxExecutionRequest,
6
+ ContractInstanceWithAddress,
7
+ ContractArtifact,
8
+ PublicKeys,
9
+ Note,
10
+ AuthWitness,
11
+ Tx,
12
+ } from '@aztec/aztec.js';
13
+ import type { PrivateExecutionResult, EventMetadataDefinition } from '@aztec/circuit-types';
14
+ import type { IntentAction, IntentInnerHash } from '@aztec/aztec.js/utils';
15
+ import { Point } from '@aztec/circuits.js';
16
+ import type { AztecWalletMethodMap } from '../types.js';
17
+ import { aztecWalletHandler } from './aztecAccountWallet.js';
18
+ import { AztecWalletError } from '../errors.js';
19
+ import type { AztecWalletContext } from '../types.js';
20
+
21
+ describe('Aztec Account Wallet Handler', () => {
22
+ let context: AztecWalletContext;
23
+ let wallet: AccountWallet;
24
+
25
+ beforeEach(() => {
26
+ // Mock wallet with common methods
27
+ wallet = {
28
+ getBlock: vi.fn(),
29
+ getBlockNumber: vi.fn(),
30
+ getChainId: vi.fn(),
31
+ getVersion: vi.fn(),
32
+ getNodeInfo: vi.fn(),
33
+ getCurrentBaseFees: vi.fn(),
34
+ setScopes: vi.fn(),
35
+ getScopes: vi.fn(),
36
+ addCapsule: vi.fn(),
37
+ getAddress: vi.fn(),
38
+ getCompleteAddress: vi.fn(),
39
+ registerAccount: vi.fn(),
40
+ getRegisteredAccounts: vi.fn(),
41
+ registerSender: vi.fn(),
42
+ getSenders: vi.fn(),
43
+ removeSender: vi.fn(),
44
+ addAuthWitness: vi.fn(),
45
+ getAuthWitness: vi.fn(),
46
+ createAuthWit: vi.fn(),
47
+ isL1ToL2MessageSynced: vi.fn(),
48
+ getContracts: vi.fn(),
49
+ getContractInstance: vi.fn(),
50
+ getContractClass: vi.fn(),
51
+ getContractArtifact: vi.fn(),
52
+ isContractClassPubliclyRegistered: vi.fn(),
53
+ isContractPubliclyDeployed: vi.fn(),
54
+ isContractInitialized: vi.fn(),
55
+ registerContract: vi.fn(),
56
+ registerContractClass: vi.fn(),
57
+ getPublicStorageAt: vi.fn(),
58
+ createTxExecutionRequest: vi.fn(),
59
+ proveTx: vi.fn(),
60
+ sendTx: vi.fn(),
61
+ getTxEffect: vi.fn(),
62
+ getTxReceipt: vi.fn(),
63
+ simulateTx: vi.fn(),
64
+ simulateUnconstrained: vi.fn(),
65
+ getIncomingNotes: vi.fn(),
66
+ addNote: vi.fn(),
67
+ addNullifiedNote: vi.fn(),
68
+ getUnencryptedLogs: vi.fn(),
69
+ getContractClassLogs: vi.fn(),
70
+ getEncryptedEvents: vi.fn(),
71
+ getUnencryptedEvents: vi.fn(),
72
+ getL1ToL2MembershipWitness: vi.fn(),
73
+ } as unknown as AccountWallet;
74
+
75
+ context = { wallet } as AztecWalletContext;
76
+ });
77
+
78
+ describe('Chain Methods', () => {
79
+ it('handles aztec_getBlock', async () => {
80
+ const mockBlock = { number: 1, hash: '0x123' };
81
+ wallet.getBlock = vi.fn().mockResolvedValue(mockBlock);
82
+
83
+ const result = await aztecWalletHandler(context, 'aztec_getBlock', { number: 1 });
84
+ expect(result).toEqual(mockBlock);
85
+ expect(wallet.getBlock).toHaveBeenCalledWith(1);
86
+ });
87
+
88
+ it('throws error when block not found', async () => {
89
+ wallet.getBlock = vi.fn().mockResolvedValue(null);
90
+
91
+ await expect(aztecWalletHandler(context, 'aztec_getBlock', { number: 1 })).rejects.toThrow(
92
+ AztecWalletError,
93
+ );
94
+ });
95
+
96
+ it('handles aztec_getBlockNumber', async () => {
97
+ const mockBlockNumber = 100;
98
+ wallet.getBlockNumber = vi.fn().mockResolvedValue(mockBlockNumber);
99
+
100
+ const result = await aztecWalletHandler(context, 'aztec_getBlockNumber', {});
101
+ expect(result).toBe(mockBlockNumber);
102
+ });
103
+
104
+ it('handles aztec_getChainId', async () => {
105
+ wallet.getChainId = vi.fn().mockReturnValue(BigInt(1));
106
+
107
+ const result = await aztecWalletHandler(context, 'aztec_getChainId', {});
108
+ expect(result).toBe(1);
109
+ });
110
+
111
+ it('handles aztec_getVersion', async () => {
112
+ wallet.getVersion = vi.fn().mockReturnValue(BigInt(1));
113
+
114
+ const result = await aztecWalletHandler(context, 'aztec_getVersion', {});
115
+ expect(result).toBe(1);
116
+ });
117
+ });
118
+
119
+ describe('Scope Methods', () => {
120
+ it('handles aztec_setScopes', async () => {
121
+ const mockAddress = AztecAddress.random();
122
+ const scopes = [mockAddress];
123
+ wallet.setScopes = vi.fn().mockResolvedValue(undefined);
124
+
125
+ const result = await aztecWalletHandler(context, 'aztec_setScopes', { scopes });
126
+ expect(result).toBe(true);
127
+ expect(wallet.setScopes).toHaveBeenCalledWith(scopes);
128
+ });
129
+
130
+ it('handles aztec_getScopes', async () => {
131
+ const scopes = [AztecAddress.random(), AztecAddress.random()];
132
+ wallet.getScopes = vi.fn().mockResolvedValue(scopes);
133
+
134
+ const result = await aztecWalletHandler(context, 'aztec_getScopes', {});
135
+ expect(result).toEqual(scopes);
136
+ });
137
+
138
+ it('handles aztec_getScopes with null response', async () => {
139
+ wallet.getScopes = vi.fn().mockResolvedValue(null);
140
+
141
+ const result = await aztecWalletHandler(context, 'aztec_getScopes', {});
142
+ expect(result).toEqual([]);
143
+ });
144
+ });
145
+
146
+ describe('Account Methods', () => {
147
+ it('handles aztec_getAddress', async () => {
148
+ const mockAddress = AztecAddress.random();
149
+ wallet.getAddress = vi.fn().mockReturnValue(mockAddress);
150
+
151
+ const result = await aztecWalletHandler(context, 'aztec_getAddress', {});
152
+ expect(result).toBe(mockAddress);
153
+ });
154
+
155
+ it('handles aztec_getCompleteAddress', async () => {
156
+ const mockAddress = {
157
+ address: AztecAddress.random(),
158
+ publicKey: AztecAddress.random(),
159
+ };
160
+ wallet.getCompleteAddress = vi.fn().mockReturnValue(mockAddress);
161
+
162
+ const result = await aztecWalletHandler(context, 'aztec_getCompleteAddress', {});
163
+ expect(result).toBe(mockAddress);
164
+ });
165
+
166
+ it('handles aztec_registerAccount', async () => {
167
+ const mockParams = { secretKey: new Fr(1), partialAddress: new Fr(2) };
168
+ const mockResult = { address: AztecAddress.random() };
169
+ wallet.registerAccount = vi.fn().mockResolvedValue(mockResult);
170
+
171
+ const result = await aztecWalletHandler(context, 'aztec_registerAccount', mockParams);
172
+ expect(result).toBe(mockResult);
173
+ expect(wallet.registerAccount).toHaveBeenCalledWith(mockParams.secretKey, mockParams.partialAddress);
174
+ });
175
+ });
176
+
177
+ describe('Node Info Methods', () => {
178
+ it('handles aztec_getNodeInfo', async () => {
179
+ const mockNodeInfo = { version: '1.0.0', status: 'running' };
180
+ wallet.getNodeInfo = vi.fn().mockResolvedValue(mockNodeInfo);
181
+
182
+ const result = await aztecWalletHandler(context, 'aztec_getNodeInfo', {});
183
+ expect(result).toBe(mockNodeInfo);
184
+ });
185
+
186
+ it('handles aztec_getCurrentBaseFees', async () => {
187
+ const mockFees = { baseFee: BigInt(1000) };
188
+ wallet.getCurrentBaseFees = vi.fn().mockResolvedValue(mockFees);
189
+
190
+ const result = await aztecWalletHandler(context, 'aztec_getCurrentBaseFees', {});
191
+ expect(result).toBe(mockFees);
192
+ });
193
+ });
194
+
195
+ describe('L1->L2 Message Methods', () => {
196
+ it('handles aztec_isL1ToL2MessageSynced', async () => {
197
+ const mockMessage = Fr.random();
198
+ wallet.isL1ToL2MessageSynced = vi.fn().mockResolvedValue(true);
199
+
200
+ const result = await aztecWalletHandler(context, 'aztec_isL1ToL2MessageSynced', {
201
+ l1ToL2Message: mockMessage,
202
+ });
203
+ expect(result).toBe(true);
204
+ });
205
+
206
+ it('handles aztec_getL1ToL2MembershipWitness', async () => {
207
+ const mockParams = {
208
+ contractAddress: AztecAddress.random(),
209
+ messageHash: Fr.random(),
210
+ secret: Fr.random(),
211
+ };
212
+ const mockWitness = { witness: new Uint8Array([1, 2, 3]) };
213
+ wallet.getL1ToL2MembershipWitness = vi.fn().mockResolvedValue(mockWitness);
214
+
215
+ const result = await aztecWalletHandler(context, 'aztec_getL1ToL2MembershipWitness', mockParams);
216
+ expect(result).toBe(mockWitness);
217
+ expect(wallet.getL1ToL2MembershipWitness).toHaveBeenCalledWith(
218
+ mockParams.contractAddress,
219
+ mockParams.messageHash,
220
+ mockParams.secret,
221
+ );
222
+ });
223
+ });
224
+
225
+ describe('Note Methods', () => {
226
+ it('handles aztec_getIncomingNotes', async () => {
227
+ const mockFilter = { contractAddress: AztecAddress.random() };
228
+ const mockNotes = [ExtendedNote.random()];
229
+ wallet.getIncomingNotes = vi.fn().mockResolvedValue(mockNotes);
230
+
231
+ const result = await aztecWalletHandler(context, 'aztec_getIncomingNotes', { filter: mockFilter });
232
+ expect(result).toBe(mockNotes);
233
+ });
234
+
235
+ it('handles aztec_addNote', async () => {
236
+ const mockNote = ExtendedNote.random();
237
+ wallet.addNote = vi.fn().mockResolvedValue(undefined);
238
+
239
+ const result = await aztecWalletHandler(context, 'aztec_addNote', { note: mockNote });
240
+ expect(result).toBe(true);
241
+ expect(wallet.addNote).toHaveBeenCalledWith(mockNote);
242
+ });
243
+
244
+ it('handles aztec_addNullifiedNote', async () => {
245
+ const mockNote = ExtendedNote.random();
246
+ Object.assign(mockNote, { nullified: true });
247
+ wallet.addNullifiedNote = vi.fn().mockResolvedValue(undefined);
248
+
249
+ const result = await aztecWalletHandler(context, 'aztec_addNullifiedNote', { note: mockNote });
250
+ expect(result).toBe(true);
251
+ expect(wallet.addNullifiedNote).toHaveBeenCalledWith(mockNote);
252
+ });
253
+ });
254
+
255
+ describe('Contract Methods', () => {
256
+ it('handles aztec_getContractInstance', async () => {
257
+ const mockAddress = AztecAddress.random();
258
+ const mockInstance = {
259
+ address: mockAddress,
260
+ toString: () => mockAddress.toString(),
261
+ } as unknown as ContractInstanceWithAddress;
262
+ wallet.getContractInstance = vi.fn().mockResolvedValue(mockInstance);
263
+
264
+ const result = await aztecWalletHandler(context, 'aztec_getContractInstance', { address: mockAddress });
265
+ expect(result).toBe(mockInstance);
266
+ });
267
+
268
+ it('throws error when contract instance not found', async () => {
269
+ wallet.getContractInstance = vi.fn().mockResolvedValue(null);
270
+
271
+ const testAddress = AztecAddress.random();
272
+ await expect(
273
+ aztecWalletHandler(context, 'aztec_getContractInstance', { address: testAddress }),
274
+ ).rejects.toThrow(AztecWalletError);
275
+ });
276
+
277
+ it('handles aztec_getContractClass', async () => {
278
+ const mockId = Fr.random();
279
+ const mockContractClass = { id: mockId };
280
+ wallet.getContractClass = vi.fn().mockResolvedValue(mockContractClass);
281
+
282
+ const result = await aztecWalletHandler(context, 'aztec_getContractClass', { id: mockId });
283
+ expect(result).toBe(mockContractClass);
284
+ });
285
+
286
+ it('throws error when contract class not found', async () => {
287
+ wallet.getContractClass = vi.fn().mockResolvedValue(null);
288
+ const mockId = Fr.random();
289
+
290
+ await expect(aztecWalletHandler(context, 'aztec_getContractClass', { id: mockId })).rejects.toThrow(
291
+ AztecWalletError,
292
+ );
293
+ });
294
+
295
+ it('handles aztec_getContractArtifact', async () => {
296
+ const mockId = Fr.random();
297
+ const mockArtifact = { id: mockId, name: 'TestContract' };
298
+ wallet.getContractArtifact = vi.fn().mockResolvedValue(mockArtifact);
299
+
300
+ const result = await aztecWalletHandler(context, 'aztec_getContractArtifact', { id: mockId });
301
+ expect(result).toBe(mockArtifact);
302
+ });
303
+
304
+ it('throws error when contract artifact not found', async () => {
305
+ wallet.getContractArtifact = vi.fn().mockResolvedValue(null);
306
+ const mockId = Fr.random();
307
+
308
+ await expect(aztecWalletHandler(context, 'aztec_getContractArtifact', { id: mockId })).rejects.toThrow(
309
+ AztecWalletError,
310
+ );
311
+ });
312
+
313
+ it('handles aztec_isContractClassPubliclyRegistered', async () => {
314
+ const mockId = Fr.random();
315
+ wallet.isContractClassPubliclyRegistered = vi.fn().mockResolvedValue(true);
316
+
317
+ const result = await aztecWalletHandler(context, 'aztec_isContractClassPubliclyRegistered', {
318
+ id: mockId,
319
+ });
320
+ expect(result).toBe(true);
321
+ });
322
+
323
+ it('handles aztec_isContractPubliclyDeployed', async () => {
324
+ const mockAddress = AztecAddress.random();
325
+ wallet.isContractPubliclyDeployed = vi.fn().mockResolvedValue(true);
326
+
327
+ const result = await aztecWalletHandler(context, 'aztec_isContractPubliclyDeployed', {
328
+ address: mockAddress,
329
+ });
330
+ expect(result).toBe(true);
331
+ });
332
+
333
+ it('handles aztec_isContractInitialized', async () => {
334
+ const mockAddress = AztecAddress.random();
335
+ wallet.isContractInitialized = vi.fn().mockResolvedValue(true);
336
+
337
+ const result = await aztecWalletHandler(context, 'aztec_isContractInitialized', {
338
+ address: mockAddress,
339
+ });
340
+ expect(result).toBe(true);
341
+ });
342
+
343
+ it('handles aztec_registerContract', async () => {
344
+ const mockAddress = AztecAddress.random();
345
+ const mockPublicKeys = {
346
+ masterNullifierPublicKey: new Fr(1),
347
+ masterIncomingViewingPublicKey: new Fr(2),
348
+ masterOutgoingViewingPublicKey: new Fr(3),
349
+ masterTaggingPublicKey: new Fr(4),
350
+ masterClaimingPublicKey: new Fr(5),
351
+ masterNoteHashingPublicKey: new Fr(6),
352
+ masterNoteCommitmentPublicKey: new Fr(7),
353
+ masterNullifierGeneratorPublicKey: new Fr(8),
354
+ masterTaggingGeneratorPublicKey: new Fr(9),
355
+ masterClaimingGeneratorPublicKey: new Fr(10),
356
+ hash: () => new Fr(11),
357
+ isEmpty: () => false,
358
+ equals: () => false,
359
+ toBuffer: () => new Uint8Array(),
360
+ toString: () => 'mockPublicKeys',
361
+ toJSON: () => ({}),
362
+ } as unknown as PublicKeys;
363
+
364
+ const mockInstance = {
365
+ address: mockAddress,
366
+ version: 1,
367
+ salt: new Fr(2),
368
+ deployer: mockAddress,
369
+ contractClassId: new Fr(3),
370
+ initializationHash: new Fr(4),
371
+ publicKeys: mockPublicKeys,
372
+ } as unknown as ContractInstanceWithAddress;
373
+
374
+ const mockArtifact = {
375
+ name: 'TestContract',
376
+ functions: {
377
+ test: {
378
+ name: 'test',
379
+ parameters: [],
380
+ },
381
+ },
382
+ outputs: {
383
+ structs: {},
384
+ globals: {},
385
+ },
386
+ storageLayout: {
387
+ structs: {},
388
+ globals: {},
389
+ },
390
+ notes: {},
391
+ fileMap: {},
392
+ } as unknown as ContractArtifact;
393
+ const mockParams = {
394
+ instance: mockInstance,
395
+ artifact: mockArtifact,
396
+ };
397
+ wallet.registerContract = vi.fn().mockResolvedValue(undefined);
398
+
399
+ const result = await aztecWalletHandler(context, 'aztec_registerContract', mockParams);
400
+ expect(result).toBe(true);
401
+ expect(wallet.registerContract).toHaveBeenCalledWith(mockParams);
402
+ });
403
+ });
404
+
405
+ describe('Log Methods', () => {
406
+ it('handles aztec_getUnencryptedLogs', async () => {
407
+ const mockFilter = { contractAddress: AztecAddress.random() };
408
+ const mockLogs = [{ data: new Uint8Array([1, 2, 3]) }];
409
+ wallet.getUnencryptedLogs = vi.fn().mockResolvedValue(mockLogs);
410
+
411
+ const result = await aztecWalletHandler(context, 'aztec_getUnencryptedLogs', { filter: mockFilter });
412
+ expect(result).toBe(mockLogs);
413
+ });
414
+
415
+ it('handles aztec_getContractClassLogs', async () => {
416
+ const mockFilter = { contractAddress: AztecAddress.random() };
417
+ const mockLogs = [{ data: new Uint8Array([1, 2, 3]) }];
418
+ wallet.getContractClassLogs = vi.fn().mockResolvedValue(mockLogs);
419
+
420
+ const result = await aztecWalletHandler(context, 'aztec_getContractClassLogs', { filter: mockFilter });
421
+ expect(result).toBe(mockLogs);
422
+ });
423
+
424
+ it('handles aztec_getEncryptedEvents', async () => {
425
+ const mockEvent = {
426
+ name: 'TestEvent',
427
+ parameters: [{ name: 'value', type: 'field' }],
428
+ returnType: { type: 'struct', items: [{ name: 'value', type: 'field' }] },
429
+ eventSelector: EventSelector.random(),
430
+ abiType: 'event',
431
+ fieldNames: ['value'],
432
+ } as unknown as EventMetadataDefinition;
433
+ const mockParams = {
434
+ event: mockEvent,
435
+ from: 0,
436
+ limit: 10,
437
+ vpks: [Point.random()],
438
+ };
439
+ const mockEvents = [{ data: new Uint8Array([1, 2, 3]) }];
440
+ wallet.getEncryptedEvents = vi.fn().mockResolvedValue(mockEvents);
441
+
442
+ const result = await aztecWalletHandler(context, 'aztec_getEncryptedEvents', mockParams);
443
+ expect(result).toBe(mockEvents);
444
+ expect(wallet.getEncryptedEvents).toHaveBeenCalledWith(
445
+ mockParams.event,
446
+ mockParams.from,
447
+ mockParams.limit,
448
+ mockParams.vpks,
449
+ );
450
+ });
451
+
452
+ it('handles aztec_getUnencryptedEvents', async () => {
453
+ const mockEvent = {
454
+ name: 'TestEvent',
455
+ parameters: [{ name: 'value', type: 'field' }],
456
+ returnType: { type: 'struct', items: [{ name: 'value', type: 'field' }] },
457
+ eventSelector: EventSelector.random(),
458
+ abiType: 'event',
459
+ fieldNames: ['value'],
460
+ } as unknown as EventMetadataDefinition;
461
+ const mockParams = {
462
+ event: mockEvent,
463
+ from: 0,
464
+ limit: 10,
465
+ };
466
+ const mockEvents = [{ data: new Uint8Array([1, 2, 3]) }];
467
+ wallet.getUnencryptedEvents = vi.fn().mockResolvedValue(mockEvents);
468
+
469
+ const result = await aztecWalletHandler(context, 'aztec_getUnencryptedEvents', mockParams);
470
+ expect(result).toBe(mockEvents);
471
+ expect(wallet.getUnencryptedEvents).toHaveBeenCalledWith(
472
+ mockParams.event,
473
+ mockParams.from,
474
+ mockParams.limit,
475
+ );
476
+ });
477
+ });
478
+
479
+ describe('Transaction Methods', () => {
480
+ it('handles aztec_getTxReceipt', async () => {
481
+ const mockTxHash = TxHash.random();
482
+ const mockReceipt = { status: 1 };
483
+ wallet.getTxReceipt = vi.fn().mockResolvedValue(mockReceipt);
484
+
485
+ const result = await aztecWalletHandler(context, 'aztec_getTxReceipt', { txHash: mockTxHash });
486
+ expect(result).toBe(mockReceipt);
487
+ });
488
+
489
+ it('throws error when transaction receipt not found', async () => {
490
+ wallet.getTxReceipt = vi.fn().mockResolvedValue(null);
491
+
492
+ const mockTxHash = TxHash.random();
493
+ await expect(aztecWalletHandler(context, 'aztec_getTxReceipt', { txHash: mockTxHash })).rejects.toThrow(
494
+ AztecWalletError,
495
+ );
496
+ });
497
+
498
+ it('handles aztec_simulateTx', async () => {
499
+ const mockParams = {
500
+ txRequest: {
501
+ origin: AztecAddress.random(),
502
+ functionSelector: new Fr(1),
503
+ firstCallArgsHash: new Fr(2),
504
+ txContext: {
505
+ chainId: 1,
506
+ version: 1,
507
+ protocolVersion: 1,
508
+ excessFeeReceiver: AztecAddress.random(),
509
+ },
510
+ callData: new Uint8Array(),
511
+ gasLimit: 1000000n,
512
+ gasPrice: 1000000n,
513
+ storageContractAddress: AztecAddress.random(),
514
+ portalContract: AztecAddress.random(),
515
+ argsOfCalls: [],
516
+ authWitnesses: [],
517
+ toTxRequest: () => ({ id: '0x123' }),
518
+ toBuffer: () => new Uint8Array(),
519
+ } as unknown as TxExecutionRequest,
520
+ simulatePublic: true,
521
+ msgSender: AztecAddress.random(),
522
+ skipTxValidation: false,
523
+ enforceFeePayment: true,
524
+ profile: true,
525
+ };
526
+ const mockResult = { success: true };
527
+ wallet.simulateTx = vi.fn().mockResolvedValue(mockResult);
528
+
529
+ const result = await aztecWalletHandler(context, 'aztec_simulateTx', mockParams);
530
+ expect(result).toBe(mockResult);
531
+ expect(wallet.simulateTx).toHaveBeenCalledWith(
532
+ mockParams.txRequest,
533
+ mockParams.simulatePublic,
534
+ mockParams.msgSender,
535
+ mockParams.skipTxValidation,
536
+ mockParams.enforceFeePayment,
537
+ mockParams.profile,
538
+ );
539
+ });
540
+ });
541
+
542
+ describe('Capsule Methods', () => {
543
+ it('handles aztec_addCapsule', async () => {
544
+ const mockCapsule = [Fr.random(), Fr.random(), Fr.random()];
545
+ wallet.addCapsule = vi.fn().mockResolvedValue(undefined);
546
+
547
+ const result = await aztecWalletHandler(context, 'aztec_addCapsule', { capsule: mockCapsule });
548
+ expect(result).toBe(true);
549
+ expect(wallet.addCapsule).toHaveBeenCalledWith(mockCapsule);
550
+ });
551
+ });
552
+
553
+ describe('Auth Witness Methods', () => {
554
+ it('handles aztec_addAuthWitness', async () => {
555
+ const mockAuthWitness = {
556
+ requestHash: Fr.random(),
557
+ witness: new Uint8Array([1, 2, 3]),
558
+ toJSON: () => ({}),
559
+ toBuffer: () => new Uint8Array([1, 2, 3]),
560
+ } as unknown as AuthWitness;
561
+ wallet.addAuthWitness = vi.fn().mockResolvedValue(undefined);
562
+
563
+ const result = await aztecWalletHandler(context, 'aztec_addAuthWitness', {
564
+ authWitness: mockAuthWitness,
565
+ });
566
+ expect(result).toBe(true);
567
+ expect(wallet.addAuthWitness).toHaveBeenCalledWith(mockAuthWitness);
568
+ });
569
+
570
+ it('handles aztec_createAuthWit', async () => {
571
+ const mockIntent = Fr.random() as unknown as IntentAction | IntentInnerHash;
572
+ const mockAuthWit = { witness: new Uint8Array([4, 5, 6]) };
573
+ wallet.createAuthWit = vi.fn().mockResolvedValue(mockAuthWit);
574
+
575
+ const result = await aztecWalletHandler(context, 'aztec_createAuthWit', { intent: mockIntent });
576
+ expect(result).toBe(mockAuthWit);
577
+ expect(wallet.createAuthWit).toHaveBeenCalledWith(mockIntent);
578
+ });
579
+ });
580
+
581
+ describe('Sender Methods', () => {
582
+ it('handles aztec_registerSender', async () => {
583
+ const mockSender = AztecAddress.random();
584
+ const mockResult = { success: true };
585
+ wallet.registerSender = vi.fn().mockResolvedValue(mockResult);
586
+
587
+ const result = await aztecWalletHandler(context, 'aztec_registerSender', { sender: mockSender });
588
+ expect(result).toBe(mockResult);
589
+ expect(wallet.registerSender).toHaveBeenCalledWith(mockSender);
590
+ });
591
+
592
+ it('handles aztec_removeSender', async () => {
593
+ const mockSender = AztecAddress.random();
594
+ wallet.removeSender = vi.fn().mockResolvedValue(undefined);
595
+
596
+ const result = await aztecWalletHandler(context, 'aztec_removeSender', { sender: mockSender });
597
+ expect(result).toBe(true);
598
+ expect(wallet.removeSender).toHaveBeenCalledWith(mockSender);
599
+ });
600
+ });
601
+
602
+ describe('Transaction Methods', () => {
603
+ it('handles aztec_proveTx', async () => {
604
+ const mockTxRequest = {
605
+ origin: AztecAddress.random(),
606
+ functionSelector: new Fr(1),
607
+ firstCallArgsHash: new Fr(2),
608
+ txContext: {
609
+ chainId: 1,
610
+ version: 1,
611
+ protocolVersion: 1,
612
+ excessFeeReceiver: AztecAddress.random(),
613
+ },
614
+ callData: new Uint8Array(),
615
+ gasLimit: 1000000n,
616
+ gasPrice: 1000000n,
617
+ storageContractAddress: AztecAddress.random(),
618
+ portalContract: AztecAddress.random(),
619
+ argsOfCalls: [],
620
+ authWitnesses: [],
621
+ toTxRequest: () => ({ id: '0x123' }),
622
+ toBuffer: () => new Uint8Array(),
623
+ } as unknown as TxExecutionRequest;
624
+ const mockPrivateExecutionResult = {
625
+ acir: new Uint8Array([1, 2, 3]),
626
+ vk: new Uint8Array([4, 5, 6]),
627
+ partialWitness: new Uint8Array([7, 8, 9]),
628
+ publicInputs: [Fr.random()],
629
+ success: true,
630
+ gasUsed: 1000n,
631
+ returnValue: new Uint8Array(),
632
+ unencryptedLogs: [],
633
+ contractClassLogs: [],
634
+ encryptedLogs: [],
635
+ encryptedLogPreimages: [],
636
+ encryptedLogKeys: [],
637
+ } as unknown as PrivateExecutionResult;
638
+ const mockProvenTx = { hash: TxHash.random() };
639
+ wallet.proveTx = vi.fn().mockResolvedValue(mockProvenTx);
640
+
641
+ const result = await aztecWalletHandler(context, 'aztec_proveTx', {
642
+ txRequest: mockTxRequest,
643
+ privateExecutionResult: mockPrivateExecutionResult,
644
+ });
645
+ expect(result).toBe(mockProvenTx);
646
+ expect(wallet.proveTx).toHaveBeenCalledWith(mockTxRequest, mockPrivateExecutionResult);
647
+ });
648
+
649
+ it('handles aztec_sendTx', async () => {
650
+ const mockTx = {
651
+ hash: TxHash.random(),
652
+ data: new Uint8Array([1, 2, 3]),
653
+ clientIvcProof: new Uint8Array([4, 5, 6]),
654
+ unencryptedLogs: [],
655
+ contractClassLogs: [],
656
+ encryptedLogs: [],
657
+ encryptedLogPreimages: [],
658
+ encryptedLogKeys: [],
659
+ encryptedLogsSalt: Fr.random(),
660
+ encryptedLogsCommitment: Fr.random(),
661
+ encryptedLogsTreeIndex: 0,
662
+ encryptedLogProofs: [],
663
+ encryptedLogProofsTreeIndex: 0,
664
+ encryptedLogProofsCommitment: Fr.random(),
665
+ encryptedLogProofsSalt: Fr.random(),
666
+ toBuffer: () => new Uint8Array(),
667
+ toString: () => 'mockTx',
668
+ } as unknown as Tx;
669
+ const mockTxHash = TxHash.random();
670
+ wallet.sendTx = vi.fn().mockResolvedValue(mockTxHash);
671
+
672
+ const result = await aztecWalletHandler(context, 'aztec_sendTx', { tx: mockTx });
673
+ expect(result).toBe(mockTxHash);
674
+ expect(wallet.sendTx).toHaveBeenCalledWith(mockTx);
675
+ });
676
+
677
+ it('handles aztec_getTxEffect', async () => {
678
+ const mockTxHash = TxHash.random();
679
+ const mockEffect = { success: true };
680
+ wallet.getTxEffect = vi.fn().mockResolvedValue(mockEffect);
681
+
682
+ const result = await aztecWalletHandler(context, 'aztec_getTxEffect', { txHash: mockTxHash });
683
+ expect(result).toBe(mockEffect);
684
+ expect(wallet.getTxEffect).toHaveBeenCalledWith(mockTxHash);
685
+ });
686
+
687
+ it('throws error when transaction effect not found', async () => {
688
+ wallet.getTxEffect = vi.fn().mockResolvedValue(null);
689
+
690
+ const mockTxHash = TxHash.random();
691
+ await expect(aztecWalletHandler(context, 'aztec_getTxEffect', { txHash: mockTxHash })).rejects.toThrow(
692
+ AztecWalletError,
693
+ );
694
+ });
695
+ });
696
+
697
+ describe('Public Storage Methods', () => {
698
+ it('handles aztec_getPublicStorageAt', async () => {
699
+ const mockContract = AztecAddress.random();
700
+ const mockStorageSlot = Fr.random();
701
+ const mockValue = Fr.random();
702
+ wallet.getPublicStorageAt = vi.fn().mockResolvedValue(mockValue);
703
+
704
+ const result = await aztecWalletHandler(context, 'aztec_getPublicStorageAt', {
705
+ contract: mockContract,
706
+ storageSlot: mockStorageSlot,
707
+ });
708
+ expect(result).toBe(mockValue);
709
+ expect(wallet.getPublicStorageAt).toHaveBeenCalledWith(mockContract, mockStorageSlot);
710
+ });
711
+ });
712
+
713
+ describe('Error Handling', () => {
714
+ it('throws error for unsupported method', async () => {
715
+ await expect(
716
+ aztecWalletHandler(context, 'not_a_real_method' as keyof AztecWalletMethodMap, {}),
717
+ ).rejects.toThrow(AztecWalletError);
718
+ });
719
+ });
720
+ });