@walletmesh/aztec-rpc-wallet 0.1.1 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
@@ -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,189 +1,135 @@
|
|
1
1
|
import type { AztecWalletMethodMap } from '../types.js';
|
2
2
|
import type { JSONRPCSerializedData, JSONRPCSerializer } from '@walletmesh/jsonrpc';
|
3
|
-
import {
|
4
|
-
SerializableContractInstance,
|
5
|
-
ContractClassSchema,
|
6
|
-
ContractClassWithIdSchema,
|
7
|
-
ContractInstanceWithAddressSchema,
|
8
|
-
} from '@aztec/circuits.js';
|
3
|
+
import { ContractClassWithIdSchema, ContractInstanceWithAddressSchema } from '@aztec/circuits.js';
|
9
4
|
import { ContractArtifactSchema } from '@aztec/foundation/abi';
|
10
5
|
import { AztecAddress, Fr } from '@aztec/aztec.js';
|
11
|
-
import type { ContractInstanceWithAddress } from '@aztec/aztec.js';
|
12
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';
|
13
10
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
AztecWalletMethodMap['aztec_getContractInstance']['params'],
|
22
|
-
AztecWalletMethodMap['aztec_getContractInstance']['result']
|
23
|
-
>
|
24
|
-
{
|
25
|
-
params = {
|
26
|
-
/**
|
27
|
-
* Serializes contract instance query parameters for RPC transport.
|
28
|
-
* @param method - The RPC method name
|
29
|
-
* @param value - The parameters containing the contract address to look up
|
30
|
-
* @returns Serialized address data
|
31
|
-
*/
|
32
|
-
serialize: (
|
33
|
-
method: string,
|
34
|
-
value: AztecWalletMethodMap['aztec_getContractInstance']['params'],
|
35
|
-
): JSONRPCSerializedData => ({
|
36
|
-
method,
|
37
|
-
serialized: jsonStringify(value.address),
|
38
|
-
}),
|
39
|
-
deserialize: (
|
40
|
-
method: string,
|
41
|
-
data: JSONRPCSerializedData,
|
42
|
-
): AztecWalletMethodMap['aztec_getContractInstance']['params'] => {
|
43
|
-
return {
|
44
|
-
address: jsonParseWithSchema(data.serialized, AztecAddress.schema),
|
45
|
-
};
|
46
|
-
},
|
47
|
-
};
|
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>;
|
48
18
|
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
* @returns Serialized contract instance data
|
55
|
-
*/
|
56
|
-
serialize: (method: string, value: ContractInstanceWithAddress): JSONRPCSerializedData => ({
|
57
|
-
method,
|
58
|
-
serialized: JSON.stringify({
|
59
|
-
serializableContractInstance: new SerializableContractInstance(value).toBuffer(),
|
60
|
-
address: jsonStringify(value.address),
|
61
|
-
}),
|
62
|
-
}),
|
63
|
-
deserialize: (method: string, data: JSONRPCSerializedData): ContractInstanceWithAddress => {
|
64
|
-
const parsed = JSON.parse(data.serialized);
|
65
|
-
return SerializableContractInstance.fromBuffer(
|
66
|
-
Buffer.from(parsed.serializableContractInstance),
|
67
|
-
).withAddress(jsonParseWithSchema(parsed.address, AztecAddress.schema));
|
68
|
-
},
|
69
|
-
};
|
70
|
-
}
|
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>;
|
71
24
|
|
72
25
|
/**
|
73
|
-
* Serializer for the
|
74
|
-
* 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.
|
75
28
|
*/
|
76
|
-
export class
|
29
|
+
export class AztecGetContractClassMetadataSerializer
|
77
30
|
implements
|
78
31
|
JSONRPCSerializer<
|
79
|
-
AztecWalletMethodMap['
|
80
|
-
AztecWalletMethodMap['
|
32
|
+
AztecWalletMethodMap['aztec_getContractClassMetadata']['params'],
|
33
|
+
AztecWalletMethodMap['aztec_getContractClassMetadata']['result']
|
81
34
|
>
|
82
35
|
{
|
83
36
|
params = {
|
84
37
|
/**
|
85
|
-
* Serializes contract class query parameters for RPC transport.
|
38
|
+
* Serializes contract class metadata query parameters for RPC transport.
|
86
39
|
* @param method - The RPC method name
|
87
|
-
* @param value - The parameters containing the class ID
|
88
|
-
* @returns Serialized
|
40
|
+
* @param value - The parameters containing the class ID and artifact inclusion flag
|
41
|
+
* @returns Serialized query parameters
|
89
42
|
*/
|
90
|
-
serialize: (
|
43
|
+
serialize: async (
|
91
44
|
method: string,
|
92
|
-
value: AztecWalletMethodMap['
|
93
|
-
): JSONRPCSerializedData =>
|
94
|
-
|
95
|
-
|
96
|
-
|
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
|
+
}),
|
97
53
|
}),
|
98
|
-
|
99
|
-
|
100
|
-
method: string,
|
54
|
+
deserialize: async (
|
55
|
+
_method: string,
|
101
56
|
data: JSONRPCSerializedData,
|
102
|
-
): AztecWalletMethodMap['
|
103
|
-
const { id } = JSON.parse(data.serialized);
|
104
|
-
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
|
+
};
|
105
63
|
},
|
106
64
|
};
|
107
|
-
|
108
65
|
result = {
|
109
66
|
/**
|
110
|
-
* Serializes the contract class query result.
|
67
|
+
* Serializes the contract class metadata query result.
|
111
68
|
* @param method - The RPC method name
|
112
|
-
* @param value - The contract class definition
|
113
|
-
* @returns Serialized contract class
|
69
|
+
* @param value - The contract class metadata including class definition and registration status
|
70
|
+
* @returns Serialized contract class metadata
|
114
71
|
*/
|
115
|
-
serialize: (
|
116
|
-
method: string,
|
117
|
-
value: AztecWalletMethodMap['aztec_getContractClass']['result'],
|
118
|
-
): JSONRPCSerializedData => ({
|
119
|
-
method,
|
120
|
-
serialized: JSON.stringify(value),
|
121
|
-
}),
|
122
|
-
deserialize: (
|
72
|
+
serialize: async (
|
123
73
|
method: string,
|
74
|
+
value: AztecWalletMethodMap['aztec_getContractClassMetadata']['result'],
|
75
|
+
): Promise<JSONRPCSerializedData> => {
|
76
|
+
return {
|
77
|
+
method,
|
78
|
+
serialized: jsonStringify(value),
|
79
|
+
};
|
80
|
+
},
|
81
|
+
deserialize: async (
|
82
|
+
_method: string,
|
124
83
|
data: JSONRPCSerializedData,
|
125
|
-
): AztecWalletMethodMap['
|
126
|
-
|
127
|
-
return ContractClassWithIdSchema.parse(parsed);
|
84
|
+
): Promise<AztecWalletMethodMap['aztec_getContractClassMetadata']['result']> => {
|
85
|
+
return await jsonParseWithSchema(data.serialized, ContractClassMetadataSchema);
|
128
86
|
},
|
129
87
|
};
|
130
88
|
}
|
131
89
|
|
132
|
-
|
133
|
-
* Serializer for the aztec_getContractArtifact RPC method.
|
134
|
-
* Handles serialization of contract artifact queries and results between JSON-RPC format and native Aztec types.
|
135
|
-
*/
|
136
|
-
export class AztecGetContractArtifactSerializer
|
90
|
+
export class AztecGetContractMetadataSerializer
|
137
91
|
implements
|
138
92
|
JSONRPCSerializer<
|
139
|
-
AztecWalletMethodMap['
|
140
|
-
AztecWalletMethodMap['
|
93
|
+
AztecWalletMethodMap['aztec_getContractMetadata']['params'],
|
94
|
+
AztecWalletMethodMap['aztec_getContractMetadata']['result']
|
141
95
|
>
|
142
96
|
{
|
143
97
|
params = {
|
144
|
-
|
145
|
-
* Serializes contract artifact query parameters for RPC transport.
|
146
|
-
* @param method - The RPC method name
|
147
|
-
* @param value - The parameters containing the artifact ID to look up
|
148
|
-
* @returns Serialized artifact ID data
|
149
|
-
*/
|
150
|
-
serialize: (
|
151
|
-
method: string,
|
152
|
-
value: AztecWalletMethodMap['aztec_getContractArtifact']['params'],
|
153
|
-
): JSONRPCSerializedData => ({
|
154
|
-
method,
|
155
|
-
serialized: JSON.stringify({
|
156
|
-
id: value.id.toString(),
|
157
|
-
}),
|
158
|
-
}),
|
159
|
-
deserialize: (
|
98
|
+
serialize: async (
|
160
99
|
method: string,
|
100
|
+
value: AztecWalletMethodMap['aztec_getContractMetadata']['params'],
|
101
|
+
): Promise<JSONRPCSerializedData> => {
|
102
|
+
return {
|
103
|
+
method,
|
104
|
+
serialized: jsonStringify(value.address),
|
105
|
+
};
|
106
|
+
},
|
107
|
+
deserialize: async (
|
108
|
+
_method: string,
|
161
109
|
data: JSONRPCSerializedData,
|
162
|
-
): AztecWalletMethodMap['
|
163
|
-
|
164
|
-
|
110
|
+
): Promise<AztecWalletMethodMap['aztec_getContractMetadata']['params']> => {
|
111
|
+
return {
|
112
|
+
address: await jsonParseWithSchema(data.serialized, AztecAddress.schema),
|
113
|
+
};
|
165
114
|
},
|
166
115
|
};
|
167
116
|
|
168
117
|
result = {
|
169
|
-
|
170
|
-
* Serializes the contract artifact query result.
|
171
|
-
* @param method - The RPC method name
|
172
|
-
* @param value - The contract artifact data
|
173
|
-
* @returns Serialized contract artifact
|
174
|
-
*/
|
175
|
-
serialize: (
|
176
|
-
method: string,
|
177
|
-
value: AztecWalletMethodMap['aztec_getContractArtifact']['result'],
|
178
|
-
): JSONRPCSerializedData => ({
|
179
|
-
method,
|
180
|
-
serialized: JSON.stringify(ContractArtifactSchema.parse(value)),
|
181
|
-
}),
|
182
|
-
deserialize: (
|
118
|
+
serialize: async (
|
183
119
|
method: string,
|
120
|
+
contractMetadata: AztecWalletMethodMap['aztec_getContractMetadata']['result'],
|
121
|
+
): Promise<JSONRPCSerializedData> => {
|
122
|
+
return {
|
123
|
+
method,
|
124
|
+
serialized: jsonStringify(contractMetadata),
|
125
|
+
};
|
126
|
+
},
|
127
|
+
deserialize: async (
|
128
|
+
_method: string,
|
184
129
|
data: JSONRPCSerializedData,
|
185
|
-
): AztecWalletMethodMap['
|
186
|
-
|
130
|
+
): Promise<AztecWalletMethodMap['aztec_getContractMetadata']['result']> => {
|
131
|
+
return await jsonParseWithSchema(data.serialized, ContractMetadataSchema);
|
132
|
+
},
|
187
133
|
};
|
188
134
|
}
|
189
135
|
|
@@ -205,57 +151,33 @@ export class AztecRegisterContractSerializer
|
|
205
151
|
* @param value - The parameters containing contract instance and optional artifact
|
206
152
|
* @returns Serialized registration data
|
207
153
|
*/
|
208
|
-
serialize: (
|
154
|
+
serialize: async (
|
209
155
|
method: string,
|
210
156
|
value: AztecWalletMethodMap['aztec_registerContract']['params'],
|
211
|
-
): JSONRPCSerializedData => ({
|
157
|
+
): Promise<JSONRPCSerializedData> => ({
|
212
158
|
method,
|
213
159
|
serialized: JSON.stringify({
|
214
|
-
|
215
|
-
|
216
|
-
artifact: value.artifact ? ContractArtifactSchema.parse(value.artifact) : undefined,
|
160
|
+
instance: jsonStringify(value.instance),
|
161
|
+
artifact: value.artifact ? jsonStringify(value.artifact) : undefined,
|
217
162
|
}),
|
218
163
|
}),
|
219
|
-
deserialize: (
|
220
|
-
|
164
|
+
deserialize: async (
|
165
|
+
_method: string,
|
221
166
|
data: JSONRPCSerializedData,
|
222
|
-
): AztecWalletMethodMap['aztec_registerContract']['params'] => {
|
223
|
-
const {
|
167
|
+
): Promise<AztecWalletMethodMap['aztec_registerContract']['params']> => {
|
168
|
+
const { instance, artifact } = JSON.parse(data.serialized);
|
224
169
|
return {
|
225
|
-
instance:
|
226
|
-
|
227
|
-
).withAddress(AztecAddress.fromString(address)),
|
228
|
-
artifact: artifact ? ContractArtifactSchema.parse(artifact) : undefined,
|
170
|
+
instance: await jsonParseWithSchema(instance, ContractInstanceWithAddressSchema),
|
171
|
+
artifact: artifact ? await jsonParseWithSchema(artifact, ContractArtifactSchema) : undefined,
|
229
172
|
};
|
230
173
|
},
|
231
174
|
};
|
232
|
-
|
233
|
-
result = {
|
234
|
-
/**
|
235
|
-
* Serializes the contract registration result.
|
236
|
-
* @param method - The RPC method name
|
237
|
-
* @param value - Boolean indicating success of registration
|
238
|
-
* @returns Serialized result
|
239
|
-
*/
|
240
|
-
serialize: (
|
241
|
-
method: string,
|
242
|
-
value: AztecWalletMethodMap['aztec_registerContract']['result'],
|
243
|
-
): JSONRPCSerializedData => ({
|
244
|
-
method,
|
245
|
-
serialized: JSON.stringify(value),
|
246
|
-
}),
|
247
|
-
deserialize: (
|
248
|
-
method: string,
|
249
|
-
data: JSONRPCSerializedData,
|
250
|
-
): AztecWalletMethodMap['aztec_registerContract']['result'] => JSON.parse(data.serialized),
|
251
|
-
};
|
252
175
|
}
|
253
176
|
|
254
177
|
/**
|
255
178
|
* Pre-instantiated serializer instances for Aztec contract-related RPC methods.
|
256
179
|
* These instances can be used directly by the RPC handler implementation.
|
257
180
|
*/
|
258
|
-
export const aztecGetContractInstanceSerializer = new AztecGetContractInstanceSerializer();
|
259
|
-
export const aztecGetContractClassSerializer = new AztecGetContractClassSerializer();
|
260
|
-
export const aztecGetContractArtifactSerializer = new AztecGetContractArtifactSerializer();
|
261
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
|
});
|