arnaucube
arnaucube/miksi-corePublic Self-hosted repository
miksi-core/contracts/Miksi.sol
contracts/Miksi.solRaw
 1pragma solidity ^0.6.0;
 2
 3import './verifier.sol';
 4
 5contract Miksi {
 6  Verifier    verifier;
 7
 8  constructor( address _verifierContractAddr) public {
 9    verifier = Verifier(_verifierContractAddr);
10  }
11
12  mapping(uint256 => Deposit) deposits;
13
14  struct Deposit {
15    uint256 coinCode;
16    uint256 amount;
17  }
18
19  function deposit(
20            uint256 coinCode,
21            uint256 amount,
22            uint256 commitment
23  ) public {
24    deposits[commitment] = Deposit(coinCode, amount);
25  }
26
27  function getDeposit(
28            uint256 commitment
29  ) public view returns (uint256, uint256) {
30    return (
31      deposits[commitment].coinCode,
32      deposits[commitment].amount
33    );
34  }
35
36  function withdraw(
37            uint256 commitment,
38            uint[2] memory a,
39            uint[2][2] memory b,
40            uint[2] memory c
41  ) public {
42
43    uint256[3] memory input = [
44      deposits[commitment].coinCode,
45      deposits[commitment].amount,
46      commitment
47    ];
48    require(verifier.verifyProof(a, b, c, input), "zkProof withdraw could not be verified");
49
50    // zk verification passed, proceed with the withdraw
51  }
52}