Skip to content

Commit

Permalink
Merge pull request #250 from trifle-labs/prover-server
Browse files Browse the repository at this point in the history
Prover server
  • Loading branch information
okwme authored Aug 11, 2024
2 parents c20fd7d + 8c34793 commit bff3e4e
Show file tree
Hide file tree
Showing 30 changed files with 1,934 additions and 85 deletions.
12 changes: 12 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,12 @@ contracts/*Verifier.sol

/*_js/
/*_cpp/

# !game_4_250_cpp
# !game_6_125_cpp

*/tmp/*

*_proof.json
*_public.json

Expand All @@ -48,6 +54,12 @@ verification_key.json
*.zkey
# !public/*.zkey
*.wasm


!game_4_250_js
!game_6_125_js


# !public/*.wasm
parameters.txt

Expand Down
33 changes: 33 additions & 0 deletions circuits/aliascheck.circom
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
/*
Copyright 2018 0KIMS association.
This file is part of circom (Zero Knowledge Circuit Compiler).
circom is a free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
circom is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
License for more details.
You should have received a copy of the GNU General Public License
along with circom. If not, see <https://www.gnu.org/licenses/>.
*/
pragma circom 2.0.0;

include "compconstant.circom";


template AliasCheck() {

signal input in[254];

component compConstant = CompConstant(-1);

for (var i=0; i<254; i++) in[i] ==> compConstant.in[i];

compConstant.out === 0;
}
6 changes: 3 additions & 3 deletions circuits/approxMath.circom
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
pragma circom 2.1.6;
include "../node_modules/circomlib/circuits/mux1.circom";
include "../node_modules/circomlib/circuits/comparators.circom";
include "../node_modules/circomlib/circuits/gates.circom";
include "mux1.circom";
include "comparators.circom";
include "gates.circom";
include "helpers.circom";

function approxSqrt(n) {
Expand Down
101 changes: 101 additions & 0 deletions circuits/binsum.circom
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
/*
Copyright 2018 0KIMS association.
This file is part of circom (Zero Knowledge Circuit Compiler).
circom is a free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
circom is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
License for more details.
You should have received a copy of the GNU General Public License
along with circom. If not, see <https://www.gnu.org/licenses/>.
*/

/*
Binary Sum
==========
This component creates a binary sum componet of ops operands and n bits each operand.
e is Number of carries: Depends on the number of operands in the input.
Main Constraint:
in[0][0] * 2^0 + in[0][1] * 2^1 + ..... + in[0][n-1] * 2^(n-1) +
+ in[1][0] * 2^0 + in[1][1] * 2^1 + ..... + in[1][n-1] * 2^(n-1) +
+ ..
+ in[ops-1][0] * 2^0 + in[ops-1][1] * 2^1 + ..... + in[ops-1][n-1] * 2^(n-1) +
===
out[0] * 2^0 + out[1] * 2^1 + + out[n+e-1] *2(n+e-1)
To waranty binary outputs:
out[0] * (out[0] - 1) === 0
out[1] * (out[0] - 1) === 0
.
.
.
out[n+e-1] * (out[n+e-1] - 1) == 0
*/


/*
This function calculates the number of extra bits in the output to do the full sum.
*/
pragma circom 2.0.0;

function nbits(a) {
var n = 1;
var r = 0;
while (n-1<a) {
r++;
n *= 2;
}
return r;
}


template BinSum(n, ops) {
var nout = nbits((2**n -1)*ops);
signal input in[ops][n];
signal output out[nout];

var lin = 0;
var lout = 0;

var k;
var j;

var e2;

e2 = 1;
for (k=0; k<n; k++) {
for (j=0; j<ops; j++) {
lin += in[j][k] * e2;
}
e2 = e2 + e2;
}

e2 = 1;
for (k=0; k<nout; k++) {
out[k] <-- (lin >> k) & 1;

// Ensure out is binary
out[k] * (out[k] - 1) === 0;

lout += out[k] * e2;

e2 = e2+e2;
}

// Ensure the sum;

lin === lout;
}
106 changes: 106 additions & 0 deletions circuits/bitify.circom
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
/*
Copyright 2018 0KIMS association.
This file is part of circom (Zero Knowledge Circuit Compiler).
circom is a free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
circom is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
License for more details.
You should have received a copy of the GNU General Public License
along with circom. If not, see <https://www.gnu.org/licenses/>.
*/
pragma circom 2.0.0;

include "comparators.circom";
include "aliascheck.circom";


template Num2Bits(n) {
signal input in;
signal output out[n];
var lc1=0;

var e2=1;
for (var i = 0; i<n; i++) {
out[i] <-- (in >> i) & 1;
out[i] * (out[i] -1 ) === 0;
lc1 += out[i] * e2;
e2 = e2+e2;
}

lc1 === in;
}

template Num2Bits_strict() {
signal input in;
signal output out[254];

component aliasCheck = AliasCheck();
component n2b = Num2Bits(254);
in ==> n2b.in;

for (var i=0; i<254; i++) {
n2b.out[i] ==> out[i];
n2b.out[i] ==> aliasCheck.in[i];
}
}

template Bits2Num(n) {
signal input in[n];
signal output out;
var lc1=0;

var e2 = 1;
for (var i = 0; i<n; i++) {
lc1 += in[i] * e2;
e2 = e2 + e2;
}

lc1 ==> out;
}

template Bits2Num_strict() {
signal input in[254];
signal output out;

component aliasCheck = AliasCheck();
component b2n = Bits2Num(254);

for (var i=0; i<254; i++) {
in[i] ==> b2n.in[i];
in[i] ==> aliasCheck.in[i];
}

b2n.out ==> out;
}

template Num2BitsNeg(n) {
signal input in;
signal output out[n];
var lc1=0;

component isZero;

isZero = IsZero();

var neg = n == 0 ? 0 : 2**n - in;

for (var i = 0; i<n; i++) {
out[i] <-- (neg >> i) & 1;
out[i] * (out[i] -1 ) === 0;
lc1 += out[i] * 2**i;
}

in ==> isZero.in;



lc1 + isZero.out * 2**n === 2**n - in;
}
4 changes: 2 additions & 2 deletions circuits/calculateMissile.circom
Original file line number Diff line number Diff line change
Expand Up @@ -81,8 +81,8 @@ template CalculateMissile() {
// the missile will approach 0 after starting at windowWidthScaled
// check whether it goes below 0 by using the maxMissileVectorScaled as a buffer
// return 0 if it is below maxMissileVectorScaled to remove the missile
// TODO: this assumes a missile removal at less than or equal to 0
// make sure the JS also is <= 0 and not just < 0 for the missile removal
// NOTE: this assumes a missile removal at less than or equal to 0
// the JS also is <= 0 and not just < 0 for the missile removal

// log("new_pos[1]", new_pos[1]);
// log("positionLowerLimiterY in", new_pos[1]);
Expand Down
Loading

0 comments on commit bff3e4e

Please sign in to comment.