Contract 0x97AC13e4c54Aca77d3F5E234f3999199882c4850

 
Txn Hash
Block
From
To
Value [Txn Fee]
0x3d9a11e274ebed202873cc6771c0ced31fc6c9f9c393a1dd7b52b9a759a4794185433492021-06-23 9:21:305 hrs 45 mins ago0xa45c06fc1ac77b2aebb8645230965b298d3164b1 IN  0x97ac13e4c54aca77d3f5e234f3999199882c48500.1 BNB0.004445625
0x2b3e5fcdd20ac84c9e02c805594534144925bcd94cf6783f574b7c021810f35185375802021-06-23 4:31:2910 hrs 35 mins ago0xa45c06fc1ac77b2aebb8645230965b298d3164b1 IN  0x97ac13e4c54aca77d3f5e234f3999199882c48500.1 BNB0.004520625
0x11999ee0ac756be92387ad6e78ad10ffc260f696a08053a75926022cccfbc05785286382021-06-22 21:00:5318 hrs 6 mins ago0xa242a7fd6ce45255f4d33872b570ff72bb38d96b IN  0x97ac13e4c54aca77d3f5e234f3999199882c48500.1 BNB0.004445625
0xe831509ce821bfcabd76a521d304e665efce47f23e90bea103b50bf646af7a4d85225532021-06-22 15:53:2923 hrs 13 mins ago0xb5c84233426bc02b1983405a15959e783308f14d IN  0x97ac13e4c54aca77d3f5e234f3999199882c48500 BNB0.001553005
0xf43da2c1ab0bbcc9094ffb163314520e69943f773d720a343e77cfb921a8efdb85225472021-06-22 15:53:1123 hrs 14 mins ago0xb5c84233426bc02b1983405a15959e783308f14d IN  0x97ac13e4c54aca77d3f5e234f3999199882c48500 BNB0.001553005
0x006fd0775560ff062c116bb2ff7277d43acb1afef064830aa13631388031ef4c85225362021-06-22 15:52:3823 hrs 14 mins ago0xb5c84233426bc02b1983405a15959e783308f14d IN  0x97ac13e4c54aca77d3f5e234f3999199882c48500 BNB0.001553065
0xf92f77b45bd32d6180434fa2a084d0736c676a3b49e26e0a3636827d27ceda0e85217272021-06-22 15:11:5923 hrs 55 mins ago0x4cf3c577306f8ce62790f2fed4f23083ff0c150c IN  0x97ac13e4c54aca77d3f5e234f3999199882c48500.4 BNB0.004595625
0x3b5f4431c136f8fdafd71d22044e25762cf7eed97f5eb0121a08ce9a228364e885134232021-06-22 8:14:061 day 6 hrs ago0x045d1ebf45f78ad65d7bb244851a59391a04cd93 IN  0x97ac13e4c54aca77d3f5e234f3999199882c48500.2 BNB0.004445625
0x2f6b796f518231d1f6a2d2317f9d1dde200887bfbbca8e314b4805904ca1631784843782021-06-21 7:55:332 days 7 hrs ago0x045d1ebf45f78ad65d7bb244851a59391a04cd93 IN  0x97ac13e4c54aca77d3f5e234f3999199882c48500.1 BNB0.004520625
0xaf01bf52047a0fd4f74c3dc62bb412cc05e7593b1c51ebf0d5351e3488399b6c84803692021-06-21 4:34:492 days 10 hrs ago0xd265b4b0bc74034caf8b1fe15dcf9bd84d50a7f1 IN  0x97ac13e4c54aca77d3f5e234f3999199882c48500 BNB0.001552885
0x8212bce812a2724f30173e4d68a71e0cc551d7d94fcfb9f80f0413ab4b8a2ffc84614962021-06-20 12:50:533 days 2 hrs ago0x3acb32046a77a504d53e2520841ed741899e5aa5 IN  0x97ac13e4c54aca77d3f5e234f3999199882c48500.1 BNB0.004445565
0xbb567f993bdb321907052d5dc1d7d9018c675ab6b483a55773bd20c34f48707a84551352021-06-20 7:31:503 days 7 hrs ago0xa07dc592967082229ce2205d013f6de33e1bcd3f IN  0x97ac13e4c54aca77d3f5e234f3999199882c48500 BNB0.001553005
0xa6d021950e6ac0b530b336aa320adc2677520cb25fde95f4231533052359ec6684351372021-06-19 14:49:324 days 17 mins ago0x8b87501bb52f27cf6ff169f958eff4888f0dcbbf IN  0x97ac13e4c54aca77d3f5e234f3999199882c48500.1 BNB0.004670625
0x2510a14db01aa6d77c41cb0bbbc8b1ecadc631b42b9f95b1fef0c3ff072276bb84233772021-06-19 4:53:584 days 10 hrs ago0x1e0a843c774f7a4cd96d5ac35e5fc3d8587f5dfc IN  0x97ac13e4c54aca77d3f5e234f3999199882c48500 BNB0.001552945
0xb484256ea8c1f9988c8d6f453cb4bacd87bc14c3a7c08ad3ed75b57336561d9084233682021-06-19 4:53:314 days 10 hrs ago0x1e0a843c774f7a4cd96d5ac35e5fc3d8587f5dfc IN  0x97ac13e4c54aca77d3f5e234f3999199882c48500 BNB0.001553005
0x279e29bb1ac9d592e36ab9514e4375dd93437abaeffc2e29341dc3825e7e772384233232021-06-19 4:51:164 days 10 hrs ago0x2dbf9d48e75c63391c79ea7d05cf5f45c5830cbd IN  0x97ac13e4c54aca77d3f5e234f3999199882c48500 BNB0.001553005
0x8d8ce60781f631a2f365f4321b09185be056bd44494733a537de65ebddfc820f84231742021-06-19 4:43:494 days 10 hrs ago0x638ac2286d667353ed8740ab4532d90a71e6bf14 IN  0x97ac13e4c54aca77d3f5e234f3999199882c48500.1 BNB0.004445625
0x988dd0a57e6a850ccc201cbcce2d4996c4001b95208129fc2d8f91b289fc3bae83992552021-06-18 8:36:565 days 6 hrs ago0x638ac2286d667353ed8740ab4532d90a71e6bf14 IN  0x97ac13e4c54aca77d3f5e234f3999199882c48500.2 BNB0.004520505
0xe00b8a734f55f90f6971e0bd84bca3954f9b9619a969d48ab2c55d3a6625079683941362021-06-18 4:18:585 days 10 hrs ago0xa740d5923fb4917b7b36288fad436d965731442b IN  0x97ac13e4c54aca77d3f5e234f3999199882c48500 BNB0.001552945
0x7a7a7fe399314e945cca11e97be1b7ade23f6f5f2843b8b0029952b27257e40e83941302021-06-18 4:18:405 days 10 hrs ago0xa740d5923fb4917b7b36288fad436d965731442b IN  0x97ac13e4c54aca77d3f5e234f3999199882c48500 BNB0.001552825
0x3814a109432086eb297ebcab4c6155fa18db186d09dc9e63cfc35cd8dff1f1f483841292021-06-17 19:52:575 days 19 hrs ago0x7b89f1ae4d1a5da9a82dcc5411fb524055add673 IN  0x97ac13e4c54aca77d3f5e234f3999199882c48500.1 BNB0.004445625
0x6c84dc5d6d351ce46e21756c14c1badac5a30419f3174134f977a06fc2aad62a83826322021-06-17 18:38:025 days 20 hrs ago0x67817262d17f15964b39aff2ea595101b47b37c9 IN  0x97ac13e4c54aca77d3f5e234f3999199882c48500 BNB0.001552945
0x9b34355bd000799006a4687376613051061f73466bf7716843a6902d45fe1e9883825522021-06-17 18:33:565 days 20 hrs ago0x054cdd6e56b24b689d5b65e585f30f7a93ad5dab IN  0x97ac13e4c54aca77d3f5e234f3999199882c48500 BNB0.001552885
0x6898dc6d63dc8f1041b65f5aa1ea1ba1496304225620c18bcacf7d736899924883825442021-06-17 18:33:325 days 20 hrs ago0x054cdd6e56b24b689d5b65e585f30f7a93ad5dab IN  0x97ac13e4c54aca77d3f5e234f3999199882c48500 BNB0.001552885
0x6bc21a2ae74305f7f90e0b8943f22baa58f1b1a9119d6b6e378d62d43b843b5583692432021-06-17 7:19:436 days 7 hrs ago0x7b89f1ae4d1a5da9a82dcc5411fb524055add673 IN  0x97ac13e4c54aca77d3f5e234f3999199882c48500.1 BNB0.004595625
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xe831509ce821bfcabd76a521d304e665efce47f23e90bea103b50bf646af7a4d85225532021-06-22 15:53:2923 hrs 13 mins ago 0x97ac13e4c54aca77d3f5e234f3999199882c48500x3e4ff40a827d4ede5336fd49fbcbfe02c65303750.001 BNB
0xe831509ce821bfcabd76a521d304e665efce47f23e90bea103b50bf646af7a4d85225532021-06-22 15:53:2923 hrs 13 mins ago 0x97ac13e4c54aca77d3f5e234f3999199882c48500xb5c84233426bc02b1983405a15959e783308f14d0.099 BNB
0xf43da2c1ab0bbcc9094ffb163314520e69943f773d720a343e77cfb921a8efdb85225472021-06-22 15:53:1123 hrs 14 mins ago 0x97ac13e4c54aca77d3f5e234f3999199882c48500x3e4ff40a827d4ede5336fd49fbcbfe02c65303750.001 BNB
0xf43da2c1ab0bbcc9094ffb163314520e69943f773d720a343e77cfb921a8efdb85225472021-06-22 15:53:1123 hrs 14 mins ago 0x97ac13e4c54aca77d3f5e234f3999199882c48500xb5c84233426bc02b1983405a15959e783308f14d0.099 BNB
0x006fd0775560ff062c116bb2ff7277d43acb1afef064830aa13631388031ef4c85225362021-06-22 15:52:3823 hrs 14 mins ago 0x97ac13e4c54aca77d3f5e234f3999199882c48500x3e4ff40a827d4ede5336fd49fbcbfe02c65303750.001 BNB
0x006fd0775560ff062c116bb2ff7277d43acb1afef064830aa13631388031ef4c85225362021-06-22 15:52:3823 hrs 14 mins ago 0x97ac13e4c54aca77d3f5e234f3999199882c48500xb5c84233426bc02b1983405a15959e783308f14d0.099 BNB
0xaf01bf52047a0fd4f74c3dc62bb412cc05e7593b1c51ebf0d5351e3488399b6c84803692021-06-21 4:34:492 days 10 hrs ago 0x97ac13e4c54aca77d3f5e234f3999199882c48500x3e4ff40a827d4ede5336fd49fbcbfe02c65303750.001 BNB
0xaf01bf52047a0fd4f74c3dc62bb412cc05e7593b1c51ebf0d5351e3488399b6c84803692021-06-21 4:34:492 days 10 hrs ago 0x97ac13e4c54aca77d3f5e234f3999199882c48500xd265b4b0bc74034caf8b1fe15dcf9bd84d50a7f10.099 BNB
0xbb567f993bdb321907052d5dc1d7d9018c675ab6b483a55773bd20c34f48707a84551352021-06-20 7:31:503 days 7 hrs ago 0x97ac13e4c54aca77d3f5e234f3999199882c48500x3e4ff40a827d4ede5336fd49fbcbfe02c65303750.001 BNB
0xbb567f993bdb321907052d5dc1d7d9018c675ab6b483a55773bd20c34f48707a84551352021-06-20 7:31:503 days 7 hrs ago 0x97ac13e4c54aca77d3f5e234f3999199882c48500xa07dc592967082229ce2205d013f6de33e1bcd3f0.099 BNB
0x2510a14db01aa6d77c41cb0bbbc8b1ecadc631b42b9f95b1fef0c3ff072276bb84233772021-06-19 4:53:584 days 10 hrs ago 0x97ac13e4c54aca77d3f5e234f3999199882c48500x3e4ff40a827d4ede5336fd49fbcbfe02c65303750.001 BNB
0x2510a14db01aa6d77c41cb0bbbc8b1ecadc631b42b9f95b1fef0c3ff072276bb84233772021-06-19 4:53:584 days 10 hrs ago 0x97ac13e4c54aca77d3f5e234f3999199882c48500x1e0a843c774f7a4cd96d5ac35e5fc3d8587f5dfc0.099 BNB
0xb484256ea8c1f9988c8d6f453cb4bacd87bc14c3a7c08ad3ed75b57336561d9084233682021-06-19 4:53:314 days 10 hrs ago 0x97ac13e4c54aca77d3f5e234f3999199882c48500x3e4ff40a827d4ede5336fd49fbcbfe02c65303750.001 BNB
0xb484256ea8c1f9988c8d6f453cb4bacd87bc14c3a7c08ad3ed75b57336561d9084233682021-06-19 4:53:314 days 10 hrs ago 0x97ac13e4c54aca77d3f5e234f3999199882c48500x1e0a843c774f7a4cd96d5ac35e5fc3d8587f5dfc0.099 BNB
0x279e29bb1ac9d592e36ab9514e4375dd93437abaeffc2e29341dc3825e7e772384233232021-06-19 4:51:164 days 10 hrs ago 0x97ac13e4c54aca77d3f5e234f3999199882c48500x3e4ff40a827d4ede5336fd49fbcbfe02c65303750.001 BNB
0x279e29bb1ac9d592e36ab9514e4375dd93437abaeffc2e29341dc3825e7e772384233232021-06-19 4:51:164 days 10 hrs ago 0x97ac13e4c54aca77d3f5e234f3999199882c48500x2dbf9d48e75c63391c79ea7d05cf5f45c5830cbd0.099 BNB
0xe00b8a734f55f90f6971e0bd84bca3954f9b9619a969d48ab2c55d3a6625079683941362021-06-18 4:18:585 days 10 hrs ago 0x97ac13e4c54aca77d3f5e234f3999199882c48500x3e4ff40a827d4ede5336fd49fbcbfe02c65303750.001 BNB
0xe00b8a734f55f90f6971e0bd84bca3954f9b9619a969d48ab2c55d3a6625079683941362021-06-18 4:18:585 days 10 hrs ago 0x97ac13e4c54aca77d3f5e234f3999199882c48500xa740d5923fb4917b7b36288fad436d965731442b0.099 BNB
0x7a7a7fe399314e945cca11e97be1b7ade23f6f5f2843b8b0029952b27257e40e83941302021-06-18 4:18:405 days 10 hrs ago 0x97ac13e4c54aca77d3f5e234f3999199882c48500x3e4ff40a827d4ede5336fd49fbcbfe02c65303750.001 BNB
0x7a7a7fe399314e945cca11e97be1b7ade23f6f5f2843b8b0029952b27257e40e83941302021-06-18 4:18:405 days 10 hrs ago 0x97ac13e4c54aca77d3f5e234f3999199882c48500xa740d5923fb4917b7b36288fad436d965731442b0.099 BNB
0x6c84dc5d6d351ce46e21756c14c1badac5a30419f3174134f977a06fc2aad62a83826322021-06-17 18:38:025 days 20 hrs ago 0x97ac13e4c54aca77d3f5e234f3999199882c48500x3e4ff40a827d4ede5336fd49fbcbfe02c65303750.001 BNB
0x6c84dc5d6d351ce46e21756c14c1badac5a30419f3174134f977a06fc2aad62a83826322021-06-17 18:38:025 days 20 hrs ago 0x97ac13e4c54aca77d3f5e234f3999199882c48500x67817262d17f15964b39aff2ea595101b47b37c90.099 BNB
0x9b34355bd000799006a4687376613051061f73466bf7716843a6902d45fe1e9883825522021-06-17 18:33:565 days 20 hrs ago 0x97ac13e4c54aca77d3f5e234f3999199882c48500x3e4ff40a827d4ede5336fd49fbcbfe02c65303750.001 BNB
0x9b34355bd000799006a4687376613051061f73466bf7716843a6902d45fe1e9883825522021-06-17 18:33:565 days 20 hrs ago 0x97ac13e4c54aca77d3f5e234f3999199882c48500x054cdd6e56b24b689d5b65e585f30f7a93ad5dab0.099 BNB
0x6898dc6d63dc8f1041b65f5aa1ea1ba1496304225620c18bcacf7d736899924883825442021-06-17 18:33:325 days 20 hrs ago 0x97ac13e4c54aca77d3f5e234f3999199882c48500x3e4ff40a827d4ede5336fd49fbcbfe02c65303750.001 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Similar Match)
Note: This contract matches the deployed ByteCode of the Source Code for Contract 0x333fe38c163ecc897bd2ae2ca2615659b6576661

Contract Name:
Morphose

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license
/**
 *Submitted for verification at BscScan.com on 2021-03-26
*/

// File: contracts/Morph.sol

pragma solidity ^0.8.0;

interface Morph {
    function poseidon(bytes32[2] memory) external pure returns (bytes32);
}

// File: contracts/MerkleTree.sol

pragma solidity ^0.8.0;


uint256 constant MERKLE_DEPTH = 20;
uint256 constant MERKLE_LEAVES = 1 << MERKLE_DEPTH;

library MerkleTree {
    struct Data {
        Morph hasher;
        mapping(bytes32 => bool) roots;
        mapping(uint256 => bytes32) tree;
        uint256 numLeaves;
    }

    function insert(Data storage self, bytes32 value)
        internal
        returns (uint256 index)
    {
        require(self.numLeaves < MERKLE_LEAVES, "Slots exhausted");

        index = self.numLeaves;
        self.numLeaves++;

        uint256 node = MERKLE_LEAVES + index;
        self.tree[node] = value;

        while (node > 1) {
            node /= 2;
            self.tree[node] = self.hasher.poseidon(
                [self.tree[node * 2], self.tree[node * 2 + 1]]
            );
        }

        self.roots[self.tree[1]] = true;
    }

    function getPath(Data storage self, uint256 index)
        internal
        view
        returns (bytes32[MERKLE_DEPTH] memory hashes)
    {
        require(index < self.numLeaves, "Index out of bounds");

        uint256 node = MERKLE_LEAVES + index;

        for (uint256 i = 0; i < MERKLE_DEPTH; i++) {
            hashes[i] = self.tree[node ^ 1];
            node /= 2;
        }
    }
}

// File: contracts/MembershipVerifier.sol

//
// Copyright 2017 Christian Reitwiessner
// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
// 2019 OKIMS
//      ported to solidity 0.6
//      fixed linter warnings
//      added requiere error messages
//
//
// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.0;
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 pure returns (G1Point memory) {
        return G1Point(1, 2);
    }
    /// @return the generator of G2
    function P2() internal pure returns (G2Point memory) {
        // Original code point
        return G2Point(
            [11559732032986387107991004021392285783925812861821192530917403151452391805634,
             10857046999023057135944570762232829481370756359578518086990519993285655852781],
            [4082367875863433681332203403145435568316851327593401208105741076214120093531,
             8495653923123431417604973247489272438418190587263600148770280649306958101930]
        );

/*
        // Changed by Jordi point
        return G2Point(
            [10857046999023057135944570762232829481370756359578518086990519993285655852781,
             11559732032986387107991004021392285783925812861821192530917403151452391805634],
            [8495653923123431417604973247489272438418190587263600148770280649306958101930,
             4082367875863433681332203403145435568316851327593401208105741076214120093531]
        );
*/
    }
    /// @return r the negation of p, i.e. p.addition(p.negate()) should be zero.
    function negate(G1Point memory p) internal pure returns (G1Point memory r) {
        // 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 r the sum of two points of G1
    function addition(G1Point memory p1, G1Point memory p2) internal view returns (G1Point memory r) {
        uint[4] memory input;
        input[0] = p1.X;
        input[1] = p1.Y;
        input[2] = p2.X;
        input[3] = p2.Y;
        bool success;
        // solium-disable-next-line security/no-inline-assembly
        assembly {
            success := staticcall(sub(gas(), 2000), 6, input, 0xc0, r, 0x60)
            // Use "invalid" to make gas estimation work
            switch success case 0 { invalid() }
        }
        require(success,"pairing-add-failed");
    }
    /// @return r the product of a point on G1 and a scalar, i.e.
    /// p == p.scalar_mul(1) and p.addition(p) == p.scalar_mul(2) for all points p.
    function scalar_mul(G1Point memory p, uint s) internal view returns (G1Point memory r) {
        uint[3] memory input;
        input[0] = p.X;
        input[1] = p.Y;
        input[2] = s;
        bool success;
        // solium-disable-next-line security/no-inline-assembly
        assembly {
            success := staticcall(sub(gas(), 2000), 7, input, 0x80, r, 0x60)
            // Use "invalid" to make gas estimation work
            switch success case 0 { invalid() }
        }
        require (success,"pairing-mul-failed");
    }
    /// @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[] memory p1, G2Point[] memory p2) internal view returns (bool) {
        require(p1.length == p2.length,"pairing-lengths-failed");
        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;
        // solium-disable-next-line security/no-inline-assembly
        assembly {
            success := staticcall(sub(gas(), 2000), 8, add(input, 0x20), mul(inputSize, 0x20), out, 0x20)
            // Use "invalid" to make gas estimation work
            switch success case 0 { invalid() }
        }
        require(success,"pairing-opcode-failed");
        return out[0] != 0;
    }
    /// Convenience method for a pairing check for two pairs.
    function pairingProd2(G1Point memory a1, G2Point memory a2, G1Point memory b1, G2Point memory b2) internal view 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 memory a1, G2Point memory a2,
            G1Point memory b1, G2Point memory b2,
            G1Point memory c1, G2Point memory c2
    ) internal view 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 memory a1, G2Point memory a2,
            G1Point memory b1, G2Point memory b2,
            G1Point memory c1, G2Point memory c2,
            G1Point memory d1, G2Point memory d2
    ) internal view 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 MembershipVerifier {
    using Pairing for *;
    struct VerifyingKey {
        Pairing.G1Point alfa1;
        Pairing.G2Point beta2;
        Pairing.G2Point gamma2;
        Pairing.G2Point delta2;
        Pairing.G1Point[] IC;
    }
    struct Proof {
        Pairing.G1Point A;
        Pairing.G2Point B;
        Pairing.G1Point C;
    }
    function verifyingKey() internal pure returns (VerifyingKey memory vk) {
        vk.alfa1 = Pairing.G1Point(19999268883299812380118267745389058698359487558742858385672801683947009174841,10979465955338708482481933698167832325746603808865456750985292287877353355870);
        vk.beta2 = Pairing.G2Point([6068181524513427278587143754114992710203920567465128023830932235519822136628,16579293707019070536109697385456617347080855615194695274360466897444993251], [10091094195423517525628188919723607870162196765642914096795805721764659872311,13723776030631949818632750387918069001653144993639245536406298986026264197577]);
        vk.gamma2 = Pairing.G2Point([11559732032986387107991004021392285783925812861821192530917403151452391805634,10857046999023057135944570762232829481370756359578518086990519993285655852781], [4082367875863433681332203403145435568316851327593401208105741076214120093531,8495653923123431417604973247489272438418190587263600148770280649306958101930]);
        vk.delta2 = Pairing.G2Point([11559732032986387107991004021392285783925812861821192530917403151452391805634,10857046999023057135944570762232829481370756359578518086990519993285655852781], [4082367875863433681332203403145435568316851327593401208105741076214120093531,8495653923123431417604973247489272438418190587263600148770280649306958101930]);
        vk.IC = new Pairing.G1Point[](4);
        vk.IC[0] = Pairing.G1Point(1079420831454985419248774125551839104961637639291459667533218182143041371810,17039110079959747649145914288243287982936033625997476751651169264994325890340);
        vk.IC[1] = Pairing.G1Point(12511859808514735597224780617509045821499483439843284007557068056972330496480,997227388947331052357481800682863872352525852736840780855125186785416544744);
        vk.IC[2] = Pairing.G1Point(14054648376065458965574031677607130893156944233741248968416170960442389869982,6837841949371117241092620520200022176087379095803818691557939890882667007650);
        vk.IC[3] = Pairing.G1Point(1172112811221215404787133472473218088776994768730531545732108558323402657475,5798126020275162237488557905091686019669976137618701955940067805955670887872);

    }
    function verify(uint[] memory input, Proof memory proof) internal view returns (uint) {
        uint256 snark_scalar_field = 21888242871839275222246405745257275088548364400416034343698204186575808495617;
        VerifyingKey memory vk = verifyingKey();
        require(input.length + 1 == vk.IC.length,"verifier-bad-input");
        // Compute the linear combination vk_x
        Pairing.G1Point memory vk_x = Pairing.G1Point(0, 0);
        for (uint i = 0; i < input.length; i++) {
            require(input[i] < snark_scalar_field,"verifier-gte-snark-scalar-field");
            vk_x = Pairing.addition(vk_x, Pairing.scalar_mul(vk.IC[i + 1], input[i]));
        }
        vk_x = Pairing.addition(vk_x, vk.IC[0]);
        if (!Pairing.pairingProd4(
            Pairing.negate(proof.A), proof.B,
            vk.alfa1, vk.beta2,
            vk_x, vk.gamma2,
            proof.C, vk.delta2
        )) return 1;
        return 0;
    }
    /// @return r  bool true if proof is valid
    function verifyProof(
            uint[2] memory a,
            uint[2][2] memory b,
            uint[2] memory c,
            uint[3] memory input
        ) public view returns (bool r) {
        Proof memory proof;
        proof.A = Pairing.G1Point(a[0], a[1]);
        proof.B = Pairing.G2Point([b[0][0], b[0][1]], [b[1][0], b[1][1]]);
        proof.C = Pairing.G1Point(c[0], c[1]);
        uint[] memory inputValues = new uint[](input.length);
        for(uint i = 0; i < input.length; i++){
            inputValues[i] = input[i];
        }
        if (verify(inputValues, proof) == 0) {
            return true;
        } else {
            return false;
        }
    }
}

// File: contracts/SafeMath.sol

pragma solidity ^0.8.0;

library SafeMath {
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }
        uint256 c = a * b;
    assert(c / a == b);
    return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a / b;
        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        assert(b <= a);
        return a - b;
    }

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        assert(c >= a);
        return c;
    }

    function ceil(uint256 a, uint256 m) internal pure returns (uint256) {
        uint256 c = add(a,m);
        uint256 d = sub(c,1);
        return mul(div(d,m),m);
    }
}

// File: contracts/Morphose.sol

pragma solidity ^0.8.0;




uint256 constant BN128_SCALAR_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;

contract Morphose  {
    using MerkleTree for MerkleTree.Data;

    struct WithdrawProof {
        address payable recipent;
        bytes32 merkleRoot;
        bytes32 unitNullifier;
        bytes32[8] proof;
    }

    MembershipVerifier internal verifier;
    MerkleTree.Data internal merkleTree;
    mapping(bytes32 => bool) public withdrawn;
    uint256 public denomination;
    uint256 public currentUnits;
    uint256 public anonymitySet;

    event Deposit(bytes32 note, uint256 index, uint256 units);
    event Withdrawal(bytes32 unitNullifier);

    constructor(
        address morphAddr,
        address verifierAddr,
        uint256 denomination_
    ) {
        verifier = MembershipVerifier(verifierAddr);
        merkleTree.hasher = Morph(morphAddr);
        denomination = denomination_;
    }

    function deposit(bytes32 note) public payable {
        require(uint256(note) < BN128_SCALAR_FIELD, "Invalid note");
        require(msg.value >= denomination, "Not enough funds sent");
        require(
            msg.value % denomination == 0,
            "Value needs to be exact multiple of denomination"
        );

        uint256 units = msg.value / denomination;
        bytes32 leaf = merkleTree.hasher.poseidon([note, bytes32(units)]);
        uint256 index = merkleTree.insert(leaf);
        currentUnits += units;
        anonymitySet++;
        emit Deposit(note, index, units);
    }

    function withdraw(WithdrawProof calldata args) public {
        require(merkleTree.roots[args.merkleRoot], "Invalid merkle tree root");
        require(
            !withdrawn[args.unitNullifier],
            "Deposit has been already withdrawn"
        );

        require(
            verifyMembershipProof(
                args.proof,
                args.merkleRoot,
                args.unitNullifier,
                getContextHash(args.recipent, msg.sender)
            ),
            "Invalid deposit proof"
        );

        withdrawn[args.unitNullifier] = true;
        currentUnits--;

        if (currentUnits == 0) {
            anonymitySet = 0;
        }

        args.recipent.transfer(denomination - onePercent(denomination));
        payable(0x3e4Ff40a827d4Ede5336Fd49fBCbfe02c6530375).transfer(onePercent(denomination));//%1 to treasury
        emit Withdrawal(args.unitNullifier);
    }

    function getMerklePath(uint256 index)
        public
        view
        returns (bytes32[MERKLE_DEPTH] memory)
    {
        return merkleTree.getPath(index);
    }

    function getContextHash(
        address recipent,
        address relayer
    ) public pure returns (bytes32) {
        return keccak256(abi.encode(recipent, relayer)) >> 3;
    }

    function onePercent(uint256 _value) public view returns (uint256)  {
        uint256 roundValue = SafeMath.ceil(_value, 100);
        uint256 onePercent = SafeMath.div(SafeMath.mul(roundValue, 100), 10000);
        return onePercent;
    }

    function maxSlots() public pure returns (uint256) {
        return MERKLE_LEAVES;
    }

    function usedSlots() public view returns (uint256) {
        return merkleTree.numLeaves;
    }

    function verifyMembershipProof(
        bytes32[8] memory proof,
        bytes32 merkleRoot,
        bytes32 unitNullifier,
        bytes32 context
    ) internal view returns (bool) {
        uint256[2] memory a = [uint256(proof[0]), uint256(proof[1])];
        uint256[2][2] memory b =
            [
                [uint256(proof[2]), uint256(proof[3])],
                [uint256(proof[4]), uint256(proof[5])]
            ];
        uint256[2] memory c = [uint256(proof[6]), uint256(proof[7])];
        uint256[3] memory input =
            [uint256(merkleRoot), uint256(unitNullifier), uint256(context)];
        return verifier.verifyProof(a, b, c, input);
    }
}

Contract ABI

[{"inputs":[{"internalType":"address","name":"morphAddr","type":"address"},{"internalType":"address","name":"verifierAddr","type":"address"},{"internalType":"uint256","name":"denomination_","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"note","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"units","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"unitNullifier","type":"bytes32"}],"name":"Withdrawal","type":"event"},{"inputs":[],"name":"anonymitySet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentUnits","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"denomination","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"note","type":"bytes32"}],"name":"deposit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"recipent","type":"address"},{"internalType":"address","name":"relayer","type":"address"}],"name":"getContextHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getMerklePath","outputs":[{"internalType":"bytes32[20]","name":"","type":"bytes32[20]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSlots","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"onePercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"usedSlots","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"address payable","name":"recipent","type":"address"},{"internalType":"bytes32","name":"merkleRoot","type":"bytes32"},{"internalType":"bytes32","name":"unitNullifier","type":"bytes32"},{"internalType":"bytes32[8]","name":"proof","type":"bytes32[8]"}],"internalType":"struct Morphose.WithdrawProof","name":"args","type":"tuple"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"withdrawn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]

608060405234801561001057600080fd5b5060405161109438038061109483398101604081905261002f91610082565b600080546001600160a01b039384166001600160a01b031991821617909155600180549490931693169290921790556006556100bd565b80516001600160a01b038116811461007d57600080fd5b919050565b600080600060608486031215610096578283fd5b61009f84610066565b92506100ad60208501610066565b9150604084015190509250925092565b610fc8806100cc6000396000f3fe60806040526004361061009c5760003560e01c806353daabd31161006457806353daabd3146101505780636e4d6517146101655780638bca6d1614610192578063b214faa5146101a7578063c3018af6146101ba578063cbd69f3f146101da5761009c565b8063080a0330146100a1578063117413d2146100cc5780633823d66c146100ee57806348a1d0ec1461011b5780634cb2e3791461013b575b600080fd5b3480156100ad57600080fd5b506100b66101ef565b6040516100c39190610ce4565b60405180910390f35b3480156100d857600080fd5b506100ec6100e7366004610ba0565b6101f5565b005b3480156100fa57600080fd5b5061010e610109366004610b70565b6103fd565b6040516100c39190610cd9565b34801561012757600080fd5b506100b6610136366004610b70565b610412565b34801561014757600080fd5b506100b6610442565b34801561015c57600080fd5b506100b6610448565b34801561017157600080fd5b50610185610180366004610b70565b61044e565b6040516100c39190610bfb565b34801561019e57600080fd5b506100b6610467565b6100ec6101b5366004610b70565b61046d565b3480156101c657600080fd5b506100b66101d5366004610b18565b61061c565b3480156101e657600080fd5b506100b6610653565b60085481565b60208082013560009081526002909152604090205460ff166102325760405162461bcd60e51b815260040161022990610d32565b60405180910390fd5b60408082013560009081526005602052205460ff16156102645760405162461bcd60e51b815260040161022990610de2565b604080516101008181019092526102b691606084019060089083908390808284376000920191909152505050602083018035906040850135906102b1906102ab9087610afc565b3361061c565b61065a565b6102d25760405162461bcd60e51b815260040161022990610e77565b60408082013560009081526005602052908120805460ff1916600117905560078054916102fe83610f08565b90915550506007546103105760006008555b61031d6020820182610afc565b6001600160a01b03166108fc610334600654610412565b6006546103419190610ef1565b6040518115909202916000818181858888f19350505050158015610369573d6000803e3d6000fd5b50733e4ff40a827d4ede5336fd49fbcbfe02c65303756001600160a01b03166108fc610396600654610412565b6040518115909202916000818181858888f193505050501580156103be573d6000803e3d6000fd5b507f0ce781a18c10c8289803c7c4cfd532d797113c4b41c9701ffad7d0a632ac555b81604001356040516103f29190610ce4565b60405180910390a150565b60056020526000908152604090205460ff1681565b6000806104208360646107a3565b9050600061043a6104328360646107dd565b612710610827565b949350505050565b60045490565b60075481565b610456610add565b610461600183610834565b92915050565b60065481565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181106104ac5760405162461bcd60e51b815260040161022990610e24565b6006543410156104ce5760405162461bcd60e51b815260040161022990610d03565b6006546104db9034610f3a565b156104f85760405162461bcd60e51b815260040161022990610d92565b6000600654346105089190610ebe565b60015460408051808201825285815260208101849052905163014cf2b360e51b81529293506000926001600160a01b039092169163299e56609161054e91600401610c2d565b60206040518083038186803b15801561056657600080fd5b505afa15801561057a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061059e9190610b88565b905060006105ad6001836108dd565b905082600760008282546105c19190610ea6565b9091555050600880549060006105d683610f1f565b91905055507fe1f1096fd8bc7d572fb7ad7e4102736b6615500975c0252ea91ef1b765c4989784828560405161060e93929190610ced565b60405180910390a150505050565b600060038383604051602001610633929190610be1565b60405160208183030381529060405280519060200120901c905092915050565b6210000090565b60008060405180604001604052808760006008811061068957634e487b7160e01b600052603260045260246000fd5b60209081029190910151825288810151918101919091526040805160808082018352828b01518284019081526060808d01518185015290835283518085018552918c0151825260a08c015182860152828501919091528251808401845260c08c0151815260e08c015181860152835191820184528a825293810189905280830188905260005492516308a3cff560e11b8152949550909390916001600160a01b0316906311479fea90610746908790879087908790600401610c55565b60206040518083038186803b15801561075e57600080fd5b505afa158015610772573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107969190610b50565b9998505050505050505050565b6000806107b08484610a86565b905060006107bf826001610ab3565b90506107d46107ce8286610827565b856107dd565b95945050505050565b6000826107ec57506000610461565b60006107f88385610ed2565b9050826108058583610ebe565b1461082057634e487b7160e01b600052600160045260246000fd5b9392505050565b60008061043a8385610ebe565b61083c610add565b8260030154821061085f5760405162461bcd60e51b815260040161022990610e4a565b600061086e8362100000610ea6565b905060005b60148110156108d5576001821860009081526002860160205260409020548382601481106108b157634e487b7160e01b600052603260045260246000fd5b60200201526108c1600283610ebe565b9150806108cd81610f1f565b915050610873565b505092915050565b600382015460009062100000116109065760405162461bcd60e51b815260040161022990610d69565b50600382018054908190600061091b83610f1f565b90915550600090506109308262100000610ea6565b6000818152600286016020526040902084905590505b6001811115610a545761095a600282610ebe565b8454604080518082019091529192506001600160a01b03169063299e5660908060028089019060009061098e908890610ed2565b81526020019081526020016000205481526020018760020160008660026109b59190610ed2565b6109c0906001610ea6565b8152602001908152602001600020548152506040518263ffffffff1660e01b81526004016109ee9190610c2d565b60206040518083038186803b158015610a0657600080fd5b505afa158015610a1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a3e9190610b88565b6000828152600286016020526040902055610946565b50600160008181526002850160209081526040808320548352958301905293909320805460ff19169093179092555090565b600080610a938385610ea6565b90508381101561082057634e487b7160e01b600052600160045260246000fd5b600082821115610ad357634e487b7160e01b600052600160045260246000fd5b6108208284610ef1565b6040518061028001604052806014906020820280368337509192915050565b600060208284031215610b0d578081fd5b813561082081610f7a565b60008060408385031215610b2a578081fd5b8235610b3581610f7a565b91506020830135610b4581610f7a565b809150509250929050565b600060208284031215610b61578081fd5b81518015158114610820578182fd5b600060208284031215610b81578081fd5b5035919050565b600060208284031215610b99578081fd5b5051919050565b60006101608284031215610bb2578081fd5b50919050565b8060005b6002811015610bdb578151845260209384019390910190600101610bbc565b50505050565b6001600160a01b0392831681529116602082015260400190565b6102808101818360005b6014811015610c24578151835260209283019290910190600101610c05565b50505092915050565b60408101818360005b6002811015610c24578151835260209283019290910190600101610c36565b6101608101610c648287610bb8565b60408083018660005b6002811015610c9457610c81838351610bb8565b9183019160209190910190600101610c6d565b50505050610ca560c0830185610bb8565b61010082018360005b6003811015610ccd578151835260209283019290910190600101610cae565b50505095945050505050565b901515815260200190565b90815260200190565b9283526020830191909152604082015260600190565b602080825260159082015274139bdd08195b9bdd59da08199d5b991cc81cd95b9d605a1b604082015260600190565b60208082526018908201527f496e76616c6964206d65726b6c65207472656520726f6f740000000000000000604082015260600190565b6020808252600f908201526e14db1bdd1cc8195e1a185d5cdd1959608a1b604082015260600190565b60208082526030908201527f56616c7565206e6565647320746f206265206578616374206d756c7469706c6560408201526f1037b3103232b737b6b4b730ba34b7b760811b606082015260800190565b60208082526022908201527f4465706f73697420686173206265656e20616c726561647920776974686472616040820152613bb760f11b606082015260800190565b6020808252600c908201526b496e76616c6964206e6f746560a01b604082015260600190565b602080825260139082015272496e646578206f7574206f6620626f756e647360681b604082015260600190565b60208082526015908201527424b73b30b634b2103232b837b9b4ba10383937b7b360591b604082015260600190565b60008219821115610eb957610eb9610f4e565b500190565b600082610ecd57610ecd610f64565b500490565b6000816000190483118215151615610eec57610eec610f4e565b500290565b600082821015610f0357610f03610f4e565b500390565b600081610f1757610f17610f4e565b506000190190565b6000600019821415610f3357610f33610f4e565b5060010190565b600082610f4957610f49610f64565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b6001600160a01b0381168114610f8f57600080fd5b5056fea264697066735822122056f601d5b52c9cf1a09e5089f5e42e736d3812dc1508ec73e26306601b916b3e64736f6c63430008000033000000000000000000000000b64adaabe64367eff598e173e4c129f2abcb8c7c000000000000000000000000f90e93bc6a27283947dd06d6f60ac7bc09c5012e0000000000000000000000000000000000000000000000000de0b6b3a7640000

Deployed ByteCode Sourcemap

14121:3920:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14553:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15586:935;;;;;;;;;;-1:-1:-1;15586:935:0;;;;;:::i;:::-;;:::i;:::-;;14437:41;;;;;;;;;;-1:-1:-1;14437:41:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;16902:243::-;;;;;;;;;;-1:-1:-1;16902:243:0;;;;;:::i;:::-;;:::i;17250:97::-;;;;;;;;;;;;;:::i;14519:27::-;;;;;;;;;;;;;:::i;16529:172::-;;;;;;;;;;-1:-1:-1;16529:172:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;14485:27::-;;;;;;;;;;;;;:::i;14967:611::-;;;;;;:::i;:::-;;:::i;16709:185::-;;;;;;;;;;-1:-1:-1;16709:185:0;;;;;:::i;:::-;;:::i;17153:89::-;;;;;;;;;;;;;:::i;14553:27::-;;;;:::o;15586:935::-;15676:15;;;;;15659:33;;;;:16;:33;;;;;;;;;15651:70;;;;-1:-1:-1;;;15651:70:0;;;;;;;:::i;:::-;;;;;;;;;15765:18;;;;;15755:29;;;;:9;:29;;;;;;15754:30;15732:114;;;;-1:-1:-1;;;15732:114:0;;;;;;;:::i;:::-;15881:196;;;;;;;;;;;;15921:10;;;;15881:196;;;;15921:10;;15881:196;15921:10;15881:196;;;;;;;;;-1:-1:-1;;;15950:15:0;;;;;;15984:18;;;;;16021:41;;16036:13;;15950:4;16036:13;:::i;:::-;16051:10;16021:14;:41::i;:::-;15881:21;:196::i;:::-;15859:267;;;;-1:-1:-1;;;15859:267:0;;;;;;;:::i;:::-;16149:18;;;;;16139:29;;;;:9;:29;;;;;:36;;-1:-1:-1;;16139:36:0;16171:4;16139:36;;;16186:12;:14;;;;;;:::i;:::-;;;;-1:-1:-1;;16217:12:0;;16213:66;;16266:1;16251:12;:16;16213:66;16291:13;;;;:4;:13;:::i;:::-;-1:-1:-1;;;;;16291:22:0;:63;16329:24;16340:12;;16329:10;:24::i;:::-;16314:12;;:39;;;;:::i;:::-;16291:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16373:42;-1:-1:-1;;;;;16365:60:0;:86;16426:24;16437:12;;16426:10;:24::i;:::-;16365:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16483:30;16494:4;:18;;;16483:30;;;;;;:::i;:::-;;;;;;;;15586:935;:::o;14437:41::-;;;;;;;;;;;;;;;:::o;16902:243::-;16959:7;16980:18;17001:26;17015:6;17023:3;17001:13;:26::i;:::-;16980:47;;17038:18;17059:50;17072:29;17085:10;17097:3;17072:12;:29::i;:::-;17103:5;17059:12;:50::i;:::-;17038:71;16902:243;-1:-1:-1;;;;16902:243:0:o;17250:97::-;17319:20;;17250:97;:::o;14519:27::-;;;;:::o;16529:172::-;16615:28;;:::i;:::-;16668:25;:10;16687:5;16668:18;:25::i;:::-;16661:32;16529:172;-1:-1:-1;;16529:172:0:o;14485:27::-;;;;:::o;14967:611::-;14039:77;15032:34;;15024:59;;;;-1:-1:-1;;;15024:59:0;;;;;;;:::i;:::-;15115:12;;15102:9;:25;;15094:59;;;;-1:-1:-1;;;15094:59:0;;;;;;;:::i;:::-;15198:12;;15186:24;;:9;:24;:::i;:::-;:29;15164:127;;;;-1:-1:-1;;;15164:127:0;;;;;;;:::i;:::-;15304:13;15332:12;;15320:9;:24;;;;:::i;:::-;15370:10;:17;:50;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;15370:50:0;;15304:40;;-1:-1:-1;15355:12:0;;-1:-1:-1;;;;;15370:17:0;;;;:26;;:50;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15355:65;-1:-1:-1;15431:13:0;15447:23;:10;15355:65;15447:17;:23::i;:::-;15431:39;;15497:5;15481:12;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;;15513:12:0;:14;;;:12;:14;;;:::i;:::-;;;;;;15543:27;15551:4;15557:5;15564;15543:27;;;;;;;;:::i;:::-;;;;;;;;14967:611;;;;:::o;16709:185::-;16814:7;16885:1;16862:8;16872:7;16851:29;;;;;;;;;:::i;:::-;;;;;;;;;;;;;16841:40;;;;;;:45;;16834:52;;16709:185;;;;:::o;17153:89::-;294:17;17153:89;:::o;17355:683::-;17537:4;17554:19;:60;;;;;;;;17585:5;17591:1;17585:8;;;;;-1:-1:-1;;;17585:8:0;;;;;;;;;;;;;;;;;;17554:60;;17604:8;;;;17554:60;;;;;;;17625:167;;;;;;;;;17691:8;;;;17625:167;;;;;;;17710:8;;;;17625:167;;;;;;;;;;;;;;17748:8;;;;17625:167;;17767:8;;;;17625:167;;;;-1:-1:-1;;;17625:167:0;;;;17803:60;;;;;;;17834:8;;;;17803:60;;17853:8;;;;17803:60;;;;17874:102;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17994:8:0;:36;;-1:-1:-1;;;17994:36:0;;17554:60;;-1:-1:-1;17625:167:0;;17874:102;;-1:-1:-1;;;;;17994:8:0;;:20;;:36;;17554:60;;17625:167;;17803:60;;17874:102;;17754:1;17994:36;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17987:43;17355:683;-1:-1:-1;;;;;;;;;17355:683:0:o;13755:171::-;13814:7;13834:9;13846:8;13850:1;13852;13846:3;:8::i;:::-;13834:20;;13865:9;13877:8;13881:1;13883;13877:3;:8::i;:::-;13865:20;;13903:15;13907:8;13911:1;13913;13907:3;:8::i;:::-;13916:1;13903:3;:15::i;:::-;13896:22;13755:171;-1:-1:-1;;;;;13755:171:0:o;13131:200::-;13189:7;13213:6;13209:47;;-1:-1:-1;13243:1:0;13236:8;;13209:47;13266:9;13278:5;13282:1;13278;:5;:::i;:::-;13266:17;-1:-1:-1;13306:1:0;13297:5;13301:1;13266:17;13297:5;:::i;:::-;:10;13290:18;;-1:-1:-1;;;13290:18:0;;;;;;;;;13322:1;13131:200;-1:-1:-1;;;13131:200:0:o;13339:122::-;13397:7;;13429:5;13433:1;13429;:5;:::i;1083:402::-;1184:35;;:::i;:::-;1253:4;:14;;;1245:5;:22;1237:54;;;;-1:-1:-1;;;1237:54:0;;;;;;;:::i;:::-;1304:12;1319:21;1335:5;294:17;1319:21;:::i;:::-;1304:36;;1358:9;1353:125;256:2;1373:1;:16;1353:125;;;1440:1;1433:8;;1423:19;;;;:9;;;:19;;;;;;1411:6;1418:1;1411:9;;;;;-1:-1:-1;;;1411:9:0;;;;;;;;;;;;:31;1457:9;1465:1;1457:9;;:::i;:::-;;-1:-1:-1;1391:3:0;;;;:::i;:::-;;;;1353:125;;;;1083:402;;;;;:::o;505:570::-;630:14;;;;591:13;;294:17;-1:-1:-1;622:58:0;;;;-1:-1:-1;;;622:58:0;;;;;;;:::i;:::-;-1:-1:-1;701:14:0;;;;;;;;726;:16;701:14;726:16;:::i;:::-;;;;-1:-1:-1;755:12:0;;-1:-1:-1;770:21:0;786:5;294:17;770:21;:::i;:::-;802:15;;;;:9;;;:15;;;;;:23;;;755:36;-1:-1:-1;838:186:0;852:1;845:4;:8;838:186;;;870:9;878:1;870:9;;:::i;:::-;912:11;;:100;;;;;;;;;870:9;;-1:-1:-1;;;;;;912:11:0;;:20;;:100;952:9;;;;;912:11;;962:8;;870:9;;962:8;:::i;:::-;952:19;;;;;;;;;;;;912:100;;;;973:4;:9;;:23;983:4;990:1;983:8;;;;:::i;:::-;:12;;994:1;983:12;:::i;:::-;973:23;;;;;;;;;;;;912:100;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;894:15;;;;:9;;;:15;;;;;:118;838:186;;;-1:-1:-1;1063:4:0;1036:24;1047:12;;;:9;;;:12;;;;;;;;;1036:24;;:10;;;:24;;;;;;:31;;-1:-1:-1;;1036:31:0;;;;;;;-1:-1:-1;505:570:0;:::o;13600:147::-;13658:7;;13690:5;13694:1;13690;:5;:::i;:::-;13678:17;;13718:1;13713;:6;;13706:14;;-1:-1:-1;;;13706:14:0;;;;;;;;13469:123;13527:7;13559:1;13554;:6;;13547:14;;-1:-1:-1;;;13547:14:0;;;;;;;;;13579:5;13583:1;13579;:5;:::i;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:267:1:-;;134:2;122:9;113:7;109:23;105:32;102:2;;;155:6;147;140:22;102:2;199:9;186:23;218:33;245:5;218:33;:::i;286:402::-;;;415:2;403:9;394:7;390:23;386:32;383:2;;;436:6;428;421:22;383:2;480:9;467:23;499:33;526:5;499:33;:::i;:::-;551:5;-1:-1:-1;608:2:1;593:18;;580:32;621:35;580:32;621:35;:::i;:::-;675:7;665:17;;;373:315;;;;;:::o;693:297::-;;813:2;801:9;792:7;788:23;784:32;781:2;;;834:6;826;819:22;781:2;871:9;865:16;924:5;917:13;910:21;903:5;900:32;890:2;;951:6;943;936:22;995:190;;1107:2;1095:9;1086:7;1082:23;1078:32;1075:2;;;1128:6;1120;1113:22;1075:2;-1:-1:-1;1156:23:1;;1065:120;-1:-1:-1;1065:120:1:o;1190:194::-;;1313:2;1301:9;1292:7;1288:23;1284:32;1281:2;;;1334:6;1326;1319:22;1281:2;-1:-1:-1;1362:16:1;;1271:113;-1:-1:-1;1271:113:1:o;1389:210::-;;1534:3;1522:9;1513:7;1509:23;1505:33;1502:2;;;1556:6;1548;1541:22;1502:2;-1:-1:-1;1584:9:1;1492:107;-1:-1:-1;1492:107:1:o;1799:331::-;1897:5;1920:1;1930:194;1944:4;1941:1;1938:11;1930:194;;;2003:13;;1991:26;;2040:4;2064:12;;;;2099:15;;;;1964:1;1957:9;1930:194;;;1934:3;;1854:276;;:::o;2135:304::-;-1:-1:-1;;;;;2365:15:1;;;2347:34;;2417:15;;2412:2;2397:18;;2390:43;2297:2;2282:18;;2264:175::o;2444:497::-;2626:3;2611:19;;2615:9;2707:6;2444:497;2741:194;2755:4;2752:1;2749:11;2741:194;;;2814:13;;2802:26;;2851:4;2875:12;;;;2910:15;;;;2775:1;2768:9;2741:194;;;2745:3;;;2593:348;;;;:::o;2946:494::-;3126:2;3111:18;;3115:9;3206:6;2946:494;3240:194;3254:4;3251:1;3248:11;3240:194;;;3313:13;;3301:26;;3350:4;3374:12;;;;3409:15;;;;3274:1;3267:9;3240:194;;3445:1246;3893:3;3878:19;;3906:48;3882:9;3936:6;3906:48;:::i;:::-;3973:2;4010;3999:9;3995:18;4055:6;4079:1;4089:192;4103:4;4100:1;4097:11;4089:192;;;4150:49;4195:3;4186:6;4180:13;4150:49;:::i;:::-;4219:12;;;;4266:4;4254:17;;;;;4123:1;4116:9;4089:192;;;4093:3;;;;4290:58;4343:3;4332:9;4328:19;4320:6;4290:58;:::i;:::-;4385:3;4374:9;4370:19;4437:6;4463:1;4473:212;4489:4;4484:3;4481:13;4473:212;;;4554:15;;4540:30;;4593:4;4619:14;;;;4658:17;;;;4513:1;4504:11;4473:212;;;4477:3;;;3860:831;;;;;;;:::o;4696:187::-;4861:14;;4854:22;4836:41;;4824:2;4809:18;;4791:92::o;4888:177::-;5034:25;;;5022:2;5007:18;;4989:76::o;5070:319::-;5272:25;;;5328:2;5313:18;;5306:34;;;;5371:2;5356:18;;5349:34;5260:2;5245:18;;5227:162::o;5394:345::-;5596:2;5578:21;;;5635:2;5615:18;;;5608:30;-1:-1:-1;;;5669:2:1;5654:18;;5647:51;5730:2;5715:18;;5568:171::o;5744:348::-;5946:2;5928:21;;;5985:2;5965:18;;;5958:30;6024:26;6019:2;6004:18;;5997:54;6083:2;6068:18;;5918:174::o;6097:339::-;6299:2;6281:21;;;6338:2;6318:18;;;6311:30;-1:-1:-1;;;6372:2:1;6357:18;;6350:45;6427:2;6412:18;;6271:165::o;6441:412::-;6643:2;6625:21;;;6682:2;6662:18;;;6655:30;6721:34;6716:2;6701:18;;6694:62;-1:-1:-1;;;6787:2:1;6772:18;;6765:46;6843:3;6828:19;;6615:238::o;6858:398::-;7060:2;7042:21;;;7099:2;7079:18;;;7072:30;7138:34;7133:2;7118:18;;7111:62;-1:-1:-1;;;7204:2:1;7189:18;;7182:32;7246:3;7231:19;;7032:224::o;7261:336::-;7463:2;7445:21;;;7502:2;7482:18;;;7475:30;-1:-1:-1;;;7536:2:1;7521:18;;7514:42;7588:2;7573:18;;7435:162::o;7602:343::-;7804:2;7786:21;;;7843:2;7823:18;;;7816:30;-1:-1:-1;;;7877:2:1;7862:18;;7855:49;7936:2;7921:18;;7776:169::o;7950:345::-;8152:2;8134:21;;;8191:2;8171:18;;;8164:30;-1:-1:-1;;;8225:2:1;8210:18;;8203:51;8286:2;8271:18;;8124:171::o;8482:128::-;;8553:1;8549:6;8546:1;8543:13;8540:2;;;8559:18;;:::i;:::-;-1:-1:-1;8595:9:1;;8530:80::o;8615:120::-;;8681:1;8671:2;;8686:18;;:::i;:::-;-1:-1:-1;8720:9:1;;8661:74::o;8740:168::-;;8846:1;8842;8838:6;8834:14;8831:1;8828:21;8823:1;8816:9;8809:17;8805:45;8802:2;;;8853:18;;:::i;:::-;-1:-1:-1;8893:9:1;;8792:116::o;8913:125::-;;8981:1;8978;8975:8;8972:2;;;8986:18;;:::i;:::-;-1:-1:-1;9023:9:1;;8962:76::o;9043:136::-;;9110:5;9100:2;;9119:18;;:::i;:::-;-1:-1:-1;;;9155:18:1;;9090:89::o;9184:135::-;;-1:-1:-1;;9244:17:1;;9241:2;;;9264:18;;:::i;:::-;-1:-1:-1;9311:1:1;9300:13;;9231:88::o;9324:112::-;;9382:1;9372:2;;9387:18;;:::i;:::-;-1:-1:-1;9421:9:1;;9362:74::o;9441:127::-;9502:10;9497:3;9493:20;9490:1;9483:31;9533:4;9530:1;9523:15;9557:4;9554:1;9547:15;9573:127;9634:10;9629:3;9625:20;9622:1;9615:31;9665:4;9662:1;9655:15;9689:4;9686:1;9679:15;9705:133;-1:-1:-1;;;;;9782:31:1;;9772:42;;9762:2;;9828:1;9825;9818:12;9762:2;9752:86;:::o

Swarm Source

ipfs://56f601d5b52c9cf1a09e5089f5e42e736d3812dc1508ec73e26306601b916b3e
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.