Contract 0x15d8c1c08e20a911c37C2B3D6dD3de20Cf80eC21

 

Contract Overview

Balance:
40 BNB

BNB Value:
$12,088.40 (@ $302.21/BNB)

Token:
Txn Hash
Block
From
To
Value [Txn Fee]
0x22beaea4c8dca98df4ad52aa44381ae45d505570b1b2d0a347f7a9862fa3370d85433232021-06-23 9:20:125 hrs 35 mins ago0xc6b08eb747c2ccbb6024f2a5d192c0994b603f78 IN  0x15d8c1c08e20a911c37c2b3d6dd3de20cf80ec2110 BNB0.004445625
0x312cbd3719368dfddf819461c87b84dc967d5c92a7e3340bb81f404d1515157885363952021-06-23 3:32:1411 hrs 23 mins ago0xfc47915b52e9540132aa147ee0da10e010c69405 IN  0x15d8c1c08e20a911c37c2b3d6dd3de20cf80ec210 BNB0.001553065
0xde8259f1d9a59d778c2e70c0e830a93e80489c05afc83948447fe2e27d0fbe0985363622021-06-23 3:30:3511 hrs 24 mins ago0xf951e470d2ac904f0434d64f2c2814b8cdd21782 IN  0x15d8c1c08e20a911c37c2b3d6dd3de20cf80ec210 BNB0.001552945
0x05e3b2856942761b5b71bdb7fcef18c6e9a6fa65830f6bc1dc53fb715cd6bbdd85197362021-06-22 13:32:231 day 1 hr ago0x659ab4a34de7e42def908818e714152da95cba8c IN  0x15d8c1c08e20a911c37c2b3d6dd3de20cf80ec2110 BNB0.004520625
0x4d4c7c446a05aac4d935376afa004fcec098a0eb31a0ace1c286c7d022200ce985134052021-06-22 8:13:121 day 6 hrs ago0x045d1ebf45f78ad65d7bb244851a59391a04cd93 IN  0x15d8c1c08e20a911c37c2b3d6dd3de20cf80ec2110 BNB0.004445625
0x66644546c6b102a4f239e63e478f76504958cd3fea07c15e52b064e6ea4a595b85057032021-06-22 1:46:171 day 13 hrs ago0xd0e7e8b80d50ffcbfacd0efcb8cb803e5705648b IN  0x15d8c1c08e20a911c37c2b3d6dd3de20cf80ec2130 BNB0.004745625
0xe93e34c9100170a47123b7818ee987e8f2d889c14423d3e9517e20ab4f4790ad84803912021-06-21 4:35:552 days 10 hrs ago0xfff3d263d0df185d1e8793c4d87fd6e47a27f040 IN  0x15d8c1c08e20a911c37c2b3d6dd3de20cf80ec210 BNB0.001427915
0xe6d1fad4dfa78ca6becad648eb1580de058f1e8c47c80a4eef88d21b73ba8b3884803472021-06-21 4:33:432 days 10 hrs ago0xd265b4b0bc74034caf8b1fe15dcf9bd84d50a7f1 IN  0x15d8c1c08e20a911c37c2b3d6dd3de20cf80ec210 BNB0.001552765
0x853c823bd37f1dc41f1223c809d29caef59d4f4ecea71897ed777708baa1069984681572021-06-20 18:23:562 days 20 hrs ago0x3acb32046a77a504d53e2520841ed741899e5aa5 IN  0x15d8c1c08e20a911c37c2b3d6dd3de20cf80ec2110 BNB0.004445625
0x110bcd4373db07fac1fc80c592d416b6697030ea5e8b655dd9759c9949748edd84551862021-06-20 7:34:233 days 7 hrs ago0x3acb32046a77a504d53e2520841ed741899e5aa5 IN  0x15d8c1c08e20a911c37c2b3d6dd3de20cf80ec2110 BNB0.004670625
0x855a749cda2501c7af4bd3d0bac599c37639125e9c4817a798a4bca842f68c6884551022021-06-20 7:30:113 days 7 hrs ago0xa07dc592967082229ce2205d013f6de33e1bcd3f IN  0x15d8c1c08e20a911c37c2b3d6dd3de20cf80ec210 BNB0.001427975
0x11f061a3248a4b09a659e63158f650adde6076ec1e885dde64d8d082b62c1d6d84337802021-06-19 13:38:424 days 1 hr ago0x2dbf9d48e75c63391c79ea7d05cf5f45c5830cbd IN  0x15d8c1c08e20a911c37c2b3d6dd3de20cf80ec2110 BNB0.004595565
0xa5266cb0978c11cf3ece790e7eb08772d890a5b374b85fe1dbe99aabaa61e5ee84232892021-06-19 4:49:344 days 10 hrs ago0x2dbf9d48e75c63391c79ea7d05cf5f45c5830cbd IN  0x15d8c1c08e20a911c37c2b3d6dd3de20cf80ec210 BNB0.001428035
0x00c7bedcf14f250ac1536d07bc105a402201f64a6eca31a5a95affddde3cdf8583991982021-06-18 8:34:055 days 6 hrs ago0x638ac2286d667353ed8740ab4532d90a71e6bf14 IN  0x15d8c1c08e20a911c37c2b3d6dd3de20cf80ec2110 BNB0.004895625
0x1471a0aae29222a907a334dde6c8f7e5bab788d2ac90fa3d948294a382cbb91383941252021-06-18 4:18:255 days 10 hrs ago0xa740d5923fb4917b7b36288fad436d965731442b IN  0x15d8c1c08e20a911c37c2b3d6dd3de20cf80ec210 BNB0.001427975
0x955ff0abfa8160247638f5397bb2b9d23852399ef924ac24cd2b05e67778bfe083925392021-06-18 2:57:485 days 11 hrs ago0xf4a6c618819bf71c9b9e2e35bfa0673b2a235566 IN  0x15d8c1c08e20a911c37c2b3d6dd3de20cf80ec210 BNB0.001552825
0xd9a0a464b4a22ef200e052fef655b198e6b7aeeebe964248651588aecedcecfb83719142021-06-17 9:36:586 days 5 hrs ago0xa7bedf398f9511ce8319009364c40c8a17a53eb2 IN  0x15d8c1c08e20a911c37c2b3d6dd3de20cf80ec2110 BNB0.004445625
0x3bb1a292969287d080ca6391efc4a5496b9bd0abd445fb63d368c0dae88b6b8083649372021-06-17 3:43:316 days 11 hrs ago0xa7bedf398f9511ce8319009364c40c8a17a53eb2 IN  0x15d8c1c08e20a911c37c2b3d6dd3de20cf80ec210 BNB0.001552885
0xcffc2848152d4dfc8ae9be2b78e92231b78defad2274f03c8fbc96514a27f2ec83648772021-06-17 3:40:316 days 11 hrs ago0x487303450c2da2a3ef834a63c0c96d07477db1bf IN  0x15d8c1c08e20a911c37c2b3d6dd3de20cf80ec210 BNB0.001552945
0xb130e51a7538bd7f6ca9a0dc5a32f4679d3075e49d7b828d91cb8b093447058b83533392021-06-16 18:01:336 days 20 hrs ago0xa45c06fc1ac77b2aebb8645230965b298d3164b1 IN  0x15d8c1c08e20a911c37c2b3d6dd3de20cf80ec2110 BNB0.004520505
0x81dd6a69472801352f387fdc3ef3b886792261180fee14fff64e153f0babfa8583451382021-06-16 11:08:277 days 3 hrs ago0xc48515df69e6bce4088a9200befd4ece3d431ea1 IN  0x15d8c1c08e20a911c37c2b3d6dd3de20cf80ec2110 BNB0.004445625
0xd09f18b63ab6e41f4aa7f9ecad1391a7e1bd055e8be2295a660416fe646f1d3a83375472021-06-16 4:45:597 days 10 hrs ago0x96842b61d23744cd622462e9d90956ee8ef23f43 IN  0x15d8c1c08e20a911c37c2b3d6dd3de20cf80ec210 BNB0.001553065
0x0f2184863a361d6b926d86290e83a656c61d08222938796bb5b81c5d88e1251883374422021-06-16 4:40:447 days 10 hrs ago0x9e97522e96432bc9e55c473b036e6d00a9c333db IN  0x15d8c1c08e20a911c37c2b3d6dd3de20cf80ec210 BNB0.001552945
0x24fbea958c48538c31dc8b82c825e02ff3d1f972584b448e66dedd590b57476d83239392021-06-15 17:19:327 days 21 hrs ago0x32873e6763e95fa3c896836fca0f5f19e1ee378b IN  0x15d8c1c08e20a911c37c2b3d6dd3de20cf80ec2110 BNB0.004595625
0x93e0d36ff0b6385de389898dae0cef70b2fedf462aeedf249283f86132796cc583149012021-06-15 9:37:368 days 5 hrs ago0x12a9f9fe215bfd1ce912394c3695443ac5281e7f IN  0x15d8c1c08e20a911c37c2b3d6dd3de20cf80ec2110 BNB0.004445625
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x312cbd3719368dfddf819461c87b84dc967d5c92a7e3340bb81f404d1515157885363952021-06-23 3:32:1411 hrs 23 mins ago 0x15d8c1c08e20a911c37c2b3d6dd3de20cf80ec210x3e4ff40a827d4ede5336fd49fbcbfe02c65303750.1 BNB
0x312cbd3719368dfddf819461c87b84dc967d5c92a7e3340bb81f404d1515157885363952021-06-23 3:32:1411 hrs 23 mins ago 0x15d8c1c08e20a911c37c2b3d6dd3de20cf80ec210xfc47915b52e9540132aa147ee0da10e010c694059.9 BNB
0xde8259f1d9a59d778c2e70c0e830a93e80489c05afc83948447fe2e27d0fbe0985363622021-06-23 3:30:3511 hrs 24 mins ago 0x15d8c1c08e20a911c37c2b3d6dd3de20cf80ec210x3e4ff40a827d4ede5336fd49fbcbfe02c65303750.1 BNB
0xde8259f1d9a59d778c2e70c0e830a93e80489c05afc83948447fe2e27d0fbe0985363622021-06-23 3:30:3511 hrs 24 mins ago 0x15d8c1c08e20a911c37c2b3d6dd3de20cf80ec210xf951e470d2ac904f0434d64f2c2814b8cdd217829.9 BNB
0xe93e34c9100170a47123b7818ee987e8f2d889c14423d3e9517e20ab4f4790ad84803912021-06-21 4:35:552 days 10 hrs ago 0x15d8c1c08e20a911c37c2b3d6dd3de20cf80ec210x3e4ff40a827d4ede5336fd49fbcbfe02c65303750.1 BNB
0xe93e34c9100170a47123b7818ee987e8f2d889c14423d3e9517e20ab4f4790ad84803912021-06-21 4:35:552 days 10 hrs ago 0x15d8c1c08e20a911c37c2b3d6dd3de20cf80ec210xfff3d263d0df185d1e8793c4d87fd6e47a27f0409.9 BNB
0xe6d1fad4dfa78ca6becad648eb1580de058f1e8c47c80a4eef88d21b73ba8b3884803472021-06-21 4:33:432 days 10 hrs ago 0x15d8c1c08e20a911c37c2b3d6dd3de20cf80ec210x3e4ff40a827d4ede5336fd49fbcbfe02c65303750.1 BNB
0xe6d1fad4dfa78ca6becad648eb1580de058f1e8c47c80a4eef88d21b73ba8b3884803472021-06-21 4:33:432 days 10 hrs ago 0x15d8c1c08e20a911c37c2b3d6dd3de20cf80ec210xd265b4b0bc74034caf8b1fe15dcf9bd84d50a7f19.9 BNB
0x855a749cda2501c7af4bd3d0bac599c37639125e9c4817a798a4bca842f68c6884551022021-06-20 7:30:113 days 7 hrs ago 0x15d8c1c08e20a911c37c2b3d6dd3de20cf80ec210x3e4ff40a827d4ede5336fd49fbcbfe02c65303750.1 BNB
0x855a749cda2501c7af4bd3d0bac599c37639125e9c4817a798a4bca842f68c6884551022021-06-20 7:30:113 days 7 hrs ago 0x15d8c1c08e20a911c37c2b3d6dd3de20cf80ec210xa07dc592967082229ce2205d013f6de33e1bcd3f9.9 BNB
0xa5266cb0978c11cf3ece790e7eb08772d890a5b374b85fe1dbe99aabaa61e5ee84232892021-06-19 4:49:344 days 10 hrs ago 0x15d8c1c08e20a911c37c2b3d6dd3de20cf80ec210x3e4ff40a827d4ede5336fd49fbcbfe02c65303750.1 BNB
0xa5266cb0978c11cf3ece790e7eb08772d890a5b374b85fe1dbe99aabaa61e5ee84232892021-06-19 4:49:344 days 10 hrs ago 0x15d8c1c08e20a911c37c2b3d6dd3de20cf80ec210x2dbf9d48e75c63391c79ea7d05cf5f45c5830cbd9.9 BNB
0x1471a0aae29222a907a334dde6c8f7e5bab788d2ac90fa3d948294a382cbb91383941252021-06-18 4:18:255 days 10 hrs ago 0x15d8c1c08e20a911c37c2b3d6dd3de20cf80ec210x3e4ff40a827d4ede5336fd49fbcbfe02c65303750.1 BNB
0x1471a0aae29222a907a334dde6c8f7e5bab788d2ac90fa3d948294a382cbb91383941252021-06-18 4:18:255 days 10 hrs ago 0x15d8c1c08e20a911c37c2b3d6dd3de20cf80ec210xa740d5923fb4917b7b36288fad436d965731442b9.9 BNB
0x955ff0abfa8160247638f5397bb2b9d23852399ef924ac24cd2b05e67778bfe083925392021-06-18 2:57:485 days 11 hrs ago 0x15d8c1c08e20a911c37c2b3d6dd3de20cf80ec210x3e4ff40a827d4ede5336fd49fbcbfe02c65303750.1 BNB
0x955ff0abfa8160247638f5397bb2b9d23852399ef924ac24cd2b05e67778bfe083925392021-06-18 2:57:485 days 11 hrs ago 0x15d8c1c08e20a911c37c2b3d6dd3de20cf80ec210xf4a6c618819bf71c9b9e2e35bfa0673b2a2355669.9 BNB
0x3bb1a292969287d080ca6391efc4a5496b9bd0abd445fb63d368c0dae88b6b8083649372021-06-17 3:43:316 days 11 hrs ago 0x15d8c1c08e20a911c37c2b3d6dd3de20cf80ec210x3e4ff40a827d4ede5336fd49fbcbfe02c65303750.1 BNB
0x3bb1a292969287d080ca6391efc4a5496b9bd0abd445fb63d368c0dae88b6b8083649372021-06-17 3:43:316 days 11 hrs ago 0x15d8c1c08e20a911c37c2b3d6dd3de20cf80ec210xa7bedf398f9511ce8319009364c40c8a17a53eb29.9 BNB
0xcffc2848152d4dfc8ae9be2b78e92231b78defad2274f03c8fbc96514a27f2ec83648772021-06-17 3:40:316 days 11 hrs ago 0x15d8c1c08e20a911c37c2b3d6dd3de20cf80ec210x3e4ff40a827d4ede5336fd49fbcbfe02c65303750.1 BNB
0xcffc2848152d4dfc8ae9be2b78e92231b78defad2274f03c8fbc96514a27f2ec83648772021-06-17 3:40:316 days 11 hrs ago 0x15d8c1c08e20a911c37c2b3d6dd3de20cf80ec210x487303450c2da2a3ef834a63c0c96d07477db1bf9.9 BNB
0xd09f18b63ab6e41f4aa7f9ecad1391a7e1bd055e8be2295a660416fe646f1d3a83375472021-06-16 4:45:597 days 10 hrs ago 0x15d8c1c08e20a911c37c2b3d6dd3de20cf80ec210x3e4ff40a827d4ede5336fd49fbcbfe02c65303750.1 BNB
0xd09f18b63ab6e41f4aa7f9ecad1391a7e1bd055e8be2295a660416fe646f1d3a83375472021-06-16 4:45:597 days 10 hrs ago 0x15d8c1c08e20a911c37c2b3d6dd3de20cf80ec210x96842b61d23744cd622462e9d90956ee8ef23f439.9 BNB
0x0f2184863a361d6b926d86290e83a656c61d08222938796bb5b81c5d88e1251883374422021-06-16 4:40:447 days 10 hrs ago 0x15d8c1c08e20a911c37c2b3d6dd3de20cf80ec210x3e4ff40a827d4ede5336fd49fbcbfe02c65303750.1 BNB
0x0f2184863a361d6b926d86290e83a656c61d08222938796bb5b81c5d88e1251883374422021-06-16 4:40:447 days 10 hrs ago 0x15d8c1c08e20a911c37c2b3d6dd3de20cf80ec210x9e97522e96432bc9e55c473b036e6d00a9c333db9.9 BNB
0x54c824d083a37f1febdef23d987c2b58a38869223fe0f92d51f2d33d4594676883096052021-06-15 5:09:038 days 9 hrs ago 0x15d8c1c08e20a911c37c2b3d6dd3de20cf80ec210x3e4ff40a827d4ede5336fd49fbcbfe02c65303750.1 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.