@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,283 @@
1
+ import type { AztecWalletMethodMap } from '../types.js';
2
+ import type { JSONRPCSerializedData, JSONRPCSerializer } from './types.js';
3
+ import { encodeBase64, decodeBase64 } from './types.js';
4
+ import type { EventMetadataDefinition } from '@aztec/circuit-types';
5
+ import { ExtendedUnencryptedL2Log, TxHash, LogId } from '@aztec/circuit-types';
6
+ import { Point, AztecAddress } from '@aztec/aztec.js';
7
+ import { EventSelector, AbiTypeSchema } from '@aztec/foundation/abi';
8
+ import type { LogFilter } from '@aztec/aztec.js';
9
+
10
+ /**
11
+ * Serializer for the aztec_getUnencryptedLogs RPC method.
12
+ * Handles serialization of unencrypted log queries and results between JSON-RPC format and native Aztec types.
13
+ * Supports filtering logs by transaction hash, block range, and contract address.
14
+ */
15
+ export class AztecGetUnencryptedLogsSerializer
16
+ implements
17
+ JSONRPCSerializer<
18
+ AztecWalletMethodMap['aztec_getUnencryptedLogs']['params'],
19
+ AztecWalletMethodMap['aztec_getUnencryptedLogs']['result']
20
+ >
21
+ {
22
+ params = {
23
+ /**
24
+ * Serializes log filter parameters for RPC transport.
25
+ * @param method - The RPC method name
26
+ * @param value - The filter parameters including txHash, block range, and contract address
27
+ * @returns Serialized filter data
28
+ */
29
+ serialize: (
30
+ method: string,
31
+ value: AztecWalletMethodMap['aztec_getUnencryptedLogs']['params'],
32
+ ): JSONRPCSerializedData => {
33
+ const { filter } = value;
34
+ return {
35
+ method,
36
+ serialized: encodeBase64(
37
+ JSON.stringify({
38
+ txHash: filter.txHash?.toString(),
39
+ fromBlock: filter.fromBlock,
40
+ toBlock: filter.toBlock,
41
+ afterLog: filter.afterLog?.toString(),
42
+ contractAddress: filter.contractAddress?.toString(),
43
+ }),
44
+ ),
45
+ };
46
+ },
47
+ /**
48
+ * Deserializes log filter parameters from RPC transport.
49
+ * @param method - The RPC method name
50
+ * @param data - The serialized filter data
51
+ * @returns Deserialized filter parameters
52
+ */
53
+ deserialize: (
54
+ method: string,
55
+ data: JSONRPCSerializedData,
56
+ ): AztecWalletMethodMap['aztec_getUnencryptedLogs']['params'] => {
57
+ const parsed = JSON.parse(decodeBase64(data.serialized));
58
+ const filter: LogFilter = {
59
+ txHash: parsed.txHash ? TxHash.fromString(parsed.txHash) : undefined,
60
+ fromBlock: parsed.fromBlock,
61
+ toBlock: parsed.toBlock,
62
+ afterLog: parsed.afterLog ? LogId.fromString(parsed.afterLog) : undefined,
63
+ contractAddress: parsed.contractAddress ? AztecAddress.fromString(parsed.contractAddress) : undefined,
64
+ };
65
+ return { filter };
66
+ },
67
+ };
68
+
69
+ result = {
70
+ /**
71
+ * Serializes unencrypted log results for RPC transport.
72
+ * @param method - The RPC method name
73
+ * @param value - The log results including logs array and maxLogsHit flag
74
+ * @returns Serialized log data
75
+ */
76
+ serialize: (
77
+ method: string,
78
+ value: AztecWalletMethodMap['aztec_getUnencryptedLogs']['result'],
79
+ ): JSONRPCSerializedData => {
80
+ const serializedLogs = value.logs.map((log) => log.toString());
81
+ return {
82
+ method,
83
+ serialized: encodeBase64(JSON.stringify({ serializedLogs, maxLogsHit: value.maxLogsHit })),
84
+ };
85
+ },
86
+ /**
87
+ * Deserializes unencrypted log results from RPC transport.
88
+ * @param method - The RPC method name
89
+ * @param data - The serialized log data
90
+ * @returns Deserialized log results
91
+ */
92
+ deserialize: (
93
+ method: string,
94
+ data: JSONRPCSerializedData,
95
+ ): AztecWalletMethodMap['aztec_getUnencryptedLogs']['result'] => {
96
+ const { serializedLogs, maxLogsHit } = JSON.parse(decodeBase64(data.serialized));
97
+ return {
98
+ logs: serializedLogs.map((log: string) => ExtendedUnencryptedL2Log.fromString(log)),
99
+ maxLogsHit,
100
+ };
101
+ },
102
+ };
103
+ }
104
+
105
+ /**
106
+ * Serializer for the aztec_getEncryptedEvents RPC method.
107
+ * Handles serialization of encrypted event queries and results between JSON-RPC format and native Aztec types.
108
+ * Supports querying events with viewing keys for decryption.
109
+ */
110
+ export class AztecGetEncryptedEventsSerializer
111
+ implements
112
+ JSONRPCSerializer<
113
+ AztecWalletMethodMap['aztec_getEncryptedEvents']['params'],
114
+ AztecWalletMethodMap['aztec_getEncryptedEvents']['result']
115
+ >
116
+ {
117
+ params = {
118
+ /**
119
+ * Serializes encrypted event query parameters for RPC transport.
120
+ * @param method - The RPC method name
121
+ * @param value - The query parameters including event metadata, range, and viewing keys
122
+ * @returns Serialized query data
123
+ */
124
+ serialize: (
125
+ method: string,
126
+ value: AztecWalletMethodMap['aztec_getEncryptedEvents']['params'],
127
+ ): JSONRPCSerializedData => {
128
+ const { event, from, limit, vpks } = value;
129
+ return {
130
+ method,
131
+ serialized: encodeBase64(
132
+ JSON.stringify({
133
+ event: {
134
+ eventSelector: event.eventSelector.toString(),
135
+ abiType: {
136
+ kind: event.abiType.kind,
137
+ },
138
+ fieldNames: event.fieldNames,
139
+ },
140
+ from,
141
+ limit,
142
+ vpks: vpks?.map((p) => p.toString()),
143
+ }),
144
+ ),
145
+ };
146
+ },
147
+ /**
148
+ * Deserializes encrypted event query parameters from RPC transport.
149
+ * @param method - The RPC method name
150
+ * @param data - The serialized query data
151
+ * @returns Deserialized query parameters
152
+ */
153
+ deserialize: (
154
+ method: string,
155
+ data: JSONRPCSerializedData,
156
+ ): AztecWalletMethodMap['aztec_getEncryptedEvents']['params'] => {
157
+ const { event: serializedEvent, from, limit, vpks } = JSON.parse(decodeBase64(data.serialized));
158
+ const event: EventMetadataDefinition = {
159
+ eventSelector: EventSelector.fromString(serializedEvent.eventSelector),
160
+ abiType: {
161
+ kind: serializedEvent.abiType.kind,
162
+ },
163
+ fieldNames: serializedEvent.fieldNames,
164
+ };
165
+ return {
166
+ event,
167
+ from,
168
+ limit,
169
+ vpks: vpks?.map((p: string) => Point.fromString(p)),
170
+ };
171
+ },
172
+ };
173
+
174
+ /**
175
+ * Handles serialization of encrypted event results.
176
+ * Note: The result type is generic (T[]) based on the event's ABI type definition.
177
+ * Currently handles results as unknown[] until proper ABI-based deserialization is implemented.
178
+ */
179
+ result = {
180
+ serialize: (method: string, value: unknown[]): JSONRPCSerializedData => {
181
+ return {
182
+ method,
183
+ serialized: encodeBase64(JSON.stringify(value)),
184
+ };
185
+ },
186
+ deserialize: (method: string, data: JSONRPCSerializedData): unknown[] => {
187
+ return JSON.parse(decodeBase64(data.serialized));
188
+ },
189
+ };
190
+ }
191
+
192
+ /**
193
+ * Serializer for the aztec_getUnencryptedEvents RPC method.
194
+ * Handles serialization of unencrypted event queries and results between JSON-RPC format and native Aztec types.
195
+ * Supports querying events by event selector and pagination parameters.
196
+ */
197
+ export class AztecGetUnencryptedEventsSerializer
198
+ implements
199
+ JSONRPCSerializer<
200
+ AztecWalletMethodMap['aztec_getUnencryptedEvents']['params'],
201
+ AztecWalletMethodMap['aztec_getUnencryptedEvents']['result']
202
+ >
203
+ {
204
+ params = {
205
+ /**
206
+ * Serializes unencrypted event query parameters for RPC transport.
207
+ * @param method - The RPC method name
208
+ * @param value - The query parameters including event metadata and range
209
+ * @returns Serialized query data
210
+ */
211
+ serialize: (
212
+ method: string,
213
+ value: AztecWalletMethodMap['aztec_getUnencryptedEvents']['params'],
214
+ ): JSONRPCSerializedData => {
215
+ const { event, from, limit } = value;
216
+ return {
217
+ method,
218
+ serialized: encodeBase64(
219
+ JSON.stringify({
220
+ event: {
221
+ eventSelector: event.eventSelector.toString(),
222
+ abiType: {
223
+ kind: event.abiType.kind,
224
+ },
225
+ fieldNames: event.fieldNames,
226
+ },
227
+ from,
228
+ limit,
229
+ }),
230
+ ),
231
+ };
232
+ },
233
+ /**
234
+ * Deserializes unencrypted event query parameters from RPC transport.
235
+ * @param method - The RPC method name
236
+ * @param data - The serialized query data
237
+ * @returns Deserialized query parameters
238
+ */
239
+ deserialize: (
240
+ method: string,
241
+ data: JSONRPCSerializedData,
242
+ ): AztecWalletMethodMap['aztec_getUnencryptedEvents']['params'] => {
243
+ const { event: serializedEvent, from, limit } = JSON.parse(decodeBase64(data.serialized));
244
+ const event: EventMetadataDefinition = {
245
+ eventSelector: EventSelector.fromString(serializedEvent.eventSelector),
246
+ abiType: {
247
+ kind: serializedEvent.abiType.kind,
248
+ },
249
+ fieldNames: serializedEvent.fieldNames,
250
+ };
251
+ return {
252
+ event,
253
+ from,
254
+ limit,
255
+ };
256
+ },
257
+ };
258
+
259
+ /**
260
+ * Handles serialization of unencrypted event results.
261
+ * Note: The result type is generic (T[]) based on the event's ABI type definition.
262
+ * Currently handles results as unknown[] until proper ABI-based deserialization is implemented.
263
+ */
264
+ result = {
265
+ serialize: (method: string, value: unknown[]): JSONRPCSerializedData => {
266
+ return {
267
+ method,
268
+ serialized: encodeBase64(JSON.stringify(value)),
269
+ };
270
+ },
271
+ deserialize: (method: string, data: JSONRPCSerializedData): unknown[] => {
272
+ return JSON.parse(decodeBase64(data.serialized));
273
+ },
274
+ };
275
+ }
276
+
277
+ /**
278
+ * Pre-instantiated serializer instances for each Aztec log/event-related RPC method.
279
+ * These instances can be used directly by the RPC handler implementation.
280
+ */
281
+ export const aztecGetUnencryptedLogsSerializer = new AztecGetUnencryptedLogsSerializer();
282
+ export const aztecGetEncryptedEventsSerializer = new AztecGetEncryptedEventsSerializer();
283
+ export const aztecGetUnencryptedEventsSerializer = new AztecGetUnencryptedEventsSerializer();
@@ -0,0 +1,100 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { Fr, AztecAddress, ExtendedNote } from '@aztec/aztec.js';
3
+ import { type IncomingNotesFilter, NoteStatus, TxHash, UniqueNote } from '@aztec/circuit-types';
4
+ import {
5
+ aztecGetIncomingNotesSerializer,
6
+ aztecAddNoteSerializer,
7
+ aztecAddNullifiedNoteSerializer,
8
+ } from './note.js';
9
+
10
+ describe('Note Serializers', () => {
11
+ describe('aztec_getIncomingNotes', () => {
12
+ const METHOD = 'aztec_getIncomingNotes';
13
+
14
+ it('should serialize and deserialize params', () => {
15
+ const filter: IncomingNotesFilter = {
16
+ txHash: TxHash.random(),
17
+ contractAddress: AztecAddress.random(),
18
+ storageSlot: Fr.random(),
19
+ owner: AztecAddress.random(),
20
+ status: NoteStatus.ACTIVE,
21
+ siloedNullifier: Fr.random(),
22
+ scopes: [AztecAddress.random()],
23
+ };
24
+ const params = { filter };
25
+ const serialized = aztecGetIncomingNotesSerializer.params.serialize(METHOD, params);
26
+ expect(serialized.method).toBe(METHOD);
27
+
28
+ const deserialized = aztecGetIncomingNotesSerializer.params.deserialize(METHOD, serialized);
29
+ expect(deserialized.filter.txHash?.toString()).toBe(filter.txHash?.toString());
30
+ expect(deserialized.filter.contractAddress?.toString()).toBe(filter.contractAddress?.toString());
31
+ expect(deserialized.filter.storageSlot?.toString()).toBe(filter.storageSlot?.toString());
32
+ expect(deserialized.filter.owner?.toString()).toBe(filter.owner?.toString());
33
+ expect(deserialized.filter.status).toBe(filter.status);
34
+ expect(deserialized.filter.siloedNullifier?.toString()).toBe(filter.siloedNullifier?.toString());
35
+ expect(deserialized.filter.scopes?.map((a) => a.toString())).toEqual(
36
+ filter.scopes?.map((a) => a.toString()),
37
+ );
38
+ });
39
+
40
+ it('should serialize and deserialize result', () => {
41
+ const result = [UniqueNote.random(), UniqueNote.random()];
42
+
43
+ const serialized = aztecGetIncomingNotesSerializer.result.serialize(METHOD, result);
44
+ expect(serialized.method).toBe(METHOD);
45
+
46
+ const deserialized = aztecGetIncomingNotesSerializer.result.deserialize(METHOD, serialized);
47
+ expect(deserialized.map((n) => n.toString())).toEqual(result.map((n) => n.toString()));
48
+ });
49
+ });
50
+
51
+ describe('aztec_addNote', () => {
52
+ const METHOD = 'aztec_addNote';
53
+
54
+ it('should serialize and deserialize params', () => {
55
+ const note = ExtendedNote.random();
56
+ const params = { note };
57
+
58
+ const serialized = aztecAddNoteSerializer.params.serialize(METHOD, params);
59
+ expect(serialized.method).toBe(METHOD);
60
+
61
+ const deserialized = aztecAddNoteSerializer.params.deserialize(METHOD, serialized);
62
+ expect(deserialized.note.toBuffer().toString('hex')).toBe(note.toBuffer().toString('hex'));
63
+ });
64
+
65
+ it('should serialize and deserialize result', () => {
66
+ const result = true;
67
+
68
+ const serialized = aztecAddNoteSerializer.result.serialize(METHOD, result);
69
+ expect(serialized.method).toBe(METHOD);
70
+
71
+ const deserialized = aztecAddNoteSerializer.result.deserialize(METHOD, serialized);
72
+ expect(deserialized).toBe(result);
73
+ });
74
+ });
75
+
76
+ describe('aztec_addNullifiedNote', () => {
77
+ const METHOD = 'aztec_addNullifiedNote';
78
+
79
+ it('should serialize and deserialize params', () => {
80
+ const note = ExtendedNote.random();
81
+ const params = { note };
82
+
83
+ const serialized = aztecAddNullifiedNoteSerializer.params.serialize(METHOD, params);
84
+ expect(serialized.method).toBe(METHOD);
85
+
86
+ const deserialized = aztecAddNullifiedNoteSerializer.params.deserialize(METHOD, serialized);
87
+ expect(deserialized.note.toBuffer().toString('hex')).toBe(note.toBuffer().toString('hex'));
88
+ });
89
+
90
+ it('should serialize and deserialize result', () => {
91
+ const result = true;
92
+
93
+ const serialized = aztecAddNullifiedNoteSerializer.result.serialize(METHOD, result);
94
+ expect(serialized.method).toBe(METHOD);
95
+
96
+ const deserialized = aztecAddNullifiedNoteSerializer.result.deserialize(METHOD, serialized);
97
+ expect(deserialized).toBe(result);
98
+ });
99
+ });
100
+ });
@@ -0,0 +1,227 @@
1
+ import type { AztecWalletMethodMap } from '../types.js';
2
+ import type { JSONRPCSerializedData, JSONRPCSerializer } from './types.js';
3
+ import { encodeBase64, decodeBase64 } from './types.js';
4
+ import type { IncomingNotesFilter } from '@aztec/circuit-types';
5
+ import { UniqueNote } from '@aztec/circuit-types';
6
+ import { ExtendedNote } from '@aztec/aztec.js';
7
+
8
+ /**
9
+ * Serializer for the aztec_getIncomingNotes RPC method.
10
+ * Handles serialization of incoming note queries and results between JSON-RPC format and native Aztec types.
11
+ * Used to retrieve notes that have been sent to an account but not yet processed.
12
+ */
13
+ export class AztecGetIncomingNotesSerializer
14
+ implements
15
+ JSONRPCSerializer<
16
+ AztecWalletMethodMap['aztec_getIncomingNotes']['params'],
17
+ AztecWalletMethodMap['aztec_getIncomingNotes']['result']
18
+ >
19
+ {
20
+ params = {
21
+ /**
22
+ * Serializes incoming notes filter parameters for RPC transport.
23
+ * @param method - The RPC method name
24
+ * @param value - The parameters containing filter criteria for incoming notes
25
+ * @returns Serialized filter data
26
+ */
27
+ serialize: (
28
+ method: string,
29
+ value: AztecWalletMethodMap['aztec_getIncomingNotes']['params'],
30
+ ): JSONRPCSerializedData => {
31
+ const { filter } = value;
32
+ return {
33
+ method,
34
+ serialized: encodeBase64(JSON.stringify(filter)),
35
+ };
36
+ },
37
+ /**
38
+ * Deserializes incoming notes filter parameters from RPC transport.
39
+ * @param method - The RPC method name
40
+ * @param data - The serialized filter data
41
+ * @returns Deserialized filter parameters
42
+ */
43
+ deserialize: (
44
+ method: string,
45
+ data: JSONRPCSerializedData,
46
+ ): AztecWalletMethodMap['aztec_getIncomingNotes']['params'] => {
47
+ const filter = JSON.parse(decodeBase64(data.serialized)) as IncomingNotesFilter;
48
+ return { filter };
49
+ },
50
+ };
51
+
52
+ result = {
53
+ /**
54
+ * Serializes the incoming notes query result.
55
+ * @param method - The RPC method name
56
+ * @param value - Array of unique notes matching the filter criteria
57
+ * @returns Serialized note array
58
+ */
59
+ serialize: (
60
+ method: string,
61
+ value: AztecWalletMethodMap['aztec_getIncomingNotes']['result'],
62
+ ): JSONRPCSerializedData => {
63
+ return {
64
+ method,
65
+ serialized: encodeBase64(JSON.stringify(value.map((n) => n.toString()))),
66
+ };
67
+ },
68
+ /**
69
+ * Deserializes the incoming notes query result.
70
+ * @param method - The RPC method name
71
+ * @param data - The serialized note array data
72
+ * @returns Array of deserialized unique notes
73
+ */
74
+ deserialize: (
75
+ method: string,
76
+ data: JSONRPCSerializedData,
77
+ ): AztecWalletMethodMap['aztec_getIncomingNotes']['result'] => {
78
+ return JSON.parse(decodeBase64(data.serialized)).map((n: string) => UniqueNote.fromString(n));
79
+ },
80
+ };
81
+ }
82
+
83
+ /**
84
+ * Serializer for the aztec_addNote RPC method.
85
+ * Handles serialization of note addition requests between JSON-RPC format and native Aztec types.
86
+ * Used to add new notes to an account's note tree.
87
+ */
88
+ export class AztecAddNoteSerializer
89
+ implements
90
+ JSONRPCSerializer<
91
+ AztecWalletMethodMap['aztec_addNote']['params'],
92
+ AztecWalletMethodMap['aztec_addNote']['result']
93
+ >
94
+ {
95
+ params = {
96
+ /**
97
+ * Serializes note addition parameters for RPC transport.
98
+ * @param method - The RPC method name
99
+ * @param value - The parameters containing the note to add
100
+ * @returns Serialized note data
101
+ */
102
+ serialize: (
103
+ method: string,
104
+ value: AztecWalletMethodMap['aztec_addNote']['params'],
105
+ ): JSONRPCSerializedData => {
106
+ const { note } = value;
107
+ return {
108
+ method,
109
+ serialized: encodeBase64(note.toBuffer().toString('hex')),
110
+ };
111
+ },
112
+ /**
113
+ * Deserializes note addition parameters from RPC transport.
114
+ * @param method - The RPC method name
115
+ * @param data - The serialized note data
116
+ * @returns Deserialized note parameters
117
+ */
118
+ deserialize: (
119
+ method: string,
120
+ data: JSONRPCSerializedData,
121
+ ): AztecWalletMethodMap['aztec_addNote']['params'] => {
122
+ const note = ExtendedNote.fromBuffer(Buffer.from(decodeBase64(data.serialized), 'hex'));
123
+ return { note };
124
+ },
125
+ };
126
+
127
+ result = {
128
+ /**
129
+ * Serializes the note addition result.
130
+ * @param method - The RPC method name
131
+ * @param value - Boolean indicating success of the note addition
132
+ * @returns Serialized result
133
+ */
134
+ serialize: (method: string, value: boolean): JSONRPCSerializedData => {
135
+ return {
136
+ method,
137
+ serialized: encodeBase64(JSON.stringify(value)),
138
+ };
139
+ },
140
+ /**
141
+ * Deserializes the note addition result.
142
+ * @param method - The RPC method name
143
+ * @param data - The serialized result data
144
+ * @returns Boolean indicating success
145
+ */
146
+ deserialize: (method: string, data: JSONRPCSerializedData): boolean => {
147
+ return JSON.parse(decodeBase64(data.serialized));
148
+ },
149
+ };
150
+ }
151
+
152
+ /**
153
+ * Serializer for the aztec_addNullifiedNote RPC method.
154
+ * Handles serialization of nullified note addition requests between JSON-RPC format and native Aztec types.
155
+ * Used to mark notes as spent/nullified in the note tree.
156
+ */
157
+ export class AztecAddNullifiedNoteSerializer
158
+ implements
159
+ JSONRPCSerializer<
160
+ AztecWalletMethodMap['aztec_addNullifiedNote']['params'],
161
+ AztecWalletMethodMap['aztec_addNullifiedNote']['result']
162
+ >
163
+ {
164
+ params = {
165
+ /**
166
+ * Serializes nullified note addition parameters for RPC transport.
167
+ * @param method - The RPC method name
168
+ * @param value - The parameters containing the nullified note to add
169
+ * @returns Serialized note data
170
+ */
171
+ serialize: (
172
+ method: string,
173
+ value: AztecWalletMethodMap['aztec_addNullifiedNote']['params'],
174
+ ): JSONRPCSerializedData => {
175
+ const { note } = value;
176
+ return {
177
+ method,
178
+ serialized: encodeBase64(note.toBuffer().toString('hex')),
179
+ };
180
+ },
181
+ /**
182
+ * Deserializes nullified note addition parameters from RPC transport.
183
+ * @param method - The RPC method name
184
+ * @param data - The serialized note data
185
+ * @returns Deserialized note parameters
186
+ */
187
+ deserialize: (
188
+ method: string,
189
+ data: JSONRPCSerializedData,
190
+ ): AztecWalletMethodMap['aztec_addNullifiedNote']['params'] => {
191
+ const note = ExtendedNote.fromBuffer(Buffer.from(decodeBase64(data.serialized), 'hex'));
192
+ return { note };
193
+ },
194
+ };
195
+
196
+ result = {
197
+ /**
198
+ * Serializes the nullified note addition result.
199
+ * @param method - The RPC method name
200
+ * @param value - Boolean indicating success of the nullified note addition
201
+ * @returns Serialized result
202
+ */
203
+ serialize: (method: string, value: boolean): JSONRPCSerializedData => {
204
+ return {
205
+ method,
206
+ serialized: encodeBase64(JSON.stringify(value)),
207
+ };
208
+ },
209
+ /**
210
+ * Deserializes the nullified note addition result.
211
+ * @param method - The RPC method name
212
+ * @param data - The serialized result data
213
+ * @returns Boolean indicating success
214
+ */
215
+ deserialize: (method: string, data: JSONRPCSerializedData): boolean => {
216
+ return JSON.parse(decodeBase64(data.serialized));
217
+ },
218
+ };
219
+ }
220
+
221
+ /**
222
+ * Pre-instantiated serializer instances for Aztec note-related RPC methods.
223
+ * These instances can be used directly by the RPC handler implementation.
224
+ */
225
+ export const aztecGetIncomingNotesSerializer = new AztecGetIncomingNotesSerializer();
226
+ export const aztecAddNoteSerializer = new AztecAddNoteSerializer();
227
+ export const aztecAddNullifiedNoteSerializer = new AztecAddNullifiedNoteSerializer();