@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.
- package/CHANGELOG.md +7 -0
- package/LICENSE +201 -0
- package/README.md +260 -0
- package/dist/.tsbuildinfo +1 -0
- package/dist/aztecRemoteWallet.d.ts +73 -0
- package/dist/aztecRemoteWallet.d.ts.map +1 -0
- package/dist/aztecRemoteWallet.js +354 -0
- package/dist/chainProvider.d.ts +56 -0
- package/dist/chainProvider.d.ts.map +1 -0
- package/dist/chainProvider.js +98 -0
- package/dist/contractArtifactCache.d.ts +50 -0
- package/dist/contractArtifactCache.d.ts.map +1 -0
- package/dist/contractArtifactCache.js +66 -0
- package/dist/errors.d.ts +50 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +62 -0
- package/dist/handlers/aztecAccountWallet.d.ts +4 -0
- package/dist/handlers/aztecAccountWallet.d.ts.map +1 -0
- package/dist/handlers/aztecAccountWallet.js +329 -0
- package/dist/handlers/transactions.d.ts +21 -0
- package/dist/handlers/transactions.d.ts.map +1 -0
- package/dist/handlers/transactions.js +90 -0
- package/dist/handlers.d.ts +27 -0
- package/dist/handlers.d.ts.map +1 -0
- package/dist/handlers.js +55 -0
- package/dist/index.d.ts +58 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +33 -0
- package/dist/provider.d.ts +105 -0
- package/dist/provider.d.ts.map +1 -0
- package/dist/provider.js +160 -0
- package/dist/serializers/account.d.ts +167 -0
- package/dist/serializers/account.d.ts.map +1 -0
- package/dist/serializers/account.js +245 -0
- package/dist/serializers/contract-utils.d.ts +40 -0
- package/dist/serializers/contract-utils.d.ts.map +1 -0
- package/dist/serializers/contract-utils.js +102 -0
- package/dist/serializers/contract.d.ts +168 -0
- package/dist/serializers/contract.d.ts.map +1 -0
- package/dist/serializers/contract.js +268 -0
- package/dist/serializers/core.d.ts +110 -0
- package/dist/serializers/core.d.ts.map +1 -0
- package/dist/serializers/core.js +130 -0
- package/dist/serializers/index.d.ts +28 -0
- package/dist/serializers/index.d.ts.map +1 -0
- package/dist/serializers/index.js +159 -0
- package/dist/serializers/log.d.ts +113 -0
- package/dist/serializers/log.d.ts.map +1 -0
- package/dist/serializers/log.js +231 -0
- package/dist/serializers/note.d.ts +127 -0
- package/dist/serializers/note.d.ts.map +1 -0
- package/dist/serializers/note.js +182 -0
- package/dist/serializers/transaction-utils.d.ts +107 -0
- package/dist/serializers/transaction-utils.d.ts.map +1 -0
- package/dist/serializers/transaction-utils.js +130 -0
- package/dist/serializers/transaction.d.ts +103 -0
- package/dist/serializers/transaction.d.ts.map +1 -0
- package/dist/serializers/transaction.js +238 -0
- package/dist/serializers/types.d.ts +49 -0
- package/dist/serializers/types.d.ts.map +1 -0
- package/dist/serializers/types.js +22 -0
- package/dist/types.d.ts +391 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +8 -0
- package/dist/wallet.d.ts +62 -0
- package/dist/wallet.d.ts.map +1 -0
- package/dist/wallet.js +77 -0
- package/package.json +44 -0
- package/src/aztecRemoteWallet.test.ts +542 -0
- package/src/aztecRemoteWallet.ts +484 -0
- package/src/chainProvider.test.ts +322 -0
- package/src/chainProvider.ts +122 -0
- package/src/contractArtifactCache.test.ts +126 -0
- package/src/contractArtifactCache.ts +75 -0
- package/src/errors.ts +71 -0
- package/src/handlers/aztecAccountWallet.test.ts +720 -0
- package/src/handlers/aztecAccountWallet.ts +593 -0
- package/src/handlers/transactions.ts +110 -0
- package/src/handlers.test.ts +270 -0
- package/src/handlers.ts +70 -0
- package/src/index.test.ts +23 -0
- package/src/index.ts +64 -0
- package/src/provider.test.ts +276 -0
- package/src/provider.ts +189 -0
- package/src/serializers/account.test.ts +125 -0
- package/src/serializers/account.ts +319 -0
- package/src/serializers/contract-utils.ts +104 -0
- package/src/serializers/contract.test.ts +162 -0
- package/src/serializers/contract.ts +350 -0
- package/src/serializers/core.test.ts +56 -0
- package/src/serializers/core.ts +141 -0
- package/src/serializers/index.test.ts +122 -0
- package/src/serializers/index.ts +213 -0
- package/src/serializers/log.test.ts +119 -0
- package/src/serializers/log.ts +283 -0
- package/src/serializers/note.test.ts +100 -0
- package/src/serializers/note.ts +227 -0
- package/src/serializers/transaction-utils.ts +237 -0
- package/src/serializers/transaction.test.ts +153 -0
- package/src/serializers/transaction.ts +342 -0
- package/src/serializers/types.ts +58 -0
- package/src/types.ts +295 -0
- package/src/wallet.test.ts +275 -0
- package/src/wallet.ts +94 -0
- package/tsconfig.build.json +6 -0
- package/tsconfig.json +11 -0
- package/typedoc.json +15 -0
- 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();
|