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}