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}