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 payable {
24    deposits[commitment] = Deposit(coinCode, msg.value);
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            address payable _address,
39            uint[2] memory a,
40            uint[2][2] memory b,
41            uint[2] memory c
42  ) public {
43
44    uint256[4] memory input = [
45      deposits[commitment].coinCode,
46      deposits[commitment].amount,
47      commitment,
48      uint256(_address)
49    ];
50    require(verifier.verifyProof(a, b, c, input), "zkProof withdraw could not be verified");
51    // zk verification passed, proceed with the withdraw
52    _address.send(deposits[commitment].amount);
53    // _address.call.value(deposits[commitment].amount).gas(20317)();
54
55  }
56}