@walletmesh/aztec-rpc-wallet 0.2.0 → 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 +12 -0
- 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 -29
- package/dist/contractArtifactCache.d.ts.map +1 -1
- package/dist/contractArtifactCache.js +20 -9
- package/dist/handlers/aztecAccountWallet.d.ts.map +1 -1
- package/dist/handlers/aztecAccountWallet.js +11 -44
- package/dist/serializers/account.d.ts +16 -16
- package/dist/serializers/account.d.ts.map +1 -1
- package/dist/serializers/account.js +43 -43
- 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 +43 -43
- package/dist/serializers/note.d.ts +12 -12
- package/dist/serializers/note.d.ts.map +1 -1
- package/dist/serializers/note.js +32 -32
- 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 +7 -30
- 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 +9 -9
- package/src/aztecRemoteWallet.test.ts +22 -61
- package/src/aztecRemoteWallet.ts +8 -35
- package/src/chainProvider.test.ts +117 -38
- package/src/contractArtifactCache.test.ts +28 -45
- package/src/contractArtifactCache.ts +20 -10
- package/src/handlers/aztecAccountWallet.test.ts +12 -86
- package/src/handlers/aztecAccountWallet.ts +19 -77
- package/src/provider.test.ts +0 -2
- package/src/serializers/account.test.ts +19 -20
- package/src/serializers/account.ts +52 -52
- package/src/serializers/contract.test.ts +4 -140
- package/src/serializers/contract.ts +93 -166
- package/src/serializers/index.test.ts +30 -28
- package/src/serializers/index.ts +15 -21
- package/src/serializers/log.test.ts +42 -48
- package/src/serializers/log.ts +54 -54
- package/src/serializers/note.test.ts +43 -16
- package/src/serializers/note.ts +39 -39
- package/src/serializers/transaction.test.ts +48 -41
- package/src/serializers/transaction.ts +146 -58
- package/src/types.ts +7 -7
- package/src/wallet.test.ts +3 -3
- 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 -103
- package/src/serializers/transaction-utils.ts +0 -174
@@ -1,140 +1,17 @@
|
|
1
1
|
import { describe, expect, it } from 'vitest';
|
2
|
-
import {
|
3
|
-
import {
|
4
|
-
import {
|
5
|
-
aztecGetContractInstanceSerializer,
|
6
|
-
aztecGetContractClassSerializer,
|
7
|
-
aztecGetContractArtifactSerializer,
|
8
|
-
aztecRegisterContractSerializer,
|
9
|
-
} from './contract.js';
|
10
|
-
import {
|
11
|
-
getContractClassFromArtifact,
|
12
|
-
ContractClassWithIdSchema,
|
13
|
-
ContractInstanceWithAddressSchema,
|
14
|
-
SerializableContractInstance,
|
15
|
-
} from '@aztec/circuits.js';
|
16
|
-
import {
|
17
|
-
ContractArtifact,
|
18
|
-
ContractArtifactSchema,
|
19
|
-
type FieldLayout,
|
20
|
-
type ContractNote,
|
21
|
-
} from '@aztec/foundation/abi';
|
22
|
-
import { randomContractArtifact, randomDeployedContract } from '@aztec/circuit-types';
|
2
|
+
import { aztecRegisterContractSerializer } from './contract.js';
|
3
|
+
import { randomDeployedContract } from '@aztec/circuit-types';
|
23
4
|
describe('Contract Serializers', () => {
|
24
|
-
describe('aztec_getContractInstance', () => {
|
25
|
-
it('should serialize and deserialize params', async () => {
|
26
|
-
const address = await AztecAddress.random();
|
27
|
-
const params = { address };
|
28
|
-
|
29
|
-
const serialized = aztecGetContractInstanceSerializer.params.serialize(
|
30
|
-
'aztec_getContractInstance',
|
31
|
-
params,
|
32
|
-
);
|
33
|
-
expect(serialized.method).toBe('aztec_getContractInstance');
|
34
|
-
|
35
|
-
const deserialized = aztecGetContractInstanceSerializer.params.deserialize(
|
36
|
-
'aztec_getContractInstance',
|
37
|
-
serialized,
|
38
|
-
);
|
39
|
-
expect(deserialized.address.toString()).toBe(address.toString());
|
40
|
-
});
|
41
|
-
|
42
|
-
it('should serialize and deserialize result', async () => {
|
43
|
-
// Create a contract instance with all required fields
|
44
|
-
const result = (await SerializableContractInstance.random()).withAddress(await AztecAddress.random());
|
45
|
-
|
46
|
-
const serialized = aztecGetContractInstanceSerializer.result.serialize(
|
47
|
-
'aztec_getContractInstance',
|
48
|
-
result,
|
49
|
-
);
|
50
|
-
expect(serialized.method).toBe('aztec_getContractInstance');
|
51
|
-
|
52
|
-
const deserialized = aztecGetContractInstanceSerializer.result.deserialize(
|
53
|
-
'aztec_getContractInstance',
|
54
|
-
serialized,
|
55
|
-
);
|
56
|
-
expect(deserialized.address.toString()).toBe(result.address.toString());
|
57
|
-
expect(deserialized.contractClassId.toString()).toBe(result.contractClassId.toString());
|
58
|
-
expect(deserialized.deployer.toString()).toBe(result.deployer.toString());
|
59
|
-
expect(deserialized.salt.toString()).toBe(result.salt.toString());
|
60
|
-
expect(deserialized.version).toBe(result.version);
|
61
|
-
});
|
62
|
-
});
|
63
|
-
|
64
|
-
describe('aztec_getContractClass', () => {
|
65
|
-
it('should serialize and deserialize params', async () => {
|
66
|
-
const id = await Fr.random();
|
67
|
-
const params = { id };
|
68
|
-
|
69
|
-
const serialized = aztecGetContractClassSerializer.params.serialize('aztec_getContractClass', params);
|
70
|
-
expect(serialized.method).toBe('aztec_getContractClass');
|
71
|
-
|
72
|
-
const deserialized = aztecGetContractClassSerializer.params.deserialize(
|
73
|
-
'aztec_getContractClass',
|
74
|
-
serialized,
|
75
|
-
);
|
76
|
-
expect(deserialized.id.toString()).toBe(id.toString());
|
77
|
-
});
|
78
|
-
|
79
|
-
it('should serialize and deserialize result', async () => {
|
80
|
-
const artifact = await randomContractArtifact();
|
81
|
-
const result = getContractClassFromArtifact(artifact);
|
82
|
-
const serialized = aztecGetContractClassSerializer.result.serialize('aztec_getContractClass', result);
|
83
|
-
expect(serialized.method).toBe('aztec_getContractClass');
|
84
|
-
|
85
|
-
const deserialized = aztecGetContractClassSerializer.result.deserialize(
|
86
|
-
'aztec_getContractClass',
|
87
|
-
serialized,
|
88
|
-
);
|
89
|
-
expect(deserialized.artifactHash.toString()).toEqual(result.artifactHash.toString());
|
90
|
-
expect(deserialized.id.toString()).toEqual(result.id.toString());
|
91
|
-
expect(deserialized.privateFunctions).toEqual(result.privateFunctions);
|
92
|
-
expect(deserialized.publicFunctions).toEqual(result.publicFunctions);
|
93
|
-
expect(deserialized.packedBytecode).toEqual(result.packedBytecode);
|
94
|
-
});
|
95
|
-
});
|
96
|
-
|
97
|
-
describe('aztec_getContractArtifact', () => {
|
98
|
-
it('should serialize and deserialize params', async () => {
|
99
|
-
const id = await Fr.random();
|
100
|
-
const serialized = aztecGetContractArtifactSerializer.params.serialize('aztec_getContractArtifact', {
|
101
|
-
id,
|
102
|
-
});
|
103
|
-
expect(serialized.method).toBe('aztec_getContractArtifact');
|
104
|
-
|
105
|
-
const deserialized = aztecGetContractArtifactSerializer.params.deserialize(
|
106
|
-
'aztec_getContractArtifact',
|
107
|
-
serialized,
|
108
|
-
);
|
109
|
-
expect(deserialized.id.toString()).toBe(id.toString());
|
110
|
-
});
|
111
|
-
|
112
|
-
it('should serialize and deserialize result', async () => {
|
113
|
-
const result = await randomContractArtifact();
|
114
|
-
const serialized = aztecGetContractArtifactSerializer.result.serialize(
|
115
|
-
'aztec_getContractArtifact',
|
116
|
-
result,
|
117
|
-
);
|
118
|
-
expect(serialized.method).toBe('aztec_getContractArtifact');
|
119
|
-
|
120
|
-
const deserialized = aztecGetContractArtifactSerializer.result.deserialize(
|
121
|
-
'aztec_getContractArtifact',
|
122
|
-
serialized,
|
123
|
-
);
|
124
|
-
expect(ContractArtifactSchema.parse(deserialized)).toEqual(result);
|
125
|
-
});
|
126
|
-
});
|
127
|
-
|
128
5
|
describe('aztec_registerContract', () => {
|
129
6
|
it('should serialize and deserialize params', async () => {
|
130
7
|
const { instance, artifact } = await randomDeployedContract();
|
131
|
-
const serialized = aztecRegisterContractSerializer.params.serialize('aztec_registerContract', {
|
8
|
+
const serialized = await aztecRegisterContractSerializer.params.serialize('aztec_registerContract', {
|
132
9
|
instance,
|
133
10
|
artifact,
|
134
11
|
});
|
135
12
|
expect(serialized.method).toBe('aztec_registerContract');
|
136
13
|
|
137
|
-
const deserialized = aztecRegisterContractSerializer.params.deserialize(
|
14
|
+
const deserialized = await aztecRegisterContractSerializer.params.deserialize(
|
138
15
|
'aztec_registerContract',
|
139
16
|
serialized,
|
140
17
|
);
|
@@ -143,18 +20,5 @@ describe('Contract Serializers', () => {
|
|
143
20
|
expect(deserialized.instance.deployer.toString()).toBe(instance.deployer.toString());
|
144
21
|
expect(deserialized.artifact).toEqual(artifact);
|
145
22
|
});
|
146
|
-
|
147
|
-
it('should serialize and deserialize result', () => {
|
148
|
-
const result = true;
|
149
|
-
|
150
|
-
const serialized = aztecRegisterContractSerializer.result.serialize('aztec_registerContract', result);
|
151
|
-
expect(serialized.method).toBe('aztec_registerContract');
|
152
|
-
|
153
|
-
const deserialized = aztecRegisterContractSerializer.result.deserialize(
|
154
|
-
'aztec_registerContract',
|
155
|
-
serialized,
|
156
|
-
);
|
157
|
-
expect(deserialized).toBe(result);
|
158
|
-
});
|
159
23
|
});
|
160
24
|
});
|
@@ -1,184 +1,135 @@
|
|
1
1
|
import type { AztecWalletMethodMap } from '../types.js';
|
2
2
|
import type { JSONRPCSerializedData, JSONRPCSerializer } from '@walletmesh/jsonrpc';
|
3
|
-
import {
|
3
|
+
import { ContractClassWithIdSchema, ContractInstanceWithAddressSchema } from '@aztec/circuits.js';
|
4
4
|
import { ContractArtifactSchema } from '@aztec/foundation/abi';
|
5
5
|
import { AztecAddress, Fr } from '@aztec/aztec.js';
|
6
|
-
import type { ContractInstanceWithAddress } from '@aztec/aztec.js';
|
7
6
|
import { jsonStringify, jsonParseWithSchema } from '@aztec/foundation/json-rpc';
|
7
|
+
import type { ZodFor } from '@aztec/foundation/schemas';
|
8
|
+
import type { ContractMetadata, ContractClassMetadata } from '@aztec/circuit-types';
|
9
|
+
import { z } from 'zod';
|
8
10
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
AztecWalletMethodMap['aztec_getContractInstance']['params'],
|
17
|
-
AztecWalletMethodMap['aztec_getContractInstance']['result']
|
18
|
-
>
|
19
|
-
{
|
20
|
-
params = {
|
21
|
-
/**
|
22
|
-
* Serializes contract instance query parameters for RPC transport.
|
23
|
-
* @param method - The RPC method name
|
24
|
-
* @param value - The parameters containing the contract address to look up
|
25
|
-
* @returns Serialized address data
|
26
|
-
*/
|
27
|
-
serialize: (
|
28
|
-
method: string,
|
29
|
-
value: AztecWalletMethodMap['aztec_getContractInstance']['params'],
|
30
|
-
): JSONRPCSerializedData => ({
|
31
|
-
method,
|
32
|
-
serialized: jsonStringify(value.address),
|
33
|
-
}),
|
34
|
-
deserialize: (
|
35
|
-
_method: string,
|
36
|
-
data: JSONRPCSerializedData,
|
37
|
-
): AztecWalletMethodMap['aztec_getContractInstance']['params'] => {
|
38
|
-
return {
|
39
|
-
address: jsonParseWithSchema(data.serialized, AztecAddress.schema),
|
40
|
-
};
|
41
|
-
},
|
42
|
-
};
|
11
|
+
// Zod schemas for contract metadata serialization.
|
12
|
+
// These are copied from @aztec/circuit-types because they are not exported.
|
13
|
+
const ContractMetadataSchema = z.object({
|
14
|
+
contractInstance: z.union([ContractInstanceWithAddressSchema, z.undefined()]),
|
15
|
+
isContractInitialized: z.boolean(),
|
16
|
+
isContractPubliclyDeployed: z.boolean(),
|
17
|
+
}) satisfies ZodFor<ContractMetadata>;
|
43
18
|
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
* @returns Serialized contract instance data
|
50
|
-
*/
|
51
|
-
serialize: (method: string, value: ContractInstanceWithAddress): JSONRPCSerializedData => ({
|
52
|
-
method,
|
53
|
-
serialized: JSON.stringify({
|
54
|
-
serializableContractInstance: new SerializableContractInstance(value).toBuffer(),
|
55
|
-
address: jsonStringify(value.address),
|
56
|
-
}),
|
57
|
-
}),
|
58
|
-
deserialize: (_method: string, data: JSONRPCSerializedData): ContractInstanceWithAddress => {
|
59
|
-
const parsed = JSON.parse(data.serialized);
|
60
|
-
return SerializableContractInstance.fromBuffer(
|
61
|
-
Buffer.from(parsed.serializableContractInstance),
|
62
|
-
).withAddress(jsonParseWithSchema(parsed.address, AztecAddress.schema));
|
63
|
-
},
|
64
|
-
};
|
65
|
-
}
|
19
|
+
const ContractClassMetadataSchema = z.object({
|
20
|
+
contractClass: z.union([ContractClassWithIdSchema, z.undefined()]),
|
21
|
+
isContractClassPubliclyRegistered: z.boolean(),
|
22
|
+
artifact: z.union([ContractArtifactSchema, z.undefined()]),
|
23
|
+
}) satisfies ZodFor<ContractClassMetadata>;
|
66
24
|
|
67
25
|
/**
|
68
|
-
* Serializer for the
|
69
|
-
* Handles serialization of contract class queries and results between JSON-RPC format and native Aztec types.
|
26
|
+
* Serializer for the aztec_getContractClassMetadata RPC method.
|
27
|
+
* Handles serialization of contract class metadata queries and results between JSON-RPC format and native Aztec types.
|
70
28
|
*/
|
71
|
-
export class
|
29
|
+
export class AztecGetContractClassMetadataSerializer
|
72
30
|
implements
|
73
31
|
JSONRPCSerializer<
|
74
|
-
AztecWalletMethodMap['
|
75
|
-
AztecWalletMethodMap['
|
32
|
+
AztecWalletMethodMap['aztec_getContractClassMetadata']['params'],
|
33
|
+
AztecWalletMethodMap['aztec_getContractClassMetadata']['result']
|
76
34
|
>
|
77
35
|
{
|
78
36
|
params = {
|
79
37
|
/**
|
80
|
-
* Serializes contract class query parameters for RPC transport.
|
38
|
+
* Serializes contract class metadata query parameters for RPC transport.
|
81
39
|
* @param method - The RPC method name
|
82
|
-
* @param value - The parameters containing the class ID
|
83
|
-
* @returns Serialized
|
40
|
+
* @param value - The parameters containing the class ID and artifact inclusion flag
|
41
|
+
* @returns Serialized query parameters
|
84
42
|
*/
|
85
|
-
serialize: (
|
43
|
+
serialize: async (
|
86
44
|
method: string,
|
87
|
-
value: AztecWalletMethodMap['
|
88
|
-
): JSONRPCSerializedData =>
|
89
|
-
|
90
|
-
|
91
|
-
|
45
|
+
value: AztecWalletMethodMap['aztec_getContractClassMetadata']['params'],
|
46
|
+
): Promise<JSONRPCSerializedData> =>
|
47
|
+
Promise.resolve({
|
48
|
+
method,
|
49
|
+
serialized: JSON.stringify({
|
50
|
+
id: value.id.toString(),
|
51
|
+
includeArtifact: value.includeArtifact,
|
52
|
+
}),
|
92
53
|
}),
|
93
|
-
|
94
|
-
deserialize: (
|
54
|
+
deserialize: async (
|
95
55
|
_method: string,
|
96
56
|
data: JSONRPCSerializedData,
|
97
|
-
): AztecWalletMethodMap['
|
98
|
-
const { id } = JSON.parse(data.serialized);
|
99
|
-
return {
|
57
|
+
): Promise<AztecWalletMethodMap['aztec_getContractClassMetadata']['params']> => {
|
58
|
+
const { id, includeArtifact } = JSON.parse(data.serialized);
|
59
|
+
return {
|
60
|
+
id: Fr.fromString(id),
|
61
|
+
includeArtifact,
|
62
|
+
};
|
100
63
|
},
|
101
64
|
};
|
102
|
-
|
103
65
|
result = {
|
104
66
|
/**
|
105
|
-
* Serializes the contract class query result.
|
67
|
+
* Serializes the contract class metadata query result.
|
106
68
|
* @param method - The RPC method name
|
107
|
-
* @param value - The contract class definition
|
108
|
-
* @returns Serialized contract class
|
69
|
+
* @param value - The contract class metadata including class definition and registration status
|
70
|
+
* @returns Serialized contract class metadata
|
109
71
|
*/
|
110
|
-
serialize: (
|
72
|
+
serialize: async (
|
111
73
|
method: string,
|
112
|
-
value: AztecWalletMethodMap['
|
113
|
-
): JSONRPCSerializedData =>
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
74
|
+
value: AztecWalletMethodMap['aztec_getContractClassMetadata']['result'],
|
75
|
+
): Promise<JSONRPCSerializedData> => {
|
76
|
+
return {
|
77
|
+
method,
|
78
|
+
serialized: jsonStringify(value),
|
79
|
+
};
|
80
|
+
},
|
81
|
+
deserialize: async (
|
118
82
|
_method: string,
|
119
83
|
data: JSONRPCSerializedData,
|
120
|
-
): AztecWalletMethodMap['
|
121
|
-
|
122
|
-
return ContractClassWithIdSchema.parse(parsed);
|
84
|
+
): Promise<AztecWalletMethodMap['aztec_getContractClassMetadata']['result']> => {
|
85
|
+
return await jsonParseWithSchema(data.serialized, ContractClassMetadataSchema);
|
123
86
|
},
|
124
87
|
};
|
125
88
|
}
|
126
89
|
|
127
|
-
|
128
|
-
* Serializer for the aztec_getContractArtifact RPC method.
|
129
|
-
* Handles serialization of contract artifact queries and results between JSON-RPC format and native Aztec types.
|
130
|
-
*/
|
131
|
-
export class AztecGetContractArtifactSerializer
|
90
|
+
export class AztecGetContractMetadataSerializer
|
132
91
|
implements
|
133
92
|
JSONRPCSerializer<
|
134
|
-
AztecWalletMethodMap['
|
135
|
-
AztecWalletMethodMap['
|
93
|
+
AztecWalletMethodMap['aztec_getContractMetadata']['params'],
|
94
|
+
AztecWalletMethodMap['aztec_getContractMetadata']['result']
|
136
95
|
>
|
137
96
|
{
|
138
97
|
params = {
|
139
|
-
|
140
|
-
* Serializes contract artifact query parameters for RPC transport.
|
141
|
-
* @param method - The RPC method name
|
142
|
-
* @param value - The parameters containing the artifact ID to look up
|
143
|
-
* @returns Serialized artifact ID data
|
144
|
-
*/
|
145
|
-
serialize: (
|
98
|
+
serialize: async (
|
146
99
|
method: string,
|
147
|
-
value: AztecWalletMethodMap['
|
148
|
-
): JSONRPCSerializedData =>
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
}
|
153
|
-
}
|
154
|
-
deserialize: (
|
100
|
+
value: AztecWalletMethodMap['aztec_getContractMetadata']['params'],
|
101
|
+
): Promise<JSONRPCSerializedData> => {
|
102
|
+
return {
|
103
|
+
method,
|
104
|
+
serialized: jsonStringify(value.address),
|
105
|
+
};
|
106
|
+
},
|
107
|
+
deserialize: async (
|
155
108
|
_method: string,
|
156
109
|
data: JSONRPCSerializedData,
|
157
|
-
): AztecWalletMethodMap['
|
158
|
-
|
159
|
-
|
110
|
+
): Promise<AztecWalletMethodMap['aztec_getContractMetadata']['params']> => {
|
111
|
+
return {
|
112
|
+
address: await jsonParseWithSchema(data.serialized, AztecAddress.schema),
|
113
|
+
};
|
160
114
|
},
|
161
115
|
};
|
162
116
|
|
163
117
|
result = {
|
164
|
-
|
165
|
-
* Serializes the contract artifact query result.
|
166
|
-
* @param method - The RPC method name
|
167
|
-
* @param value - The contract artifact data
|
168
|
-
* @returns Serialized contract artifact
|
169
|
-
*/
|
170
|
-
serialize: (
|
118
|
+
serialize: async (
|
171
119
|
method: string,
|
172
|
-
|
173
|
-
): JSONRPCSerializedData =>
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
120
|
+
contractMetadata: AztecWalletMethodMap['aztec_getContractMetadata']['result'],
|
121
|
+
): Promise<JSONRPCSerializedData> => {
|
122
|
+
return {
|
123
|
+
method,
|
124
|
+
serialized: jsonStringify(contractMetadata),
|
125
|
+
};
|
126
|
+
},
|
127
|
+
deserialize: async (
|
178
128
|
_method: string,
|
179
129
|
data: JSONRPCSerializedData,
|
180
|
-
): AztecWalletMethodMap['
|
181
|
-
|
130
|
+
): Promise<AztecWalletMethodMap['aztec_getContractMetadata']['result']> => {
|
131
|
+
return await jsonParseWithSchema(data.serialized, ContractMetadataSchema);
|
132
|
+
},
|
182
133
|
};
|
183
134
|
}
|
184
135
|
|
@@ -200,57 +151,33 @@ export class AztecRegisterContractSerializer
|
|
200
151
|
* @param value - The parameters containing contract instance and optional artifact
|
201
152
|
* @returns Serialized registration data
|
202
153
|
*/
|
203
|
-
serialize: (
|
154
|
+
serialize: async (
|
204
155
|
method: string,
|
205
156
|
value: AztecWalletMethodMap['aztec_registerContract']['params'],
|
206
|
-
): JSONRPCSerializedData => ({
|
157
|
+
): Promise<JSONRPCSerializedData> => ({
|
207
158
|
method,
|
208
159
|
serialized: JSON.stringify({
|
209
|
-
|
210
|
-
|
211
|
-
artifact: value.artifact ? ContractArtifactSchema.parse(value.artifact) : undefined,
|
160
|
+
instance: jsonStringify(value.instance),
|
161
|
+
artifact: value.artifact ? jsonStringify(value.artifact) : undefined,
|
212
162
|
}),
|
213
163
|
}),
|
214
|
-
deserialize: (
|
164
|
+
deserialize: async (
|
215
165
|
_method: string,
|
216
166
|
data: JSONRPCSerializedData,
|
217
|
-
): AztecWalletMethodMap['aztec_registerContract']['params'] => {
|
218
|
-
const {
|
167
|
+
): Promise<AztecWalletMethodMap['aztec_registerContract']['params']> => {
|
168
|
+
const { instance, artifact } = JSON.parse(data.serialized);
|
219
169
|
return {
|
220
|
-
instance:
|
221
|
-
|
222
|
-
).withAddress(AztecAddress.fromString(address)),
|
223
|
-
artifact: artifact ? ContractArtifactSchema.parse(artifact) : undefined,
|
170
|
+
instance: await jsonParseWithSchema(instance, ContractInstanceWithAddressSchema),
|
171
|
+
artifact: artifact ? await jsonParseWithSchema(artifact, ContractArtifactSchema) : undefined,
|
224
172
|
};
|
225
173
|
},
|
226
174
|
};
|
227
|
-
|
228
|
-
result = {
|
229
|
-
/**
|
230
|
-
* Serializes the contract registration result.
|
231
|
-
* @param method - The RPC method name
|
232
|
-
* @param value - Boolean indicating success of registration
|
233
|
-
* @returns Serialized result
|
234
|
-
*/
|
235
|
-
serialize: (
|
236
|
-
method: string,
|
237
|
-
value: AztecWalletMethodMap['aztec_registerContract']['result'],
|
238
|
-
): JSONRPCSerializedData => ({
|
239
|
-
method,
|
240
|
-
serialized: JSON.stringify(value),
|
241
|
-
}),
|
242
|
-
deserialize: (
|
243
|
-
_method: string,
|
244
|
-
data: JSONRPCSerializedData,
|
245
|
-
): AztecWalletMethodMap['aztec_registerContract']['result'] => JSON.parse(data.serialized),
|
246
|
-
};
|
247
175
|
}
|
248
176
|
|
249
177
|
/**
|
250
178
|
* Pre-instantiated serializer instances for Aztec contract-related RPC methods.
|
251
179
|
* These instances can be used directly by the RPC handler implementation.
|
252
180
|
*/
|
253
|
-
export const aztecGetContractInstanceSerializer = new AztecGetContractInstanceSerializer();
|
254
|
-
export const aztecGetContractClassSerializer = new AztecGetContractClassSerializer();
|
255
|
-
export const aztecGetContractArtifactSerializer = new AztecGetContractArtifactSerializer();
|
256
181
|
export const aztecRegisterContractSerializer = new AztecRegisterContractSerializer();
|
182
|
+
export const aztecGetContractClassMetadataSerializer = new AztecGetContractClassMetadataSerializer();
|
183
|
+
export const aztecGetContractMetadataSerializer = new AztecGetContractMetadataSerializer();
|
@@ -1,7 +1,7 @@
|
|
1
|
-
import { describe, expect, it, beforeEach
|
1
|
+
import { describe, expect, it, beforeEach } from 'vitest';
|
2
2
|
import { AztecWalletSerializer } from './index.js';
|
3
3
|
import { AztecAddress, Tx } from '@aztec/aztec.js';
|
4
|
-
import type { JSONRPCSerializer } from '
|
4
|
+
import type { JSONRPCSerializer } from '@walletmesh/jsonrpc';
|
5
5
|
import type { AztecWalletMethodMap } from '../types.js';
|
6
6
|
|
7
7
|
describe('AztecWalletSerializer', () => {
|
@@ -17,36 +17,36 @@ describe('AztecWalletSerializer', () => {
|
|
17
17
|
describe('params', () => {
|
18
18
|
it('should serialize params for known methods', async () => {
|
19
19
|
const params = { scopes: [await AztecAddress.random()] };
|
20
|
-
const result = AztecWalletSerializer.params.serialize(knownMethod, params);
|
20
|
+
const result = await AztecWalletSerializer.params.serialize(knownMethod, params);
|
21
21
|
expect(result).toBeDefined();
|
22
22
|
expect(result.method).toBe(knownMethod);
|
23
23
|
expect(typeof result.serialized).toBe('string');
|
24
24
|
});
|
25
25
|
|
26
|
-
it('should wrap unknown method params in JSONRPCSerializedData format', () => {
|
26
|
+
it('should wrap unknown method params in JSONRPCSerializedData format', async () => {
|
27
27
|
const params = { someParam: 'value' };
|
28
|
-
const result = AztecWalletSerializer.params.serialize(unknownMethod, params);
|
28
|
+
const result = await AztecWalletSerializer.params.serialize(unknownMethod, params);
|
29
29
|
expect(result).toBeDefined();
|
30
30
|
expect(result.method).toBe(unknownMethod);
|
31
31
|
expect(typeof result.serialized).toBe('string');
|
32
32
|
});
|
33
33
|
|
34
|
-
it('should pass through serialized data for unknown methods', () => {
|
34
|
+
it('should pass through serialized data for unknown methods', async () => {
|
35
35
|
const serializedData = { serialized: 'base64data', method: unknownMethod };
|
36
|
-
const result = AztecWalletSerializer.params.deserialize(unknownMethod, serializedData);
|
36
|
+
const result = await AztecWalletSerializer.params.deserialize(unknownMethod, serializedData);
|
37
37
|
expect(result).toEqual(serializedData);
|
38
38
|
});
|
39
39
|
|
40
|
-
it('should throw error when params serializer fails', () => {
|
40
|
+
it('should throw error when params serializer fails', async () => {
|
41
41
|
const params = { scopes: undefined }; // Invalid - scopes must be an array
|
42
|
-
expect(
|
42
|
+
await expect(AztecWalletSerializer.params.serialize(knownMethod, params)).rejects.toThrow(
|
43
43
|
/Failed to serialize params/,
|
44
44
|
);
|
45
45
|
});
|
46
46
|
|
47
|
-
it('should throw error when params deserializer fails', () => {
|
47
|
+
it('should throw error when params deserializer fails', async () => {
|
48
48
|
const serializedData = { serialized: 'invalid-data', method: knownMethod };
|
49
|
-
expect(
|
49
|
+
await expect(AztecWalletSerializer.params.deserialize(knownMethod, serializedData)).rejects.toThrow(
|
50
50
|
/Failed to deserialize params/,
|
51
51
|
);
|
52
52
|
});
|
@@ -58,40 +58,42 @@ describe('AztecWalletSerializer', () => {
|
|
58
58
|
expect(resultSerializer).toBeDefined();
|
59
59
|
});
|
60
60
|
|
61
|
-
it('should serialize result for known methods', () => {
|
61
|
+
it('should serialize result for known methods', async () => {
|
62
62
|
const value = true;
|
63
|
-
const result = resultSerializer.serialize(knownMethod, value);
|
63
|
+
const result = await resultSerializer.serialize(knownMethod, value);
|
64
64
|
expect(result).toBeDefined();
|
65
65
|
expect(result.method).toBe(knownMethod);
|
66
66
|
expect(typeof result.serialized).toBe('string');
|
67
67
|
});
|
68
68
|
|
69
|
-
it('should wrap unknown method result in JSONRPCSerializedData format', () => {
|
69
|
+
it('should wrap unknown method result in JSONRPCSerializedData format', async () => {
|
70
70
|
const testResult = { someResult: 'value' };
|
71
|
-
const result = resultSerializer.serialize(unknownMethod, testResult);
|
71
|
+
const result = await resultSerializer.serialize(unknownMethod, testResult);
|
72
72
|
expect(result).toBeDefined();
|
73
73
|
expect(result.method).toBe(unknownMethod);
|
74
74
|
expect(typeof result.serialized).toBe('string');
|
75
75
|
});
|
76
76
|
|
77
|
-
it('should pass through serialized data for unknown methods', () => {
|
77
|
+
it('should pass through serialized data for unknown methods', async () => {
|
78
78
|
const serializedData = { serialized: 'base64data', method: unknownMethod };
|
79
|
-
const result = resultSerializer.deserialize(unknownMethod, serializedData);
|
79
|
+
const result = await resultSerializer.deserialize(unknownMethod, serializedData);
|
80
80
|
expect(result).toEqual(serializedData);
|
81
81
|
});
|
82
82
|
|
83
|
-
it('should throw error when result serializer fails', () => {
|
83
|
+
it('should throw error when result serializer fails', async () => {
|
84
84
|
interface CircularRef {
|
85
85
|
ref: CircularRef | null;
|
86
86
|
}
|
87
87
|
const circular: CircularRef = { ref: null };
|
88
88
|
circular.ref = circular; // Create circular reference which can't be JSON stringified
|
89
|
-
expect(
|
89
|
+
await expect(resultSerializer.serialize(knownMethod, circular)).rejects.toThrow(
|
90
|
+
/Failed to serialize result/,
|
91
|
+
);
|
90
92
|
});
|
91
93
|
|
92
|
-
it('should throw error when result deserializer fails', () => {
|
94
|
+
it('should throw error when result deserializer fails', async () => {
|
93
95
|
const serializedData = { serialized: 'invalid-data', method: knownMethod };
|
94
|
-
expect(
|
96
|
+
await expect(resultSerializer.deserialize(knownMethod, serializedData)).rejects.toThrow(
|
95
97
|
/Failed to deserialize result/,
|
96
98
|
);
|
97
99
|
});
|
@@ -99,18 +101,18 @@ describe('AztecWalletSerializer', () => {
|
|
99
101
|
|
100
102
|
describe('integration', () => {
|
101
103
|
it('should handle contract methods', async () => {
|
102
|
-
const method = '
|
104
|
+
const method = 'aztec_getContractMetadata';
|
103
105
|
const params = { address: await AztecAddress.random() };
|
104
106
|
|
105
|
-
const serializedParams = AztecWalletSerializer.params.serialize(method, params);
|
107
|
+
const serializedParams = await AztecWalletSerializer.params.serialize(method, params);
|
106
108
|
expect(serializedParams).toBeDefined();
|
107
109
|
expect(serializedParams.method).toBe(method);
|
108
110
|
expect(typeof serializedParams.serialized).toBe('string');
|
109
111
|
|
110
|
-
const deserializedParams = AztecWalletSerializer.params.deserialize(
|
112
|
+
const deserializedParams = (await AztecWalletSerializer.params.deserialize(
|
111
113
|
method,
|
112
114
|
serializedParams,
|
113
|
-
) as AztecWalletMethodMap['
|
115
|
+
)) as AztecWalletMethodMap['aztec_getContractMetadata']['params'];
|
114
116
|
expect(deserializedParams.address.toString()).toBe(params.address.toString());
|
115
117
|
});
|
116
118
|
|
@@ -119,15 +121,15 @@ describe('AztecWalletSerializer', () => {
|
|
119
121
|
const tx = await Tx.random();
|
120
122
|
const params = { tx };
|
121
123
|
|
122
|
-
const serializedParams = AztecWalletSerializer.params.serialize(method, params);
|
124
|
+
const serializedParams = await AztecWalletSerializer.params.serialize(method, params);
|
123
125
|
expect(serializedParams).toBeDefined();
|
124
126
|
expect(serializedParams.method).toBe(method);
|
125
127
|
expect(typeof serializedParams.serialized).toBe('string');
|
126
128
|
|
127
|
-
const deserializedParams = AztecWalletSerializer.params.deserialize(
|
129
|
+
const deserializedParams = (await AztecWalletSerializer.params.deserialize(
|
128
130
|
method,
|
129
131
|
serializedParams,
|
130
|
-
) as AztecWalletMethodMap['aztec_sendTx']['params'];
|
132
|
+
)) as AztecWalletMethodMap['aztec_sendTx']['params'];
|
131
133
|
expect(deserializedParams.tx.toBuffer().toString('hex')).toBe(tx.toBuffer().toString('hex'));
|
132
134
|
});
|
133
135
|
});
|