Contract 0x333fe38C163eCC897bD2AE2cA2615659b6576661

 

Contract Overview

Balance:
18 BNB

BNB Value:
$5,297.76 (@ $294.32/BNB)

Token:
Txn Hash
Block
From
To
Value [Txn Fee]
0xda18eccb42d0b594bf90942e18f2b187f46d86ee52faae6163877edc31d11c1e85463732021-06-23 11:53:193 hrs 48 mins ago0xb7ec233b3141e74e6a9afc7460aeff24cabe3bde IN  0x333fe38c163ecc897bd2ae2ca2615659b65766611 BNB0.004595625
0xe2c1f1e121b3f5d4b74145e2fe699c1a6a454f60a8c48bae50df7cb9f29bdd9e85433392021-06-23 9:21:006 hrs 21 mins ago0xa45c06fc1ac77b2aebb8645230965b298d3164b1 IN  0x333fe38c163ecc897bd2ae2ca2615659b65766612 BNB0.004445625
0xc9db7bfaca610c140632f0acd90011debb50083d794d0375cd62f923fdacdc1e85375612021-06-23 4:30:3211 hrs 11 mins ago0xb7ec233b3141e74e6a9afc7460aeff24cabe3bde IN  0x333fe38c163ecc897bd2ae2ca2615659b65766611 BNB0.004520565
0x3951d4099c2d47770cb32ee53696eba42e05647e897a3b0c2d302120015f30a685363822021-06-23 3:31:3512 hrs 10 mins ago0xfc47915b52e9540132aa147ee0da10e010c69405 IN  0x333fe38c163ecc897bd2ae2ca2615659b65766610 BNB0.001553005
0xc721c5eb2534c56fe473ea66da96a2b929809d1cb67a15cc4ef23581e30e89b385363512021-06-23 3:30:0212 hrs 12 mins ago0xf951e470d2ac904f0434d64f2c2814b8cdd21782 IN  0x333fe38c163ecc897bd2ae2ca2615659b65766610 BNB0.001552885
0x2de45c464e01618e632a523a723da98e191db7b90818c5df6358231620fa7cef85252192021-06-22 18:08:4921 hrs 33 mins ago0x659ab4a34de7e42def908818e714152da95cba8c IN  0x333fe38c163ecc897bd2ae2ca2615659b65766611 BNB0.004445625
0x17360c4b5fdce99669891deca688d8207091ba9b590b15c1de63737d7bc46b2585164742021-06-22 10:47:091 day 4 hrs ago0x659ab4a34de7e42def908818e714152da95cba8c IN  0x333fe38c163ecc897bd2ae2ca2615659b65766611 BNB0.004670565
0x69a28be4b11f44aec151bf4e0f1de82f168c8bb8b880f78f6c43898015a6945785146572021-06-22 9:16:121 day 6 hrs ago0x02be8199db17336ccb2cce579bebc87a41b931f5 IN  0x333fe38c163ecc897bd2ae2ca2615659b65766610 BNB0.001553065
0xdbb9123c60b603ab2851284393edf12f64abc3b9def2bad4b95a7d3562ed57f685146352021-06-22 9:15:061 day 6 hrs ago0x159522726dab244f16c321a729569cff63ae8801 IN  0x333fe38c163ecc897bd2ae2ca2615659b65766610 BNB0.001553065
0xefac4a03a154703ca9988a65f45787e1a5032b2a6638ce656daa6708af3372be85146242021-06-22 9:14:331 day 6 hrs ago0x159522726dab244f16c321a729569cff63ae8801 IN  0x333fe38c163ecc897bd2ae2ca2615659b65766610 BNB0.001553065
0xb10ea9d277491a942bbc9b42903bed87e0183510242339f8f2be7b10df95545485145942021-06-22 9:13:031 day 6 hrs ago0x159522726dab244f16c321a729569cff63ae8801 IN  0x333fe38c163ecc897bd2ae2ca2615659b65766610 BNB0.001552885
0x012db8ef002cdb6d885c5d639501e16d6ec0275bd53f1e74dd712792e1e349e485133772021-06-22 8:11:481 day 7 hrs ago0x159522726dab244f16c321a729569cff63ae8801 IN  0x333fe38c163ecc897bd2ae2ca2615659b65766611 BNB0.004445625
0xd4ac187941c35192d5cc69a61eed16dae40c11637d0cc92c8ea5855fb29627e785076932021-06-22 3:26:011 day 12 hrs ago0x3d9baaf49367b17128c3b32197997be3d7cbac1a IN  0x333fe38c163ecc897bd2ae2ca2615659b65766611 BNB0.004520625
0xfb5a7f9919476f1ba32116c18a55193e08a5dbc7f100d71f676096186177812685031422021-06-21 23:37:191 day 16 hrs ago0x6e7a651517f449f540daba7a39d2c7da9c5584ce IN  0x333fe38c163ecc897bd2ae2ca2615659b65766619 BNB0.004445625
0x65b090659eae9be3962a8be3f2daba1c08639d4fd052d32e5b65d83c34f356de84989012021-06-21 20:03:501 day 19 hrs ago0x7be66beedce5ff9c712f0773f6123746b45400ac IN  0x333fe38c163ecc897bd2ae2ca2615659b65766610 BNB0.001552945
0x2d3d2d3f5d81517ff47a17bb02d5abf9ea8c7d4dbdfa0017165175c52809a99984988932021-06-21 20:03:261 day 19 hrs ago0x7be66beedce5ff9c712f0773f6123746b45400ac IN  0x333fe38c163ecc897bd2ae2ca2615659b65766610 BNB0.001553005
0x59c0ee2bf83c235d1248c54378eda60672109841c4b945d05d1a5192618c2c9c84988842021-06-21 20:02:591 day 19 hrs ago0x7be66beedce5ff9c712f0773f6123746b45400ac IN  0x333fe38c163ecc897bd2ae2ca2615659b65766610 BNB0.001552885
0xbc44e80bfd0e0c9380039eeeadc198675cb59aa183de60e765986897e620787d84988732021-06-21 20:02:261 day 19 hrs ago0x7be66beedce5ff9c712f0773f6123746b45400ac IN  0x333fe38c163ecc897bd2ae2ca2615659b65766610 BNB0.001552885
0xe91a504ab0950c06e28c26989bcb61342d53b434f362292724ce6403bd3747c184988592021-06-21 20:01:441 day 19 hrs ago0x7be66beedce5ff9c712f0773f6123746b45400ac IN  0x333fe38c163ecc897bd2ae2ca2615659b65766610 BNB0.001552825
0xaeb2cd0aa69cb40c662a0aea14443d5497b99a67dfa0f705ebaec76b3082a9f884987882021-06-21 19:58:111 day 19 hrs ago0x7be66beedce5ff9c712f0773f6123746b45400ac IN  0x333fe38c163ecc897bd2ae2ca2615659b65766610 BNB0.001553005
0xf288702e2e9f885f931c44ebd3de419ff5b0523ee130c2c7120d1395824973dd84987172021-06-21 19:54:381 day 19 hrs ago0x0b1924da33974a705f8ed2afcbf24b41278aed9e IN  0x333fe38c163ecc897bd2ae2ca2615659b65766610 BNB0.001553065
0xa3c8d27724270090321af326aa3a9ecc05c0902f2dec4dc3ca6fbce9628beb7284862502021-06-21 9:29:092 days 6 hrs ago0x3d9baaf49367b17128c3b32197997be3d7cbac1a IN  0x333fe38c163ecc897bd2ae2ca2615659b65766611 BNB0.004595625
0x0e77a7d8118a769afcc0b7469cebc46fea1fc64f4cd38d5dd702ec1c70a745a284807182021-06-21 4:52:162 days 10 hrs ago0x045d1ebf45f78ad65d7bb244851a59391a04cd93 IN  0x333fe38c163ecc897bd2ae2ca2615659b65766611 BNB0.004445625
0xc78699dee46542b3fad9bf50400a28f4c21edd724079de7ba73bb07ab971882884804072021-06-21 4:36:432 days 11 hrs ago0xfff3d263d0df185d1e8793c4d87fd6e47a27f040 IN  0x333fe38c163ecc897bd2ae2ca2615659b65766610 BNB0.001552945
0xf08f8bb96d3001bf6bc6b9c3a3e1dfdce3d1160db296990c35cf0ed30b8babd984804012021-06-21 4:36:252 days 11 hrs ago0xfff3d263d0df185d1e8793c4d87fd6e47a27f040 IN  0x333fe38c163ecc897bd2ae2ca2615659b65766610 BNB0.001553065
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x3951d4099c2d47770cb32ee53696eba42e05647e897a3b0c2d302120015f30a685363822021-06-23 3:31:3512 hrs 10 mins ago 0x333fe38c163ecc897bd2ae2ca2615659b65766610x3e4ff40a827d4ede5336fd49fbcbfe02c65303750.01 BNB
0x3951d4099c2d47770cb32ee53696eba42e05647e897a3b0c2d302120015f30a685363822021-06-23 3:31:3512 hrs 10 mins ago 0x333fe38c163ecc897bd2ae2ca2615659b65766610xfc47915b52e9540132aa147ee0da10e010c694050.99 BNB
0xc721c5eb2534c56fe473ea66da96a2b929809d1cb67a15cc4ef23581e30e89b385363512021-06-23 3:30:0212 hrs 12 mins ago 0x333fe38c163ecc897bd2ae2ca2615659b65766610x3e4ff40a827d4ede5336fd49fbcbfe02c65303750.01 BNB
0xc721c5eb2534c56fe473ea66da96a2b929809d1cb67a15cc4ef23581e30e89b385363512021-06-23 3:30:0212 hrs 12 mins ago 0x333fe38c163ecc897bd2ae2ca2615659b65766610xf951e470d2ac904f0434d64f2c2814b8cdd217820.99 BNB
0x69a28be4b11f44aec151bf4e0f1de82f168c8bb8b880f78f6c43898015a6945785146572021-06-22 9:16:121 day 6 hrs ago 0x333fe38c163ecc897bd2ae2ca2615659b65766610x3e4ff40a827d4ede5336fd49fbcbfe02c65303750.01 BNB
0x69a28be4b11f44aec151bf4e0f1de82f168c8bb8b880f78f6c43898015a6945785146572021-06-22 9:16:121 day 6 hrs ago 0x333fe38c163ecc897bd2ae2ca2615659b65766610x02be8199db17336ccb2cce579bebc87a41b931f50.99 BNB
0xdbb9123c60b603ab2851284393edf12f64abc3b9def2bad4b95a7d3562ed57f685146352021-06-22 9:15:061 day 6 hrs ago 0x333fe38c163ecc897bd2ae2ca2615659b65766610x3e4ff40a827d4ede5336fd49fbcbfe02c65303750.01 BNB
0xdbb9123c60b603ab2851284393edf12f64abc3b9def2bad4b95a7d3562ed57f685146352021-06-22 9:15:061 day 6 hrs ago 0x333fe38c163ecc897bd2ae2ca2615659b65766610x159522726dab244f16c321a729569cff63ae88010.99 BNB
0xefac4a03a154703ca9988a65f45787e1a5032b2a6638ce656daa6708af3372be85146242021-06-22 9:14:331 day 6 hrs ago 0x333fe38c163ecc897bd2ae2ca2615659b65766610x3e4ff40a827d4ede5336fd49fbcbfe02c65303750.01 BNB
0xefac4a03a154703ca9988a65f45787e1a5032b2a6638ce656daa6708af3372be85146242021-06-22 9:14:331 day 6 hrs ago 0x333fe38c163ecc897bd2ae2ca2615659b65766610x159522726dab244f16c321a729569cff63ae88010.99 BNB
0xb10ea9d277491a942bbc9b42903bed87e0183510242339f8f2be7b10df95545485145942021-06-22 9:13:031 day 6 hrs ago 0x333fe38c163ecc897bd2ae2ca2615659b65766610x3e4ff40a827d4ede5336fd49fbcbfe02c65303750.01 BNB
0xb10ea9d277491a942bbc9b42903bed87e0183510242339f8f2be7b10df95545485145942021-06-22 9:13:031 day 6 hrs ago 0x333fe38c163ecc897bd2ae2ca2615659b65766610x159522726dab244f16c321a729569cff63ae88010.99 BNB
0x65b090659eae9be3962a8be3f2daba1c08639d4fd052d32e5b65d83c34f356de84989012021-06-21 20:03:501 day 19 hrs ago 0x333fe38c163ecc897bd2ae2ca2615659b65766610x3e4ff40a827d4ede5336fd49fbcbfe02c65303750.01 BNB
0x65b090659eae9be3962a8be3f2daba1c08639d4fd052d32e5b65d83c34f356de84989012021-06-21 20:03:501 day 19 hrs ago 0x333fe38c163ecc897bd2ae2ca2615659b65766610x7be66beedce5ff9c712f0773f6123746b45400ac0.99 BNB
0x2d3d2d3f5d81517ff47a17bb02d5abf9ea8c7d4dbdfa0017165175c52809a99984988932021-06-21 20:03:261 day 19 hrs ago 0x333fe38c163ecc897bd2ae2ca2615659b65766610x3e4ff40a827d4ede5336fd49fbcbfe02c65303750.01 BNB
0x2d3d2d3f5d81517ff47a17bb02d5abf9ea8c7d4dbdfa0017165175c52809a99984988932021-06-21 20:03:261 day 19 hrs ago 0x333fe38c163ecc897bd2ae2ca2615659b65766610x7be66beedce5ff9c712f0773f6123746b45400ac0.99 BNB
0x59c0ee2bf83c235d1248c54378eda60672109841c4b945d05d1a5192618c2c9c84988842021-06-21 20:02:591 day 19 hrs ago 0x333fe38c163ecc897bd2ae2ca2615659b65766610x3e4ff40a827d4ede5336fd49fbcbfe02c65303750.01 BNB
0x59c0ee2bf83c235d1248c54378eda60672109841c4b945d05d1a5192618c2c9c84988842021-06-21 20:02:591 day 19 hrs ago 0x333fe38c163ecc897bd2ae2ca2615659b65766610x7be66beedce5ff9c712f0773f6123746b45400ac0.99 BNB
0xbc44e80bfd0e0c9380039eeeadc198675cb59aa183de60e765986897e620787d84988732021-06-21 20:02:261 day 19 hrs ago 0x333fe38c163ecc897bd2ae2ca2615659b65766610x3e4ff40a827d4ede5336fd49fbcbfe02c65303750.01 BNB
0xbc44e80bfd0e0c9380039eeeadc198675cb59aa183de60e765986897e620787d84988732021-06-21 20:02:261 day 19 hrs ago 0x333fe38c163ecc897bd2ae2ca2615659b65766610x7be66beedce5ff9c712f0773f6123746b45400ac0.99 BNB
0xe91a504ab0950c06e28c26989bcb61342d53b434f362292724ce6403bd3747c184988592021-06-21 20:01:441 day 19 hrs ago 0x333fe38c163ecc897bd2ae2ca2615659b65766610x3e4ff40a827d4ede5336fd49fbcbfe02c65303750.01 BNB
0xe91a504ab0950c06e28c26989bcb61342d53b434f362292724ce6403bd3747c184988592021-06-21 20:01:441 day 19 hrs ago 0x333fe38c163ecc897bd2ae2ca2615659b65766610x7be66beedce5ff9c712f0773f6123746b45400ac0.99 BNB
0xaeb2cd0aa69cb40c662a0aea14443d5497b99a67dfa0f705ebaec76b3082a9f884987882021-06-21 19:58:111 day 19 hrs ago 0x333fe38c163ecc897bd2ae2ca2615659b65766610x3e4ff40a827d4ede5336fd49fbcbfe02c65303750.01 BNB
0xaeb2cd0aa69cb40c662a0aea14443d5497b99a67dfa0f705ebaec76b3082a9f884987882021-06-21 19:58:111 day 19 hrs ago 0x333fe38c163ecc897bd2ae2ca2615659b65766610x7be66beedce5ff9c712f0773f6123746b45400ac0.99 BNB
0xf288702e2e9f885f931c44ebd3de419ff5b0523ee130c2c7120d1395824973dd84987172021-06-21 19:54:381 day 19 hrs ago 0x333fe38c163ecc897bd2ae2ca2615659b65766610x3e4ff40a827d4ede5336fd49fbcbfe02c65303750.01 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

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

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

000000000000000000000000b64adaabe64367eff598e173e4c129f2abcb8c7c000000000000000000000000f90e93bc6a27283947dd06d6f60ac7bc09c5012e0000000000000000000000000000000000000000000000000de0b6b3a7640000

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000b64adaabe64367eff598e173e4c129f2abcb8c7c
Arg [1] : 000000000000000000000000f90e93bc6a27283947dd06d6f60ac7bc09c5012e
Arg [2] : 0000000000000000000000000000000000000000000000000de0b6b3a7640000


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.