Contract 0x60a8AD8470189033789c1053B0c6F89eB27Bca18

 

Contract Overview

Balance:
0 BNB

BNB Value:
$0.00

Token:
Txn Hash
Block
From
To
Value [Txn Fee]
0xe88d89c3b1109fe434d983996b04253ec063f0e06a64c2d53b1685a2517a9af184682312021-06-20 18:27:384 mins ago0x5db5286cec9a28d76feb4ee22e0722e6a6912b22 IN  0x60a8ad8470189033789c1053b0c6f89eb27bca180 BNB0.001356
0x803f703412f7aba96bbc65126dd27249701e45682cbfc819bd847015fe8045a384682282021-06-20 18:27:294 mins ago0x5db5286cec9a28d76feb4ee22e0722e6a6912b22 IN  0x60a8ad8470189033789c1053b0c6f89eb27bca180 BNB0.001662512
0x80f6606f81ede26af0beaa624b52be63bdb7319b1bbf512b3850431f2c913aaa84682212021-06-20 18:27:084 mins ago0xde9507c0acc8e4828b2999abe5058c27df940677 IN  0x60a8ad8470189033789c1053b0c6f89eb27bca180 BNB0.000822135
0x303777b1a28c981d4725f3b428edae5a8f9f7b74e0cc9ea59da599775d07729c84682122021-06-20 18:26:415 mins ago0x6dce215f5d0209bee096fb5147c423344d10553b IN  0x60a8ad8470189033789c1053b0c6f89eb27bca180 BNB0.001017575
0x46005605f41b77eb00196c114fe6e53f72f96ff2312225bfbb2ea6e14865922784682102021-06-20 18:26:355 mins ago0xde9507c0acc8e4828b2999abe5058c27df940677 IN  0x60a8ad8470189033789c1053b0c6f89eb27bca180 BNB0.000818035
0x41440ac941124b884d11fa0bac3b2e8462462ff686896a4089289ccae72aa82084681932021-06-20 18:25:445 mins ago0xde9507c0acc8e4828b2999abe5058c27df940677 IN  0x60a8ad8470189033789c1053b0c6f89eb27bca180 BNB0.000825895
0x2ff7bb24a31eebd492d7d76674ccfc7aa9449b22f6517dcf2f1a6b63180245b584681882021-06-20 18:25:296 mins ago0xde9507c0acc8e4828b2999abe5058c27df940677 IN  0x60a8ad8470189033789c1053b0c6f89eb27bca180 BNB0.000826425
0xe0654d0b7ae337b38aedd1581e72fd8887d17d02e8a424aebf1bbaef237e32a484681782021-06-20 18:24:596 mins ago0xde9507c0acc8e4828b2999abe5058c27df940677 IN  0x60a8ad8470189033789c1053b0c6f89eb27bca180 BNB0.000826375
0x9c98f65be931c6ad82b6fe815655b29342f3a3b398423e72ce35494a0d08bd7e84681692021-06-20 18:24:327 mins ago0xde9507c0acc8e4828b2999abe5058c27df940677 IN  0x60a8ad8470189033789c1053b0c6f89eb27bca180 BNB0.000741305
0x146e7c456b9af526a171660ab7aea24da5a885334718ae52a7eed4c235e241ee84681582021-06-20 18:23:597 mins ago0xde9507c0acc8e4828b2999abe5058c27df940677 IN  0x60a8ad8470189033789c1053b0c6f89eb27bca180 BNB0.000901045
0xf51ab134d86efea05bc045c07463d41aec523383bfe743c5355c7eac5eb24ed684681352021-06-20 18:22:508 mins ago0xde9507c0acc8e4828b2999abe5058c27df940677 IN  0x60a8ad8470189033789c1053b0c6f89eb27bca180 BNB0.000149595
0x411eca94640fb78f31e0bae98cfc915f79ad9037b2272b7840761ab642f6672984681332021-06-20 18:22:448 mins ago0xde9507c0acc8e4828b2999abe5058c27df940677 IN  0x60a8ad8470189033789c1053b0c6f89eb27bca180 BNB0.00135466
0xb59c1f1c2603e3b24d467ad3059e56bae888fc671a17cfa09b04b9a11875661984675792021-06-20 17:55:0236 mins ago0x2b4cd4dac21d79b802ed19e7b21b863520d17d77 IN  0x60a8ad8470189033789c1053b0c6f89eb27bca180 BNB0.00103894
0xf0c91387621a31bd61de573b73e38c18c414a6e370de73134041d25b4422cad184669072021-06-20 17:21:261 hr 10 mins ago0x0056d1fd2ca3c0f3a7b6ed6cdd1f1f104b4bf9a9 IN  0x60a8ad8470189033789c1053b0c6f89eb27bca180 BNB0.001017565
0x2c41acb7c4ad725c27627a87e132e90c67a948fad2c45184c5dfcf37c7e41e7484664872021-06-20 17:00:261 hr 31 mins ago0x4bf1fbc233cd6109c35a4cd9d34540173af3234c IN  0x60a8ad8470189033789c1053b0c6f89eb27bca180 BNB0.001092515
0x22a3b3e0fee51fb43762fa51241460aa5c5aac1dd8a40dfa1d2337482fb2e22b84664852021-06-20 17:00:201 hr 31 mins ago0x4bf1fbc233cd6109c35a4cd9d34540173af3234c IN  0x60a8ad8470189033789c1053b0c6f89eb27bca180 BNB0.000185365
0xf14ffff6d8ac37b2e4bc3a74ebe065eb2d537a4fc7e674aeba09ad85db33f73984660702021-06-20 16:39:351 hr 52 mins ago0x6b5422143e8abdf03db19c6058de007d27465bd3 IN  0x60a8ad8470189033789c1053b0c6f89eb27bca180 BNB0.00084776
0x8a40bd706b1bf3faf423cb51cf75484ccb3fd442ea8b7bc0181c0cf04d8d3d8384658432021-06-20 16:28:142 hrs 3 mins ago0xda106baeecefd4c94f7d7d11a4f8be492e5d265b IN  0x60a8ad8470189033789c1053b0c6f89eb27bca180 BNB0.00132627
0x0a4c123c724d7acd9a0998782dc9ff2d64df58c06fb7d71ad05c872af0a81b9684657382021-06-20 16:22:592 hrs 8 mins ago0x5eb7cc8e0e3d58c0f947da314ae539ce5ede0b70 IN  0x60a8ad8470189033789c1053b0c6f89eb27bca180 BNB0.000826305
0x763be09928ebf08905dfc57c80447f5c9374a53ff661f262f1ff33330bd6b7de84657322021-06-20 16:22:412 hrs 9 mins ago0x5eb7cc8e0e3d58c0f947da314ae539ce5ede0b70 IN  0x60a8ad8470189033789c1053b0c6f89eb27bca180 BNB0.000825995
0xaf325bf3881b3b402f3a1118cccd72ee50f95bb49a29cbf5ecf4a1d2bd6e295c84656272021-06-20 16:17:262 hrs 14 mins ago0xbd9e322303fa0ee764d8efb497ca4b81589a281a IN  0x60a8ad8470189033789c1053b0c6f89eb27bca180 BNB0.0013303
0xfbcfd3ef1fb8442730723f2964cccb3af7baca23bea8b00a4d21760516ba6ae684654052021-06-20 16:06:202 hrs 25 mins ago0x1e288e549159a69303faef2df4ddf4dc1d2c9478 IN  0x60a8ad8470189033789c1053b0c6f89eb27bca180 BNB0.001017675
0xa6ce1f748c6a9d40055547ed32149d3586c7ca0dc240720a428cdbeeab2ec2b784650342021-06-20 15:47:472 hrs 43 mins ago0x6f9ac5b3fa4308620c6763d9aa5a65446e75f5b5 IN  0x60a8ad8470189033789c1053b0c6f89eb27bca180 BNB0.001017635
0x84b468cf5f1a9cefeebea25da5d3d0fb1defa1ba4f4c4b6e24104f21a1d66ed684648722021-06-20 15:39:412 hrs 52 mins ago0x88ed4ce34fc3f54a24768a5acd08d59ae860e079 IN  0x60a8ad8470189033789c1053b0c6f89eb27bca180 BNB0.00118907
0xa49b0e41c2bd4ee1b059c9c00e3b3d96aaec58475125fe0c019507ccdd91421e84644152021-06-20 15:16:503 hrs 14 mins ago0x13b60315c42cd32e571d0cc91ad2d74a8cba7d7f IN  0x60a8ad8470189033789c1053b0c6f89eb27bca180 BNB0.000826205
[ Download CSV Export 
Latest 1 internal transaction
Parent Txn Hash Block From To Value
0xc3ed5b3f16118f27da4ae3ef54e54939d06256fa50b3e502bd7b5ad10647e7e162157492021-04-02 11:10:4179 days 7 hrs ago BSC: Token Hub 0x60a8ad8470189033789c1053b0c6f89eb27bca180.01 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
MerkleDistributor

Compiler Version
v0.7.6+commit.7338295f

Optimization Enabled:
Yes with 200 runs

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

// SPDX-License-Identifier: UNLICENSED

pragma solidity 0.7.6;



// Part: Minter

interface Minter {
    function mint(address _receiver, uint256 _amount) external;
}

// File: MerkleDistributor.sol

// MerkleDistributor for ongoing EPS airdrop to veCRV holders
// Based on the EMN refund contract by banteg - https://github.com/banteg/your-eminence
contract MerkleDistributor {

    bytes32[] public merkleRoots;
    bytes32 public pendingMerkleRoot;
    uint256 public lastRoot;

    // admin address which can propose adding a new merkle root
    address public proposalAuthority;
    // admin address which approves or rejects a proposed merkle root
    address public reviewAuthority;

    event Claimed(
        uint256 merkleIndex,
        uint256 index,
        address account,
        uint256 amount
    );

    // This is a packed array of booleans.
    mapping(uint256 => mapping(uint256 => uint256)) private claimedBitMap;
    Minter public rewardMinter;

    constructor(address _proposalAuthority, address _reviewAuthority) public {
        proposalAuthority = _proposalAuthority;
        reviewAuthority = _reviewAuthority;
    }

    function setMinter(Minter _rewardMinter) public {
        require(rewardMinter == Minter(0));
        rewardMinter = _rewardMinter;
    }

    function setProposalAuthority(address _account) public {
        require(msg.sender == proposalAuthority);
        proposalAuthority = _account;
    }

    function setReviewAuthority(address _account) public {
        require(msg.sender == reviewAuthority);
        reviewAuthority = _account;
    }

    // Each week, the proposal authority calls to submit the merkle root for a new airdrop.
    function proposewMerkleRoot(bytes32 _merkleRoot) public {
        require(msg.sender == proposalAuthority);
        require(pendingMerkleRoot == 0x00);
        require(merkleRoots.length < 52);
        require(block.timestamp > lastRoot + 604800);
        pendingMerkleRoot = _merkleRoot;
    }

    // After validating the correctness of the pending merkle root, the reviewing authority
    // calls to confirm it and the distribution may begin.
    function reviewPendingMerkleRoot(bool _approved) public {
        require(msg.sender == reviewAuthority);
        require(pendingMerkleRoot != 0x00);
        if (_approved) {
            merkleRoots.push(pendingMerkleRoot);
            lastRoot = block.timestamp / 604800 * 604800;
        }
        delete pendingMerkleRoot;
    }

    function isClaimed(uint256 merkleIndex, uint256 index) public view returns (bool) {
        uint256 claimedWordIndex = index / 256;
        uint256 claimedBitIndex = index % 256;
        uint256 claimedWord = claimedBitMap[merkleIndex][claimedWordIndex];
        uint256 mask = (1 << claimedBitIndex);
        return claimedWord & mask == mask;
    }

    function _setClaimed(uint256 merkleIndex, uint256 index) private {
        uint256 claimedWordIndex = index / 256;
        uint256 claimedBitIndex = index % 256;
        claimedBitMap[merkleIndex][claimedWordIndex] = claimedBitMap[merkleIndex][claimedWordIndex] | (1 << claimedBitIndex);
    }

    function claim(uint256 merkleIndex, uint256 index, uint256 amount, bytes32[] calldata merkleProof) external {
        require(merkleIndex < merkleRoots.length, "MerkleDistributor: Invalid merkleIndex");
        require(!isClaimed(merkleIndex, index), 'MerkleDistributor: Drop already claimed.');

        // Verify the merkle proof.
        bytes32 node = keccak256(abi.encodePacked(index, msg.sender, amount));
        require(verify(merkleProof, merkleRoots[merkleIndex], node), 'MerkleDistributor: Invalid proof.');

        // Mark it claimed and send the token.
        _setClaimed(merkleIndex, index);
        rewardMinter.mint(msg.sender, amount);

        emit Claimed(merkleIndex, index, msg.sender, amount);
    }

    function verify(bytes32[] memory proof, bytes32 root, bytes32 leaf) internal pure returns (bool) {
        bytes32 computedHash = leaf;

        for (uint256 i = 0; i < proof.length; i++) {
            bytes32 proofElement = proof[i];

            if (computedHash <= proofElement) {
                // Hash(current computed hash + current element of the proof)
                computedHash = keccak256(abi.encodePacked(computedHash, proofElement));
            } else {
                // Hash(current element of the proof + current computed hash)
                computedHash = keccak256(abi.encodePacked(proofElement, computedHash));
            }
        }

        // Check if the computed hash (root) is equal to the provided root
        return computedHash == root;
    }

}

Contract ABI

[{"inputs":[{"internalType":"address","name":"_proposalAuthority","type":"address"},{"internalType":"address","name":"_reviewAuthority","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"merkleIndex","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"},{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Claimed","type":"event"},{"inputs":[{"internalType":"uint256","name":"merkleIndex","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes32[]","name":"merkleProof","type":"bytes32[]"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"merkleIndex","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"isClaimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastRoot","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"merkleRoots","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingMerkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proposalAuthority","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_merkleRoot","type":"bytes32"}],"name":"proposewMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reviewAuthority","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_approved","type":"bool"}],"name":"reviewPendingMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardMinter","outputs":[{"internalType":"contract Minter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract Minter","name":"_rewardMinter","type":"address"}],"name":"setMinter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"setProposalAuthority","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"setReviewAuthority","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405234801561001057600080fd5b506040516108ac3803806108ac8339818101604052604081101561003357600080fd5b508051602090910151600380546001600160a01b039384166001600160a01b031991821617909155600480549390921692169190911790556108328061007a6000396000f3fe608060405234801561001057600080fd5b50600436106100cf5760003560e01c8063a1622bb01161008c578063b74a29ce11610066578063b74a29ce146101ab578063ea25e176146101d1578063f364c90c14610254578063fca3b5aa1461028b576100cf565b8063a1622bb014610167578063a795e7d314610186578063b58166f2146101a3576100cf565b806310531aa2146100d457806371c5ecb1146100f857806371fad23e14610127578063891dfef31461014f5780639637f475146101575780639b8e55631461015f575b600080fd5b6100dc6102b1565b604080516001600160a01b039092168252519081900360200190f35b6101156004803603602081101561010e57600080fd5b50356102c0565b60408051918252519081900360200190f35b61014d6004803603602081101561013d57600080fd5b50356001600160a01b03166102e1565b005b6100dc61031a565b610115610329565b6100dc61032f565b61014d6004803603602081101561017d57600080fd5b5035151561033e565b61014d6004803603602081101561019c57600080fd5b50356103b2565b6101156103fd565b61014d600480360360208110156101c157600080fd5b50356001600160a01b0316610403565b61014d600480360360808110156101e757600080fd5b8135916020810135916040820135919081019060808101606082013564010000000081111561021557600080fd5b82018360208201111561022757600080fd5b8035906020019184602083028401116401000000008311171561024957600080fd5b50909250905061043c565b6102776004803603604081101561026a57600080fd5b5080359060200135610649565b604080519115158252519081900360200190f35b61014d600480360360208110156102a157600080fd5b50356001600160a01b031661067a565b6004546001600160a01b031681565b600081815481106102d057600080fd5b600091825260209091200154905081565b6003546001600160a01b031633146102f857600080fd5b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6003546001600160a01b031681565b60015481565b6006546001600160a01b031681565b6004546001600160a01b0316331461035557600080fd5b60015461036157600080fd5b80156103aa576001805460008054928301815580527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5639091015562093a80420462093a80026002555b506000600155565b6003546001600160a01b031633146103c957600080fd5b600154156103d657600080fd5b6000546034116103e557600080fd5b60025462093a800142116103f857600080fd5b600155565b60025481565b6004546001600160a01b0316331461041a57600080fd5b600480546001600160a01b0319166001600160a01b0392909216919091179055565b600054851061047c5760405162461bcd60e51b81526004018080602001828103825260268152602001806107d76026913960400191505060405180910390fd5b6104868585610649565b156104c25760405162461bcd60e51b815260040180806020018281038252602881526020018061078e6028913960400191505060405180910390fd5b6040805160208082018790523360601b8284015260548083018790528351808403909101815260748301808552815191830191909120609492860280850184019095528582529361054a93919287928792839290910190849080828437600092018290525080549093508b92508210905061053957fe5b9060005260206000200154836106b2565b6105855760405162461bcd60e51b81526004018080602001828103825260218152602001806107b66021913960400191505060405180910390fd5b61058f868661075b565b600654604080516340c10f1960e01b81523360048201526024810187905290516001600160a01b03909216916340c10f199160448082019260009290919082900301818387803b1580156105e257600080fd5b505af11580156105f6573d6000803e3d6000fd5b5050604080518981526020810189905233818301526060810188905290517fb94bf7f9302edf52a596286915a69b4b0685574cffdedd0712e3c62f2550f0ba9350908190036080019150a1505050505050565b60009182526005602090815260408084206101008404855290915290912054600160ff9092169190911b9081161490565b6006546001600160a01b03161561069057600080fd5b600680546001600160a01b0319166001600160a01b0392909216919091179055565b600081815b85518110156107505760008682815181106106ce57fe5b602002602001015190508083116107155782816040516020018083815260200182815260200192505050604051602081830303815290604052805190602001209250610747565b808360405160200180838152602001828152602001925050506040516020818303038152906040528051906020012092505b506001016106b7565b509092149392505050565b6000918252600560209081526040808420610100840485529091529091208054600160ff9093169290921b909117905556fe4d65726b6c654469737472696275746f723a2044726f7020616c726561647920636c61696d65642e4d65726b6c654469737472696275746f723a20496e76616c69642070726f6f662e4d65726b6c654469737472696275746f723a20496e76616c6964206d65726b6c65496e646578a26469706673582212206e7537f4fcc9ace51b3eb9191302da1d1fd7619ddbf42c1ac675c28f2bd2195a64736f6c63430007060033000000000000000000000000abc00210a691ce0f3d7d0602d7d84aea4d91cdfd0000000000000000000000007eeac6cddbd1d0b8af061742d41877d7f707289a

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

000000000000000000000000abc00210a691ce0f3d7d0602d7d84aea4d91cdfd0000000000000000000000007eeac6cddbd1d0b8af061742d41877d7f707289a

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000abc00210a691ce0f3d7d0602d7d84aea4d91cdfd
Arg [1] : 0000000000000000000000007eeac6cddbd1d0b8af061742d41877d7f707289a


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.