@aztec/stdlib 0.83.1-nightly.20250404 → 0.84.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/dest/abi/abi.d.ts +2 -2
- package/dest/abi/abi.d.ts.map +1 -1
- package/dest/abi/abi.js +1 -1
- package/dest/abi/contract_artifact.d.ts.map +1 -1
- package/dest/abi/contract_artifact.js +21 -9
- package/dest/contract/artifact_hash.d.ts +5 -5
- package/dest/contract/artifact_hash.d.ts.map +1 -1
- package/dest/contract/artifact_hash.js +8 -8
- package/dest/contract/index.d.ts +1 -1
- package/dest/contract/index.d.ts.map +1 -1
- package/dest/contract/index.js +1 -1
- package/dest/contract/interfaces/contract_class.d.ts +23 -19
- package/dest/contract/interfaces/contract_class.d.ts.map +1 -1
- package/dest/contract/interfaces/contract_class.js +4 -4
- package/dest/contract/private_function_membership_proof.d.ts +1 -1
- package/dest/contract/private_function_membership_proof.js +6 -6
- package/dest/contract/utility_function_membership_proof.d.ts +27 -0
- package/dest/contract/utility_function_membership_proof.d.ts.map +1 -0
- package/dest/contract/{unconstrained_function_membership_proof.js → utility_function_membership_proof.js} +13 -13
- package/dest/interfaces/pxe.d.ts +7 -8
- package/dest/interfaces/pxe.d.ts.map +1 -1
- package/dest/interfaces/pxe.js +1 -1
- package/dest/noir/index.d.ts +3 -1
- package/dest/noir/index.d.ts.map +1 -1
- package/dest/noir/index.js +1 -0
- package/dest/tests/factories.d.ts +2 -2
- package/dest/tests/factories.d.ts.map +1 -1
- package/dest/tests/factories.js +3 -3
- package/package.json +6 -6
- package/src/abi/abi.ts +2 -2
- package/src/abi/contract_artifact.ts +22 -8
- package/src/contract/artifact_hash.ts +9 -9
- package/src/contract/index.ts +1 -1
- package/src/contract/interfaces/contract_class.ts +21 -17
- package/src/contract/private_function_membership_proof.ts +6 -6
- package/src/contract/{unconstrained_function_membership_proof.ts → utility_function_membership_proof.ts} +18 -18
- package/src/interfaces/pxe.ts +8 -9
- package/src/noir/index.ts +2 -1
- package/src/tests/factories.ts +4 -4
- package/dest/contract/unconstrained_function_membership_proof.d.ts +0 -27
- package/dest/contract/unconstrained_function_membership_proof.d.ts.map +0 -1
package/dest/abi/abi.d.ts
CHANGED
|
@@ -127,7 +127,7 @@ export type AbiErrorType = {
|
|
|
127
127
|
export declare enum FunctionType {
|
|
128
128
|
PRIVATE = "private",
|
|
129
129
|
PUBLIC = "public",
|
|
130
|
-
|
|
130
|
+
UTILITY = "utility"
|
|
131
131
|
}
|
|
132
132
|
/** The abi entry of a function. */
|
|
133
133
|
export interface FunctionAbi {
|
|
@@ -812,7 +812,7 @@ export type FieldLayout = {
|
|
|
812
812
|
export interface ContractArtifact {
|
|
813
813
|
/** The name of the contract. */
|
|
814
814
|
name: string;
|
|
815
|
-
/** The functions of the contract. Includes private and
|
|
815
|
+
/** The functions of the contract. Includes private and utility functions, plus the public dispatch function. */
|
|
816
816
|
functions: FunctionArtifact[];
|
|
817
817
|
/** The public functions of the contract, excluding dispatch. */
|
|
818
818
|
nonDispatchPublicFunctions: FunctionAbi[];
|
package/dest/abi/abi.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"abi.d.ts","sourceRoot":"","sources":["../../src/abi/abi.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"abi.d.ts","sourceRoot":"","sources":["../../src/abi/abi.ts"],"names":[],"mappings":"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"}
|
package/dest/abi/abi.js
CHANGED
|
@@ -99,7 +99,7 @@ const AbiErrorTypeSchema = z.union([
|
|
|
99
99
|
/** Aztec.nr function types. */ export var FunctionType = /*#__PURE__*/ function(FunctionType) {
|
|
100
100
|
FunctionType["PRIVATE"] = "private";
|
|
101
101
|
FunctionType["PUBLIC"] = "public";
|
|
102
|
-
FunctionType["
|
|
102
|
+
FunctionType["UTILITY"] = "utility";
|
|
103
103
|
return FunctionType;
|
|
104
104
|
}({});
|
|
105
105
|
export const FunctionAbiSchema = z.object({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contract_artifact.d.ts","sourceRoot":"","sources":["../../src/abi/contract_artifact.ts"],"names":[],"mappings":";;AAEA,OAAO,EAKL,KAAK,gBAAgB,EAKrB,KAAK,gBAAgB,EAKtB,MAAM,iBAAiB,CAAC;AACzB,OAAO,
|
|
1
|
+
{"version":3,"file":"contract_artifact.d.ts","sourceRoot":"","sources":["../../src/abi/contract_artifact.ts"],"names":[],"mappings":";;AAEA,OAAO,EAKL,KAAK,gBAAgB,EAKrB,KAAK,gBAAgB,EAKtB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAOL,KAAK,oBAAoB,EAC1B,MAAM,kBAAkB,CAAC;AAE1B;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,gBAAgB,GAAG,MAAM,CAE3E;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAEpF;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,oBAAoB,GAAG,gBAAgB,CAKlF;AAED;;;;;GAKG;AACH,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,oBAAoB,GAAG,gBAAgB,CAE3F;AA+DD,yDAAyD;AACzD,KAAK,4BAA4B,GAAG,oBAAoB,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC;AAE9E;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,4BAA4B,GAAG,gBAAgB,GAAG,OAAO,CAI9F"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsonParseWithSchema, jsonStringify } from '@aztec/foundation/json-rpc';
|
|
2
2
|
import { ContractArtifactSchema, FunctionType } from '../abi/index.js';
|
|
3
|
-
import { AZTEC_INITIALIZER_ATTRIBUTE, AZTEC_INTERNAL_ATTRIBUTE, AZTEC_PRIVATE_ATTRIBUTE, AZTEC_PUBLIC_ATTRIBUTE, AZTEC_VIEW_ATTRIBUTE } from '../noir/index.js';
|
|
3
|
+
import { AZTEC_INITIALIZER_ATTRIBUTE, AZTEC_INTERNAL_ATTRIBUTE, AZTEC_PRIVATE_ATTRIBUTE, AZTEC_PUBLIC_ATTRIBUTE, AZTEC_UTILITY_ATTRIBUTE, AZTEC_VIEW_ATTRIBUTE } from '../noir/index.js';
|
|
4
4
|
/**
|
|
5
5
|
* Serializes a contract artifact to a buffer for storage.
|
|
6
6
|
* @param artifact - Artifact to serialize.
|
|
@@ -109,13 +109,13 @@ import { AZTEC_INITIALIZER_ATTRIBUTE, AZTEC_INTERNAL_ATTRIBUTE, AZTEC_PRIVATE_AT
|
|
|
109
109
|
const functionType = getFunctionType(fn);
|
|
110
110
|
const isInternal = fn.custom_attributes.includes(AZTEC_INTERNAL_ATTRIBUTE);
|
|
111
111
|
const isStatic = fn.custom_attributes.includes(AZTEC_VIEW_ATTRIBUTE);
|
|
112
|
-
// If the function is not
|
|
112
|
+
// If the function is not a utility function, the first item is inputs or CallContext which we should omit
|
|
113
113
|
let parameters = fn.abi.parameters.map(generateFunctionParameter);
|
|
114
114
|
if (hasKernelFunctionInputs(parameters)) {
|
|
115
115
|
parameters = parameters.slice(1);
|
|
116
116
|
}
|
|
117
117
|
let returnTypes = [];
|
|
118
|
-
if (functionType === FunctionType.
|
|
118
|
+
if (functionType === FunctionType.UTILITY) {
|
|
119
119
|
returnTypes = fn.abi.return_type ? [
|
|
120
120
|
fn.abi.return_type.abi_type
|
|
121
121
|
] : returnTypes;
|
|
@@ -166,17 +166,29 @@ import { AZTEC_INITIALIZER_ATTRIBUTE, AZTEC_INTERNAL_ATTRIBUTE, AZTEC_PRIVATE_AT
|
|
|
166
166
|
};
|
|
167
167
|
}
|
|
168
168
|
function getFunctionType(fn) {
|
|
169
|
-
if (fn.custom_attributes.
|
|
169
|
+
if (fn.custom_attributes.some((attr)=>attr.endsWith(AZTEC_PRIVATE_ATTRIBUTE))) {
|
|
170
170
|
return FunctionType.PRIVATE;
|
|
171
|
-
} else if (fn.custom_attributes.
|
|
171
|
+
} else if (fn.custom_attributes.some((attr)=>attr.endsWith(AZTEC_PUBLIC_ATTRIBUTE))) {
|
|
172
172
|
return FunctionType.PUBLIC;
|
|
173
|
-
} else if (fn.
|
|
174
|
-
return FunctionType.
|
|
173
|
+
} else if (fn.custom_attributes.some((attr)=>attr.endsWith(AZTEC_UTILITY_ATTRIBUTE))) {
|
|
174
|
+
return FunctionType.UTILITY;
|
|
175
175
|
} else {
|
|
176
|
-
|
|
177
|
-
return FunctionType.PRIVATE;
|
|
176
|
+
throw new Error(`Invalid function type for a noir contract function ${fn.name}`);
|
|
178
177
|
}
|
|
179
178
|
}
|
|
179
|
+
// TODO(https://github.com/noir-lang/noir/issues/7912): Replace the above function with this one once the linked issue
|
|
180
|
+
// is fixed.
|
|
181
|
+
// function getFunctionType(fn: NoirCompiledContractFunction): FunctionType {
|
|
182
|
+
// if (fn.custom_attributes.includes(AZTEC_PRIVATE_ATTRIBUTE)) {
|
|
183
|
+
// return FunctionType.PRIVATE;
|
|
184
|
+
// } else if (fn.custom_attributes.includes(AZTEC_PUBLIC_ATTRIBUTE)) {
|
|
185
|
+
// return FunctionType.PUBLIC;
|
|
186
|
+
// } else if (fn.custom_attributes.includes(AZTEC_UTILITY_ATTRIBUTE)) {
|
|
187
|
+
// return FunctionType.UTILITY;
|
|
188
|
+
// } else {
|
|
189
|
+
// throw new Error(`Invalid function type for a noir contract function ${fn.name}`);
|
|
190
|
+
// }
|
|
191
|
+
// }
|
|
180
192
|
/**
|
|
181
193
|
* Returns true if the first parameter is kernel function inputs.
|
|
182
194
|
*
|
|
@@ -11,15 +11,15 @@ import { type ContractArtifact, type FunctionArtifact, FunctionSelector, Functio
|
|
|
11
11
|
* sha256(fn.selector, fn.metadata_hash, sha256(fn.bytecode))
|
|
12
12
|
* private_functions_artifact_tree_root = merkleize(private_functions_artifact_leaves)
|
|
13
13
|
*
|
|
14
|
-
*
|
|
14
|
+
* utility_functions_artifact_leaves = artifact.utility_functions.map fn =>
|
|
15
15
|
* sha256(fn.selector, fn.metadata_hash, sha256(fn.bytecode))
|
|
16
|
-
*
|
|
16
|
+
* utility_functions_artifact_tree_root = merkleize(utility_functions_artifact_leaves)
|
|
17
17
|
*
|
|
18
18
|
* version = 1
|
|
19
19
|
* artifact_hash = sha256(
|
|
20
20
|
* version,
|
|
21
21
|
* private_functions_artifact_tree_root,
|
|
22
|
-
*
|
|
22
|
+
* utility_functions_artifact_tree_root,
|
|
23
23
|
* artifact_metadata,
|
|
24
24
|
* )
|
|
25
25
|
* ```
|
|
@@ -27,12 +27,12 @@ import { type ContractArtifact, type FunctionArtifact, FunctionSelector, Functio
|
|
|
27
27
|
*/
|
|
28
28
|
export declare function computeArtifactHash(artifact: ContractArtifact | {
|
|
29
29
|
privateFunctionRoot: Fr;
|
|
30
|
-
|
|
30
|
+
utilityFunctionRoot: Fr;
|
|
31
31
|
metadataHash: Fr;
|
|
32
32
|
}): Promise<Fr>;
|
|
33
33
|
export declare function computeArtifactHashPreimage(artifact: ContractArtifact): Promise<{
|
|
34
34
|
privateFunctionRoot: Fr;
|
|
35
|
-
|
|
35
|
+
utilityFunctionRoot: Fr;
|
|
36
36
|
metadataHash: Fr;
|
|
37
37
|
}>;
|
|
38
38
|
export declare function computeArtifactMetadataHash(artifact: ContractArtifact): Fr;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"artifact_hash.d.ts","sourceRoot":"","sources":["../../src/contract/artifact_hash.ts"],"names":[],"mappings":";;AACA,OAAO,EAAE,EAAE,EAAY,MAAM,0BAA0B,CAAC;AAGxD,OAAO,EAAE,UAAU,EAAwB,MAAM,yBAAyB,CAAC;AAE3E,OAAO,EAAE,KAAK,gBAAgB,EAAE,KAAK,gBAAgB,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAS/G;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAsB,mBAAmB,CACvC,QAAQ,EAAE,gBAAgB,GAAG;IAAE,mBAAmB,EAAE,EAAE,CAAC;IAAC,
|
|
1
|
+
{"version":3,"file":"artifact_hash.d.ts","sourceRoot":"","sources":["../../src/contract/artifact_hash.ts"],"names":[],"mappings":";;AACA,OAAO,EAAE,EAAE,EAAY,MAAM,0BAA0B,CAAC;AAGxD,OAAO,EAAE,UAAU,EAAwB,MAAM,yBAAyB,CAAC;AAE3E,OAAO,EAAE,KAAK,gBAAgB,EAAE,KAAK,gBAAgB,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAS/G;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAsB,mBAAmB,CACvC,QAAQ,EAAE,gBAAgB,GAAG;IAAE,mBAAmB,EAAE,EAAE,CAAC;IAAC,mBAAmB,EAAE,EAAE,CAAC;IAAC,YAAY,EAAE,EAAE,CAAA;CAAE,GAClG,OAAO,CAAC,EAAE,CAAC,CAWb;AAED,wBAAsB,2BAA2B,CAAC,QAAQ,EAAE,gBAAgB;;;;GAK3E;AAED,wBAAgB,2BAA2B,CAAC,QAAQ,EAAE,gBAAgB,MAErE;AAED,wBAAsB,+BAA+B,CAAC,QAAQ,EAAE,gBAAgB,EAAE,MAAM,EAAE,YAAY,eAGrG;AAED,wBAAsB,2BAA2B,CAC/C,QAAQ,EAAE,gBAAgB,EAC1B,MAAM,EAAE,YAAY,GACnB,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CASjC;AAYD,wBAAsB,2BAA2B,CAC/C,EAAE,EACE,gBAAgB,GAChB,CAAC,IAAI,CAAC,gBAAgB,EAAE,UAAU,CAAC,GAAG;IAAE,oBAAoB,EAAE,EAAE,CAAC;IAAC,QAAQ,EAAE,gBAAgB,CAAA;CAAE,CAAC,eAOpG;AAED,wBAAgB,2BAA2B,CAAC,EAAE,EAAE,gBAAgB,MAE/D;AAMD,wBAAgB,2BAA2B,QAC9B,MAAM,KAAK,MAAM,qBAC7B"}
|
|
@@ -17,25 +17,25 @@ const sha256Fr = reduceFn(sha256, Fr);
|
|
|
17
17
|
* sha256(fn.selector, fn.metadata_hash, sha256(fn.bytecode))
|
|
18
18
|
* private_functions_artifact_tree_root = merkleize(private_functions_artifact_leaves)
|
|
19
19
|
*
|
|
20
|
-
*
|
|
20
|
+
* utility_functions_artifact_leaves = artifact.utility_functions.map fn =>
|
|
21
21
|
* sha256(fn.selector, fn.metadata_hash, sha256(fn.bytecode))
|
|
22
|
-
*
|
|
22
|
+
* utility_functions_artifact_tree_root = merkleize(utility_functions_artifact_leaves)
|
|
23
23
|
*
|
|
24
24
|
* version = 1
|
|
25
25
|
* artifact_hash = sha256(
|
|
26
26
|
* version,
|
|
27
27
|
* private_functions_artifact_tree_root,
|
|
28
|
-
*
|
|
28
|
+
* utility_functions_artifact_tree_root,
|
|
29
29
|
* artifact_metadata,
|
|
30
30
|
* )
|
|
31
31
|
* ```
|
|
32
32
|
* @param artifact - Artifact to calculate the hash for.
|
|
33
33
|
*/ export async function computeArtifactHash(artifact) {
|
|
34
|
-
if ('privateFunctionRoot' in artifact && '
|
|
35
|
-
const { privateFunctionRoot,
|
|
34
|
+
if ('privateFunctionRoot' in artifact && 'utilityFunctionRoot' in artifact && 'metadataHash' in artifact) {
|
|
35
|
+
const { privateFunctionRoot, utilityFunctionRoot, metadataHash } = artifact;
|
|
36
36
|
const preimage = [
|
|
37
37
|
privateFunctionRoot,
|
|
38
|
-
|
|
38
|
+
utilityFunctionRoot,
|
|
39
39
|
metadataHash
|
|
40
40
|
].map((x)=>x.toBuffer());
|
|
41
41
|
return sha256Fr(Buffer.concat([
|
|
@@ -53,11 +53,11 @@ const sha256Fr = reduceFn(sha256, Fr);
|
|
|
53
53
|
}
|
|
54
54
|
export async function computeArtifactHashPreimage(artifact) {
|
|
55
55
|
const privateFunctionRoot = await computeArtifactFunctionTreeRoot(artifact, FunctionType.PRIVATE);
|
|
56
|
-
const
|
|
56
|
+
const utilityFunctionRoot = await computeArtifactFunctionTreeRoot(artifact, FunctionType.UTILITY);
|
|
57
57
|
const metadataHash = computeArtifactMetadataHash(artifact);
|
|
58
58
|
return {
|
|
59
59
|
privateFunctionRoot,
|
|
60
|
-
|
|
60
|
+
utilityFunctionRoot,
|
|
61
61
|
metadataHash
|
|
62
62
|
};
|
|
63
63
|
}
|
package/dest/contract/index.d.ts
CHANGED
|
@@ -6,7 +6,7 @@ export * from './contract_instance.js';
|
|
|
6
6
|
export * from './contract_instance_update.js';
|
|
7
7
|
export * from './private_function.js';
|
|
8
8
|
export * from './private_function_membership_proof.js';
|
|
9
|
-
export * from './
|
|
9
|
+
export * from './utility_function_membership_proof.js';
|
|
10
10
|
export * from './interfaces/index.js';
|
|
11
11
|
export * from './contract_function_dao.js';
|
|
12
12
|
export * from './partial_address.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/contract/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,uBAAuB,CAAC;AACtC,cAAc,wCAAwC,CAAC;AACvD,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/contract/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,uBAAuB,CAAC;AACtC,cAAc,wCAAwC,CAAC;AACvD,cAAc,wCAAwC,CAAC;AACvD,cAAc,uBAAuB,CAAC;AACtC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC"}
|
package/dest/contract/index.js
CHANGED
|
@@ -6,7 +6,7 @@ export * from './contract_instance.js';
|
|
|
6
6
|
export * from './contract_instance_update.js';
|
|
7
7
|
export * from './private_function.js';
|
|
8
8
|
export * from './private_function_membership_proof.js';
|
|
9
|
-
export * from './
|
|
9
|
+
export * from './utility_function_membership_proof.js';
|
|
10
10
|
export * from './interfaces/index.js';
|
|
11
11
|
export * from './contract_function_dao.js';
|
|
12
12
|
export * from './partial_address.js';
|
|
@@ -13,7 +13,11 @@ declare const VERSION: 1;
|
|
|
13
13
|
export interface ContractClass {
|
|
14
14
|
/** Version of the contract class. */
|
|
15
15
|
version: typeof VERSION;
|
|
16
|
-
/**
|
|
16
|
+
/**
|
|
17
|
+
* Hash of the contract artifact. The specification of this hash is not enforced by the protocol. Should include
|
|
18
|
+
* commitments to code of utility functions and compilation metadata. Intended to be used by clients to verify that
|
|
19
|
+
* an off-chain fetched artifact matches a registered class.
|
|
20
|
+
*/
|
|
17
21
|
artifactHash: Fr;
|
|
18
22
|
/** List of individual private functions, constructors included. */
|
|
19
23
|
privateFunctions: PrivateFunction[];
|
|
@@ -32,8 +36,8 @@ export interface ExecutablePrivateFunction extends PrivateFunction {
|
|
|
32
36
|
/** ACIR and Brillig bytecode */
|
|
33
37
|
bytecode: Buffer;
|
|
34
38
|
}
|
|
35
|
-
/**
|
|
36
|
-
export interface
|
|
39
|
+
/** Utility function definition. */
|
|
40
|
+
export interface UtilityFunction {
|
|
37
41
|
/** Selector of the function. Calculated as the hash of the method name and parameters. The specification of this is not enforced by the protocol. */
|
|
38
42
|
selector: FunctionSelector;
|
|
39
43
|
/** Brillig. */
|
|
@@ -43,24 +47,24 @@ export interface UnconstrainedFunction {
|
|
|
43
47
|
export type PrivateFunctionMembershipProof = {
|
|
44
48
|
artifactMetadataHash: Fr;
|
|
45
49
|
functionMetadataHash: Fr;
|
|
46
|
-
|
|
50
|
+
utilityFunctionsTreeRoot: Fr;
|
|
47
51
|
privateFunctionTreeSiblingPath: Fr[];
|
|
48
52
|
privateFunctionTreeLeafIndex: number;
|
|
49
53
|
artifactTreeSiblingPath: Fr[];
|
|
50
54
|
artifactTreeLeafIndex: number;
|
|
51
55
|
};
|
|
52
|
-
/** A private function with a
|
|
56
|
+
/** A private function with a membership proof. */
|
|
53
57
|
export type ExecutablePrivateFunctionWithMembershipProof = ExecutablePrivateFunction & PrivateFunctionMembershipProof;
|
|
54
|
-
/** Sibling paths and commitments for proving membership of
|
|
55
|
-
export type
|
|
58
|
+
/** Sibling paths and commitments for proving membership of a utility function within a contract class. */
|
|
59
|
+
export type UtilityFunctionMembershipProof = {
|
|
56
60
|
artifactMetadataHash: Fr;
|
|
57
61
|
functionMetadataHash: Fr;
|
|
58
62
|
privateFunctionsArtifactTreeRoot: Fr;
|
|
59
63
|
artifactTreeSiblingPath: Fr[];
|
|
60
64
|
artifactTreeLeafIndex: number;
|
|
61
65
|
};
|
|
62
|
-
/**
|
|
63
|
-
export type
|
|
66
|
+
/** A utility function with a membership proof. */
|
|
67
|
+
export type UtilityFunctionWithMembershipProof = UtilityFunction & UtilityFunctionMembershipProof;
|
|
64
68
|
export declare const ContractClassSchema: z.ZodObject<{
|
|
65
69
|
version: z.ZodLiteral<1>;
|
|
66
70
|
artifactHash: z.ZodType<Fr, any, string>;
|
|
@@ -168,10 +172,10 @@ export declare const ContractClassWithIdSchema: z.ZodObject<z.objectUtil.extendS
|
|
|
168
172
|
selector?: any;
|
|
169
173
|
}[];
|
|
170
174
|
}>;
|
|
171
|
-
/** A contract class with public bytecode information, and optional private and
|
|
175
|
+
/** A contract class with public bytecode information, and optional private and utility functions. */
|
|
172
176
|
export type ContractClassPublic = {
|
|
173
177
|
privateFunctions: ExecutablePrivateFunctionWithMembershipProof[];
|
|
174
|
-
|
|
178
|
+
utilityFunctions: UtilityFunctionWithMembershipProof[];
|
|
175
179
|
} & Pick<ContractClassCommitments, 'id' | 'privateFunctionsRoot'> & Omit<ContractClass, 'privateFunctions'>;
|
|
176
180
|
export type ContractClassPublicWithCommitment = ContractClassPublic & Pick<ContractClassCommitments, 'publicBytecodeCommitment'>;
|
|
177
181
|
export declare const ContractClassPublicSchema: z.ZodIntersection<z.ZodObject<{
|
|
@@ -210,7 +214,7 @@ export declare const ContractClassPublicSchema: z.ZodIntersection<z.ZodObject<{
|
|
|
210
214
|
}>>, z.ZodObject<{
|
|
211
215
|
artifactMetadataHash: z.ZodType<Fr, any, string>;
|
|
212
216
|
functionMetadataHash: z.ZodType<Fr, any, string>;
|
|
213
|
-
|
|
217
|
+
utilityFunctionsTreeRoot: z.ZodType<Fr, any, string>;
|
|
214
218
|
privateFunctionTreeSiblingPath: z.ZodArray<z.ZodType<Fr, any, string>, "many">;
|
|
215
219
|
privateFunctionTreeLeafIndex: z.ZodPipeline<z.ZodUnion<[z.ZodBigInt, z.ZodNumber, z.ZodString]>, z.ZodNumber>;
|
|
216
220
|
artifactTreeSiblingPath: z.ZodArray<z.ZodType<Fr, any, string>, "many">;
|
|
@@ -218,7 +222,7 @@ export declare const ContractClassPublicSchema: z.ZodIntersection<z.ZodObject<{
|
|
|
218
222
|
}, "strip", z.ZodTypeAny, {
|
|
219
223
|
functionMetadataHash: Fr;
|
|
220
224
|
artifactMetadataHash: Fr;
|
|
221
|
-
|
|
225
|
+
utilityFunctionsTreeRoot: Fr;
|
|
222
226
|
privateFunctionTreeSiblingPath: Fr[];
|
|
223
227
|
privateFunctionTreeLeafIndex: number;
|
|
224
228
|
artifactTreeSiblingPath: Fr[];
|
|
@@ -226,13 +230,13 @@ export declare const ContractClassPublicSchema: z.ZodIntersection<z.ZodObject<{
|
|
|
226
230
|
}, {
|
|
227
231
|
functionMetadataHash: string;
|
|
228
232
|
artifactMetadataHash: string;
|
|
229
|
-
|
|
233
|
+
utilityFunctionsTreeRoot: string;
|
|
230
234
|
privateFunctionTreeSiblingPath: string[];
|
|
231
235
|
privateFunctionTreeLeafIndex: string | number | bigint;
|
|
232
236
|
artifactTreeSiblingPath: string[];
|
|
233
237
|
artifactTreeLeafIndex: string | number | bigint;
|
|
234
238
|
}>>, "many">;
|
|
235
|
-
|
|
239
|
+
utilityFunctions: z.ZodArray<z.ZodIntersection<z.ZodObject<{
|
|
236
240
|
/** lala */
|
|
237
241
|
selector: ZodFor<FunctionSelector>;
|
|
238
242
|
bytecode: z.ZodUnion<[z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, Buffer, string>, z.ZodEffects<z.ZodObject<{
|
|
@@ -287,13 +291,13 @@ export declare const ContractClassPublicSchema: z.ZodIntersection<z.ZodObject<{
|
|
|
287
291
|
} & {
|
|
288
292
|
functionMetadataHash: Fr;
|
|
289
293
|
artifactMetadataHash: Fr;
|
|
290
|
-
|
|
294
|
+
utilityFunctionsTreeRoot: Fr;
|
|
291
295
|
privateFunctionTreeSiblingPath: Fr[];
|
|
292
296
|
privateFunctionTreeLeafIndex: number;
|
|
293
297
|
artifactTreeSiblingPath: Fr[];
|
|
294
298
|
artifactTreeLeafIndex: number;
|
|
295
299
|
})[];
|
|
296
|
-
|
|
300
|
+
utilityFunctions: ({
|
|
297
301
|
bytecode: Buffer;
|
|
298
302
|
selector: FunctionSelector;
|
|
299
303
|
} & {
|
|
@@ -317,13 +321,13 @@ export declare const ContractClassPublicSchema: z.ZodIntersection<z.ZodObject<{
|
|
|
317
321
|
} & {
|
|
318
322
|
functionMetadataHash: string;
|
|
319
323
|
artifactMetadataHash: string;
|
|
320
|
-
|
|
324
|
+
utilityFunctionsTreeRoot: string;
|
|
321
325
|
privateFunctionTreeSiblingPath: string[];
|
|
322
326
|
privateFunctionTreeLeafIndex: string | number | bigint;
|
|
323
327
|
artifactTreeSiblingPath: string[];
|
|
324
328
|
artifactTreeLeafIndex: string | number | bigint;
|
|
325
329
|
})[];
|
|
326
|
-
|
|
330
|
+
utilityFunctions: ({
|
|
327
331
|
bytecode: string | {
|
|
328
332
|
type: "Buffer";
|
|
329
333
|
data: number[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contract_class.d.ts","sourceRoot":"","sources":["../../../src/contract/interfaces/contract_class.ts"],"names":[],"mappings":";;AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AACnD,OAAO,EAAE,KAAK,MAAM,EAAW,MAAM,2BAA2B,CAAC;AAEjE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD,QAAA,MAAM,OAAO,GAAa,CAAC;AAE3B;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B,qCAAqC;IACrC,OAAO,EAAE,OAAO,OAAO,CAAC;IACxB
|
|
1
|
+
{"version":3,"file":"contract_class.d.ts","sourceRoot":"","sources":["../../../src/contract/interfaces/contract_class.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,20 +9,20 @@ const PrivateFunctionSchema = z.object({
|
|
|
9
9
|
const ExecutablePrivateFunctionSchema = PrivateFunctionSchema.and(z.object({
|
|
10
10
|
bytecode: schemas.Buffer
|
|
11
11
|
}));
|
|
12
|
-
const
|
|
12
|
+
const UtilityFunctionSchema = z.object({
|
|
13
13
|
/** lala */ selector: FunctionSelector.schema,
|
|
14
14
|
bytecode: schemas.Buffer
|
|
15
15
|
});
|
|
16
16
|
const PrivateFunctionMembershipProofSchema = z.object({
|
|
17
17
|
artifactMetadataHash: schemas.Fr,
|
|
18
18
|
functionMetadataHash: schemas.Fr,
|
|
19
|
-
|
|
19
|
+
utilityFunctionsTreeRoot: schemas.Fr,
|
|
20
20
|
privateFunctionTreeSiblingPath: z.array(schemas.Fr),
|
|
21
21
|
privateFunctionTreeLeafIndex: schemas.Integer,
|
|
22
22
|
artifactTreeSiblingPath: z.array(schemas.Fr),
|
|
23
23
|
artifactTreeLeafIndex: schemas.Integer
|
|
24
24
|
});
|
|
25
|
-
const
|
|
25
|
+
const UtilityFunctionMembershipProofSchema = z.object({
|
|
26
26
|
artifactMetadataHash: schemas.Fr,
|
|
27
27
|
functionMetadataHash: schemas.Fr,
|
|
28
28
|
privateFunctionsArtifactTreeRoot: schemas.Fr,
|
|
@@ -42,7 +42,7 @@ export const ContractClassPublicSchema = z.object({
|
|
|
42
42
|
id: schemas.Fr,
|
|
43
43
|
privateFunctionsRoot: schemas.Fr,
|
|
44
44
|
privateFunctions: z.array(ExecutablePrivateFunctionSchema.and(PrivateFunctionMembershipProofSchema)),
|
|
45
|
-
|
|
45
|
+
utilityFunctions: z.array(UtilityFunctionSchema.and(UtilityFunctionMembershipProofSchema))
|
|
46
46
|
}).and(ContractClassSchema.omit({
|
|
47
47
|
privateFunctions: true
|
|
48
48
|
}));
|
|
@@ -22,7 +22,7 @@ export declare function createPrivateFunctionMembershipProof(selector: FunctionS
|
|
|
22
22
|
* // Compute artifact leaf and assert it belongs to the artifact
|
|
23
23
|
* artifact_function_leaf = sha256(selector, metadata_hash, sha256(bytecode))
|
|
24
24
|
* computed_artifact_private_function_tree_root = compute_root(artifact_function_leaf, artifact_function_tree_sibling_path)
|
|
25
|
-
* computed_artifact_hash = sha256(computed_artifact_private_function_tree_root,
|
|
25
|
+
* computed_artifact_hash = sha256(computed_artifact_private_function_tree_root, utility_functions_artifact_tree_root, artifact_metadata_hash)
|
|
26
26
|
* assert computed_artifact_hash == contract_class.artifact_hash
|
|
27
27
|
* ```
|
|
28
28
|
* @param fn - Function to check membership proof for.
|
|
@@ -25,7 +25,7 @@ import { computePrivateFunctionLeaf, computePrivateFunctionsTree } from './priva
|
|
|
25
25
|
throw new Error(`Private function with selector ${selector.toString()} not found`);
|
|
26
26
|
}
|
|
27
27
|
// Compute preimage for the artifact hash
|
|
28
|
-
const {
|
|
28
|
+
const { utilityFunctionRoot: utilityFunctionsTreeRoot, metadataHash: artifactMetadataHash } = await computeArtifactHashPreimage(artifact);
|
|
29
29
|
// We need two sibling paths because private function information is split across two trees:
|
|
30
30
|
// The "private function tree" captures the selectors and verification keys, and is used in the kernel circuit for verifying the proof generated by the app circuit.
|
|
31
31
|
const functionLeaf = await computePrivateFunctionLeaf(privateFunction);
|
|
@@ -47,7 +47,7 @@ import { computePrivateFunctionLeaf, computePrivateFunctionsTree } from './priva
|
|
|
47
47
|
functionLeaf: '0x' + functionLeaf.toString('hex'),
|
|
48
48
|
artifactMetadataHash,
|
|
49
49
|
privateFunctionsTreeRoot: '0x' + functionsTree.root.toString('hex'),
|
|
50
|
-
|
|
50
|
+
utilityFunctionsTreeRoot,
|
|
51
51
|
artifactFunctionTreeSiblingPath: artifactTreeSiblingPath.map((fr)=>fr.toString()).join(','),
|
|
52
52
|
privateFunctionTreeSiblingPath: functionsTreeSiblingPath.map((fr)=>fr.toString()).join(',')
|
|
53
53
|
});
|
|
@@ -56,7 +56,7 @@ import { computePrivateFunctionLeaf, computePrivateFunctionsTree } from './priva
|
|
|
56
56
|
artifactTreeLeafIndex,
|
|
57
57
|
artifactMetadataHash,
|
|
58
58
|
functionMetadataHash,
|
|
59
|
-
|
|
59
|
+
utilityFunctionsTreeRoot,
|
|
60
60
|
privateFunctionTreeSiblingPath: functionsTreeSiblingPath,
|
|
61
61
|
privateFunctionTreeLeafIndex: functionsTreeLeafIndex
|
|
62
62
|
};
|
|
@@ -77,7 +77,7 @@ import { computePrivateFunctionLeaf, computePrivateFunctionsTree } from './priva
|
|
|
77
77
|
* // Compute artifact leaf and assert it belongs to the artifact
|
|
78
78
|
* artifact_function_leaf = sha256(selector, metadata_hash, sha256(bytecode))
|
|
79
79
|
* computed_artifact_private_function_tree_root = compute_root(artifact_function_leaf, artifact_function_tree_sibling_path)
|
|
80
|
-
* computed_artifact_hash = sha256(computed_artifact_private_function_tree_root,
|
|
80
|
+
* computed_artifact_hash = sha256(computed_artifact_private_function_tree_root, utility_functions_artifact_tree_root, artifact_metadata_hash)
|
|
81
81
|
* assert computed_artifact_hash == contract_class.artifact_hash
|
|
82
82
|
* ```
|
|
83
83
|
* @param fn - Function to check membership proof for.
|
|
@@ -105,7 +105,7 @@ import { computePrivateFunctionLeaf, computePrivateFunctionsTree } from './priva
|
|
|
105
105
|
const computedArtifactPrivateFunctionTreeRoot = Fr.fromBuffer(computedArtifactPrivateFunctionTreeRootBuffer);
|
|
106
106
|
const computedArtifactHash = await computeArtifactHash({
|
|
107
107
|
privateFunctionRoot: computedArtifactPrivateFunctionTreeRoot,
|
|
108
|
-
|
|
108
|
+
utilityFunctionRoot: fn.utilityFunctionsTreeRoot,
|
|
109
109
|
metadataHash: fn.artifactMetadataHash
|
|
110
110
|
});
|
|
111
111
|
if (!contractClass.artifactHash.equals(computedArtifactHash)) {
|
|
@@ -114,7 +114,7 @@ import { computePrivateFunctionLeaf, computePrivateFunctionsTree } from './priva
|
|
|
114
114
|
computedArtifactHash,
|
|
115
115
|
computedFunctionArtifactHash: functionArtifactHash,
|
|
116
116
|
computedArtifactPrivateFunctionTreeRoot,
|
|
117
|
-
|
|
117
|
+
utilityFunctionRoot: fn.utilityFunctionsTreeRoot,
|
|
118
118
|
metadataHash: fn.artifactMetadataHash,
|
|
119
119
|
artifactFunctionTreeSiblingPath: fn.artifactTreeSiblingPath.map((fr)=>fr.toString()).join(',')
|
|
120
120
|
});
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { type ContractArtifact, FunctionSelector } from '../abi/index.js';
|
|
2
|
+
import type { ContractClassPublic, UtilityFunctionMembershipProof, UtilityFunctionWithMembershipProof } from './interfaces/index.js';
|
|
3
|
+
/**
|
|
4
|
+
* Creates a membership proof for a utility function in a contract class, to be verified via `isValidUtilityFunctionMembershipProof`.
|
|
5
|
+
* @param selector - Selector of the function to create the proof for.
|
|
6
|
+
* @param artifact - Artifact of the contract class where the function is defined.
|
|
7
|
+
*/
|
|
8
|
+
export declare function createUtilityFunctionMembershipProof(selector: FunctionSelector, artifact: ContractArtifact): Promise<UtilityFunctionMembershipProof>;
|
|
9
|
+
/**
|
|
10
|
+
* Verifies that a utility function with a membership proof as emitted by the ClassRegisterer contract is valid,
|
|
11
|
+
* as defined in the protocol specs at contract-deployment/classes:
|
|
12
|
+
*
|
|
13
|
+
* ```
|
|
14
|
+
* // Load contract class from local db
|
|
15
|
+
* contract_class = db.get_contract_class(contract_class_id)
|
|
16
|
+
*
|
|
17
|
+
* // Compute artifact leaf and assert it belongs to the artifact
|
|
18
|
+
* artifact_function_leaf = sha256(selector, metadata_hash, sha256(bytecode))
|
|
19
|
+
* computed_artifact_utility_function_tree_root = compute_root(artifact_function_leaf, artifact_function_tree_sibling_path, artifact_function_tree_leaf_index)
|
|
20
|
+
* computed_artifact_hash = sha256(private_functions_artifact_tree_root, computed_artifact_utility_function_tree_root, artifact_metadata_hash)
|
|
21
|
+
* assert computed_artifact_hash == contract_class.artifact_hash
|
|
22
|
+
* ```
|
|
23
|
+
* @param fn - Function to check membership proof for.
|
|
24
|
+
* @param contractClass - In which contract class the function is expected to be.
|
|
25
|
+
*/
|
|
26
|
+
export declare function isValidUtilityFunctionMembershipProof(fn: UtilityFunctionWithMembershipProof, contractClass: Pick<ContractClassPublic, 'artifactHash'>): Promise<boolean>;
|
|
27
|
+
//# sourceMappingURL=utility_function_membership_proof.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utility_function_membership_proof.d.ts","sourceRoot":"","sources":["../../src/contract/utility_function_membership_proof.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,gBAAgB,EAAE,gBAAgB,EAAgB,MAAM,iBAAiB,CAAC;AASxF,OAAO,KAAK,EACV,mBAAmB,EACnB,8BAA8B,EAC9B,kCAAkC,EACnC,MAAM,uBAAuB,CAAC;AAE/B;;;;GAIG;AACH,wBAAsB,oCAAoC,CACxD,QAAQ,EAAE,gBAAgB,EAC1B,QAAQ,EAAE,gBAAgB,GACzB,OAAO,CAAC,8BAA8B,CAAC,CAsCzC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,qCAAqC,CACzD,EAAE,EAAE,kCAAkC,EACtC,aAAa,EAAE,IAAI,CAAC,mBAAmB,EAAE,cAAc,CAAC,oBA+BzD"}
|
|
@@ -4,20 +4,20 @@ import { computeRootFromSiblingPath } from '@aztec/foundation/trees';
|
|
|
4
4
|
import { FunctionSelector, FunctionType } from '../abi/index.js';
|
|
5
5
|
import { computeArtifactFunctionTree, computeArtifactHash, computeArtifactHashPreimage, computeFunctionArtifactHash, computeFunctionMetadataHash, getArtifactMerkleTreeHasher } from './artifact_hash.js';
|
|
6
6
|
/**
|
|
7
|
-
* Creates a membership proof for
|
|
7
|
+
* Creates a membership proof for a utility function in a contract class, to be verified via `isValidUtilityFunctionMembershipProof`.
|
|
8
8
|
* @param selector - Selector of the function to create the proof for.
|
|
9
9
|
* @param artifact - Artifact of the contract class where the function is defined.
|
|
10
|
-
*/ export async function
|
|
10
|
+
*/ export async function createUtilityFunctionMembershipProof(selector, artifact) {
|
|
11
11
|
const log = createLogger('circuits:function_membership_proof');
|
|
12
12
|
// Locate function artifact
|
|
13
|
-
const
|
|
14
|
-
const
|
|
13
|
+
const utilityFunctions = artifact.functions.filter((fn)=>fn.functionType === FunctionType.UTILITY);
|
|
14
|
+
const utilityFunctionsAndSelectors = await Promise.all(utilityFunctions.map(async (fn)=>({
|
|
15
15
|
fn,
|
|
16
16
|
selector: await FunctionSelector.fromNameAndParameters(fn)
|
|
17
17
|
})));
|
|
18
|
-
const fn =
|
|
18
|
+
const fn = utilityFunctionsAndSelectors.find((fnAndSelector)=>selector.equals(fnAndSelector.selector))?.fn;
|
|
19
19
|
if (!fn) {
|
|
20
|
-
throw new Error(`
|
|
20
|
+
throw new Error(`Utility function with selector ${selector.toString()} not found`);
|
|
21
21
|
}
|
|
22
22
|
// Compute preimage for the artifact hash
|
|
23
23
|
const { privateFunctionRoot: privateFunctionsArtifactTreeRoot, metadataHash: artifactMetadataHash } = await computeArtifactHashPreimage(artifact);
|
|
@@ -27,10 +27,10 @@ import { computeArtifactFunctionTree, computeArtifactHash, computeArtifactHashPr
|
|
|
27
27
|
...fn,
|
|
28
28
|
functionMetadataHash
|
|
29
29
|
});
|
|
30
|
-
const artifactTree = await computeArtifactFunctionTree(artifact, FunctionType.
|
|
30
|
+
const artifactTree = await computeArtifactFunctionTree(artifact, FunctionType.UTILITY);
|
|
31
31
|
const artifactTreeLeafIndex = artifactTree.getIndex(functionArtifactHash.toBuffer());
|
|
32
32
|
const artifactTreeSiblingPath = artifactTree.getSiblingPath(artifactTreeLeafIndex).map(Fr.fromBuffer);
|
|
33
|
-
log.debug(`Computed proof for
|
|
33
|
+
log.debug(`Computed proof for utility function with selector ${selector.toString()}`, {
|
|
34
34
|
functionArtifactHash,
|
|
35
35
|
functionMetadataHash,
|
|
36
36
|
artifactMetadataHash,
|
|
@@ -46,7 +46,7 @@ import { computeArtifactFunctionTree, computeArtifactHash, computeArtifactHashPr
|
|
|
46
46
|
};
|
|
47
47
|
}
|
|
48
48
|
/**
|
|
49
|
-
* Verifies that
|
|
49
|
+
* Verifies that a utility function with a membership proof as emitted by the ClassRegisterer contract is valid,
|
|
50
50
|
* as defined in the protocol specs at contract-deployment/classes:
|
|
51
51
|
*
|
|
52
52
|
* ```
|
|
@@ -55,20 +55,20 @@ import { computeArtifactFunctionTree, computeArtifactHash, computeArtifactHashPr
|
|
|
55
55
|
*
|
|
56
56
|
* // Compute artifact leaf and assert it belongs to the artifact
|
|
57
57
|
* artifact_function_leaf = sha256(selector, metadata_hash, sha256(bytecode))
|
|
58
|
-
*
|
|
59
|
-
* computed_artifact_hash = sha256(private_functions_artifact_tree_root,
|
|
58
|
+
* computed_artifact_utility_function_tree_root = compute_root(artifact_function_leaf, artifact_function_tree_sibling_path, artifact_function_tree_leaf_index)
|
|
59
|
+
* computed_artifact_hash = sha256(private_functions_artifact_tree_root, computed_artifact_utility_function_tree_root, artifact_metadata_hash)
|
|
60
60
|
* assert computed_artifact_hash == contract_class.artifact_hash
|
|
61
61
|
* ```
|
|
62
62
|
* @param fn - Function to check membership proof for.
|
|
63
63
|
* @param contractClass - In which contract class the function is expected to be.
|
|
64
|
-
*/ export async function
|
|
64
|
+
*/ export async function isValidUtilityFunctionMembershipProof(fn, contractClass) {
|
|
65
65
|
const log = createLogger('circuits:function_membership_proof');
|
|
66
66
|
const functionArtifactHash = await computeFunctionArtifactHash(fn);
|
|
67
67
|
const computedArtifactFunctionTreeRootBuffer = await computeRootFromSiblingPath(functionArtifactHash.toBuffer(), fn.artifactTreeSiblingPath.map((fr)=>fr.toBuffer()), fn.artifactTreeLeafIndex, getArtifactMerkleTreeHasher());
|
|
68
68
|
const computedArtifactFunctionTreeRoot = Fr.fromBuffer(computedArtifactFunctionTreeRootBuffer);
|
|
69
69
|
const computedArtifactHash = await computeArtifactHash({
|
|
70
70
|
privateFunctionRoot: fn.privateFunctionsArtifactTreeRoot,
|
|
71
|
-
|
|
71
|
+
utilityFunctionRoot: computedArtifactFunctionTreeRoot,
|
|
72
72
|
metadataHash: fn.artifactMetadataHash
|
|
73
73
|
});
|
|
74
74
|
if (!contractClass.artifactHash.equals(computedArtifactHash)) {
|