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