You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

79 lines
2.7 KiB

/*
# deposit.circom
+----------+
| |
PRI_secret+--------->+ Poseidon +<----+PUB_key
| | | +
| +----------+ | +----------+
| nullifier | | +<------+PUB_rootOld
| + | | |
| | | | +<------+PUB_rootNew
| v | | SMT |
| +----+-----+ +---->+ Poseidon +<------+PRI_oldKey
+--------->+ | | Verifier |
| +-----+------->+ (insert) +<------+PRI_oldValue
PUB_coinCode+------->+ Poseidon | | | |
| | | | +<------+PRI_isOld0
PUB_amount+--------->+ | | | |
+----------+ | | +<------+PRI_siblings
| +----------+
|
|
|
|
+----+ |
PUB_commitment+----> == +<------------+
+----+
*/
include "../node_modules/circomlib/circuits/comparators.circom";
include "../node_modules/circomlib/circuits/poseidon.circom";
include "../node_modules/circomlib/circuits/smt/smtprocessor.circom";
template Deposit(nLevels) {
signal input coinCode;
signal input amount;
signal private input secret;
signal private input oldKey;
signal private input oldValue;
signal private input isOld0;
signal private input siblings[nLevels];
signal input rootOld;
signal input rootNew;
signal input commitment;
signal input key;
component nullifierCmp = Poseidon(2, 6, 8, 57);
nullifierCmp.inputs[0] <== key;
nullifierCmp.inputs[1] <== secret;
component hash = Poseidon(4, 6, 8, 57);
hash.inputs[0] <== coinCode;
hash.inputs[1] <== amount;
hash.inputs[2] <== secret;
hash.inputs[3] <== nullifierCmp.out; // nullifier
component comCheck = IsEqual();
comCheck.in[0] <== hash.out;
comCheck.in[1] <== commitment;
comCheck.out === 1;
component smtProcessor = SMTProcessor(nLevels);
smtProcessor.oldRoot <== rootOld;
smtProcessor.newRoot <== rootNew;
for (var i=0; i<nLevels; i++) {
smtProcessor.siblings[i] <== siblings[i];
}
smtProcessor.oldKey <== oldKey;
smtProcessor.oldValue <== oldValue;
smtProcessor.isOld0 <== isOld0;
smtProcessor.newKey <== key;
smtProcessor.newValue <== hash.out;
smtProcessor.fnc[0] <== 1;
smtProcessor.fnc[1] <== 0;
}