Contract 0xB586453a8e44c86E012958E48a0DeCED462BD16e

Contract Overview

Balance:
35 Ether
Txn Hash
Method
Block
From
To
Value
0x06895379565750d385ca486a2a76a7dad3863be645c5aa0ef17cbfdcd4673bc5Withdraw99318652022-01-04 10:01:33136 days 1 hr ago0x21be4efd5f8b9769e658c645daae5c4ea7eae3fd IN  0xb586453a8e44c86e012958e48a0deced462bd16e0 Ether0.0000981930011.000000012
0x156cd00b06d5f8f18e83283aa5422563ecae9be80a3bc083c5493c90e911b1fbWithdraw99318652022-01-04 10:01:33136 days 1 hr ago0x21be4efd5f8b9769e658c645daae5c4ea7eae3fd IN  0xb586453a8e44c86e012958e48a0deced462bd16e0 Ether0.0009346750111.000000012
0x662089b72855fe02372673b8eba69f4d4f8880eac0681b30ab9c455a008eecdfNullifier To Add...99279712022-01-03 12:58:45136 days 22 hrs ago0x237b67366ca13fd49673e6452381996bc85a2570 IN  0xb586453a8e44c86e012958e48a0deced462bd16e0 Ether0.00002455311.100000001
0x77a793d3723c61eb4032695b2982f19569a6564a4c06322313fc9cf4cd255087Transfer99271212022-01-03 9:25:48137 days 2 hrs ago0x21be4efd5f8b9769e658c645daae5c4ea7eae3fd IN  0xb586453a8e44c86e012958e48a0deced462bd16e0 Ether0.0000315 1.500000017
0x6b1707f8dd1ba04e4fea7422ef45ed044f368ff8c276f6b7d2a3c5a99ad48748Deposit99266452022-01-03 7:26:46137 days 4 hrs ago0x237b67366ca13fd49673e6452381996bc85a2570 IN  0xb586453a8e44c86e012958e48a0deced462bd16e1 Ether0.00061553031.100000001
0x9229b5878b5cba9054f4d5ad3112a1d158838c8696080fa65214ea3acedff11eDeposit36842672019-01-13 15:22:001222 days 20 hrs ago0xd176a7c25f10e88136eb3cc439963fca54f2859c IN  0xb586453a8e44c86e012958e48a0deced462bd16e1 Ether0.0007101551
0xb1e139d3753512ac56efabcdd9edc1d6d7542ddc15d18add35a31d6699931717Deposit36842332019-01-13 15:13:301222 days 20 hrs ago0xd176a7c25f10e88136eb3cc439963fca54f2859c IN  0xb586453a8e44c86e012958e48a0deced462bd16e1 Ether0.00072521
0x6529015aec45e46d95e4b21beae7a11798cd57bc001fcf21a02e2ff1febe4300Deposit34493142018-12-03 20:19:371263 days 15 hrs ago0x909c6d737d04bfa5dd47a059524f4de0e3c507b5 IN  0xb586453a8e44c86e012958e48a0deced462bd16e1 Ether0.0007112751
0x7209285eef281da32371bffc96baa960a6426d2858aaa7bb8dca3eb8e2dd6289Deposit34493062018-12-03 20:17:371263 days 15 hrs ago0x909c6d737d04bfa5dd47a059524f4de0e3c507b5 IN  0xb586453a8e44c86e012958e48a0deced462bd16e1 Ether0.000741321
0x5d5533f877ca71159853b31ec7ea3b323ab226ee35577a2ddcf4bf9633ad2463Deposit34492662018-12-03 20:07:371263 days 15 hrs ago0x909c6d737d04bfa5dd47a059524f4de0e3c507b5 IN  0xb586453a8e44c86e012958e48a0deced462bd16e1 Ether0.000712351
0xe4fe964c922695df177869aaf1e97722511c4d9d90f906616ec5b02e93ce3d2fDeposit34492572018-12-03 20:05:221263 days 15 hrs ago0x909c6d737d04bfa5dd47a059524f4de0e3c507b5 IN  0xb586453a8e44c86e012958e48a0deced462bd16e1 Ether0.0007273951
0xed16c49e22d53bbfe432e6934d7be5bbe1e401154ca4b590c683a756a3d3669aDeposit34492532018-12-03 20:04:221263 days 15 hrs ago0x909c6d737d04bfa5dd47a059524f4de0e3c507b5 IN  0xb586453a8e44c86e012958e48a0deced462bd16e1 Ether0.000713471
0x02d3df36a840aa7e0848c8bd8c3e17e9e9f81612199e9dd8dfb826b038fb66faDeposit34492482018-12-03 20:03:071263 days 15 hrs ago0x909c6d737d04bfa5dd47a059524f4de0e3c507b5 IN  0xb586453a8e44c86e012958e48a0deced462bd16e1 Ether0.0007885151
0x7ab7c474b84cdf642c941391188eba7bcad6a6d55a00994ad8f51792d7702f3eDeposit34492452018-12-03 20:02:221263 days 15 hrs ago0x909c6d737d04bfa5dd47a059524f4de0e3c507b5 IN  0xb586453a8e44c86e012958e48a0deced462bd16e1 Ether0.0007078961
0x682c0d2322c6776c79e0dd11ef440f28f6e607fd14b55c21a5bbad46631b0fd4Deposit34492412018-12-03 20:01:221263 days 15 hrs ago0x909c6d737d04bfa5dd47a059524f4de0e3c507b5 IN  0xb586453a8e44c86e012958e48a0deced462bd16e1 Ether0.0007230051
0x9eef18a41ed8f7aba916286ce65413bc485b0dac92710dab32d84a0f0372a313Deposit34491922018-12-03 19:49:071263 days 15 hrs ago0x909c6d737d04bfa5dd47a059524f4de0e3c507b5 IN  0xb586453a8e44c86e012958e48a0deced462bd16e1 Ether0.000709081
0x5c5f47263ba788078b40458a6939d89b5c602a59a1d030d7b66ecd70e42b7bf3Deposit34491842018-12-03 19:47:071263 days 15 hrs ago0x909c6d737d04bfa5dd47a059524f4de0e3c507b5 IN  0xb586453a8e44c86e012958e48a0deced462bd16e1 Ether0.0007391251
0x60904cde30c96bcba577b13d2bfcdedea597ebd1d3a791e75894bffc11326e23Deposit34437852018-12-02 21:17:161264 days 14 hrs ago0x909c6d737d04bfa5dd47a059524f4de0e3c507b5 IN  0xb586453a8e44c86e012958e48a0deced462bd16e1 Ether0.0007101551
0xc18324f692cee4a0cef07b63c15bc19cba6831abac2221601d76eef3e2a8f79aDeposit34437802018-12-02 21:16:011264 days 14 hrs ago0x909c6d737d04bfa5dd47a059524f4de0e3c507b5 IN  0xb586453a8e44c86e012958e48a0deced462bd16e1 Ether0.00072521
0x1289ee35d5bbaad9a111cdb2d81070ba31f0c7cb8423d91f8cc6c1e7119966beDeposit34437642018-12-02 21:12:011264 days 14 hrs ago0x909c6d737d04bfa5dd47a059524f4de0e3c507b5 IN  0xb586453a8e44c86e012958e48a0deced462bd16e1 Ether0.0007112751
0xe9e670074f573422326259701fcde21565229a5fce16e8e49097616565520d72Deposit34437262018-12-02 21:02:311264 days 14 hrs ago0x909c6d737d04bfa5dd47a059524f4de0e3c507b5 IN  0xb586453a8e44c86e012958e48a0deced462bd16e1 Ether0.000756321
0x5269b409c6ede3deaf59ec1f89f62ce22e7bd33fcefa85b470ee2749aea1b9c7Deposit34437122018-12-02 20:59:011264 days 14 hrs ago0x909c6d737d04bfa5dd47a059524f4de0e3c507b5 IN  0xb586453a8e44c86e012958e48a0deced462bd16e1 Ether0.000711231
0xcf830ba855f7eacbfc946347e8ed69fbc2880d3dedc4eb7be7092ae66386344eDeposit34437002018-12-02 20:56:011264 days 14 hrs ago0x909c6d737d04bfa5dd47a059524f4de0e3c507b5 IN  0xb586453a8e44c86e012958e48a0deced462bd16e1 Ether0.0007262751
0xcf1934ae776201ce701108e4ef8ffc47cc916648ed0a0b73023c1062cbcd7b9cDeposit34387732018-12-02 0:24:161265 days 11 hrs ago0x909c6d737d04bfa5dd47a059524f4de0e3c507b5 IN  0xb586453a8e44c86e012958e48a0deced462bd16e1 Ether0.000712351
0x3ecdfab58563a74cadd5e9720f141ee15d5cc455db9121687dfb8c32dc70f50fDeposit34387182018-12-02 0:10:311265 days 11 hrs ago0x909c6d737d04bfa5dd47a059524f4de0e3c507b5 IN  0xb586453a8e44c86e012958e48a0deced462bd16e1 Ether0.0007423951
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x156cd00b06d5f8f18e83283aa5422563ecae9be80a3bc083c5493c90e911b1fb99318652022-01-04 10:01:33136 days 1 hr ago 0xb586453a8e44c86e012958e48a0deced462bd16e0x21be4efd5f8b9769e658c645daae5c4ea7eae3fd1 Ether
0x156cd00b06d5f8f18e83283aa5422563ecae9be80a3bc083c5493c90e911b1fb99318652022-01-04 10:01:33136 days 1 hr ago 0xb586453a8e44c86e012958e48a0deced462bd16e 0xec9ae67f0ce02eec00035da2a4eadeccffd5afc00 Ether
0x6b1707f8dd1ba04e4fea7422ef45ed044f368ff8c276f6b7d2a3c5a99ad4874899266452022-01-03 7:26:46137 days 4 hrs ago 0xb586453a8e44c86e012958e48a0deced462bd16e0x00000000000000000000000000000000000000020 Ether
0x6b1707f8dd1ba04e4fea7422ef45ed044f368ff8c276f6b7d2a3c5a99ad4874899266452022-01-03 7:26:46137 days 4 hrs ago 0xb586453a8e44c86e012958e48a0deced462bd16e0x00000000000000000000000000000000000000020 Ether
0x6b1707f8dd1ba04e4fea7422ef45ed044f368ff8c276f6b7d2a3c5a99ad4874899266452022-01-03 7:26:46137 days 4 hrs ago 0xb586453a8e44c86e012958e48a0deced462bd16e0x00000000000000000000000000000000000000020 Ether
0x6b1707f8dd1ba04e4fea7422ef45ed044f368ff8c276f6b7d2a3c5a99ad4874899266452022-01-03 7:26:46137 days 4 hrs ago 0xb586453a8e44c86e012958e48a0deced462bd16e0x00000000000000000000000000000000000000020 Ether
0x6b1707f8dd1ba04e4fea7422ef45ed044f368ff8c276f6b7d2a3c5a99ad4874899266452022-01-03 7:26:46137 days 4 hrs ago 0xb586453a8e44c86e012958e48a0deced462bd16e0x00000000000000000000000000000000000000020 Ether
0x6b1707f8dd1ba04e4fea7422ef45ed044f368ff8c276f6b7d2a3c5a99ad4874899266452022-01-03 7:26:46137 days 4 hrs ago 0xb586453a8e44c86e012958e48a0deced462bd16e0x00000000000000000000000000000000000000020 Ether
0x6b1707f8dd1ba04e4fea7422ef45ed044f368ff8c276f6b7d2a3c5a99ad4874899266452022-01-03 7:26:46137 days 4 hrs ago 0xb586453a8e44c86e012958e48a0deced462bd16e0x00000000000000000000000000000000000000020 Ether
0x6b1707f8dd1ba04e4fea7422ef45ed044f368ff8c276f6b7d2a3c5a99ad4874899266452022-01-03 7:26:46137 days 4 hrs ago 0xb586453a8e44c86e012958e48a0deced462bd16e0x00000000000000000000000000000000000000020 Ether
0x6b1707f8dd1ba04e4fea7422ef45ed044f368ff8c276f6b7d2a3c5a99ad4874899266452022-01-03 7:26:46137 days 4 hrs ago 0xb586453a8e44c86e012958e48a0deced462bd16e0x00000000000000000000000000000000000000020 Ether
0x6b1707f8dd1ba04e4fea7422ef45ed044f368ff8c276f6b7d2a3c5a99ad4874899266452022-01-03 7:26:46137 days 4 hrs ago 0xb586453a8e44c86e012958e48a0deced462bd16e0x00000000000000000000000000000000000000020 Ether
0x6b1707f8dd1ba04e4fea7422ef45ed044f368ff8c276f6b7d2a3c5a99ad4874899266452022-01-03 7:26:46137 days 4 hrs ago 0xb586453a8e44c86e012958e48a0deced462bd16e0x00000000000000000000000000000000000000020 Ether
0x6b1707f8dd1ba04e4fea7422ef45ed044f368ff8c276f6b7d2a3c5a99ad4874899266452022-01-03 7:26:46137 days 4 hrs ago 0xb586453a8e44c86e012958e48a0deced462bd16e0x00000000000000000000000000000000000000020 Ether
0x6b1707f8dd1ba04e4fea7422ef45ed044f368ff8c276f6b7d2a3c5a99ad4874899266452022-01-03 7:26:46137 days 4 hrs ago 0xb586453a8e44c86e012958e48a0deced462bd16e0x00000000000000000000000000000000000000020 Ether
0x6b1707f8dd1ba04e4fea7422ef45ed044f368ff8c276f6b7d2a3c5a99ad4874899266452022-01-03 7:26:46137 days 4 hrs ago 0xb586453a8e44c86e012958e48a0deced462bd16e0x00000000000000000000000000000000000000020 Ether
0x6b1707f8dd1ba04e4fea7422ef45ed044f368ff8c276f6b7d2a3c5a99ad4874899266452022-01-03 7:26:46137 days 4 hrs ago 0xb586453a8e44c86e012958e48a0deced462bd16e0x00000000000000000000000000000000000000020 Ether
0x6b1707f8dd1ba04e4fea7422ef45ed044f368ff8c276f6b7d2a3c5a99ad4874899266452022-01-03 7:26:46137 days 4 hrs ago 0xb586453a8e44c86e012958e48a0deced462bd16e0x00000000000000000000000000000000000000020 Ether
0x6b1707f8dd1ba04e4fea7422ef45ed044f368ff8c276f6b7d2a3c5a99ad4874899266452022-01-03 7:26:46137 days 4 hrs ago 0xb586453a8e44c86e012958e48a0deced462bd16e0x00000000000000000000000000000000000000020 Ether
0x6b1707f8dd1ba04e4fea7422ef45ed044f368ff8c276f6b7d2a3c5a99ad4874899266452022-01-03 7:26:46137 days 4 hrs ago 0xb586453a8e44c86e012958e48a0deced462bd16e0x00000000000000000000000000000000000000020 Ether
0x6b1707f8dd1ba04e4fea7422ef45ed044f368ff8c276f6b7d2a3c5a99ad4874899266452022-01-03 7:26:46137 days 4 hrs ago 0xb586453a8e44c86e012958e48a0deced462bd16e0x00000000000000000000000000000000000000020 Ether
0x6b1707f8dd1ba04e4fea7422ef45ed044f368ff8c276f6b7d2a3c5a99ad4874899266452022-01-03 7:26:46137 days 4 hrs ago 0xb586453a8e44c86e012958e48a0deced462bd16e0x00000000000000000000000000000000000000020 Ether
0x6b1707f8dd1ba04e4fea7422ef45ed044f368ff8c276f6b7d2a3c5a99ad4874899266452022-01-03 7:26:46137 days 4 hrs ago 0xb586453a8e44c86e012958e48a0deced462bd16e0x00000000000000000000000000000000000000020 Ether
0x6b1707f8dd1ba04e4fea7422ef45ed044f368ff8c276f6b7d2a3c5a99ad4874899266452022-01-03 7:26:46137 days 4 hrs ago 0xb586453a8e44c86e012958e48a0deced462bd16e0x00000000000000000000000000000000000000020 Ether
0x6b1707f8dd1ba04e4fea7422ef45ed044f368ff8c276f6b7d2a3c5a99ad4874899266452022-01-03 7:26:46137 days 4 hrs ago 0xb586453a8e44c86e012958e48a0deced462bd16e0x00000000000000000000000000000000000000020 Ether
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Miximus

Compiler Version
v0.4.24+commit.e67f0147

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion
/**
 *Submitted for verification at Etherscan.io on 2018-06-21
*/

contract MerkelTree {
    mapping (bytes32 => bool) public serials;
    mapping (bytes32 => bool) public roots;
    uint public tree_depth = 29;
    uint public no_leaves = 536870912;
    struct Mtree {
        uint cur;
        bytes32[536870912][30] leaves2;
    }

    Mtree public MT;

    event leafAdded(uint index);

    //Merkletree.append(com)
    function insert(bytes32 com) internal returns (bool res) {
        require (MT.cur != no_leaves - 1);
        MT.leaves2[0][MT.cur] = com;
        updateTree();
        leafAdded(MT.cur);
        MT.cur++;
   
        return true;
    }


    function getMerkelProof(uint index) constant returns (bytes32[29], uint[29]) {

        uint[29] memory address_bits;
        bytes32[29] memory merkelProof;

        for (uint i=0 ; i < tree_depth; i++) {
            address_bits[i] = index%2;
            if (index%2 == 0) {
                merkelProof[i] = getUniqueLeaf(MT.leaves2[i][index + 1],i);
            }
            else {
                merkelProof[i] = getUniqueLeaf(MT.leaves2[i][index - 1],i);
            }
            index = uint(index/2);
        }
        return(merkelProof, address_bits);   
    }
    
     function getSha256(bytes32 input, bytes32 sk) constant returns ( bytes32) { 
        return(sha256(input , sk)); 
    }

    function getUniqueLeaf(bytes32 leaf, uint depth) returns (bytes32) {
        if (leaf == 0x0) {
            for (uint i=0;i<depth;i++) {
                leaf = sha256(leaf, leaf);
            }
        }
        return(leaf);
    }
    
    function updateTree() internal returns(bytes32 root) {
        uint CurrentIndex = MT.cur;
        bytes32 leaf1;
        bytes32 leaf2;
        for (uint i=0 ; i < tree_depth; i++) {
            uint NextIndex = uint(CurrentIndex/2);
            if (CurrentIndex%2 == 0) {
                leaf1 =  MT.leaves2[i][CurrentIndex];
                leaf2 = getUniqueLeaf(MT.leaves2[i][CurrentIndex + 1], i);
            } else {
                leaf1 = getUniqueLeaf(MT.leaves2[i][CurrentIndex - 1], i);
                leaf2 =  MT.leaves2[i][CurrentIndex];
            }
            MT.leaves2[i+1][NextIndex] = (sha256( leaf1, leaf2));
            CurrentIndex = NextIndex;
        }
        return MT.leaves2[tree_depth][0];
    }
    
   
    function getLeaf(uint j,uint k) constant returns (bytes32 root) {
        root = MT.leaves2[j][k];
    }

    function getRoot() constant returns(bytes32 root) {
        root = MT.leaves2[tree_depth][0];
    }

}


contract Miximus is MerkelTree {
    mapping (bytes32 => bool) roots;
    mapping (bytes32 => bool) nullifiers;
    event Withdraw (address); 
    Verifier public zksnark_verify;
    function Miximus (address _zksnark_verify) {
        zksnark_verify = Verifier(_zksnark_verify);
    }

    function deposit (bytes32 leaf) payable  {
        require(msg.value == 1 ether);
        insert(leaf);
        roots[padZero(getRoot())] = true;
    }

    function withdraw (
            uint[2] a,
            uint[2] a_p,
            uint[2][2] b,
            uint[2] b_p,
            uint[2] c,
            uint[2] c_p,
            uint[2] h,
            uint[2] k,
            uint[] input
        ) returns (address) {
        address recipient  = nullifierToAddress(reverse(bytes32(input[2])));      
        bytes32 root = padZero(reverse(bytes32(input[0]))); //)merge253bitWords(input[0], input[1]);

        bytes32 nullifier = padZero(reverse(bytes32(input[2]))); //)merge253bitWords(input[2], input[3]);
        
        require(roots[root]);
        require(!nullifiers[nullifier]);

        require(zksnark_verify.verifyTx(a,a_p,b,b_p,c,c_p,h,k,input));
        nullifiers[nullifier] = true;
        
        uint fee = input[4];
        require(fee < 1 ether); 
        if (fee != 0 ) { 
            msg.sender.transfer(fee);
        }
        
        recipient.transfer(1 ether - fee);

        Withdraw(recipient); 
        return(recipient);
    }

    function isRoot(bytes32 root) constant returns(bool) {
        return(roots[root]);
    } 

    function nullifierToAddress(bytes32 source) returns(address) {
        bytes20[2] memory y = [bytes20(0), 0];
        assembly {
            mstore(y, source)
            mstore(add(y, 20), source)
        }
        //trace(source, y[0], y[1]);
        return(address(y[0]));
    }

    // libshark only allows 253 bit chunks in its output
    // to overcome this we merge the first 253 bits (left) with the remaining 3 bits
    // in the next variable (right)

    function merge253bitWords(uint left, uint right) returns(bytes32) {
        right = pad3bit(right);
        uint left_msb = uint(padZero(reverse(bytes32(left))));
        uint left_lsb = uint(getZero(reverse(bytes32(left))));
        right = right + left_lsb;
        uint res = left_msb + right; 
        return(bytes32(res));
    }


    // ensure that the 3 bits on the left is actually 3 bits.
    function pad3bit(uint input) constant returns(uint) {
        if (input == 0) 
            return 0;
        if (input == 1)
            return 4;
        if (input == 2)
            return 4;
        if (input == 3)
            return 6;
        return(input);
    }

    function getZero(bytes32 x) returns(bytes32) {
                 //0x1111111111111111111111113fdc3192693e28ff6aee95320075e4c26be03308
        return(x & 0x000000000000000000000000000000000000000000000000000000000000000F);
    }

    function padZero(bytes32 x) returns(bytes32) {
                 //0x1111111111111111111111113fdc3192693e28ff6aee95320075e4c26be03308
        return(x & 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0);
    }

    function reverseByte(uint a) public pure returns (uint) {
        uint c = 0xf070b030d0509010e060a020c0408000;

        return (( c >> ((a & 0xF)*8)) & 0xF0)   +  
               (( c >> (((a >> 4)&0xF)*8) + 4) & 0xF);
    }
    //flip endinaness
    function reverse(bytes32 a) public pure returns(bytes32) {
        uint r;
        uint i;
        uint b;
        for (i=0; i<32; i++) {
            b = (uint(a) >> ((31-i)*8)) & 0xff;
            b = reverseByte(b);
            r += b << (i*8);
        }
        return bytes32(r);
    }

}
library Pairing {
    struct G1Point {
        uint X;
        uint Y;
    }
    // Encoding of field elements is: X[0] * z + X[1]
    struct G2Point {
        uint[2] X;
        uint[2] Y;
    }
    /// @return the generator of G1
    function P1() internal returns (G1Point) {
        return G1Point(1, 2);
    }
    /// @return the generator of G2
    function P2() internal returns (G2Point) {
        return G2Point(
            [11559732032986387107991004021392285783925812861821192530917403151452391805634,
             10857046999023057135944570762232829481370756359578518086990519993285655852781],
            [4082367875863433681332203403145435568316851327593401208105741076214120093531,
             8495653923123431417604973247489272438418190587263600148770280649306958101930]
        );
    }
    /// @return the negation of p, i.e. p.add(p.negate()) should be zero.
    function negate(G1Point p) internal returns (G1Point) {
        // The prime q in the base field F_q for G1
        uint q = 21888242871839275222246405745257275088696311157297823662689037894645226208583;
        if (p.X == 0 && p.Y == 0)
            return G1Point(0, 0);
        return G1Point(p.X, q - (p.Y % q));
    }
    /// @return the sum of two points of G1
    function add(G1Point p1, G1Point p2) internal returns (G1Point r) {
        uint[4] memory input;
        input[0] = p1.X;
        input[1] = p1.Y;
        input[2] = p2.X;
        input[3] = p2.Y;
        bool success;
        assembly {
            success := call(sub(gas, 2000), 6, 0, input, 0xc0, r, 0x60)
            // Use "invalid" to make gas estimation work
            switch success case 0 { invalid }
        }
        require(success);
    }
    /// @return the product of a point on G1 and a scalar, i.e.
    /// p == p.mul(1) and p.add(p) == p.mul(2) for all points p.
    function mul(G1Point p, uint s) internal returns (G1Point r) {
        uint[3] memory input;
        input[0] = p.X;
        input[1] = p.Y;
        input[2] = s;
        bool success;
        assembly {
            success := call(sub(gas, 2000), 7, 0, input, 0x80, r, 0x60)
            // Use "invalid" to make gas estimation work
            switch success case 0 { invalid }
        }
        require (success);
    }
    /// @return the result of computing the pairing check
    /// e(p1[0], p2[0]) *  .... * e(p1[n], p2[n]) == 1
    /// For example pairing([P1(), P1().negate()], [P2(), P2()]) should
    /// return true.
    function pairing(G1Point[] p1, G2Point[] p2) internal returns (bool) {
        require(p1.length == p2.length);
        uint elements = p1.length;
        uint inputSize = elements * 6;
        uint[] memory input = new uint[](inputSize);
        for (uint i = 0; i < elements; i++)
        {
            input[i * 6 + 0] = p1[i].X;
            input[i * 6 + 1] = p1[i].Y;
            input[i * 6 + 2] = p2[i].X[0];
            input[i * 6 + 3] = p2[i].X[1];
            input[i * 6 + 4] = p2[i].Y[0];
            input[i * 6 + 5] = p2[i].Y[1];
        }
        uint[1] memory out;
        bool success;
        assembly {
            success := call(sub(gas, 2000), 8, 0, add(input, 0x20), mul(inputSize, 0x20), out, 0x20)
            // Use "invalid" to make gas estimation work
            switch success case 0 { invalid }
        }
        require(success);
        return out[0] != 0;
    }
    /// Convenience method for a pairing check for two pairs.
    function pairingProd2(G1Point a1, G2Point a2, G1Point b1, G2Point b2) internal returns (bool) {
        G1Point[] memory p1 = new G1Point[](2);
        G2Point[] memory p2 = new G2Point[](2);
        p1[0] = a1;
        p1[1] = b1;
        p2[0] = a2;
        p2[1] = b2;
        return pairing(p1, p2);
    }
    /// Convenience method for a pairing check for three pairs.
    function pairingProd3(
            G1Point a1, G2Point a2,
            G1Point b1, G2Point b2,
            G1Point c1, G2Point c2
    ) internal returns (bool) {
        G1Point[] memory p1 = new G1Point[](3);
        G2Point[] memory p2 = new G2Point[](3);
        p1[0] = a1;
        p1[1] = b1;
        p1[2] = c1;
        p2[0] = a2;
        p2[1] = b2;
        p2[2] = c2;
        return pairing(p1, p2);
    }
    /// Convenience method for a pairing check for four pairs.
    function pairingProd4(
            G1Point a1, G2Point a2,
            G1Point b1, G2Point b2,
            G1Point c1, G2Point c2,
            G1Point d1, G2Point d2
    ) internal returns (bool) {
        G1Point[] memory p1 = new G1Point[](4);
        G2Point[] memory p2 = new G2Point[](4);
        p1[0] = a1;
        p1[1] = b1;
        p1[2] = c1;
        p1[3] = d1;
        p2[0] = a2;
        p2[1] = b2;
        p2[2] = c2;
        p2[3] = d2;
        return pairing(p1, p2);
    }
}

contract Verifier {
    using Pairing for *;
    uint i = 0; //IC parameater add counter.
    struct VerifyingKey {
        Pairing.G2Point A;
        Pairing.G1Point B;
        Pairing.G2Point C;
        Pairing.G2Point gamma;
        Pairing.G1Point gammaBeta1;
        Pairing.G2Point gammaBeta2;
        Pairing.G2Point Z;
        Pairing.G1Point[] IC;
    }
    struct Proof {
        Pairing.G1Point A;
        Pairing.G1Point A_p;
        Pairing.G2Point B;
        Pairing.G1Point B_p;
        Pairing.G1Point C;
        Pairing.G1Point C_p;
        Pairing.G1Point K;
        Pairing.G1Point H;
    }
    VerifyingKey verifyKey;
    function Verifier (uint[2] A1, uint[2] A2, uint[2] B, uint[2] C1, uint[2] C2, 
                       uint[2] gamma1, uint[2] gamma2, uint[2] gammaBeta1, 
                       uint[2] gammaBeta2_1, uint[2] gammaBeta2_2, uint[2] Z1, uint[2] Z2,
                       uint[] input) {
        verifyKey.A = Pairing.G2Point(A1,A2);
        verifyKey.B = Pairing.G1Point(B[0], B[1]);
        verifyKey.C = Pairing.G2Point(C1, C2);
        verifyKey.gamma = Pairing.G2Point(gamma1, gamma2);

        verifyKey.gammaBeta1 = Pairing.G1Point(gammaBeta1[0], gammaBeta1[1]);
        verifyKey.gammaBeta2 = Pairing.G2Point(gammaBeta2_1, gammaBeta2_2);
        verifyKey.Z = Pairing.G2Point(Z1,Z2);
        //addIC(input);
        //verifyKey.IC = new Pairing.G1Point[](1);
        //for (uint i = 0; i < input.length; i+=2)
        //    verifyKey.IC.push(Pairing.G1Point(input[i], input[i+1]));
        //    verifyKey.IC.push(Pairing.G1Point(input[i][0], input[i][1]));  
        //verifyKey.IC.push(Pairing.G1Point(input[0], input[1])); 

        while (verifyKey.IC.length != input.length/2) {
            verifyKey.IC.push(Pairing.G1Point(input[i], input[i+1]));
            i += 2;
        }

    }

   function getIC(uint i) returns(uint) {
       return(verifyKey.IC[i].X);
   }

   function getICLen () returns (uint) { 
        return(verifyKey.IC.length);
   } 

   function verify(uint[] input, Proof proof) internal returns (uint) {
        VerifyingKey memory vk = verifyKey;
        require(input.length + 1 == vk.IC.length);


        // Compute the linear combination vk_x
        Pairing.G1Point memory vk_x = Pairing.G1Point(0, 0);
        for (uint i = 0; i < input.length; i++)
            vk_x = Pairing.add(vk_x, Pairing.mul(vk.IC[i + 1], input[i]));
        vk_x = Pairing.add(vk_x, vk.IC[0]);

        if (!Pairing.pairingProd2(proof.A, vk.A, Pairing.negate(proof.A_p), Pairing.P2())) return 1;
        if (!Pairing.pairingProd2(vk.B, proof.B, Pairing.negate(proof.B_p), Pairing.P2())) return 2;
        if (!Pairing.pairingProd2(proof.C, vk.C, Pairing.negate(proof.C_p), Pairing.P2())) return 3;
        if (!Pairing.pairingProd3(
            proof.K, vk.gamma,
            Pairing.negate(Pairing.add(vk_x, Pairing.add(proof.A, proof.C))), vk.gammaBeta2,
            Pairing.negate(vk.gammaBeta1), proof.B
        )) return 4;
        if (!Pairing.pairingProd3(
                Pairing.add(vk_x, proof.A), proof.B,
                Pairing.negate(proof.H), vk.Z,
                Pairing.negate(proof.C), Pairing.P2()
        )) return 5; 
        return 0;
    }
    event Verified(string);
    function verifyTx(
            uint[2] a,
            uint[2] a_p,
            uint[2][2] b,
            uint[2] b_p,
            uint[2] c,
            uint[2] c_p,
            uint[2] h,
            uint[2] k,
            uint[] input
        ) returns (bool) {
        Proof memory proof;
        proof.A = Pairing.G1Point(a[0], a[1]);
        proof.A_p = Pairing.G1Point(a_p[0], a_p[1]);
        proof.B = Pairing.G2Point([b[0][0], b[0][1]], [b[1][0], b[1][1]]);
        proof.B_p = Pairing.G1Point(b_p[0], b_p[1]);
        proof.C = Pairing.G1Point(c[0], c[1]);
        proof.C_p = Pairing.G1Point(c_p[0], c_p[1]);
        proof.H = Pairing.G1Point(h[0], h[1]);
        proof.K = Pairing.G1Point(k[0], k[1]);
        uint[] memory inputValues = new uint[](input.length);
        for(uint i = 0; i < input.length; i++){
            inputValues[i] = input[i];
        }
        //uint res = verify(inputValues, proof);
        if (verify(inputValues, proof) == 0) {
            Verified("Transaction successfully verified.");
            return true;
        } else {
            return false;
        }
        //return(res);
    } 
}

Contract ABI

[{"constant":false,"inputs":[{"name":"x","type":"bytes32"}],"name":"padZero","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"j","type":"uint256"},{"name":"k","type":"uint256"}],"name":"getLeaf","outputs":[{"name":"root","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"a","type":"bytes32"}],"name":"reverse","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"leaf","type":"bytes32"},{"name":"depth","type":"uint256"}],"name":"getUniqueLeaf","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"MT","outputs":[{"name":"cur","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"serials","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getRoot","outputs":[{"name":"root","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"source","type":"bytes32"}],"name":"nullifierToAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"zksnark_verify","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"input","type":"bytes32"},{"name":"sk","type":"bytes32"}],"name":"getSha256","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"index","type":"uint256"}],"name":"getMerkelProof","outputs":[{"name":"","type":"bytes32[29]"},{"name":"","type":"uint256[29]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"no_leaves","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"input","type":"uint256"}],"name":"pad3bit","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"roots","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"leaf","type":"bytes32"}],"name":"deposit","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"root","type":"bytes32"}],"name":"isRoot","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"left","type":"uint256"},{"name":"right","type":"uint256"}],"name":"merge253bitWords","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"a","type":"uint256[2]"},{"name":"a_p","type":"uint256[2]"},{"name":"b","type":"uint256[2][2]"},{"name":"b_p","type":"uint256[2]"},{"name":"c","type":"uint256[2]"},{"name":"c_p","type":"uint256[2]"},{"name":"h","type":"uint256[2]"},{"name":"k","type":"uint256[2]"},{"name":"input","type":"uint256[]"}],"name":"withdraw","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"tree_depth","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"x","type":"bytes32"}],"name":"getZero","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"a","type":"uint256"}],"name":"reverseByte","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"inputs":[{"name":"_zksnark_verify","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"","type":"address"}],"name":"Withdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"index","type":"uint256"}],"name":"leafAdded","type":"event"}]

6080604052601d600255632000000060035534801561001d57600080fd5b506040516020806118a383398101806040528101908080519060200190929190505050806403c000000760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505061180e806100956000396000f30060806040526004361061011d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680630a152dd8146101225780632fb2798d1461016f57806337b34974146101c25780633dac9b2a1461020f5780634a1f11a7146102665780634e475ef0146102915780635ca1e165146102da5780635ccd52831461030d5780635d0a66041461037e5780638f49f9e7146103d55780639ad1ee9d14610430578063a03515fd146104c8578063a333e901146104f3578063ae6dead714610534578063b214faa51461057d578063caadea17146105a1578063d5bd8e8e146105ea578063d7cbcfc51461063d578063e08dfff814610893578063e1f0d6ba146108be578063f08383061461090b575b600080fd5b34801561012e57600080fd5b50610151600480360381019080803560001916906020019092919050505061094c565b60405180826000191660001916815260200191505060405180910390f35b34801561017b57600080fd5b506101a4600480360381019080803590602001909291908035906020019092919050505061097b565b60405180826000191660001916815260200191505060405180910390f35b3480156101ce57600080fd5b506101f160048036038101908080356000191690602001909291905050506109b0565b60405180826000191660001916815260200191505060405180910390f35b34801561021b57600080fd5b50610248600480360381019080803560001916906020019092919080359060200190929190505050610a0f565b60405180826000191660001916815260200191505060405180910390f35b34801561027257600080fd5b5061027b610ab6565b6040518082815260200191505060405180910390f35b34801561029d57600080fd5b506102c06004803603810190808035600019169060200190929190505050610ac2565b604051808215151515815260200191505060405180910390f35b3480156102e657600080fd5b506102ef610ae2565b60405180826000191660001916815260200191505060405180910390f35b34801561031957600080fd5b5061033c6004803603810190808035600019169060200190929190505050610b17565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561038a57600080fd5b50610393610bba565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156103e157600080fd5b5061041260048036038101908080356000191690602001909291908035600019169060200190929190505050610be4565b60405180826000191660001916815260200191505060405180910390f35b34801561043c57600080fd5b5061045b60048036038101908080359060200190929190505050610c5b565b6040518083601d60200280838360005b8381101561048657808201518184015260208101905061046b565b5050505090500182601d60200280838360005b838110156104b4578082015181840152602081019050610499565b505050509050019250505060405180910390f35b3480156104d457600080fd5b506104dd610da4565b6040518082815260200191505060405180910390f35b3480156104ff57600080fd5b5061051e60048036038101908080359060200190929190505050610daa565b6040518082815260200191505060405180910390f35b34801561054057600080fd5b506105636004803603810190808035600019169060200190929190505050610dfc565b604051808215151515815260200191505060405180910390f35b61059f6004803603810190808035600019169060200190929190505050610e1c565b005b3480156105ad57600080fd5b506105d06004803603810190808035600019169060200190929190505050610e86565b604051808215151515815260200191505060405180910390f35b3480156105f657600080fd5b5061061f6004803603810190808035906020019092919080359060200190929190505050610ebc565b60405180826000191660001916815260200191505060405180910390f35b34801561064957600080fd5b50610851600480360381019080806040019060028060200260405190810160405280929190826002602002808284378201915050505050919291929080604001906002806020026040519081016040528092919082600260200280828437820191505050505091929192908060800190600280602002604051908101604052809291906000905b828210156107125783826040020160028060200260405190810160405280929190826002602002808284378201915050505050815260200190600101906106d0565b5050505091929192908060400190600280602002604051908101604052809291908260026020028082843782019150505050509192919290806040019060028060200260405190810160405280929190826002602002808284378201915050505050919291929080604001906002806020026040519081016040528092919082600260200280828437820191505050505091929192908060400190600280602002604051908101604052809291908260026020028082843782019150505050509192919290806040019060028060200260405190810160405280929190826002602002808284378201915050505050919291929080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509192919290505050610f1a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561089f57600080fd5b506108a861145f565b6040518082815260200191505060405180910390f35b3480156108ca57600080fd5b506108ed6004803603810190808035600019169060200190929190505050611465565b60405180826000191660001916815260200191505060405180910390f35b34801561091757600080fd5b5061093660048036038101908080359060200190929190505050611475565b6040518082815260200191505060405180910390f35b60007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff060010282169050919050565b6000600460010183601e8110151561098f57fe5b63200000000201826320000000811015156109a657fe5b0154905092915050565b600080600080600091505b6020821015610a015760ff600883601f030286600190049060020a90041690506109e481611475565b905060088202819060020a028301925081806001019250506109bb565b826001029350505050919050565b600080600060010284600019161415610aac57600090505b82811015610aab57600284856040518083600019166000191681526020018260001916600019168152602001925050506020604051808303816000865af1158015610a76573d6000803e3d6000fd5b5050506040513d6020811015610a8b57600080fd5b810190808051906020019092919050505093508080600101915050610a27565b5b8391505092915050565b60048060000154905081565b60006020528060005260406000206000915054906101000a900460ff1681565b60006004600101600254601e81101515610af857fe5b632000000002016000632000000081101515610b1057fe5b0154905090565b6000610b21611778565b604080519081016040528060006c01000000000000000000000000026bffffffffffffffffffffffff19166bffffffffffffffffffffffff1916815260200160006c01000000000000000000000000026bffffffffffffffffffffffff19168152509050828152826014820152806000600281101515610b9d57fe5b60200201516c010000000000000000000000009004915050919050565b6403c000000760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600283836040518083600019166000191681526020018260001916600019168152602001925050506020604051808303816000865af1158015610c2d573d6000803e3d6000fd5b5050506040513d6020811015610c4257600080fd5b8101908080519060200190929190505050905092915050565b610c6361179a565b610c6b6117be565b610c736117be565b610c7b61179a565b60008090505b600254811015610d9657600286811515610c9757fe5b068382601d81101515610ca657fe5b6020020181815250506000600287811515610cbd57fe5b061415610d2157610cfb600460010182601e81101515610cd957fe5b6320000000020160018801632000000081101515610cf357fe5b015482610a0f565b8282601d81101515610d0957fe5b60200201906000191690816000191681525050610d7a565b610d58600460010182601e81101515610d3657fe5b6320000000020160018803632000000081101515610d5057fe5b015482610a0f565b8282601d81101515610d6657fe5b602002019060001916908160001916815250505b600286811515610d8657fe5b0495508080600101915050610c81565b818394509450505050915091565b60035481565b600080821415610dbd5760009050610df7565b6001821415610dcf5760049050610df7565b6002821415610de15760049050610df7565b6003821415610df35760069050610df7565b8190505b919050565b60016020528060005260406000206000915054906101000a900460ff1681565b670de0b6b3a764000034141515610e3257600080fd5b610e3b816114c1565b5060016403c00000056000610e56610e51610ae2565b61094c565b6000191660001916815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60006403c00000056000836000191660001916815260200190815260200160002060009054906101000a900460ff169050919050565b600080600080610ecb85610daa565b9450610ee1610edc876001026109b0565b61094c565b600190049250610efb610ef6876001026109b0565b611465565b6001900491508185019450848301905080600102935050505092915050565b6000806000806000610f4e610f49876002815181101515610f3757fe5b906020019060200201516001026109b0565b610b17565b9350610f7c610f77876000815181101515610f6557fe5b906020019060200201516001026109b0565b61094c565b9250610faa610fa5876002815181101515610f9357fe5b906020019060200201516001026109b0565b61094c565b91506403c00000056000846000191660001916815260200190815260200160002060009054906101000a900460ff161515610fe457600080fd5b6403c00000066000836000191660001916815260200190815260200160002060009054906101000a900460ff1615151561101d57600080fd5b6403c000000760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c8e6ba4d8f8f8f8f8f8f8f8f8f6040518a63ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808a600260200280838360005b838110156110be5780820151818401526020810190506110a3565b5050505090500189600260200280838360005b838110156110ec5780820151818401526020810190506110d1565b505050509050018860026000925b818410156111405782846020020151600260200280838360005b8381101561112f578082015181840152602081019050611114565b5050505090500192600101926110fa565b9250505087600260200280838360005b8381101561116b578082015181840152602081019050611150565b5050505090500186600260200280838360005b8381101561119957808201518184015260208101905061117e565b5050505090500185600260200280838360005b838110156111c75780820151818401526020810190506111ac565b5050505090500184600260200280838360005b838110156111f55780820151818401526020810190506111da565b5050505090500183600260200280838360005b83811015611223578082015181840152602081019050611208565b5050505090500180602001828103825283818151815260200191508051906020019060200280838360005b8381101561126957808201518184015260208101905061124e565b505050509050019a5050505050505050505050602060405180830381600087803b15801561129657600080fd5b505af11580156112aa573d6000803e3d6000fd5b505050506040513d60208110156112c057600080fd5b810190808051906020019092919050505015156112dc57600080fd5b60016403c00000066000846000191660001916815260200190815260200160002060006101000a81548160ff02191690831515021790555085600481518110151561132357fe5b906020019060200201519050670de0b6b3a76400008110151561134557600080fd5b600081141515611397573373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611395573d6000803e3d6000fd5b505b8373ffffffffffffffffffffffffffffffffffffffff166108fc82670de0b6b3a7640000039081150290604051600060405180830381858888f193505050501580156113e7573d6000803e3d6000fd5b507ff67611512e0a2d90c96fd3f08dca4971bc45fba9dc679eabe839a32abbe58a8e84604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1839450505050509998505050505050505050565b60025481565b6000600f60010282169050919050565b6000806ff070b030d0509010e060a020c04080009050600f60046008600f6004879060020a9004160201829060020a90041660f06008600f861602839060020a90041601915050919050565b6000600160035403600460000154141515156114dc57600080fd5b8160046001016000601e811015156114f057fe5b6320000000020160046000015463200000008110151561150c57fe5b01816000191690555061151d611578565b507f80275d0ddfbdefbc062585e28de92e22caf9c6b92c42d2521b52ad401ebe12cb6004600001546040518082815260200191505060405180910390a160046000016000815480929190600101919050555060019050919050565b6000806000806000806004600001549450600091505b600254821015611740576002858115156115a457fe5b04905060006002868115156115b557fe5b06141561162757600460010182601e811015156115ce57fe5b63200000000201856320000000811015156115e557fe5b01549350611620600460010183601e811015156115fe57fe5b632000000002016001870163200000008110151561161857fe5b015483610a0f565b925061168e565b61165e600460010183601e8110151561163c57fe5b632000000002016001870363200000008110151561165657fe5b015483610a0f565b9350600460010182601e8110151561167257fe5b632000000002018563200000008110151561168957fe5b015492505b600284846040518083600019166000191681526020018260001916600019168152602001925050506020604051808303816000865af11580156116d5573d6000803e3d6000fd5b5050506040513d60208110156116ea57600080fd5b8101908080519060200190929190505050600460010160018401601e8110151561171057fe5b632000000002018263200000008110151561172757fe5b018160001916905550809450818060010192505061158e565b6004600101600254601e8110151561175457fe5b63200000000201600063200000008110151561176c57fe5b01549550505050505090565b6040805190810160405280600290602082028038833980820191505090505090565b6103a060405190810160405280601d90602082028038833980820191505090505090565b6103a060405190810160405280601d906020820280388339808201915050905050905600a165627a7a723058207559cae45b0fc3cd6c5f234e22e25e36e8256dfc58d27f7c089d94e277e7de3a0029000000000000000000000000ec9ae67f0ce02eec00035da2a4eadeccffd5afc0

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000ec9ae67f0ce02eec00035da2a4eadeccffd5afc0

-----Decoded View---------------
Arg [0] : _zksnark_verify (address): 0xec9ae67f0ce02eec00035da2a4eadeccffd5afc0

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000ec9ae67f0ce02eec00035da2a4eadeccffd5afc0


Swarm Source

bzzr://7559cae45b0fc3cd6c5f234e22e25e36e8256dfc58d27f7c089d94e277e7de3a
Block Transaction Difficulty Gas Used Reward
Block Uncle Number Difficulty Gas Used Reward
Loading

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.