@walletmesh/aztec-rpc-wallet 0.1.1 → 0.3.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 +24 -0
- package/README.md +4 -4
- package/dist/.tsbuildinfo +1 -1
- package/dist/aztecRemoteWallet.d.ts +4 -8
- package/dist/aztecRemoteWallet.d.ts.map +1 -1
- package/dist/aztecRemoteWallet.js +5 -30
- package/dist/chainProvider.d.ts.map +1 -1
- package/dist/chainProvider.js +1 -1
- package/dist/contractArtifactCache.d.ts.map +1 -1
- package/dist/contractArtifactCache.js +20 -9
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +1 -1
- package/dist/handlers/aztecAccountWallet.d.ts.map +1 -1
- package/dist/handlers/aztecAccountWallet.js +12 -45
- package/dist/handlers/transactions.d.ts.map +1 -1
- package/dist/handlers/transactions.js +11 -3
- package/dist/serializers/account.d.ts +24 -24
- package/dist/serializers/account.d.ts.map +1 -1
- package/dist/serializers/account.js +51 -51
- package/dist/serializers/contract.d.ts +22 -76
- package/dist/serializers/contract.d.ts.map +1 -1
- package/dist/serializers/contract.js +68 -120
- package/dist/serializers/index.d.ts +0 -4
- package/dist/serializers/index.d.ts.map +1 -1
- package/dist/serializers/index.js +15 -20
- package/dist/serializers/log.d.ts +16 -16
- package/dist/serializers/log.d.ts.map +1 -1
- package/dist/serializers/log.js +66 -64
- package/dist/serializers/note.d.ts +18 -18
- package/dist/serializers/note.d.ts.map +1 -1
- package/dist/serializers/note.js +54 -51
- package/dist/serializers/transaction.d.ts +25 -26
- package/dist/serializers/transaction.d.ts.map +1 -1
- package/dist/serializers/transaction.js +92 -44
- package/dist/types.d.ts +8 -31
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +1 -1
- package/docs/README.md +264 -0
- package/docs/classes/AztecChainProvider.md +553 -0
- package/docs/classes/AztecChainWallet.md +409 -0
- package/docs/classes/AztecProvider.md +1112 -0
- package/docs/classes/AztecWalletError.md +213 -0
- package/docs/classes/ContractArtifactCache.md +81 -0
- package/docs/globals.md +34 -0
- package/docs/interfaces/AztecWalletBaseMethodMap.md +135 -0
- package/docs/interfaces/AztecWalletEventMap.md +17 -0
- package/docs/interfaces/AztecWalletMethodMap.md +1012 -0
- package/docs/type-aliases/AztecChainId.md +11 -0
- package/docs/type-aliases/AztecChainWalletMiddleware.md +13 -0
- package/docs/type-aliases/AztecWalletContext.md +29 -0
- package/docs/type-aliases/AztecWalletMethodHandler.md +37 -0
- package/docs/type-aliases/AztecWalletMiddleware.md +13 -0
- package/docs/type-aliases/AztecWalletRouterClient.md +13 -0
- package/docs/type-aliases/TransactionFunctionCall.md +33 -0
- package/docs/type-aliases/TransactionParams.md +27 -0
- package/docs/variables/AztecWalletErrorMap.md +13 -0
- package/package.json +11 -11
- package/src/aztecRemoteWallet.test.ts +23 -65
- package/src/aztecRemoteWallet.ts +8 -36
- package/src/chainProvider.test.ts +117 -38
- package/src/chainProvider.ts +1 -7
- package/src/contractArtifactCache.test.ts +28 -45
- package/src/contractArtifactCache.ts +20 -10
- package/src/errors.ts +0 -1
- package/src/handlers/aztecAccountWallet.test.ts +12 -86
- package/src/handlers/aztecAccountWallet.ts +20 -78
- package/src/handlers/transactions.ts +16 -2
- package/src/provider.test.ts +0 -2
- package/src/serializers/account.test.ts +19 -20
- package/src/serializers/account.ts +65 -65
- package/src/serializers/contract.test.ts +4 -140
- package/src/serializers/contract.ts +98 -176
- package/src/serializers/index.test.ts +30 -28
- package/src/serializers/index.ts +15 -33
- package/src/serializers/log.test.ts +42 -48
- package/src/serializers/log.ts +85 -83
- package/src/serializers/note.test.ts +43 -16
- package/src/serializers/note.ts +62 -63
- package/src/serializers/transaction.test.ts +48 -41
- package/src/serializers/transaction.ts +154 -66
- package/src/types.ts +8 -8
- package/src/wallet.test.ts +3 -3
- package/tsconfig.json +1 -1
- package/dist/serializers/transaction-utils.d.ts +0 -51
- package/dist/serializers/transaction-utils.d.ts.map +0 -1
- package/dist/serializers/transaction-utils.js +0 -94
- package/src/serializers/transaction-utils.ts +0 -161
package/src/serializers/log.ts
CHANGED
@@ -2,14 +2,12 @@ import type { AztecWalletMethodMap } from '../types.js';
|
|
2
2
|
import type { JSONRPCSerializedData, JSONRPCSerializer } from '@walletmesh/jsonrpc';
|
3
3
|
import type { EventMetadataDefinition } from '@aztec/circuit-types';
|
4
4
|
import {
|
5
|
-
ExtendedPublicLog,
|
6
|
-
LogFilterSchema,
|
7
5
|
GetPublicLogsResponseSchema,
|
8
6
|
GetContractClassLogsResponseSchema,
|
9
7
|
TxHash,
|
10
8
|
LogId,
|
11
9
|
} from '@aztec/circuit-types';
|
12
|
-
import {
|
10
|
+
import { AztecAddress, type LogFilter, Point } from '@aztec/aztec.js';
|
13
11
|
import { EventSelector } from '@aztec/foundation/abi';
|
14
12
|
|
15
13
|
/**
|
@@ -24,10 +22,10 @@ export class AztecGetPublicLogsSerializer
|
|
24
22
|
>
|
25
23
|
{
|
26
24
|
params = {
|
27
|
-
serialize: (
|
25
|
+
serialize: async (
|
28
26
|
method: string,
|
29
27
|
value: AztecWalletMethodMap['aztec_getPublicLogs']['params'],
|
30
|
-
): JSONRPCSerializedData => {
|
28
|
+
): Promise<JSONRPCSerializedData> => {
|
31
29
|
const { filter } = value;
|
32
30
|
// Convert all fields that need string conversion
|
33
31
|
const serializedFilter = {
|
@@ -38,45 +36,50 @@ export class AztecGetPublicLogsSerializer
|
|
38
36
|
fromBlock: filter.fromBlock,
|
39
37
|
toBlock: filter.toBlock,
|
40
38
|
};
|
41
|
-
return {
|
39
|
+
return Promise.resolve({
|
42
40
|
method,
|
43
41
|
serialized: JSON.stringify({ filter: serializedFilter }),
|
44
|
-
};
|
42
|
+
});
|
45
43
|
},
|
46
|
-
deserialize: (
|
47
|
-
|
44
|
+
deserialize: async (
|
45
|
+
_method: string,
|
48
46
|
data: JSONRPCSerializedData,
|
49
|
-
): AztecWalletMethodMap['aztec_getPublicLogs']['params'] => {
|
47
|
+
): Promise<AztecWalletMethodMap['aztec_getPublicLogs']['params']> => {
|
50
48
|
const { filter } = JSON.parse(data.serialized);
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
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 });
|
62
65
|
},
|
63
66
|
};
|
64
67
|
|
65
68
|
result = {
|
66
|
-
serialize: (
|
69
|
+
serialize: async (
|
67
70
|
method: string,
|
68
71
|
value: AztecWalletMethodMap['aztec_getPublicLogs']['result'],
|
69
|
-
): JSONRPCSerializedData => {
|
70
|
-
return {
|
72
|
+
): Promise<JSONRPCSerializedData> => {
|
73
|
+
return Promise.resolve({
|
71
74
|
method,
|
72
75
|
serialized: JSON.stringify(value),
|
73
|
-
};
|
76
|
+
});
|
74
77
|
},
|
75
|
-
deserialize: (
|
76
|
-
|
78
|
+
deserialize: async (
|
79
|
+
_method: string,
|
77
80
|
data: JSONRPCSerializedData,
|
78
|
-
): AztecWalletMethodMap['aztec_getPublicLogs']['result'] => {
|
79
|
-
return GetPublicLogsResponseSchema.parse(JSON.parse(data.serialized));
|
81
|
+
): Promise<AztecWalletMethodMap['aztec_getPublicLogs']['result']> => {
|
82
|
+
return Promise.resolve(GetPublicLogsResponseSchema.parse(JSON.parse(data.serialized)));
|
80
83
|
},
|
81
84
|
};
|
82
85
|
}
|
@@ -93,10 +96,10 @@ export class AztecGetContractClassLogsSerializer
|
|
93
96
|
>
|
94
97
|
{
|
95
98
|
params = {
|
96
|
-
serialize: (
|
99
|
+
serialize: async (
|
97
100
|
method: string,
|
98
101
|
value: AztecWalletMethodMap['aztec_getContractClassLogs']['params'],
|
99
|
-
): JSONRPCSerializedData => {
|
102
|
+
): Promise<JSONRPCSerializedData> => {
|
100
103
|
const { filter } = value;
|
101
104
|
// Convert fields to strings for schema validation
|
102
105
|
const serializedFilter = {
|
@@ -106,45 +109,44 @@ export class AztecGetContractClassLogsSerializer
|
|
106
109
|
fromBlock: filter.fromBlock,
|
107
110
|
toBlock: filter.toBlock,
|
108
111
|
};
|
109
|
-
return {
|
112
|
+
return Promise.resolve({
|
110
113
|
method,
|
111
114
|
serialized: JSON.stringify({ filter: serializedFilter }),
|
112
|
-
};
|
115
|
+
});
|
113
116
|
},
|
114
|
-
deserialize: (
|
115
|
-
|
117
|
+
deserialize: async (
|
118
|
+
_method: string,
|
116
119
|
data: JSONRPCSerializedData,
|
117
|
-
): AztecWalletMethodMap['aztec_getContractClassLogs']['params'] => {
|
120
|
+
): Promise<AztecWalletMethodMap['aztec_getContractClassLogs']['params']> => {
|
118
121
|
const { filter } = JSON.parse(data.serialized);
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
};
|
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 });
|
130
132
|
},
|
131
133
|
};
|
132
134
|
|
133
135
|
result = {
|
134
|
-
serialize: (
|
136
|
+
serialize: async (
|
135
137
|
method: string,
|
136
138
|
value: AztecWalletMethodMap['aztec_getContractClassLogs']['result'],
|
137
|
-
): JSONRPCSerializedData => {
|
138
|
-
return {
|
139
|
+
): Promise<JSONRPCSerializedData> => {
|
140
|
+
return Promise.resolve({
|
139
141
|
method,
|
140
142
|
serialized: JSON.stringify(GetContractClassLogsResponseSchema.parse(value)),
|
141
|
-
};
|
143
|
+
});
|
142
144
|
},
|
143
|
-
deserialize: (
|
144
|
-
|
145
|
+
deserialize: async (
|
146
|
+
_method: string,
|
145
147
|
data: JSONRPCSerializedData,
|
146
|
-
): AztecWalletMethodMap['aztec_getContractClassLogs']['result'] => {
|
147
|
-
return GetContractClassLogsResponseSchema.parse(JSON.parse(data.serialized));
|
148
|
+
): Promise<AztecWalletMethodMap['aztec_getContractClassLogs']['result']> => {
|
149
|
+
return Promise.resolve(GetContractClassLogsResponseSchema.parse(JSON.parse(data.serialized)));
|
148
150
|
},
|
149
151
|
};
|
150
152
|
}
|
@@ -161,12 +163,12 @@ export class AztecGetPrivateEventsSerializer
|
|
161
163
|
>
|
162
164
|
{
|
163
165
|
params = {
|
164
|
-
serialize: (
|
166
|
+
serialize: async (
|
165
167
|
method: string,
|
166
168
|
value: AztecWalletMethodMap['aztec_getPrivateEvents']['params'],
|
167
|
-
): JSONRPCSerializedData => {
|
169
|
+
): Promise<JSONRPCSerializedData> => {
|
168
170
|
const { event, from, limit, vpks } = value;
|
169
|
-
return {
|
171
|
+
return Promise.resolve({
|
170
172
|
method,
|
171
173
|
serialized: JSON.stringify({
|
172
174
|
event: {
|
@@ -180,12 +182,12 @@ export class AztecGetPrivateEventsSerializer
|
|
180
182
|
limit,
|
181
183
|
vpks: vpks?.map((p) => p.toString()),
|
182
184
|
}),
|
183
|
-
};
|
185
|
+
});
|
184
186
|
},
|
185
|
-
deserialize: (
|
186
|
-
|
187
|
+
deserialize: async (
|
188
|
+
_method: string,
|
187
189
|
data: JSONRPCSerializedData,
|
188
|
-
): AztecWalletMethodMap['aztec_getPrivateEvents']['params'] => {
|
190
|
+
): Promise<AztecWalletMethodMap['aztec_getPrivateEvents']['params']> => {
|
189
191
|
const { event: serializedEvent, from, limit, vpks } = JSON.parse(data.serialized);
|
190
192
|
const event: EventMetadataDefinition = {
|
191
193
|
eventSelector: EventSelector.fromString(serializedEvent.eventSelector),
|
@@ -194,24 +196,24 @@ export class AztecGetPrivateEventsSerializer
|
|
194
196
|
},
|
195
197
|
fieldNames: serializedEvent.fieldNames,
|
196
198
|
};
|
197
|
-
return {
|
199
|
+
return Promise.resolve({
|
198
200
|
event,
|
199
201
|
from,
|
200
202
|
limit,
|
201
203
|
vpks: vpks?.map((p: string) => Point.fromString(p)),
|
202
|
-
};
|
204
|
+
});
|
203
205
|
},
|
204
206
|
};
|
205
207
|
|
206
208
|
result = {
|
207
|
-
serialize: (method: string, value: unknown[]): JSONRPCSerializedData => {
|
208
|
-
return {
|
209
|
+
serialize: async (method: string, value: unknown[]): Promise<JSONRPCSerializedData> => {
|
210
|
+
return Promise.resolve({
|
209
211
|
method,
|
210
212
|
serialized: JSON.stringify(value),
|
211
|
-
};
|
213
|
+
});
|
212
214
|
},
|
213
|
-
deserialize: (
|
214
|
-
return JSON.parse(data.serialized);
|
215
|
+
deserialize: async (_method: string, data: JSONRPCSerializedData): Promise<unknown[]> => {
|
216
|
+
return Promise.resolve(JSON.parse(data.serialized));
|
215
217
|
},
|
216
218
|
};
|
217
219
|
}
|
@@ -228,12 +230,12 @@ export class AztecGetPublicEventsSerializer
|
|
228
230
|
>
|
229
231
|
{
|
230
232
|
params = {
|
231
|
-
serialize: (
|
233
|
+
serialize: async (
|
232
234
|
method: string,
|
233
235
|
value: AztecWalletMethodMap['aztec_getPublicEvents']['params'],
|
234
|
-
): JSONRPCSerializedData => {
|
236
|
+
): Promise<JSONRPCSerializedData> => {
|
235
237
|
const { event, from, limit } = value;
|
236
|
-
return {
|
238
|
+
return Promise.resolve({
|
237
239
|
method,
|
238
240
|
serialized: JSON.stringify({
|
239
241
|
event: {
|
@@ -246,12 +248,12 @@ export class AztecGetPublicEventsSerializer
|
|
246
248
|
from,
|
247
249
|
limit,
|
248
250
|
}),
|
249
|
-
};
|
251
|
+
});
|
250
252
|
},
|
251
|
-
deserialize: (
|
252
|
-
|
253
|
+
deserialize: async (
|
254
|
+
_method: string,
|
253
255
|
data: JSONRPCSerializedData,
|
254
|
-
): AztecWalletMethodMap['aztec_getPublicEvents']['params'] => {
|
256
|
+
): Promise<AztecWalletMethodMap['aztec_getPublicEvents']['params']> => {
|
255
257
|
const { event: serializedEvent, from, limit } = JSON.parse(data.serialized);
|
256
258
|
const event: EventMetadataDefinition = {
|
257
259
|
eventSelector: EventSelector.fromString(serializedEvent.eventSelector),
|
@@ -260,23 +262,23 @@ export class AztecGetPublicEventsSerializer
|
|
260
262
|
},
|
261
263
|
fieldNames: serializedEvent.fieldNames,
|
262
264
|
};
|
263
|
-
return {
|
265
|
+
return Promise.resolve({
|
264
266
|
event,
|
265
267
|
from,
|
266
268
|
limit,
|
267
|
-
};
|
269
|
+
});
|
268
270
|
},
|
269
271
|
};
|
270
272
|
|
271
273
|
result = {
|
272
|
-
serialize: (method: string, value: unknown[]): JSONRPCSerializedData => {
|
273
|
-
return {
|
274
|
+
serialize: async (method: string, value: unknown[]): Promise<JSONRPCSerializedData> => {
|
275
|
+
return Promise.resolve({
|
274
276
|
method,
|
275
277
|
serialized: JSON.stringify(value),
|
276
|
-
};
|
278
|
+
});
|
277
279
|
},
|
278
|
-
deserialize: (
|
279
|
-
return JSON.parse(data.serialized);
|
280
|
+
deserialize: async (_method: string, data: JSONRPCSerializedData): Promise<unknown[]> => {
|
281
|
+
return Promise.resolve(JSON.parse(data.serialized));
|
280
282
|
},
|
281
283
|
};
|
282
284
|
}
|
@@ -18,28 +18,29 @@ describe('Note Serializers', () => {
|
|
18
18
|
scopes: [await AztecAddress.random()],
|
19
19
|
};
|
20
20
|
const params = { filter };
|
21
|
-
|
21
|
+
|
22
|
+
const serialized = await aztecGetNotesSerializer.params.serialize(METHOD, params);
|
22
23
|
expect(serialized.method).toBe(METHOD);
|
23
24
|
|
24
|
-
const deserialized = aztecGetNotesSerializer.params.deserialize(METHOD, serialized);
|
25
|
+
const deserialized = await aztecGetNotesSerializer.params.deserialize(METHOD, serialized);
|
25
26
|
expect(deserialized.filter.txHash?.toString()).toBe(filter.txHash?.toString());
|
26
27
|
expect(deserialized.filter.contractAddress?.toString()).toBe(filter.contractAddress?.toString());
|
27
28
|
expect(deserialized.filter.storageSlot?.toString()).toBe(filter.storageSlot?.toString());
|
28
29
|
expect(deserialized.filter.owner?.toString()).toBe(filter.owner?.toString());
|
29
30
|
expect(deserialized.filter.status).toBe(filter.status);
|
30
31
|
expect(deserialized.filter.siloedNullifier?.toString()).toBe(filter.siloedNullifier?.toString());
|
31
|
-
expect(deserialized.filter.scopes?.map((
|
32
|
-
filter.scopes?.map((
|
32
|
+
expect(deserialized.filter.scopes?.map((s) => s.toString())).toEqual(
|
33
|
+
filter.scopes?.map((s) => s.toString()),
|
33
34
|
);
|
34
35
|
});
|
35
36
|
|
36
37
|
it('should serialize and deserialize result', async () => {
|
37
38
|
const result = [await UniqueNote.random(), await UniqueNote.random()];
|
38
39
|
|
39
|
-
const serialized = aztecGetNotesSerializer.result.serialize(METHOD, result);
|
40
|
+
const serialized = await aztecGetNotesSerializer.result.serialize(METHOD, result);
|
40
41
|
expect(serialized.method).toBe(METHOD);
|
41
42
|
|
42
|
-
const deserialized = aztecGetNotesSerializer.result.deserialize(METHOD, serialized);
|
43
|
+
const deserialized = await aztecGetNotesSerializer.result.deserialize(METHOD, serialized);
|
43
44
|
expect(deserialized.map((note: UniqueNote) => note.toString())).toEqual(
|
44
45
|
result.map((note: UniqueNote) => note.toString()),
|
45
46
|
);
|
@@ -53,20 +54,20 @@ describe('Note Serializers', () => {
|
|
53
54
|
const note = await ExtendedNote.random();
|
54
55
|
const params = { note };
|
55
56
|
|
56
|
-
const serialized = aztecAddNoteSerializer.params.serialize(METHOD, params);
|
57
|
+
const serialized = await aztecAddNoteSerializer.params.serialize(METHOD, params);
|
57
58
|
expect(serialized.method).toBe(METHOD);
|
58
59
|
|
59
|
-
const deserialized = aztecAddNoteSerializer.params.deserialize(METHOD, serialized);
|
60
|
+
const deserialized = await aztecAddNoteSerializer.params.deserialize(METHOD, serialized);
|
60
61
|
expect(deserialized.note.toBuffer().toString('hex')).toBe(note.toBuffer().toString('hex'));
|
61
62
|
});
|
62
63
|
|
63
|
-
it('should serialize and deserialize result', () => {
|
64
|
+
it('should serialize and deserialize result', async () => {
|
64
65
|
const result = true;
|
65
66
|
|
66
|
-
const serialized = aztecAddNoteSerializer.result.serialize(METHOD, result);
|
67
|
+
const serialized = await aztecAddNoteSerializer.result.serialize(METHOD, result);
|
67
68
|
expect(serialized.method).toBe(METHOD);
|
68
69
|
|
69
|
-
const deserialized = aztecAddNoteSerializer.result.deserialize(METHOD, serialized);
|
70
|
+
const deserialized = await aztecAddNoteSerializer.result.deserialize(METHOD, serialized);
|
70
71
|
expect(deserialized).toBe(result);
|
71
72
|
});
|
72
73
|
});
|
@@ -78,21 +79,47 @@ describe('Note Serializers', () => {
|
|
78
79
|
const note = await ExtendedNote.random();
|
79
80
|
const params = { note };
|
80
81
|
|
81
|
-
const serialized = aztecAddNullifiedNoteSerializer.params.serialize(METHOD, params);
|
82
|
+
const serialized = await aztecAddNullifiedNoteSerializer.params.serialize(METHOD, params);
|
82
83
|
expect(serialized.method).toBe(METHOD);
|
83
84
|
|
84
|
-
const deserialized = aztecAddNullifiedNoteSerializer.params.deserialize(METHOD, serialized);
|
85
|
+
const deserialized = await aztecAddNullifiedNoteSerializer.params.deserialize(METHOD, serialized);
|
85
86
|
expect(deserialized.note.toBuffer().toString('hex')).toBe(note.toBuffer().toString('hex'));
|
86
87
|
});
|
87
88
|
|
88
|
-
it('should serialize and deserialize result', () => {
|
89
|
+
it('should serialize and deserialize result', async () => {
|
89
90
|
const result = true;
|
90
91
|
|
91
|
-
const serialized = aztecAddNullifiedNoteSerializer.result.serialize(METHOD, result);
|
92
|
+
const serialized = await aztecAddNullifiedNoteSerializer.result.serialize(METHOD, result);
|
92
93
|
expect(serialized.method).toBe(METHOD);
|
93
94
|
|
94
|
-
const deserialized = aztecAddNullifiedNoteSerializer.result.deserialize(METHOD, serialized);
|
95
|
+
const deserialized = await aztecAddNullifiedNoteSerializer.result.deserialize(METHOD, serialized);
|
95
96
|
expect(deserialized).toBe(result);
|
96
97
|
});
|
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
|
+
});
|
98
125
|
});
|
package/src/serializers/note.ts
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
import type { AztecWalletMethodMap } from '../types.js';
|
2
2
|
import type { JSONRPCSerializedData, JSONRPCSerializer } from '@walletmesh/jsonrpc';
|
3
|
-
import { UniqueNote, TxHash } from '@aztec/circuit-types';
|
3
|
+
import { UniqueNote, TxHash, type NotesFilter } from '@aztec/circuit-types';
|
4
4
|
import { ExtendedNote, AztecAddress, Fr } from '@aztec/aztec.js';
|
5
5
|
|
6
6
|
/**
|
@@ -21,10 +21,10 @@ export class AztecGetNotesSerializer
|
|
21
21
|
* @param value - The parameters containing filter criteria for notes
|
22
22
|
* @returns Serialized filter data
|
23
23
|
*/
|
24
|
-
serialize: (
|
24
|
+
serialize: async (
|
25
25
|
method: string,
|
26
26
|
value: AztecWalletMethodMap['aztec_getNotes']['params'],
|
27
|
-
): JSONRPCSerializedData => {
|
27
|
+
): Promise<JSONRPCSerializedData> => {
|
28
28
|
const { filter } = value;
|
29
29
|
// Convert instances to their string representations for transport
|
30
30
|
const serializedFilter = {
|
@@ -37,39 +37,38 @@ export class AztecGetNotesSerializer
|
|
37
37
|
scopes: filter.scopes?.map((scope) => scope.toString()),
|
38
38
|
};
|
39
39
|
|
40
|
-
return {
|
40
|
+
return Promise.resolve({
|
41
41
|
method,
|
42
42
|
serialized: JSON.stringify({ filter: serializedFilter }),
|
43
|
-
};
|
43
|
+
});
|
44
44
|
},
|
45
45
|
/**
|
46
46
|
* Deserializes notes filter parameters from RPC transport.
|
47
|
-
* @param
|
47
|
+
* @param _method - The RPC method name
|
48
48
|
* @param data - The serialized filter data
|
49
49
|
* @returns Deserialized filter parameters
|
50
50
|
*/
|
51
|
-
deserialize: (
|
52
|
-
|
51
|
+
deserialize: async (
|
52
|
+
_method: string,
|
53
53
|
data: JSONRPCSerializedData,
|
54
|
-
): AztecWalletMethodMap['aztec_getNotes']['params'] => {
|
54
|
+
): Promise<AztecWalletMethodMap['aztec_getNotes']['params']> => {
|
55
55
|
const { filter } = JSON.parse(data.serialized);
|
56
56
|
|
57
57
|
// Convert string representations back to instances
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
};
|
58
|
+
const notesFilter: NotesFilter = {};
|
59
|
+
if (filter.txHash) notesFilter.txHash = TxHash.fromString(filter.txHash);
|
60
|
+
if (filter.contractAddress)
|
61
|
+
notesFilter.contractAddress = AztecAddress.fromString(filter.contractAddress);
|
62
|
+
if (filter.storageSlot) notesFilter.storageSlot = Fr.fromString(filter.storageSlot);
|
63
|
+
if (filter.owner) notesFilter.owner = AztecAddress.fromString(filter.owner);
|
64
|
+
if (filter.status) notesFilter.status = filter.status;
|
65
|
+
if (filter.siloedNullifier) notesFilter.siloedNullifier = Fr.fromString(filter.siloedNullifier);
|
66
|
+
if (filter.scopes)
|
67
|
+
notesFilter.scopes = filter.scopes.map((scope: string) => AztecAddress.fromString(scope));
|
68
|
+
|
69
|
+
return Promise.resolve({
|
70
|
+
filter: notesFilter,
|
71
|
+
});
|
73
72
|
},
|
74
73
|
};
|
75
74
|
|
@@ -80,26 +79,26 @@ export class AztecGetNotesSerializer
|
|
80
79
|
* @param value - Array of unique notes matching the filter criteria
|
81
80
|
* @returns Serialized note array
|
82
81
|
*/
|
83
|
-
serialize: (
|
82
|
+
serialize: async (
|
84
83
|
method: string,
|
85
84
|
value: AztecWalletMethodMap['aztec_getNotes']['result'],
|
86
|
-
): JSONRPCSerializedData => {
|
87
|
-
return {
|
85
|
+
): Promise<JSONRPCSerializedData> => {
|
86
|
+
return Promise.resolve({
|
88
87
|
method,
|
89
88
|
serialized: JSON.stringify(value.map((n) => n.toString())),
|
90
|
-
};
|
89
|
+
});
|
91
90
|
},
|
92
91
|
/**
|
93
92
|
* Deserializes the notes query result.
|
94
|
-
* @param
|
93
|
+
* @param _method - The RPC method name
|
95
94
|
* @param data - The serialized note array data
|
96
95
|
* @returns Array of deserialized unique notes
|
97
96
|
*/
|
98
|
-
deserialize: (
|
99
|
-
|
97
|
+
deserialize: async (
|
98
|
+
_method: string,
|
100
99
|
data: JSONRPCSerializedData,
|
101
|
-
): AztecWalletMethodMap['aztec_getNotes']['result'] => {
|
102
|
-
return JSON.parse(data.serialized).map((n: string) => UniqueNote.fromString(n));
|
100
|
+
): Promise<AztecWalletMethodMap['aztec_getNotes']['result']> => {
|
101
|
+
return Promise.resolve(JSON.parse(data.serialized).map((n: string) => UniqueNote.fromString(n)));
|
103
102
|
},
|
104
103
|
};
|
105
104
|
}
|
@@ -122,29 +121,29 @@ export class AztecAddNoteSerializer
|
|
122
121
|
* @param value - The parameters containing the note to add
|
123
122
|
* @returns Serialized note data
|
124
123
|
*/
|
125
|
-
serialize: (
|
124
|
+
serialize: async (
|
126
125
|
method: string,
|
127
126
|
value: AztecWalletMethodMap['aztec_addNote']['params'],
|
128
|
-
): JSONRPCSerializedData => {
|
127
|
+
): Promise<JSONRPCSerializedData> => {
|
129
128
|
const { note } = value;
|
130
|
-
return {
|
129
|
+
return Promise.resolve({
|
131
130
|
method,
|
132
131
|
serialized: JSON.stringify({ note: note.toBuffer().toString('base64') }),
|
133
|
-
};
|
132
|
+
});
|
134
133
|
},
|
135
134
|
/**
|
136
135
|
* Deserializes note addition parameters from RPC transport.
|
137
|
-
* @param
|
136
|
+
* @param _method - The RPC method name
|
138
137
|
* @param data - The serialized note data
|
139
138
|
* @returns Deserialized note parameters
|
140
139
|
*/
|
141
|
-
deserialize: (
|
142
|
-
|
140
|
+
deserialize: async (
|
141
|
+
_method: string,
|
143
142
|
data: JSONRPCSerializedData,
|
144
|
-
): AztecWalletMethodMap['aztec_addNote']['params'] => {
|
143
|
+
): Promise<AztecWalletMethodMap['aztec_addNote']['params']> => {
|
145
144
|
const { note: noteBase64 } = JSON.parse(data.serialized);
|
146
145
|
const note = ExtendedNote.fromBuffer(Buffer.from(noteBase64, 'base64'));
|
147
|
-
return { note };
|
146
|
+
return Promise.resolve({ note });
|
148
147
|
},
|
149
148
|
};
|
150
149
|
|
@@ -155,20 +154,20 @@ export class AztecAddNoteSerializer
|
|
155
154
|
* @param value - Boolean indicating success of the note addition
|
156
155
|
* @returns Serialized result
|
157
156
|
*/
|
158
|
-
serialize: (method: string, value: boolean): JSONRPCSerializedData => {
|
159
|
-
return {
|
157
|
+
serialize: async (method: string, value: boolean): Promise<JSONRPCSerializedData> => {
|
158
|
+
return Promise.resolve({
|
160
159
|
method,
|
161
160
|
serialized: JSON.stringify(value),
|
162
|
-
};
|
161
|
+
});
|
163
162
|
},
|
164
163
|
/**
|
165
164
|
* Deserializes the note addition result.
|
166
|
-
* @param
|
165
|
+
* @param _method - The RPC method name
|
167
166
|
* @param data - The serialized result data
|
168
167
|
* @returns Boolean indicating success
|
169
168
|
*/
|
170
|
-
deserialize: (
|
171
|
-
return JSON.parse(data.serialized);
|
169
|
+
deserialize: async (_method: string, data: JSONRPCSerializedData): Promise<boolean> => {
|
170
|
+
return Promise.resolve(JSON.parse(data.serialized));
|
172
171
|
},
|
173
172
|
};
|
174
173
|
}
|
@@ -191,29 +190,29 @@ export class AztecAddNullifiedNoteSerializer
|
|
191
190
|
* @param value - The parameters containing the nullified note to add
|
192
191
|
* @returns Serialized note data
|
193
192
|
*/
|
194
|
-
serialize: (
|
193
|
+
serialize: async (
|
195
194
|
method: string,
|
196
195
|
value: AztecWalletMethodMap['aztec_addNullifiedNote']['params'],
|
197
|
-
): JSONRPCSerializedData => {
|
196
|
+
): Promise<JSONRPCSerializedData> => {
|
198
197
|
const { note } = value;
|
199
|
-
return {
|
198
|
+
return Promise.resolve({
|
200
199
|
method,
|
201
200
|
serialized: JSON.stringify({ note: note.toBuffer().toString('base64') }),
|
202
|
-
};
|
201
|
+
});
|
203
202
|
},
|
204
203
|
/**
|
205
204
|
* Deserializes nullified note addition parameters from RPC transport.
|
206
|
-
* @param
|
205
|
+
* @param _method - The RPC method name
|
207
206
|
* @param data - The serialized note data
|
208
207
|
* @returns Deserialized note parameters
|
209
208
|
*/
|
210
|
-
deserialize: (
|
211
|
-
|
209
|
+
deserialize: async (
|
210
|
+
_method: string,
|
212
211
|
data: JSONRPCSerializedData,
|
213
|
-
): AztecWalletMethodMap['aztec_addNullifiedNote']['params'] => {
|
212
|
+
): Promise<AztecWalletMethodMap['aztec_addNullifiedNote']['params']> => {
|
214
213
|
const { note: noteBase64 } = JSON.parse(data.serialized);
|
215
214
|
const note = ExtendedNote.fromBuffer(Buffer.from(noteBase64, 'base64'));
|
216
|
-
return { note };
|
215
|
+
return Promise.resolve({ note });
|
217
216
|
},
|
218
217
|
};
|
219
218
|
|
@@ -224,20 +223,20 @@ export class AztecAddNullifiedNoteSerializer
|
|
224
223
|
* @param value - Boolean indicating success of the nullified note addition
|
225
224
|
* @returns Serialized result
|
226
225
|
*/
|
227
|
-
serialize: (method: string, value: boolean): JSONRPCSerializedData => {
|
228
|
-
return {
|
226
|
+
serialize: async (method: string, value: boolean): Promise<JSONRPCSerializedData> => {
|
227
|
+
return Promise.resolve({
|
229
228
|
method,
|
230
229
|
serialized: JSON.stringify(value),
|
231
|
-
};
|
230
|
+
});
|
232
231
|
},
|
233
232
|
/**
|
234
233
|
* Deserializes the nullified note addition result.
|
235
|
-
* @param
|
234
|
+
* @param _method - The RPC method name
|
236
235
|
* @param data - The serialized result data
|
237
236
|
* @returns Boolean indicating success
|
238
237
|
*/
|
239
|
-
deserialize: (
|
240
|
-
return JSON.parse(data.serialized);
|
238
|
+
deserialize: async (_method: string, data: JSONRPCSerializedData): Promise<boolean> => {
|
239
|
+
return Promise.resolve(JSON.parse(data.serialized));
|
241
240
|
},
|
242
241
|
};
|
243
242
|
}
|