|
|
pragma solidity ^0.6.0;
import './verifier.sol';
contract Miksi { Verifier verifier;
constructor( address _verifierContractAddr) public { verifier = Verifier(_verifierContractAddr); }
mapping(uint256 => Deposit) deposits;
struct Deposit { uint256 coinCode; uint256 amount; }
function deposit( uint256 coinCode, uint256 amount, uint256 commitment ) public { deposits[commitment] = Deposit(coinCode, amount); }
function getDeposit( uint256 commitment ) public view returns (uint256, uint256) { return ( deposits[commitment].coinCode, deposits[commitment].amount ); }
function withdraw( uint256 commitment, uint[2] memory a, uint[2][2] memory b, uint[2] memory c ) public {
uint256[3] memory input = [ deposits[commitment].coinCode, deposits[commitment].amount, commitment ]; require(verifier.verifyProof(a, b, c, input), "zkProof withdraw could not be verified");
// zk verification passed, proceed with the withdraw
} }
|