@walletmesh/aztec-rpc-wallet 0.3.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (185) hide show
  1. package/CHANGELOG.md +26 -0
  2. package/README.md +290 -228
  3. package/dist/.tsbuildinfo +1 -1
  4. package/dist/client/aztec-dapp-wallet.d.ts +401 -0
  5. package/dist/client/aztec-dapp-wallet.d.ts.map +1 -0
  6. package/dist/client/aztec-dapp-wallet.js +705 -0
  7. package/dist/client/aztec-router-provider.d.ts +58 -0
  8. package/dist/client/aztec-router-provider.d.ts.map +1 -0
  9. package/dist/client/aztec-router-provider.js +62 -0
  10. package/dist/client/helpers.d.ts +44 -0
  11. package/dist/client/helpers.d.ts.map +1 -0
  12. package/dist/client/helpers.js +79 -0
  13. package/dist/client/register-serializers.d.ts +41 -0
  14. package/dist/client/register-serializers.d.ts.map +1 -0
  15. package/dist/client/register-serializers.js +97 -0
  16. package/dist/contractArtifactCache.d.ts +49 -32
  17. package/dist/contractArtifactCache.d.ts.map +1 -1
  18. package/dist/contractArtifactCache.js +47 -34
  19. package/dist/errors.d.ts +50 -8
  20. package/dist/errors.d.ts.map +1 -1
  21. package/dist/errors.js +50 -10
  22. package/dist/index.d.ts +53 -40
  23. package/dist/index.d.ts.map +1 -1
  24. package/dist/index.js +52 -17
  25. package/dist/types.d.ts +345 -268
  26. package/dist/types.d.ts.map +1 -1
  27. package/dist/types.js +10 -8
  28. package/dist/wallet/create-node.d.ts +73 -0
  29. package/dist/wallet/create-node.d.ts.map +1 -0
  30. package/dist/wallet/create-node.js +99 -0
  31. package/dist/wallet/handlers/account.d.ts +67 -0
  32. package/dist/wallet/handlers/account.d.ts.map +1 -0
  33. package/dist/wallet/handlers/account.js +85 -0
  34. package/dist/wallet/handlers/contract-interaction.d.ts +77 -0
  35. package/dist/wallet/handlers/contract-interaction.d.ts.map +1 -0
  36. package/dist/wallet/handlers/contract-interaction.js +219 -0
  37. package/dist/wallet/handlers/contract.d.ts +96 -0
  38. package/dist/wallet/handlers/contract.d.ts.map +1 -0
  39. package/dist/wallet/handlers/contract.js +146 -0
  40. package/dist/wallet/handlers/event.d.ts +62 -0
  41. package/dist/wallet/handlers/event.d.ts.map +1 -0
  42. package/dist/wallet/handlers/event.js +85 -0
  43. package/dist/wallet/handlers/index.d.ts +88 -0
  44. package/dist/wallet/handlers/index.d.ts.map +1 -0
  45. package/dist/wallet/handlers/index.js +47 -0
  46. package/dist/wallet/handlers/node.d.ts +117 -0
  47. package/dist/wallet/handlers/node.d.ts.map +1 -0
  48. package/dist/wallet/handlers/node.js +196 -0
  49. package/dist/wallet/handlers/senders.d.ts +70 -0
  50. package/dist/wallet/handlers/senders.d.ts.map +1 -0
  51. package/dist/wallet/handlers/senders.js +92 -0
  52. package/dist/wallet/handlers/transaction.d.ts +123 -0
  53. package/dist/wallet/handlers/transaction.d.ts.map +1 -0
  54. package/dist/wallet/handlers/transaction.js +191 -0
  55. package/dist/wallet/serializers.d.ts +75 -0
  56. package/dist/wallet/serializers.d.ts.map +1 -0
  57. package/dist/wallet/serializers.js +501 -0
  58. package/docs/README.md +290 -229
  59. package/docs/classes/AztecDappWallet.md +1304 -0
  60. package/docs/classes/AztecRouterProvider.md +1058 -0
  61. package/docs/classes/AztecWalletError.md +124 -47
  62. package/docs/classes/ContractArtifactCache.md +48 -31
  63. package/docs/functions/connectAztec.md +62 -0
  64. package/docs/functions/createAztecWallet.md +46 -0
  65. package/docs/functions/createAztecWalletNode.md +96 -0
  66. package/docs/functions/registerAztecSerializers.md +61 -0
  67. package/docs/functions/registerWalletAztecSerializers.md +39 -0
  68. package/docs/globals.md +16 -14
  69. package/docs/interfaces/AztecHandlerContext.md +54 -0
  70. package/docs/interfaces/AztecWalletContext.md +50 -0
  71. package/docs/interfaces/AztecWalletMethodMap.md +471 -470
  72. package/docs/type-aliases/AztecChainId.md +16 -3
  73. package/docs/variables/ALL_AZTEC_METHODS.md +20 -0
  74. package/docs/variables/AztecWalletErrorMap.md +9 -4
  75. package/docs/variables/AztecWalletSerializer.md +45 -0
  76. package/package.json +9 -9
  77. package/src/client/aztec-dapp-wallet.test.ts +628 -0
  78. package/src/client/aztec-dapp-wallet.ts +879 -0
  79. package/src/client/aztec-router-provider.test.ts +235 -0
  80. package/src/client/aztec-router-provider.ts +64 -0
  81. package/src/client/helpers.test.ts +187 -0
  82. package/src/client/helpers.ts +91 -0
  83. package/src/client/register-serializers.ts +108 -0
  84. package/src/contractArtifactCache.test.ts +21 -10
  85. package/src/contractArtifactCache.ts +54 -35
  86. package/src/errors.ts +58 -10
  87. package/src/index.test.ts +2 -6
  88. package/src/index.ts +73 -37
  89. package/src/types.ts +379 -217
  90. package/src/wallet/create-node.test.ts +332 -0
  91. package/src/wallet/create-node.ts +120 -0
  92. package/src/wallet/handlers/account.test.ts +172 -0
  93. package/src/wallet/handlers/account.ts +99 -0
  94. package/src/wallet/handlers/contract-interaction.test.ts +248 -0
  95. package/src/wallet/handlers/contract-interaction.ts +269 -0
  96. package/src/wallet/handlers/contract.test.ts +245 -0
  97. package/src/wallet/handlers/contract.ts +174 -0
  98. package/src/wallet/handlers/event.test.ts +216 -0
  99. package/src/wallet/handlers/event.ts +99 -0
  100. package/src/wallet/handlers/index.ts +84 -0
  101. package/src/wallet/handlers/node.test.ts +304 -0
  102. package/src/wallet/handlers/node.ts +230 -0
  103. package/src/wallet/handlers/senders.test.ts +172 -0
  104. package/src/wallet/handlers/senders.ts +106 -0
  105. package/src/wallet/handlers/transaction.test.ts +371 -0
  106. package/src/wallet/handlers/transaction.ts +239 -0
  107. package/src/wallet/serializers.test.ts +253 -0
  108. package/src/wallet/serializers.ts +586 -0
  109. package/typedoc.json +23 -1
  110. package/dist/aztecRemoteWallet.d.ts +0 -70
  111. package/dist/aztecRemoteWallet.d.ts.map +0 -1
  112. package/dist/aztecRemoteWallet.js +0 -335
  113. package/dist/chainProvider.d.ts +0 -56
  114. package/dist/chainProvider.d.ts.map +0 -1
  115. package/dist/chainProvider.js +0 -98
  116. package/dist/handlers/aztecAccountWallet.d.ts +0 -4
  117. package/dist/handlers/aztecAccountWallet.d.ts.map +0 -1
  118. package/dist/handlers/aztecAccountWallet.js +0 -296
  119. package/dist/handlers/transactions.d.ts +0 -21
  120. package/dist/handlers/transactions.d.ts.map +0 -1
  121. package/dist/handlers/transactions.js +0 -98
  122. package/dist/handlers.d.ts +0 -27
  123. package/dist/handlers.d.ts.map +0 -1
  124. package/dist/handlers.js +0 -55
  125. package/dist/provider.d.ts +0 -105
  126. package/dist/provider.d.ts.map +0 -1
  127. package/dist/provider.js +0 -160
  128. package/dist/serializers/account.d.ts +0 -164
  129. package/dist/serializers/account.d.ts.map +0 -1
  130. package/dist/serializers/account.js +0 -244
  131. package/dist/serializers/contract.d.ts +0 -62
  132. package/dist/serializers/contract.d.ts.map +0 -1
  133. package/dist/serializers/contract.js +0 -130
  134. package/dist/serializers/index.d.ts +0 -21
  135. package/dist/serializers/index.d.ts.map +0 -1
  136. package/dist/serializers/index.js +0 -154
  137. package/dist/serializers/log.d.ts +0 -66
  138. package/dist/serializers/log.d.ts.map +0 -1
  139. package/dist/serializers/log.js +0 -222
  140. package/dist/serializers/note.d.ts +0 -124
  141. package/dist/serializers/note.d.ts.map +0 -1
  142. package/dist/serializers/note.js +0 -208
  143. package/dist/serializers/transaction.d.ts +0 -99
  144. package/dist/serializers/transaction.d.ts.map +0 -1
  145. package/dist/serializers/transaction.js +0 -275
  146. package/dist/wallet.d.ts +0 -62
  147. package/dist/wallet.d.ts.map +0 -1
  148. package/dist/wallet.js +0 -77
  149. package/docs/classes/AztecChainProvider.md +0 -553
  150. package/docs/classes/AztecChainWallet.md +0 -409
  151. package/docs/classes/AztecProvider.md +0 -1112
  152. package/docs/interfaces/AztecWalletBaseMethodMap.md +0 -135
  153. package/docs/interfaces/AztecWalletEventMap.md +0 -17
  154. package/docs/type-aliases/AztecChainWalletMiddleware.md +0 -13
  155. package/docs/type-aliases/AztecWalletContext.md +0 -29
  156. package/docs/type-aliases/AztecWalletMethodHandler.md +0 -37
  157. package/docs/type-aliases/AztecWalletMiddleware.md +0 -13
  158. package/docs/type-aliases/AztecWalletRouterClient.md +0 -13
  159. package/docs/type-aliases/TransactionFunctionCall.md +0 -33
  160. package/docs/type-aliases/TransactionParams.md +0 -27
  161. package/src/aztecRemoteWallet.test.ts +0 -504
  162. package/src/aztecRemoteWallet.ts +0 -467
  163. package/src/chainProvider.test.ts +0 -401
  164. package/src/chainProvider.ts +0 -116
  165. package/src/handlers/aztecAccountWallet.test.ts +0 -649
  166. package/src/handlers/aztecAccountWallet.ts +0 -532
  167. package/src/handlers/transactions.ts +0 -124
  168. package/src/handlers.test.ts +0 -270
  169. package/src/handlers.ts +0 -70
  170. package/src/provider.test.ts +0 -274
  171. package/src/provider.ts +0 -189
  172. package/src/serializers/account.test.ts +0 -125
  173. package/src/serializers/account.ts +0 -301
  174. package/src/serializers/contract.test.ts +0 -24
  175. package/src/serializers/contract.ts +0 -183
  176. package/src/serializers/index.test.ts +0 -136
  177. package/src/serializers/index.ts +0 -191
  178. package/src/serializers/log.test.ts +0 -286
  179. package/src/serializers/log.ts +0 -292
  180. package/src/serializers/note.test.ts +0 -125
  181. package/src/serializers/note.ts +0 -250
  182. package/src/serializers/transaction.test.ts +0 -320
  183. package/src/serializers/transaction.ts +0 -409
  184. package/src/wallet.test.ts +0 -275
  185. package/src/wallet.ts +0 -94
@@ -1,286 +0,0 @@
1
- import { describe, expect, it } from 'vitest';
2
- import { Point, AztecAddress } from '@aztec/aztec.js';
3
- import { EventSelector } from '@aztec/foundation/abi';
4
- import type { AbiType } from '@aztec/foundation/abi';
5
- import {
6
- ExtendedPublicLog,
7
- type GetPublicLogsResponse,
8
- type GetContractClassLogsResponse,
9
- type LogFilter,
10
- LogId,
11
- TxHash,
12
- } from '@aztec/circuit-types';
13
- import {
14
- aztecGetPublicLogsSerializer,
15
- aztecGetPrivateEventsSerializer,
16
- aztecGetPublicEventsSerializer,
17
- aztecGetContractClassLogsSerializer,
18
- } from './log.js';
19
-
20
- describe('Log Serializers', () => {
21
- describe('aztec_getPublicLogs', () => {
22
- const METHOD = 'aztec_getPublicLogs';
23
-
24
- it('should serialize and deserialize params', async () => {
25
- const filter: LogFilter = {
26
- txHash: await TxHash.random(),
27
- fromBlock: 0,
28
- toBlock: 100,
29
- afterLog: await LogId.random(),
30
- contractAddress: await AztecAddress.random(),
31
- };
32
-
33
- const params = { filter };
34
-
35
- const serialized = await aztecGetPublicLogsSerializer.params.serialize(METHOD, params);
36
- expect(serialized.method).toBe(METHOD);
37
-
38
- const deserialized = await aztecGetPublicLogsSerializer.params.deserialize(METHOD, serialized);
39
- expect(deserialized.filter.contractAddress?.toString()).toBe(filter.contractAddress?.toString());
40
- expect(deserialized.filter.txHash?.toString()).toBe(filter.txHash?.toString());
41
- expect(deserialized.filter.fromBlock).toBe(filter.fromBlock);
42
- expect(deserialized.filter.toBlock).toBe(filter.toBlock);
43
- expect(deserialized.filter.afterLog?.toString()).toBe(filter.afterLog?.toString());
44
- });
45
-
46
- it('should serialize and deserialize result', async () => {
47
- const log = await ExtendedPublicLog.random();
48
- const result: GetPublicLogsResponse = {
49
- logs: [log],
50
- maxLogsHit: false,
51
- };
52
-
53
- const serialized = await aztecGetPublicLogsSerializer.result.serialize(METHOD, result);
54
- expect(serialized.method).toBe(METHOD);
55
-
56
- const deserialized = await aztecGetPublicLogsSerializer.result.deserialize(METHOD, serialized);
57
- expect(deserialized.logs.length).toBeGreaterThan(0);
58
- // biome-ignore lint/style/noNonNullAssertion: We know this should be defined
59
- expect(deserialized.logs[0]!.toString()).toBe(result.logs[0]!.toString());
60
- expect(deserialized.logs.length).toBe(result.logs.length);
61
- expect(deserialized.maxLogsHit).toBe(result.maxLogsHit);
62
- });
63
- });
64
-
65
- describe('aztec_getPrivateEvents', () => {
66
- const METHOD = 'aztec_getPrivateEvents';
67
-
68
- it('should serialize and deserialize params', async () => {
69
- const event = {
70
- eventSelector: EventSelector.fromString('0x12345678'),
71
- abiType: {
72
- kind: 'field',
73
- } as AbiType,
74
- fieldNames: ['field1', 'field2'],
75
- };
76
- const params = {
77
- event,
78
- from: 0,
79
- limit: 10,
80
- vpks: [await Point.random(), await Point.random()],
81
- };
82
-
83
- const serialized = await aztecGetPrivateEventsSerializer.params.serialize(METHOD, params);
84
- expect(serialized.method).toBe(METHOD);
85
-
86
- const deserialized = await aztecGetPrivateEventsSerializer.params.deserialize(METHOD, serialized);
87
- expect(deserialized.event.eventSelector.toString()).toBe(event.eventSelector.toString());
88
- expect(deserialized.event.abiType).toEqual(event.abiType);
89
- expect(deserialized.event.fieldNames).toEqual(event.fieldNames);
90
- expect(deserialized.from).toBe(params.from);
91
- expect(deserialized.limit).toBe(params.limit);
92
- expect(deserialized.vpks?.map((p) => p.toString())).toEqual(params.vpks.map((p) => p.toString()));
93
- });
94
- });
95
-
96
- describe('aztec_getPublicEvents', () => {
97
- const METHOD = 'aztec_getPublicEvents';
98
-
99
- it('should serialize and deserialize params', async () => {
100
- const event = {
101
- eventSelector: EventSelector.fromString('0x12345678'),
102
- abiType: {
103
- kind: 'field',
104
- } as AbiType,
105
- fieldNames: ['field1', 'field2'],
106
- };
107
- const params = {
108
- event,
109
- from: 0,
110
- limit: 10,
111
- };
112
-
113
- const serialized = await aztecGetPublicEventsSerializer.params.serialize(METHOD, params);
114
- expect(serialized.method).toBe(METHOD);
115
-
116
- const deserialized = await aztecGetPublicEventsSerializer.params.deserialize(METHOD, serialized);
117
- expect(deserialized.event.eventSelector.toString()).toBe(event.eventSelector.toString());
118
- expect(deserialized.event.abiType).toEqual(event.abiType);
119
- expect(deserialized.event.fieldNames).toEqual(event.fieldNames);
120
- expect(deserialized.from).toBe(params.from);
121
- expect(deserialized.limit).toBe(params.limit);
122
- });
123
- });
124
-
125
- describe('aztec_getContractClassLogs', () => {
126
- const METHOD = 'aztec_getContractClassLogs';
127
-
128
- it('should serialize and deserialize params with complete filter', async () => {
129
- const txHash = await TxHash.random();
130
- const contractAddress = await AztecAddress.random();
131
- const afterLog = await LogId.random();
132
-
133
- const filter: LogFilter = {
134
- txHash,
135
- fromBlock: 0,
136
- toBlock: 100,
137
- afterLog,
138
- contractAddress,
139
- };
140
-
141
- const params = { filter };
142
- const serialized = await aztecGetContractClassLogsSerializer.params.serialize(METHOD, params);
143
- expect(serialized.method).toBe(METHOD);
144
-
145
- const deserialized = await aztecGetContractClassLogsSerializer.params.deserialize(METHOD, serialized);
146
- expect(deserialized.filter.contractAddress?.toString()).toBe(filter.contractAddress?.toString());
147
- expect(deserialized.filter.txHash?.toString()).toBe(filter.txHash?.toString());
148
- expect(deserialized.filter.fromBlock).toBe(filter.fromBlock);
149
- expect(deserialized.filter.toBlock).toBe(filter.toBlock);
150
- expect(deserialized.filter.afterLog?.toString()).toBe(filter.afterLog?.toString());
151
- });
152
-
153
- it('should serialize and deserialize params with minimal filter', async () => {
154
- const filter: LogFilter = {
155
- fromBlock: 0,
156
- toBlock: 100,
157
- };
158
-
159
- const params = { filter };
160
- const serialized = await aztecGetContractClassLogsSerializer.params.serialize(METHOD, params);
161
- expect(serialized.method).toBe(METHOD);
162
-
163
- const deserialized = await aztecGetContractClassLogsSerializer.params.deserialize(METHOD, serialized);
164
- expect(deserialized.filter.contractAddress).toBeUndefined();
165
- expect(deserialized.filter.txHash).toBeUndefined();
166
- expect(deserialized.filter.fromBlock).toBe(filter.fromBlock);
167
- expect(deserialized.filter.toBlock).toBe(filter.toBlock);
168
- expect(deserialized.filter.afterLog).toBeUndefined();
169
- });
170
-
171
- it('should serialize and deserialize result', async () => {
172
- // Create a mock response that matches the schema
173
- const result: GetContractClassLogsResponse = {
174
- logs: [],
175
- maxLogsHit: false,
176
- };
177
-
178
- const serialized = await aztecGetContractClassLogsSerializer.result.serialize(METHOD, result);
179
- expect(serialized.method).toBe(METHOD);
180
-
181
- const deserialized = await aztecGetContractClassLogsSerializer.result.deserialize(METHOD, serialized);
182
- expect(deserialized.logs).toEqual([]);
183
- expect(deserialized.maxLogsHit).toBe(result.maxLogsHit);
184
- });
185
- });
186
-
187
- describe('aztec_getPrivateEvents result handling', () => {
188
- const METHOD = 'aztec_getPrivateEvents';
189
-
190
- it('should serialize and deserialize empty result array', async () => {
191
- const result: unknown[] = [];
192
- const serialized = await aztecGetPrivateEventsSerializer.result.serialize(METHOD, result);
193
- expect(serialized.method).toBe(METHOD);
194
-
195
- const deserialized = await aztecGetPrivateEventsSerializer.result.deserialize(METHOD, serialized);
196
- expect(deserialized).toEqual([]);
197
- });
198
-
199
- it('should serialize and deserialize result with multiple events', async () => {
200
- const result = [
201
- { id: 1, data: 'event1' },
202
- { id: 2, data: 'event2' },
203
- { id: 3, data: 'event3' },
204
- ];
205
-
206
- const serialized = await aztecGetPrivateEventsSerializer.result.serialize(METHOD, result);
207
- expect(serialized.method).toBe(METHOD);
208
-
209
- const deserialized = await aztecGetPrivateEventsSerializer.result.deserialize(METHOD, serialized);
210
- expect(deserialized).toEqual(result);
211
- });
212
- });
213
-
214
- describe('aztec_getPublicEvents result handling', () => {
215
- const METHOD = 'aztec_getPublicEvents';
216
-
217
- it('should serialize and deserialize empty result array', async () => {
218
- const result: unknown[] = [];
219
- const serialized = await aztecGetPublicEventsSerializer.result.serialize(METHOD, result);
220
- expect(serialized.method).toBe(METHOD);
221
-
222
- const deserialized = await aztecGetPublicEventsSerializer.result.deserialize(METHOD, serialized);
223
- expect(deserialized).toEqual([]);
224
- });
225
-
226
- it('should serialize and deserialize result with multiple events', async () => {
227
- const result = [
228
- { id: 1, data: 'event1' },
229
- { id: 2, data: 'event2' },
230
- { id: 3, data: 'event3' },
231
- ];
232
-
233
- const serialized = await aztecGetPublicEventsSerializer.result.serialize(METHOD, result);
234
- expect(serialized.method).toBe(METHOD);
235
-
236
- const deserialized = await aztecGetPublicEventsSerializer.result.deserialize(METHOD, serialized);
237
- expect(deserialized).toEqual(result);
238
- });
239
- });
240
-
241
- describe('Edge Cases', () => {
242
- it('should handle invalid JSON in deserialization', async () => {
243
- const METHOD = 'aztec_getPublicLogs';
244
- const invalidData = { method: METHOD, serialized: 'invalid json' };
245
-
246
- await expect(aztecGetPublicLogsSerializer.params.deserialize(METHOD, invalidData)).rejects.toThrow();
247
- });
248
-
249
- it('should handle malformed event selector', async () => {
250
- const METHOD = 'aztec_getPublicEvents';
251
- const params = {
252
- event: {
253
- // Create an invalid event selector by extending a valid one
254
- eventSelector: Object.create(EventSelector.fromString('0x12345678'), {
255
- toString: {
256
- value: () => {
257
- throw new Error('Invalid selector');
258
- },
259
- },
260
- }),
261
- abiType: { kind: 'field' } as AbiType,
262
- fieldNames: ['field1'],
263
- },
264
- from: 0,
265
- limit: 10,
266
- };
267
-
268
- await expect(aztecGetPublicEventsSerializer.params.serialize(METHOD, params)).rejects.toThrow();
269
- });
270
-
271
- it('should handle optional filter fields', async () => {
272
- const METHOD = 'aztec_getPublicLogs';
273
- const filter: LogFilter = {
274
- fromBlock: 0,
275
- toBlock: 0,
276
- };
277
-
278
- const params = { filter };
279
- const serialized = await aztecGetPublicLogsSerializer.params.serialize(METHOD, params);
280
- const deserialized = await aztecGetPublicLogsSerializer.params.deserialize(METHOD, serialized);
281
-
282
- expect(deserialized.filter.fromBlock).toBe(0);
283
- expect(deserialized.filter.toBlock).toBe(0);
284
- });
285
- });
286
- });
@@ -1,292 +0,0 @@
1
- import type { AztecWalletMethodMap } from '../types.js';
2
- import type { JSONRPCSerializedData, JSONRPCSerializer } from '@walletmesh/jsonrpc';
3
- import type { EventMetadataDefinition } from '@aztec/circuit-types';
4
- import {
5
- GetPublicLogsResponseSchema,
6
- GetContractClassLogsResponseSchema,
7
- TxHash,
8
- LogId,
9
- } from '@aztec/circuit-types';
10
- import { AztecAddress, type LogFilter, Point } from '@aztec/aztec.js';
11
- import { EventSelector } from '@aztec/foundation/abi';
12
-
13
- /**
14
- * Serializer for the aztec_getPublicLogs RPC method.
15
- * Handles serialization of public log queries and results between JSON-RPC format and native Aztec types.
16
- */
17
- export class AztecGetPublicLogsSerializer
18
- implements
19
- JSONRPCSerializer<
20
- AztecWalletMethodMap['aztec_getPublicLogs']['params'],
21
- AztecWalletMethodMap['aztec_getPublicLogs']['result']
22
- >
23
- {
24
- params = {
25
- serialize: async (
26
- method: string,
27
- value: AztecWalletMethodMap['aztec_getPublicLogs']['params'],
28
- ): Promise<JSONRPCSerializedData> => {
29
- const { filter } = value;
30
- // Convert all fields that need string conversion
31
- const serializedFilter = {
32
- ...filter,
33
- txHash: filter.txHash?.toString(),
34
- contractAddress: filter.contractAddress?.toString(),
35
- afterLog: filter.afterLog?.toString(),
36
- fromBlock: filter.fromBlock,
37
- toBlock: filter.toBlock,
38
- };
39
- return Promise.resolve({
40
- method,
41
- serialized: JSON.stringify({ filter: serializedFilter }),
42
- });
43
- },
44
- deserialize: async (
45
- _method: string,
46
- data: JSONRPCSerializedData,
47
- ): Promise<AztecWalletMethodMap['aztec_getPublicLogs']['params']> => {
48
- const { filter } = JSON.parse(data.serialized);
49
- const deserializedFilter: Partial<{
50
- txHash: TxHash;
51
- contractAddress: AztecAddress;
52
- afterLog: LogId;
53
- fromBlock: number;
54
- toBlock: number;
55
- }> = {};
56
-
57
- if (filter.txHash) deserializedFilter.txHash = TxHash.fromString(filter.txHash);
58
- if (filter.contractAddress)
59
- deserializedFilter.contractAddress = AztecAddress.fromString(filter.contractAddress);
60
- if (filter.afterLog) deserializedFilter.afterLog = LogId.fromString(filter.afterLog);
61
- if (filter.fromBlock !== undefined) deserializedFilter.fromBlock = filter.fromBlock;
62
- if (filter.toBlock !== undefined) deserializedFilter.toBlock = filter.toBlock;
63
-
64
- return Promise.resolve({ filter: deserializedFilter });
65
- },
66
- };
67
-
68
- result = {
69
- serialize: async (
70
- method: string,
71
- value: AztecWalletMethodMap['aztec_getPublicLogs']['result'],
72
- ): Promise<JSONRPCSerializedData> => {
73
- return Promise.resolve({
74
- method,
75
- serialized: JSON.stringify(value),
76
- });
77
- },
78
- deserialize: async (
79
- _method: string,
80
- data: JSONRPCSerializedData,
81
- ): Promise<AztecWalletMethodMap['aztec_getPublicLogs']['result']> => {
82
- return Promise.resolve(GetPublicLogsResponseSchema.parse(JSON.parse(data.serialized)));
83
- },
84
- };
85
- }
86
-
87
- /**
88
- * Serializer for the aztec_getContractClassLogs RPC method.
89
- * Handles serialization of contract class log queries and results between JSON-RPC format and native Aztec types.
90
- */
91
- export class AztecGetContractClassLogsSerializer
92
- implements
93
- JSONRPCSerializer<
94
- AztecWalletMethodMap['aztec_getContractClassLogs']['params'],
95
- AztecWalletMethodMap['aztec_getContractClassLogs']['result']
96
- >
97
- {
98
- params = {
99
- serialize: async (
100
- method: string,
101
- value: AztecWalletMethodMap['aztec_getContractClassLogs']['params'],
102
- ): Promise<JSONRPCSerializedData> => {
103
- const { filter } = value;
104
- // Convert fields to strings for schema validation
105
- const serializedFilter = {
106
- txHash: filter.txHash?.toString() ?? undefined,
107
- contractAddress: filter.contractAddress?.toString() ?? undefined,
108
- afterLog: filter.afterLog?.toString() ?? undefined,
109
- fromBlock: filter.fromBlock,
110
- toBlock: filter.toBlock,
111
- };
112
- return Promise.resolve({
113
- method,
114
- serialized: JSON.stringify({ filter: serializedFilter }),
115
- });
116
- },
117
- deserialize: async (
118
- _method: string,
119
- data: JSONRPCSerializedData,
120
- ): Promise<AztecWalletMethodMap['aztec_getContractClassLogs']['params']> => {
121
- const { filter } = JSON.parse(data.serialized);
122
- const deserializedFilter: LogFilter = {};
123
-
124
- if (filter.txHash) deserializedFilter.txHash = TxHash.fromString(filter.txHash);
125
- if (filter.contractAddress)
126
- deserializedFilter.contractAddress = AztecAddress.fromString(filter.contractAddress);
127
- if (filter.afterLog) deserializedFilter.afterLog = LogId.fromString(filter.afterLog);
128
- if (filter.fromBlock !== undefined) deserializedFilter.fromBlock = filter.fromBlock;
129
- if (filter.toBlock !== undefined) deserializedFilter.toBlock = filter.toBlock;
130
-
131
- return Promise.resolve({ filter: deserializedFilter });
132
- },
133
- };
134
-
135
- result = {
136
- serialize: async (
137
- method: string,
138
- value: AztecWalletMethodMap['aztec_getContractClassLogs']['result'],
139
- ): Promise<JSONRPCSerializedData> => {
140
- return Promise.resolve({
141
- method,
142
- serialized: JSON.stringify(GetContractClassLogsResponseSchema.parse(value)),
143
- });
144
- },
145
- deserialize: async (
146
- _method: string,
147
- data: JSONRPCSerializedData,
148
- ): Promise<AztecWalletMethodMap['aztec_getContractClassLogs']['result']> => {
149
- return Promise.resolve(GetContractClassLogsResponseSchema.parse(JSON.parse(data.serialized)));
150
- },
151
- };
152
- }
153
-
154
- /**
155
- * Serializer for the aztec_getPrivateEvents RPC method.
156
- * Handles serialization of private event queries and results between JSON-RPC format and native Aztec types.
157
- */
158
- export class AztecGetPrivateEventsSerializer
159
- implements
160
- JSONRPCSerializer<
161
- AztecWalletMethodMap['aztec_getPrivateEvents']['params'],
162
- AztecWalletMethodMap['aztec_getPrivateEvents']['result']
163
- >
164
- {
165
- params = {
166
- serialize: async (
167
- method: string,
168
- value: AztecWalletMethodMap['aztec_getPrivateEvents']['params'],
169
- ): Promise<JSONRPCSerializedData> => {
170
- const { event, from, limit, vpks } = value;
171
- return Promise.resolve({
172
- method,
173
- serialized: JSON.stringify({
174
- event: {
175
- eventSelector: event.eventSelector.toString(),
176
- abiType: {
177
- kind: event.abiType.kind,
178
- },
179
- fieldNames: event.fieldNames,
180
- },
181
- from,
182
- limit,
183
- vpks: vpks?.map((p) => p.toString()),
184
- }),
185
- });
186
- },
187
- deserialize: async (
188
- _method: string,
189
- data: JSONRPCSerializedData,
190
- ): Promise<AztecWalletMethodMap['aztec_getPrivateEvents']['params']> => {
191
- const { event: serializedEvent, from, limit, vpks } = JSON.parse(data.serialized);
192
- const event: EventMetadataDefinition = {
193
- eventSelector: EventSelector.fromString(serializedEvent.eventSelector),
194
- abiType: {
195
- kind: serializedEvent.abiType.kind,
196
- },
197
- fieldNames: serializedEvent.fieldNames,
198
- };
199
- return Promise.resolve({
200
- event,
201
- from,
202
- limit,
203
- vpks: vpks?.map((p: string) => Point.fromString(p)),
204
- });
205
- },
206
- };
207
-
208
- result = {
209
- serialize: async (method: string, value: unknown[]): Promise<JSONRPCSerializedData> => {
210
- return Promise.resolve({
211
- method,
212
- serialized: JSON.stringify(value),
213
- });
214
- },
215
- deserialize: async (_method: string, data: JSONRPCSerializedData): Promise<unknown[]> => {
216
- return Promise.resolve(JSON.parse(data.serialized));
217
- },
218
- };
219
- }
220
-
221
- /**
222
- * Serializer for the aztec_getPublicEvents RPC method.
223
- * Handles serialization of public event queries and results between JSON-RPC format and native Aztec types.
224
- */
225
- export class AztecGetPublicEventsSerializer
226
- implements
227
- JSONRPCSerializer<
228
- AztecWalletMethodMap['aztec_getPublicEvents']['params'],
229
- AztecWalletMethodMap['aztec_getPublicEvents']['result']
230
- >
231
- {
232
- params = {
233
- serialize: async (
234
- method: string,
235
- value: AztecWalletMethodMap['aztec_getPublicEvents']['params'],
236
- ): Promise<JSONRPCSerializedData> => {
237
- const { event, from, limit } = value;
238
- return Promise.resolve({
239
- method,
240
- serialized: JSON.stringify({
241
- event: {
242
- eventSelector: event.eventSelector.toString(),
243
- abiType: {
244
- kind: event.abiType.kind,
245
- },
246
- fieldNames: event.fieldNames,
247
- },
248
- from,
249
- limit,
250
- }),
251
- });
252
- },
253
- deserialize: async (
254
- _method: string,
255
- data: JSONRPCSerializedData,
256
- ): Promise<AztecWalletMethodMap['aztec_getPublicEvents']['params']> => {
257
- const { event: serializedEvent, from, limit } = JSON.parse(data.serialized);
258
- const event: EventMetadataDefinition = {
259
- eventSelector: EventSelector.fromString(serializedEvent.eventSelector),
260
- abiType: {
261
- kind: serializedEvent.abiType.kind,
262
- },
263
- fieldNames: serializedEvent.fieldNames,
264
- };
265
- return Promise.resolve({
266
- event,
267
- from,
268
- limit,
269
- });
270
- },
271
- };
272
-
273
- result = {
274
- serialize: async (method: string, value: unknown[]): Promise<JSONRPCSerializedData> => {
275
- return Promise.resolve({
276
- method,
277
- serialized: JSON.stringify(value),
278
- });
279
- },
280
- deserialize: async (_method: string, data: JSONRPCSerializedData): Promise<unknown[]> => {
281
- return Promise.resolve(JSON.parse(data.serialized));
282
- },
283
- };
284
- }
285
-
286
- /**
287
- * Pre-instantiated serializer instances for each Aztec log/event-related RPC method.
288
- */
289
- export const aztecGetPublicLogsSerializer = new AztecGetPublicLogsSerializer();
290
- export const aztecGetContractClassLogsSerializer = new AztecGetContractClassLogsSerializer();
291
- export const aztecGetPrivateEventsSerializer = new AztecGetPrivateEventsSerializer();
292
- export const aztecGetPublicEventsSerializer = new AztecGetPublicEventsSerializer();
@@ -1,125 +0,0 @@
1
- import { describe, expect, it } from 'vitest';
2
- import { Fr, AztecAddress, ExtendedNote } from '@aztec/aztec.js';
3
- import { type NotesFilter, NoteStatus, TxHash, UniqueNote } from '@aztec/circuit-types';
4
- import { aztecGetNotesSerializer, aztecAddNoteSerializer, aztecAddNullifiedNoteSerializer } from './note.js';
5
-
6
- describe('Note Serializers', () => {
7
- describe('aztec_getNotes', () => {
8
- const METHOD = 'aztec_getNotes';
9
-
10
- it('should serialize and deserialize params', async () => {
11
- const filter: NotesFilter = {
12
- txHash: await TxHash.random(),
13
- contractAddress: await AztecAddress.random(),
14
- storageSlot: await Fr.random(),
15
- owner: await AztecAddress.random(),
16
- status: NoteStatus.ACTIVE,
17
- siloedNullifier: await Fr.random(),
18
- scopes: [await AztecAddress.random()],
19
- };
20
- const params = { filter };
21
-
22
- const serialized = await aztecGetNotesSerializer.params.serialize(METHOD, params);
23
- expect(serialized.method).toBe(METHOD);
24
-
25
- const deserialized = await aztecGetNotesSerializer.params.deserialize(METHOD, serialized);
26
- expect(deserialized.filter.txHash?.toString()).toBe(filter.txHash?.toString());
27
- expect(deserialized.filter.contractAddress?.toString()).toBe(filter.contractAddress?.toString());
28
- expect(deserialized.filter.storageSlot?.toString()).toBe(filter.storageSlot?.toString());
29
- expect(deserialized.filter.owner?.toString()).toBe(filter.owner?.toString());
30
- expect(deserialized.filter.status).toBe(filter.status);
31
- expect(deserialized.filter.siloedNullifier?.toString()).toBe(filter.siloedNullifier?.toString());
32
- expect(deserialized.filter.scopes?.map((s) => s.toString())).toEqual(
33
- filter.scopes?.map((s) => s.toString()),
34
- );
35
- });
36
-
37
- it('should serialize and deserialize result', async () => {
38
- const result = [await UniqueNote.random(), await UniqueNote.random()];
39
-
40
- const serialized = await aztecGetNotesSerializer.result.serialize(METHOD, result);
41
- expect(serialized.method).toBe(METHOD);
42
-
43
- const deserialized = await aztecGetNotesSerializer.result.deserialize(METHOD, serialized);
44
- expect(deserialized.map((note: UniqueNote) => note.toString())).toEqual(
45
- result.map((note: UniqueNote) => note.toString()),
46
- );
47
- });
48
- });
49
-
50
- describe('aztec_addNote', () => {
51
- const METHOD = 'aztec_addNote';
52
-
53
- it('should serialize and deserialize params', async () => {
54
- const note = await ExtendedNote.random();
55
- const params = { note };
56
-
57
- const serialized = await aztecAddNoteSerializer.params.serialize(METHOD, params);
58
- expect(serialized.method).toBe(METHOD);
59
-
60
- const deserialized = await aztecAddNoteSerializer.params.deserialize(METHOD, serialized);
61
- expect(deserialized.note.toBuffer().toString('hex')).toBe(note.toBuffer().toString('hex'));
62
- });
63
-
64
- it('should serialize and deserialize result', async () => {
65
- const result = true;
66
-
67
- const serialized = await aztecAddNoteSerializer.result.serialize(METHOD, result);
68
- expect(serialized.method).toBe(METHOD);
69
-
70
- const deserialized = await aztecAddNoteSerializer.result.deserialize(METHOD, serialized);
71
- expect(deserialized).toBe(result);
72
- });
73
- });
74
-
75
- describe('aztec_addNullifiedNote', () => {
76
- const METHOD = 'aztec_addNullifiedNote';
77
-
78
- it('should serialize and deserialize params', async () => {
79
- const note = await ExtendedNote.random();
80
- const params = { note };
81
-
82
- const serialized = await aztecAddNullifiedNoteSerializer.params.serialize(METHOD, params);
83
- expect(serialized.method).toBe(METHOD);
84
-
85
- const deserialized = await aztecAddNullifiedNoteSerializer.params.deserialize(METHOD, serialized);
86
- expect(deserialized.note.toBuffer().toString('hex')).toBe(note.toBuffer().toString('hex'));
87
- });
88
-
89
- it('should serialize and deserialize result', async () => {
90
- const result = true;
91
-
92
- const serialized = await aztecAddNullifiedNoteSerializer.result.serialize(METHOD, result);
93
- expect(serialized.method).toBe(METHOD);
94
-
95
- const deserialized = await aztecAddNullifiedNoteSerializer.result.deserialize(METHOD, serialized);
96
- expect(deserialized).toBe(result);
97
- });
98
- });
99
-
100
- describe('Edge Cases', () => {
101
- it('should handle invalid JSON in deserialization', async () => {
102
- const METHOD = 'aztec_getNotes';
103
- const invalidData = { method: METHOD, serialized: 'invalid json' };
104
-
105
- await expect(aztecGetNotesSerializer.params.deserialize(METHOD, invalidData)).rejects.toThrow();
106
- });
107
-
108
- it('should handle empty filter fields', async () => {
109
- const METHOD = 'aztec_getNotes';
110
- const filter: NotesFilter = {};
111
- const params = { filter };
112
-
113
- const serialized = await aztecGetNotesSerializer.params.serialize(METHOD, params);
114
- const deserialized = await aztecGetNotesSerializer.params.deserialize(METHOD, serialized);
115
-
116
- expect(deserialized.filter.txHash).toBeUndefined();
117
- expect(deserialized.filter.contractAddress).toBeUndefined();
118
- expect(deserialized.filter.storageSlot).toBeUndefined();
119
- expect(deserialized.filter.owner).toBeUndefined();
120
- expect(deserialized.filter.status).toBeUndefined();
121
- expect(deserialized.filter.siloedNullifier).toBeUndefined();
122
- expect(deserialized.filter.scopes).toBeUndefined();
123
- });
124
- });
125
- });