Open this in zkREPL →
This file can be included into other zkREPLs with include "gist:4149b97a72b4f51714620ecfaaf139fc";
Open this in zkREPL →
This file can be included into other zkREPLs with include "gist:4149b97a72b4f51714620ecfaaf139fc";
| pragma circom 2.0.9; | |
| include "./hash-state.circom"; | |
| include "../node_modules/circomlib/circuits/comparators.circom"; | |
| include "../node_modules/circomlib/circuits/smt/smtverifier.circom"; | |
| /** | |
| * Merke leaf: idx, ethAddress, tokenID, ay, sign, nonce, balance | |
| */ | |
| template dcw(nLevels) { | |
| signal input root; // public | |
| signal input idx; | |
| signal input ethAddres; | |
| signal input tokenID; | |
| signal input ay; | |
| signal input sign; | |
| signal input nonce; | |
| signal input balance; | |
| signal input siblings[nLevels + 1]; | |
| // comparre nonce minnonce | |
| var MIN_NONCE = 10; | |
| component minNonce = GreaterThan(253); | |
| minNonce.in[0] <== nonce; | |
| minNonce.in[1] <== MIN_NONCE; | |
| minNonce.out === 1; | |
| // | |
| component hashState = HashState(); | |
| hashState.tokenID <== tokenID; | |
| hashState.nonce <== nonce; | |
| hashState.sign <== sign; | |
| hashState.balance <== balance; | |
| hashState.ay <== ay; | |
| hashState.ethAddr <== ethAddress; | |
| // verify leaf exist on the given root | |
| component smtVerify = SMTVerifier(nLevels + 1); | |
| smtVerify.enabled <== 1; | |
| smtVerify.fnc <== 0; | |
| smtVerify.root <== root; | |
| for (var i = 0; i < nLevels + 1; i++) { | |
| smtVerify.siblings[i] <== siblings[i]; | |
| } | |
| smtVerify.oldKey <== 0; | |
| smtVerify.oldValue <== 0; | |
| smtVerify.isOld0 <== 0; | |
| smtVerify.key <== idx; | |
| smtVerify.value <== state.out; | |
| } |
| pragma circom 2.0.8; | |
| include "circomlib/poseidon.circom"; | |
| // include "https://github.com/0xPARC/circom-secp256k1/blob/master/circuits/bigint.circom"; | |
| template Example () { | |
| signal input a; | |
| signal input b; | |
| signal output c; | |
| var unused = 4; | |
| c <== a * b; | |
| assert(a > 2); | |
| component hash = Poseidon(2); | |
| hash.inputs[0] <== a; | |
| hash.inputs[1] <== b; | |
| log("hash", hash.out); | |
| } | |
| component main { public [ a ] } = Example(); | |
| /* INPUT = { | |
| "a": "5", | |
| "b": "77" | |
| } */ |
| pragma circom 2.0.9; | |
| /** | |
| * Merke tree state: idx, ethAddress, tokenId, ay, sign, nonce, balance | |
| */ | |
| template dcw(nLevels) { | |
| signal input root; // public | |
| signal input idx; | |
| signal input ethAddress; | |
| signal input tokenId; | |
| signal input ay; | |
| signal input sign; | |
| signal input nonce; | |
| signal input balance; | |
| signal input siblings[nLevels + 1]; | |
| } |