mirror of
https://github.com/factorgroup/nightmarket.git
synced 2026-01-14 07:57:55 -05:00
56 lines
1.5 KiB
Plaintext
56 lines
1.5 KiB
Plaintext
pragma circom 2.0.3;
|
|
include "../../node_modules/circomlib/circuits/comparators.circom";
|
|
include "../../node_modules/circomlib/circuits/bitify.circom";
|
|
|
|
// NB: RangeProof is inclusive.
|
|
// input: field element, whose abs is claimed to be <= than max_abs_value
|
|
// output: none
|
|
// also checks that both max and abs(in) are expressible in `bits` bits
|
|
template RangeProof(bits) {
|
|
signal input in;
|
|
signal input max_abs_value;
|
|
|
|
/* check that both max and abs(in) are expressible in `bits` bits */
|
|
component n2b1 = Num2Bits(bits+1);
|
|
n2b1.in <== in + (1 << bits);
|
|
component n2b2 = Num2Bits(bits);
|
|
n2b2.in <== max_abs_value;
|
|
|
|
/* check that in + max is between 0 and 2*max */
|
|
component lowerBound = LessThan(bits+1);
|
|
component upperBound = LessThan(bits+1);
|
|
|
|
lowerBound.in[0] <== max_abs_value + in;
|
|
lowerBound.in[1] <== 0;
|
|
lowerBound.out === 0;
|
|
|
|
upperBound.in[0] <== 2 * max_abs_value;
|
|
upperBound.in[1] <== max_abs_value + in;
|
|
upperBound.out === 0;
|
|
}
|
|
|
|
// input: n field elements, whose abs are claimed to be less than max_abs_value
|
|
// output: none
|
|
template MultiRangeProof(n, bits) {
|
|
signal input in[n];
|
|
signal input max_abs_value;
|
|
component rangeProofs[n];
|
|
|
|
for (var i = 0; i < n; i++) {
|
|
rangeProofs[i] = RangeProof(bits);
|
|
rangeProofs[i].in <== in[i];
|
|
rangeProofs[i].max_abs_value <== max_abs_value;
|
|
}
|
|
}
|
|
|
|
/*
|
|
template RPTester() {
|
|
signal input a;
|
|
component rp = RangeProof(10);
|
|
rp.in <== a;
|
|
rp.max_abs_value <== 100;
|
|
}
|
|
|
|
component main = RPTester();
|
|
*/
|