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 bool used;
18 }
19
20 function deposit(
21 uint256 coinCode,
22 // uint256 amount,
23 uint256 commitment
24 ) public payable {
25 deposits[commitment] = Deposit(coinCode, msg.value, false);
26 }
27
28 function getDeposit(
29 uint256 commitment
30 ) public view returns (uint256, uint256) {
31 return (
32 deposits[commitment].coinCode,
33 deposits[commitment].amount
34 );
35 }
36
37 function withdraw(
38 uint256 commitment,
39 address payable _address,
40 uint[2] memory a,
41 uint[2][2] memory b,
42 uint[2] memory c
43 ) public {
44
45 uint256[4] memory input = [
46 deposits[commitment].coinCode,
47 deposits[commitment].amount,
48 commitment,
49 uint256(_address)
50 ];
51 require(verifier.verifyProof(a, b, c, input), "zkProof withdraw could not be verified");
52 // zk verification passed, proceed with the withdraw
53 require(!deposits[commitment].used, "deposit already withdrawed");
54 deposits[commitment].used = true;
55 _address.send(deposits[commitment].amount);
56 // _address.call.value(deposits[commitment].amount).gas(20317)();
57
58 }
59}