Contract 0x333fe38c163ecc897bd2ae2ca2615659b6576661

 

Contract Overview

Balance:
15 BNB

BNB Value:
$4,889.78 (@ $325.99/BNB)

Token:
Txn Hash
Block
From
To
Value [Txn Fee]
0xa28293a656193b0fe621bac8e2aa1f2c4ec6ebc9e65d58c34ce0ad647f67d92984639652021-06-20 14:54:2040 mins ago0x78e4a2e0e2c62717016a7c0bc238ca50638721af IN  0x333fe38c163ecc897bd2ae2ca2615659b65766611 BNB0.004745625
0x608bbd24e561c14ad85ebe182313195a01f824815c42ab5e8afc96156a9bb6cc84582232021-06-20 10:07:135 hrs 28 mins ago0x3acb32046a77a504d53e2520841ed741899e5aa5 IN  0x333fe38c163ecc897bd2ae2ca2615659b65766611 BNB0.004445625
0x70f8f10144f6d5a5529b9a861b2abcb7e89d6b900e25e9257c7973cd1c4406b984551252021-06-20 7:31:208 hrs 3 mins ago0xa07dc592967082229ce2205d013f6de33e1bcd3f IN  0x333fe38c163ecc897bd2ae2ca2615659b65766610 BNB0.001552945
0x9b7f051bf177456901ea2924016baaf816f84434f368827309da0eb17a9a8e5084551172021-06-20 7:30:568 hrs 4 mins ago0xa07dc592967082229ce2205d013f6de33e1bcd3f IN  0x333fe38c163ecc897bd2ae2ca2615659b65766610 BNB0.001553005
0x511248640e7651f31834e70559a8616de0cf98b77ec4c758b31a9151762e711284551102021-06-20 7:30:358 hrs 4 mins ago0xa07dc592967082229ce2205d013f6de33e1bcd3f IN  0x333fe38c163ecc897bd2ae2ca2615659b65766610 BNB0.001552945
0x01aa50f3da8a009b4e0a55284c63640cda478f510170d24cd2f5df5ef488910b84526792021-06-20 5:29:0210 hrs 6 mins ago0x0a0782aaed2060859286b7abf2c29c442a664f59 IN  0x333fe38c163ecc897bd2ae2ca2615659b65766611 BNB0.004520625
0x671c0320958d4f894feef9f5c68f6d5de5557e1a07d121efd1d7d4eec11c600484409592021-06-19 19:42:3419 hrs 52 mins ago0xc08bc0f766bc3684fa451b69aaa3babf9c882645 IN  0x333fe38c163ecc897bd2ae2ca2615659b65766610 BNB0.001553005
0xce96c1bbe2ed12c2797054e3c3c64fa8ae704aa8ca89d92dc5bd7d3c08839bb584393262021-06-19 18:20:4221 hrs 14 mins ago0x8b87501bb52f27cf6ff169f958eff4888f0dcbbf IN  0x333fe38c163ecc897bd2ae2ca2615659b65766611 BNB0.004445625
0x5b579de359479670acb0d1d03b8160b511773dff9aadbbef5ca07884d4b101be84380622021-06-19 17:17:1222 hrs 18 mins ago0xc08bc0f766bc3684fa451b69aaa3babf9c882645 IN  0x333fe38c163ecc897bd2ae2ca2615659b65766610 BNB0.001552945
0xd58f5f0d76d49f6e092a6a104fe5eb89b862df1989cf4b4fa7cef53636ac200d84380342021-06-19 17:15:4822 hrs 19 mins ago0xc08bc0f766bc3684fa451b69aaa3babf9c882645 IN  0x333fe38c163ecc897bd2ae2ca2615659b65766610 BNB0.001552945
0xd927fecbd760cc74f4f613cf0853fd740716ba1562782f55fc810278e979653184300912021-06-19 10:30:431 day 5 hrs ago0x0a0782aaed2060859286b7abf2c29c442a664f59 IN  0x333fe38c163ecc897bd2ae2ca2615659b65766611 BNB0.004595625
0xee201bfa273584a3a7c5f352a45a459b86969ea68c8d50f63b69a8e2658cd49384251012021-06-19 6:20:301 day 9 hrs ago0x2dbf9d48e75c63391c79ea7d05cf5f45c5830cbd IN  0x333fe38c163ecc897bd2ae2ca2615659b65766611 BNB0.004445625
0x70b7caaaa1ee7a5611f0d5fb27b0cb6b7eb83542834f2b9f5b2775f8d502b54584233922021-06-19 4:54:431 day 10 hrs ago0x1e0a843c774f7a4cd96d5ac35e5fc3d8587f5dfc IN  0x333fe38c163ecc897bd2ae2ca2615659b65766610 BNB0.001553005
0xef87f105e96ab70511e8a5b83b1a40b5e24977478c64a241d9156ed8aac36c9984233582021-06-19 4:53:011 day 10 hrs ago0x1e0a843c774f7a4cd96d5ac35e5fc3d8587f5dfc IN  0x333fe38c163ecc897bd2ae2ca2615659b65766610 BNB0.001552885
0x55cbb286781777f832ed03b2eb251f4f1d541da1a3da1ef5b0c472131fbfe4ad84233502021-06-19 4:52:371 day 10 hrs ago0x1e0a843c774f7a4cd96d5ac35e5fc3d8587f5dfc IN  0x333fe38c163ecc897bd2ae2ca2615659b65766610 BNB0.001553005
0xe966cc9bc37d4fe39d4933df61ba6aec913ff98bb9ee0487c1f10156fdbf939584233402021-06-19 4:52:071 day 10 hrs ago0x1e0a843c774f7a4cd96d5ac35e5fc3d8587f5dfc IN  0x333fe38c163ecc897bd2ae2ca2615659b65766610 BNB0.001553005
0xdf0afa345eb839acc0eb07132f5fd88cf869c25f7d9cd5dad671a54f88c4fc5b84233122021-06-19 4:50:431 day 10 hrs ago0x2dbf9d48e75c63391c79ea7d05cf5f45c5830cbd IN  0x333fe38c163ecc897bd2ae2ca2615659b65766610 BNB0.001552885
0x2d0618c6c55666b1c881daf35e58c0fc3ea15ec4f2f261aecf2b4dc1e25fba6184232992021-06-19 4:50:041 day 10 hrs ago0x2dbf9d48e75c63391c79ea7d05cf5f45c5830cbd IN  0x333fe38c163ecc897bd2ae2ca2615659b65766610 BNB0.001553065
0xcc95b4bbbfed6a84ca1191f729ce6381221bc1179f607c6f92b04a6dbab3c60084147762021-06-18 21:39:041 day 17 hrs ago0xa740d5923fb4917b7b36288fad436d965731442b IN  0x333fe38c163ecc897bd2ae2ca2615659b65766611 BNB0.004520625
0xc33898527e3a40c7f6ef469208270362fdce782185b5634ffa3a4a4dce71c3b484113112021-06-18 18:44:401 day 20 hrs ago0xb7ec233b3141e74e6a9afc7460aeff24cabe3bde IN  0x333fe38c163ecc897bd2ae2ca2615659b65766612 BNB0.004445565
0xb3fe819ac6dc662eb749635ab9887f247748996271fc1d2e0ef49530b647b38384102352021-06-18 17:49:491 day 21 hrs ago0x054cdd6e56b24b689d5b65e585f30f7a93ad5dab IN  0x333fe38c163ecc897bd2ae2ca2615659b65766610 BNB0.001553065
0x4c1c513dfcd4ae62b753c6d5d983986b2a141c0b37f62c25af2cde9d33cf1ade84101122021-06-18 17:43:401 day 21 hrs ago0x64dd0d1ca9d5216f379e6efd69f1f031b03439de IN  0x333fe38c163ecc897bd2ae2ca2615659b65766613 BNB0.004670625
0xe24ee5cf5be02db1cf2f4556528192c986e20ff541ca4f943dedfca33002200f84057862021-06-18 14:05:382 days 1 hr ago0xb7ec233b3141e74e6a9afc7460aeff24cabe3bde IN  0x333fe38c163ecc897bd2ae2ca2615659b65766611 BNB0.004445625
0xfa2568e788604341eb65f9902f357be02defe7f8114d1a36a34ce2be3b75ae8c83991802021-06-18 8:33:112 days 7 hrs ago0x638ac2286d667353ed8740ab4532d90a71e6bf14 IN  0x333fe38c163ecc897bd2ae2ca2615659b65766611 BNB0.004520565
0x7bb25364866d1a9efac47c38b1f3345f9bb8b92df5d863c961af9fe933c6191683952992021-06-18 5:17:512 days 10 hrs ago0x638ac2286d667353ed8740ab4532d90a71e6bf14 IN  0x333fe38c163ecc897bd2ae2ca2615659b65766611 BNB0.004445625
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x70f8f10144f6d5a5529b9a861b2abcb7e89d6b900e25e9257c7973cd1c4406b984551252021-06-20 7:31:208 hrs 3 mins ago 0x333fe38c163ecc897bd2ae2ca2615659b65766610x3e4ff40a827d4ede5336fd49fbcbfe02c65303750.01 BNB
0x70f8f10144f6d5a5529b9a861b2abcb7e89d6b900e25e9257c7973cd1c4406b984551252021-06-20 7:31:208 hrs 3 mins ago 0x333fe38c163ecc897bd2ae2ca2615659b65766610xa07dc592967082229ce2205d013f6de33e1bcd3f0.99 BNB
0x9b7f051bf177456901ea2924016baaf816f84434f368827309da0eb17a9a8e5084551172021-06-20 7:30:568 hrs 4 mins ago 0x333fe38c163ecc897bd2ae2ca2615659b65766610x3e4ff40a827d4ede5336fd49fbcbfe02c65303750.01 BNB
0x9b7f051bf177456901ea2924016baaf816f84434f368827309da0eb17a9a8e5084551172021-06-20 7:30:568 hrs 4 mins ago 0x333fe38c163ecc897bd2ae2ca2615659b65766610xa07dc592967082229ce2205d013f6de33e1bcd3f0.99 BNB
0x511248640e7651f31834e70559a8616de0cf98b77ec4c758b31a9151762e711284551102021-06-20 7:30:358 hrs 4 mins ago 0x333fe38c163ecc897bd2ae2ca2615659b65766610x3e4ff40a827d4ede5336fd49fbcbfe02c65303750.01 BNB
0x511248640e7651f31834e70559a8616de0cf98b77ec4c758b31a9151762e711284551102021-06-20 7:30:358 hrs 4 mins ago 0x333fe38c163ecc897bd2ae2ca2615659b65766610xa07dc592967082229ce2205d013f6de33e1bcd3f0.99 BNB
0x671c0320958d4f894feef9f5c68f6d5de5557e1a07d121efd1d7d4eec11c600484409592021-06-19 19:42:3419 hrs 52 mins ago 0x333fe38c163ecc897bd2ae2ca2615659b65766610x3e4ff40a827d4ede5336fd49fbcbfe02c65303750.01 BNB
0x671c0320958d4f894feef9f5c68f6d5de5557e1a07d121efd1d7d4eec11c600484409592021-06-19 19:42:3419 hrs 52 mins ago 0x333fe38c163ecc897bd2ae2ca2615659b65766610xc08bc0f766bc3684fa451b69aaa3babf9c8826450.99 BNB
0x5b579de359479670acb0d1d03b8160b511773dff9aadbbef5ca07884d4b101be84380622021-06-19 17:17:1222 hrs 18 mins ago 0x333fe38c163ecc897bd2ae2ca2615659b65766610x3e4ff40a827d4ede5336fd49fbcbfe02c65303750.01 BNB
0x5b579de359479670acb0d1d03b8160b511773dff9aadbbef5ca07884d4b101be84380622021-06-19 17:17:1222 hrs 18 mins ago 0x333fe38c163ecc897bd2ae2ca2615659b65766610xc08bc0f766bc3684fa451b69aaa3babf9c8826450.99 BNB
0xd58f5f0d76d49f6e092a6a104fe5eb89b862df1989cf4b4fa7cef53636ac200d84380342021-06-19 17:15:4822 hrs 19 mins ago 0x333fe38c163ecc897bd2ae2ca2615659b65766610x3e4ff40a827d4ede5336fd49fbcbfe02c65303750.01 BNB
0xd58f5f0d76d49f6e092a6a104fe5eb89b862df1989cf4b4fa7cef53636ac200d84380342021-06-19 17:15:4822 hrs 19 mins ago 0x333fe38c163ecc897bd2ae2ca2615659b65766610xc08bc0f766bc3684fa451b69aaa3babf9c8826450.99 BNB
0x70b7caaaa1ee7a5611f0d5fb27b0cb6b7eb83542834f2b9f5b2775f8d502b54584233922021-06-19 4:54:431 day 10 hrs ago 0x333fe38c163ecc897bd2ae2ca2615659b65766610x3e4ff40a827d4ede5336fd49fbcbfe02c65303750.01 BNB
0x70b7caaaa1ee7a5611f0d5fb27b0cb6b7eb83542834f2b9f5b2775f8d502b54584233922021-06-19 4:54:431 day 10 hrs ago 0x333fe38c163ecc897bd2ae2ca2615659b65766610x1e0a843c774f7a4cd96d5ac35e5fc3d8587f5dfc0.99 BNB
0xef87f105e96ab70511e8a5b83b1a40b5e24977478c64a241d9156ed8aac36c9984233582021-06-19 4:53:011 day 10 hrs ago 0x333fe38c163ecc897bd2ae2ca2615659b65766610x3e4ff40a827d4ede5336fd49fbcbfe02c65303750.01 BNB
0xef87f105e96ab70511e8a5b83b1a40b5e24977478c64a241d9156ed8aac36c9984233582021-06-19 4:53:011 day 10 hrs ago 0x333fe38c163ecc897bd2ae2ca2615659b65766610x1e0a843c774f7a4cd96d5ac35e5fc3d8587f5dfc0.99 BNB
0x55cbb286781777f832ed03b2eb251f4f1d541da1a3da1ef5b0c472131fbfe4ad84233502021-06-19 4:52:371 day 10 hrs ago 0x333fe38c163ecc897bd2ae2ca2615659b65766610x3e4ff40a827d4ede5336fd49fbcbfe02c65303750.01 BNB
0x55cbb286781777f832ed03b2eb251f4f1d541da1a3da1ef5b0c472131fbfe4ad84233502021-06-19 4:52:371 day 10 hrs ago 0x333fe38c163ecc897bd2ae2ca2615659b65766610x1e0a843c774f7a4cd96d5ac35e5fc3d8587f5dfc0.99 BNB
0xe966cc9bc37d4fe39d4933df61ba6aec913ff98bb9ee0487c1f10156fdbf939584233402021-06-19 4:52:071 day 10 hrs ago 0x333fe38c163ecc897bd2ae2ca2615659b65766610x3e4ff40a827d4ede5336fd49fbcbfe02c65303750.01 BNB
0xe966cc9bc37d4fe39d4933df61ba6aec913ff98bb9ee0487c1f10156fdbf939584233402021-06-19 4:52:071 day 10 hrs ago 0x333fe38c163ecc897bd2ae2ca2615659b65766610x1e0a843c774f7a4cd96d5ac35e5fc3d8587f5dfc0.99 BNB
0xdf0afa345eb839acc0eb07132f5fd88cf869c25f7d9cd5dad671a54f88c4fc5b84233122021-06-19 4:50:431 day 10 hrs ago 0x333fe38c163ecc897bd2ae2ca2615659b65766610x3e4ff40a827d4ede5336fd49fbcbfe02c65303750.01 BNB
0xdf0afa345eb839acc0eb07132f5fd88cf869c25f7d9cd5dad671a54f88c4fc5b84233122021-06-19 4:50:431 day 10 hrs ago 0x333fe38c163ecc897bd2ae2ca2615659b65766610x2dbf9d48e75c63391c79ea7d05cf5f45c5830cbd0.99 BNB
0x2d0618c6c55666b1c881daf35e58c0fc3ea15ec4f2f261aecf2b4dc1e25fba6184232992021-06-19 4:50:041 day 10 hrs ago 0x333fe38c163ecc897bd2ae2ca2615659b65766610x3e4ff40a827d4ede5336fd49fbcbfe02c65303750.01 BNB
0x2d0618c6c55666b1c881daf35e58c0fc3ea15ec4f2f261aecf2b4dc1e25fba6184232992021-06-19 4:50:041 day 10 hrs ago 0x333fe38c163ecc897bd2ae2ca2615659b65766610x2dbf9d48e75c63391c79ea7d05cf5f45c5830cbd0.99 BNB
0xb3fe819ac6dc662eb749635ab9887f247748996271fc1d2e0ef49530b647b38384102352021-06-18 17:49:491 day 21 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.