@walletmesh/aztec-rpc-wallet 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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
+ });