@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,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();