-
Notifications
You must be signed in to change notification settings - Fork 12
/
check_hashes_value.circom
45 lines (39 loc) · 1.53 KB
/
check_hashes_value.circom
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
// Copyright © 2024 Kaleido, Inc.
//
// SPDX-License-Identifier: Apache-2.0
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
pragma circom 2.1.4;
include "./lib/check-positive.circom";
include "./lib/check-hashes.circom";
template Zeto(nOutputs) {
signal input outputCommitments[nOutputs];
signal input outputValues[nOutputs];
signal input outputSalts[nOutputs];
signal input outputOwnerPublicKeys[nOutputs][2];
signal output out;
component checkPositives = CheckPositive(nOutputs);
checkPositives.outputValues <== outputValues;
component checkHashesValue = CheckHashes(nOutputs);
checkHashesValue.commitments <== outputCommitments;
checkHashesValue.values <== outputValues;
checkHashesValue.salts <== outputSalts;
checkHashesValue.ownerPublicKeys <== outputOwnerPublicKeys;
// calculate the sum of output values and set to the output
var sumOutputs = 0;
for (var i = 0; i < nOutputs; i++) {
sumOutputs = sumOutputs + outputValues[i];
}
out <== sumOutputs;
}
component main {public [ outputCommitments ]} = Zeto(1);