Contract 0x5f0979478d0414cc1dd6c91e11eb0e2a061fc037 1

 
 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xa683f370fde3ad6541e5ea630939b9052f503542f9b4369062cfe553d6659acdClaim319385622022-08-16 0:56:1020 secs ago0xdf96bb93b7e9d5c2b4723dd01f1255261c37e76e IN  0x5f0979478d0414cc1dd6c91e11eb0e2a061fc0370 MATIC0.008928108851 121.922063304
0x4b00e656a09c1a3928a452c970ee65be66a2e2d4400a5b7461d137a54fcc184bClaim319385442022-08-16 0:55:001 min ago0xf00a60db8fdc9d784d2371e369b1a926fe164cd4 IN  0x5f0979478d0414cc1dd6c91e11eb0e2a061fc0370 MATIC0.007612539334 106.385758489
0x453e571d6c0270b0cc5afc60fe1311f1a2f33ec23fdef14b6001748902371ac1Claim319385412022-08-16 0:54:481 min ago0xf00a60db8fdc9d784d2371e369b1a926fe164cd4 IN  0x5f0979478d0414cc1dd6c91e11eb0e2a061fc0370 MATIC0.007697690284 106.342252436
0x6ecd53d7243cd2966203ee94dc34c98fcff4a02fcc410e5e5f5b25808c7e7e62Claim319385372022-08-16 0:54:321 min ago0xf00a60db8fdc9d784d2371e369b1a926fe164cd4 IN  0x5f0979478d0414cc1dd6c91e11eb0e2a061fc0370 MATIC0.007688284947 106.212319332
0xdaa60ca9bd104114481e997095402f0edbc1e0a52ac8de3ff4f17ff93293a391Claim319385342022-08-16 0:54:202 mins ago0xf00a60db8fdc9d784d2371e369b1a926fe164cd4 IN  0x5f0979478d0414cc1dd6c91e11eb0e2a061fc0370 MATIC0.008883761606 122.707279297
0x3c1074b842035e6c9af1bba900a12945d83c93d4b226ab7c4cbac0ef12ed1624Claim319385322022-08-16 0:54:122 mins ago0xf00a60db8fdc9d784d2371e369b1a926fe164cd4 IN  0x5f0979478d0414cc1dd6c91e11eb0e2a061fc0370 MATIC0.008879457287 122.671547402
0x07b6863a541681845a8e62412183600ec1ad999f49c3a52e3002e184fc971ec7Claim319385282022-08-16 0:53:562 mins ago0xaf3de1e6cb4b5b7fec670d090ce477d84441f1d0 IN  0x5f0979478d0414cc1dd6c91e11eb0e2a061fc0370 MATIC0.008351363249 116.675001392
0xc88caca82d28de5e3058114563fc47f6d49127d5547c226f87db183d4e5fa58bClaim319385102022-08-16 0:52:443 mins ago0xaf3de1e6cb4b5b7fec670d090ce477d84441f1d0 IN  0x5f0979478d0414cc1dd6c91e11eb0e2a061fc0370 MATIC0.00847283609 117.099288111
0xb251fe63e197d71ca5ffdf6c4c484fe96c28bf00865a78019990a0d006ae7980Claim319384962022-08-16 0:51:484 mins ago0xaf3de1e6cb4b5b7fec670d090ce477d84441f1d0 IN  0x5f0979478d0414cc1dd6c91e11eb0e2a061fc0370 MATIC0.006744687621 93.148376168
0x658798d237f01ab1c507aab29bd1d56a032dc65f67328facd8561be8d91e3008Claim319384802022-08-16 0:51:105 mins ago0xaf3de1e6cb4b5b7fec670d090ce477d84441f1d0 IN  0x5f0979478d0414cc1dd6c91e11eb0e2a061fc0370 MATIC0.006671557282 93.274575438
0xbfa0f0675e56b4663545a2dbf498cd3740a4a9ea25dea89debfe0812b626d25cClaim319384052022-08-16 0:48:367 mins ago0x565d1d6cc1bbfe70337ce664e4cc056cc4ba6d3d IN  0x5f0979478d0414cc1dd6c91e11eb0e2a061fc0370 MATIC0.007770924305 109.799139589
0xe8383de30e87d399f539cd5d7a332b96568fb685a153a19cd343fa82f54103a9Claim319383642022-08-16 0:47:109 mins ago0x466c08e3fb9075a57cd3468b59482a57492c320d IN  0x5f0979478d0414cc1dd6c91e11eb0e2a061fc0370 MATIC0.008152211894 111.296033947
0x0fd0a7cd706bea4eefd30ec8e82cb13c19570f2c01cd5d0c5540d30469d2c8a9Claim319382402022-08-16 0:42:5813 mins ago0xda1080d638c6e582785e1565fd3b8fe038f4ea9b IN  0x5f0979478d0414cc1dd6c91e11eb0e2a061fc0370 MATIC0.023574101931 321.883474854
0x2cc12393418e091e9d3820c3f36792244407164be2060ecc44ed8b6b07ec5ac4Claim319381602022-08-16 0:40:1016 mins ago0xf9c9fbf478b2229341597426ff0c55d39355c793 IN  0x5f0979478d0414cc1dd6c91e11eb0e2a061fc0370 MATIC0.009354836491 127.766894632
0x2a2d3547644072699de6b2ecdd3eeb03f239e2eceda105f9bff0dbb25155556aClaim319380652022-08-16 0:36:5619 mins ago0x5e855aac24dde45aec7a862bc958a52de4c844cc IN  0x5f0979478d0414cc1dd6c91e11eb0e2a061fc0370 MATIC0.008891919381 121.447762536
0xbe8ffe4592ec60bee7b4c6b44d5f6ca62aa2aabf5075c24669cb9418e26e3cc8Claim319379052022-08-16 0:31:2425 mins ago0x15a23f9223fcbd230add4919f8e7060ab50a0775 IN  0x5f0979478d0414cc1dd6c91e11eb0e2a061fc0370 MATIC0.009821542565 134.060530225
0x1241295a4052d0352085b8b9c43b37d33dd5055b54be1f1427ba6b92e87a7ab9Claim319377762022-08-16 0:26:5829 mins ago0xb4e22828540191150023d088816f9bece907cc2a IN  0x5f0979478d0414cc1dd6c91e11eb0e2a061fc0370 MATIC0.008910752968 124.570163965
0x0ba979bb5ef24ff36a2a95f755e556fcb69f3a6ad3a08262f5fe5fea0aaf7473Claim319377712022-08-16 0:26:4829 mins ago0xb4e22828540191150023d088816f9bece907cc2a IN  0x5f0979478d0414cc1dd6c91e11eb0e2a061fc0370 MATIC0.008815709397 124.638900003
0xce5be54ad9326200d49f7e3b6a2d997e36b0e6baf76259bbeab8dea2892fd5d1Claim319377492022-08-16 0:26:0430 mins ago0x9154cd5632daf564ee7f400dcfaebe7615794c26 IN  0x5f0979478d0414cc1dd6c91e11eb0e2a061fc0370 MATIC0.008607549225 117.560561959
0xedf727f129504aae92e263809d1010c465eaf845b3add48115afe4fced233a3dClaim319376092022-08-16 0:21:1635 mins ago0x18a7efffbbf9052b4f486dc6d32a24ecdff2e62e IN  0x5f0979478d0414cc1dd6c91e11eb0e2a061fc0370 MATIC0.011420218331 157.455099018
0x17895d1ad465b220fde0db6bd8374d1f9357c91b8ebee33f03a3e5eab3072c4aClaim319375992022-08-16 0:20:5235 mins ago0x51ba2d0a1d4c2fce7a3d12bf4f657381a10710ff IN  0x5f0979478d0414cc1dd6c91e11eb0e2a061fc0370 MATIC0.01233875812 170.100610999
0xc9e57902fbea897464a2662b63b7a8d157d645c8ee01346a7d088437952c6d9eClaim319375852022-08-16 0:19:5636 mins ago0x29abde6b2083e571be0fc80dbd61924d73734f1a IN  0x5f0979478d0414cc1dd6c91e11eb0e2a061fc0370 MATIC0.011560655727 159.391365325
0xcfbd4a403f058bdf0272876faa2d9cafee4e6485c9f6f10e180f2cfd20827d64Claim319375792022-08-16 0:19:3236 mins ago0xccea8593558b15a8940c7f70bc002d4aab6a4c84 IN  0x5f0979478d0414cc1dd6c91e11eb0e2a061fc0370 MATIC0.013323642776 183.728767702
0x5cb8d00698b3322fee486c36ea821de2366d8203724ba0a888d79b25efcc6b68Claim319375742022-08-16 0:19:1237 mins ago0x727426033994bea07b250a442d60ea6258ca5524 IN  0x5f0979478d0414cc1dd6c91e11eb0e2a061fc0370 MATIC0.013202961522 182.034489489
0x6cfc1f155e6db486d054a1e2bd3d00bc07701d79cfc8b34ff5668d6df0229a62Claim319375692022-08-16 0:18:5237 mins ago0x7fa38ff2f652da0969d86561cd9810d52a41da0d IN  0x5f0979478d0414cc1dd6c91e11eb0e2a061fc0370 MATIC0.014890927886 205.341127535
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xa683f370fde3ad6541e5ea630939b9052f503542f9b4369062cfe553d6659acd319385622022-08-16 0:56:1020 secs ago 0x5f0979478d0414cc1dd6c91e11eb0e2a061fc0370xdf96bb93b7e9d5c2b4723dd01f1255261c37e76e0.499321609351354168 MATIC
0x4b00e656a09c1a3928a452c970ee65be66a2e2d4400a5b7461d137a54fcc184b319385442022-08-16 0:55:001 min ago 0x5f0979478d0414cc1dd6c91e11eb0e2a061fc0370xf00a60db8fdc9d784d2371e369b1a926fe164cd41.90686651642995697 MATIC
0x453e571d6c0270b0cc5afc60fe1311f1a2f33ec23fdef14b6001748902371ac1319385412022-08-16 0:54:481 min ago 0x5f0979478d0414cc1dd6c91e11eb0e2a061fc0370xf00a60db8fdc9d784d2371e369b1a926fe164cd41.897182988481784571 MATIC
0x6ecd53d7243cd2966203ee94dc34c98fcff4a02fcc410e5e5f5b25808c7e7e62319385372022-08-16 0:54:321 min ago 0x5f0979478d0414cc1dd6c91e11eb0e2a061fc0370xf00a60db8fdc9d784d2371e369b1a926fe164cd41.998744310155391668 MATIC
0xdaa60ca9bd104114481e997095402f0edbc1e0a52ac8de3ff4f17ff93293a391319385342022-08-16 0:54:202 mins ago 0x5f0979478d0414cc1dd6c91e11eb0e2a061fc0370xf00a60db8fdc9d784d2371e369b1a926fe164cd41.99916374849736056 MATIC
0x3c1074b842035e6c9af1bba900a12945d83c93d4b226ab7c4cbac0ef12ed1624319385322022-08-16 0:54:122 mins ago 0x5f0979478d0414cc1dd6c91e11eb0e2a061fc0370xf00a60db8fdc9d784d2371e369b1a926fe164cd42.001657692508756359 MATIC
0x07b6863a541681845a8e62412183600ec1ad999f49c3a52e3002e184fc971ec7319385282022-08-16 0:53:562 mins ago 0x5f0979478d0414cc1dd6c91e11eb0e2a061fc0370xaf3de1e6cb4b5b7fec670d090ce477d84441f1d02.999371909807117653 MATIC
0xc88caca82d28de5e3058114563fc47f6d49127d5547c226f87db183d4e5fa58b319385102022-08-16 0:52:443 mins ago 0x5f0979478d0414cc1dd6c91e11eb0e2a061fc0370xaf3de1e6cb4b5b7fec670d090ce477d84441f1d01.897182988481784571 MATIC
0xb251fe63e197d71ca5ffdf6c4c484fe96c28bf00865a78019990a0d006ae7980319384962022-08-16 0:51:484 mins ago 0x5f0979478d0414cc1dd6c91e11eb0e2a061fc0370xaf3de1e6cb4b5b7fec670d090ce477d84441f1d01.998744310155391668 MATIC
0x658798d237f01ab1c507aab29bd1d56a032dc65f67328facd8561be8d91e3008319384802022-08-16 0:51:105 mins ago 0x5f0979478d0414cc1dd6c91e11eb0e2a061fc0370xaf3de1e6cb4b5b7fec670d090ce477d84441f1d01.99916374849736056 MATIC
0xbfa0f0675e56b4663545a2dbf498cd3740a4a9ea25dea89debfe0812b626d25c319384052022-08-16 0:48:367 mins ago 0x5f0979478d0414cc1dd6c91e11eb0e2a061fc0370x565d1d6cc1bbfe70337ce664e4cc056cc4ba6d3d0.500000000000000111 MATIC
0xe8383de30e87d399f539cd5d7a332b96568fb685a153a19cd343fa82f54103a9319383642022-08-16 0:47:109 mins ago 0x5f0979478d0414cc1dd6c91e11eb0e2a061fc0370x466c08e3fb9075a57cd3468b59482a57492c320d0.499321609351354168 MATIC
0x0fd0a7cd706bea4eefd30ec8e82cb13c19570f2c01cd5d0c5540d30469d2c8a9319382402022-08-16 0:42:5813 mins ago 0x5f0979478d0414cc1dd6c91e11eb0e2a061fc0370xda1080d638c6e582785e1565fd3b8fe038f4ea9b0.500000000000000111 MATIC
0x2cc12393418e091e9d3820c3f36792244407164be2060ecc44ed8b6b07ec5ac4319381602022-08-16 0:40:1016 mins ago 0x5f0979478d0414cc1dd6c91e11eb0e2a061fc0370xf9c9fbf478b2229341597426ff0c55d39355c7930.500000000000000111 MATIC
0x2a2d3547644072699de6b2ecdd3eeb03f239e2eceda105f9bff0dbb25155556a319380652022-08-16 0:36:5619 mins ago 0x5f0979478d0414cc1dd6c91e11eb0e2a061fc0370x5e855aac24dde45aec7a862bc958a52de4c844cc0.500000000000000111 MATIC
0xbe8ffe4592ec60bee7b4c6b44d5f6ca62aa2aabf5075c24669cb9418e26e3cc8319379052022-08-16 0:31:2425 mins ago 0x5f0979478d0414cc1dd6c91e11eb0e2a061fc0370x15a23f9223fcbd230add4919f8e7060ab50a07750.499321609351354168 MATIC
0x1241295a4052d0352085b8b9c43b37d33dd5055b54be1f1427ba6b92e87a7ab9319377762022-08-16 0:26:5829 mins ago 0x5f0979478d0414cc1dd6c91e11eb0e2a061fc0370xb4e22828540191150023d088816f9bece907cc2a1.90686651642995697 MATIC
0x0ba979bb5ef24ff36a2a95f755e556fcb69f3a6ad3a08262f5fe5fea0aaf7473319377712022-08-16 0:26:4829 mins ago 0x5f0979478d0414cc1dd6c91e11eb0e2a061fc0370xb4e22828540191150023d088816f9bece907cc2a2.847435763798404906 MATIC
0xce5be54ad9326200d49f7e3b6a2d997e36b0e6baf76259bbeab8dea2892fd5d1319377492022-08-16 0:26:0430 mins ago 0x5f0979478d0414cc1dd6c91e11eb0e2a061fc0370x9154cd5632daf564ee7f400dcfaebe7615794c260.499321609351354168 MATIC
0xedf727f129504aae92e263809d1010c465eaf845b3add48115afe4fced233a3d319376092022-08-16 0:21:1635 mins ago 0x5f0979478d0414cc1dd6c91e11eb0e2a061fc0370x18a7efffbbf9052b4f486dc6d32a24ecdff2e62e2.00059188892948514 MATIC
0x17895d1ad465b220fde0db6bd8374d1f9357c91b8ebee33f03a3e5eab3072c4a319375992022-08-16 0:20:5235 mins ago 0x5f0979478d0414cc1dd6c91e11eb0e2a061fc0370x51ba2d0a1d4c2fce7a3d12bf4f657381a10710ff2.00059188892948514 MATIC
0xc9e57902fbea897464a2662b63b7a8d157d645c8ee01346a7d088437952c6d9e319375852022-08-16 0:19:5636 mins ago 0x5f0979478d0414cc1dd6c91e11eb0e2a061fc0370x29abde6b2083e571be0fc80dbd61924d73734f1a2.00059188892948514 MATIC
0xcfbd4a403f058bdf0272876faa2d9cafee4e6485c9f6f10e180f2cfd20827d64319375792022-08-16 0:19:3236 mins ago 0x5f0979478d0414cc1dd6c91e11eb0e2a061fc0370xccea8593558b15a8940c7f70bc002d4aab6a4c842.00059188892948514 MATIC
0x5cb8d00698b3322fee486c36ea821de2366d8203724ba0a888d79b25efcc6b68319375742022-08-16 0:19:1237 mins ago 0x5f0979478d0414cc1dd6c91e11eb0e2a061fc0370x727426033994bea07b250a442d60ea6258ca55242.00059188892948514 MATIC
0x6cfc1f155e6db486d054a1e2bd3d00bc07701d79cfc8b34ff5668d6df0229a62319375692022-08-16 0:18:5237 mins ago 0x5f0979478d0414cc1dd6c91e11eb0e2a061fc0370x7fa38ff2f652da0969d86561cd9810d52a41da0d2.00059188892948514 MATIC
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
CPLRewardsClaimV2

Compiler Version
v0.7.6+commit.7338295f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity Standard Json-Input format)

File 1 of 8 : CPLRewardsClaimV2.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.7.6;

import "./utils-sc/Withdrawable.sol";
import "./token/SafeERC20.sol";

contract CPLRewardsClaimV2 {
    using SafeERC20 for IBEP20;

    IBEP20 internal constant BNB_TOKEN_ADDRESS = IBEP20(0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE);

    address public owner;
    uint256 public currentTimeStamp = block.timestamp;

    mapping(string => bool)    private  claims;
    mapping(string => uint256) public   gameExpiryMap;
    mapping(string => bytes32) private  gameRootMap;
    bytes32 constant NULL = "";

    modifier onlyOwner() {
        require(msg.sender == owner, "only owner");
        _;
    }

    constructor(address _owner) {
        owner = _owner;
    }

    event Claimed(address indexed token, address indexed to, uint256 value);
    event printLeaf(bytes32 leaf);

    function claim(
                    address payable wallet,
                    string memory gameId,
                    uint256 amount,
                    IBEP20 token,
                    bytes32[] memory proof,
                    string memory zkProof
                ) public {

        require(gameExpiryMap[gameId] != 0 
                && block.timestamp <= gameExpiryMap[gameId]
                && gameRootMap[gameId] != NULL, 
                "Invalid or expired Claims");

        bytes32 _leaf = keccak256(abi.encode(wallet, amount, address(token), zkProof));
        require(isClaimable(gameRootMap[gameId], _leaf, proof) && (claims[_concat(wallet, gameId)] == false), "No claims available");

        _setClaimed(wallet, gameId);
        _distribute(wallet, token, amount);
        emit Claimed(address(token), wallet, amount);
    }

    function getContractTokenBalance(IBEP20 token) public view returns (uint256){
        if(token == BNB_TOKEN_ADDRESS) {
            return address(this).balance;
        }else{
            return token.balanceOf(address(this));
        }
    }

    function hasClaimed (address wallet, string memory gameId) public view returns (bool) {
        return claims[_concat(wallet, gameId)];
    }

    function isClaimable(bytes32 root, bytes32 leaf, bytes32[] memory proof) public 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.encode(computedHash, proofElement));
            } else {
                // Hash(current element of the proof + current computed hash)
                computedHash = keccak256(abi.encode(proofElement, computedHash));
            }
        }
        // Check if the computed hash (root) is equal to the provided root
        return computedHash == root;
    }

    function withdrawTokensFromContract(address payable wallet, IBEP20 token, uint256 amount) public payable onlyOwner {
        _distribute(wallet, token, amount);
    }

    function setClaim(address wallet, string memory gameId) external onlyOwner {
        _setClaimed(wallet, gameId);
    }

    function setGameExpiry(string memory gameId, uint256 timestamp) external onlyOwner {
        gameExpiryMap[gameId] = timestamp;
    }

    function setRoot(string memory gameId, bytes32 root) external onlyOwner {
        gameRootMap[gameId] = root;
    }

    receive() external payable {}
    
    function _concat(address a, string memory b) private pure returns (string memory){
        return string(abi.encode(a,' ',b));
    } 

    function _setClaimed(address wallet, string memory gameId) private {
        claims[_concat(wallet, gameId)] = true;
    }

    function _distribute(address payable wallet, IBEP20 token, uint256 amount) private {
        if (token == BNB_TOKEN_ADDRESS) {
            require(address(this).balance >= amount, "bnb amount required > balance");
            (bool success, ) = wallet.call{value: amount}("");
            require(success, "send to address failed");
        } else {
            require(token.balanceOf(address(this)) >= amount, "token amount required > balance");
            token.safeTransfer(wallet, amount);
        }
    }
}

File 2 of 8 : Withdrawable.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.7.6;

import "../token/SafeERC20.sol";
import "../token/IBEP20.sol";
import "./PermissionAdmin.sol";


abstract contract Withdrawable is PermissionAdmin {
    using SafeERC20 for IBEP20;

    event TokenWithdraw(IBEP20 token, uint256 amount, address sendTo);
    event BnbWithdraw(uint256 amount, address sendTo);

    constructor(address _admin) PermissionAdmin(_admin) {}

    /**
     * @dev Withdraw all IBEP20 compatible tokens
     * @param token IBEP20 The address of the token contract
     */
    function withdrawToken(
        IBEP20 token,
        uint256 amount,
        address sendTo
    ) external onlyAdmin {
        token.safeTransfer(sendTo, amount);
        emit TokenWithdraw(token, amount, sendTo);
    }

    /**
     * @dev Withdraw BNBs
     */
    function withdrawBnb(uint256 amount, address payable sendTo) external onlyAdmin {
        (bool success, ) = sendTo.call{value: amount}("");
        require(success, "withdraw failed");
        emit BnbWithdraw(amount, sendTo);
    }
}

File 3 of 8 : SafeERC20.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.7.0;

import "./IERC20.sol";
import "../math/SafeMath.sol";
import "../utils/Address.sol";

/**
 * @title SafeERC20
 * @dev Wrappers around ERC20 operations that throw on failure (when the token
 * contract returns false). Tokens that return no value (and instead revert or
 * throw on failure) are also supported, non-reverting calls are assumed to be
 * successful.
 * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,
 * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
 */
library SafeERC20 {
    using SafeMath for uint256;
    using Address for address;

    function safeTransfer(IERC20 token, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }

    /**
     * @dev Deprecated. This function has issues similar to the ones found in
     * {IERC20-approve}, and its usage is discouraged.
     *
     * Whenever possible, use {safeIncreaseAllowance} and
     * {safeDecreaseAllowance} instead.
     */
    function safeApprove(IERC20 token, address spender, uint256 value) internal {
        // safeApprove should only be called when setting an initial allowance,
        // or when resetting it to zero. To increase and decrease it, use
        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
        // solhint-disable-next-line max-line-length
        require((value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }

    function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {
        uint256 newAllowance = token.allowance(address(this), spender).add(value);
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal {
        uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero");
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    /**
     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
     * on the return value: the return value is optional (but if data is returned, it must not be false).
     * @param token The token targeted by the call.
     * @param data The call data (encoded using abi.encode or one of its variants).
     */
    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
        // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that
        // the target address contains contract code and also asserts for success in the low-level call.

        bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
        if (returndata.length > 0) { // Return data is optional
            // solhint-disable-next-line max-line-length
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }
}

File 4 of 8 : IBEP20.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.7.6;

import "./IERC20.sol";


/**
 * @dev Interface extending ERC20 standard to include required
 *      functions as described in
 *      https://github.com/binance-chain/BEPs/blob/master/BEP20.md.
 */
interface IBEP20 is IERC20 {
    /**
     * @dev This function is required as Kyber requires to interact
     *      with token.decimals() with many of its operations.
     */
    function decimals() external view returns (uint8 digits);

    /**
     * @dev Returns the bep token owner.
     */
    function getOwner() external view returns (address);

    /**
     * @dev Returns the token symbol.
     */
    function symbol() external view returns (string calldata);
}

File 5 of 8 : PermissionAdmin.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.7.6;


abstract contract PermissionAdmin {
    address public admin;
    address public pendingAdmin;

    event AdminClaimed(address newAdmin, address previousAdmin);

    event TransferAdminPending(address pendingAdmin);

    constructor(address _admin) {
        require(_admin != address(0), "admin 0");
        admin = _admin;
    }

    modifier onlyAdmin() {
        require(msg.sender == admin, "only admin");
        _;
    }

    /**
     * @dev Allows the current admin to set the pendingAdmin address.
     * @param newAdmin The address to transfer ownership to.
     */
    function transferAdmin(address newAdmin) public onlyAdmin {
        require(newAdmin != address(0), "new admin 0");
        emit TransferAdminPending(newAdmin);
        pendingAdmin = newAdmin;
    }

    /**
     * @dev Allows the current admin to set the admin in one tx. Useful initial deployment.
     * @param newAdmin The address to transfer ownership to.
     */
    function transferAdminQuickly(address newAdmin) public onlyAdmin {
        require(newAdmin != address(0), "admin 0");
        emit TransferAdminPending(newAdmin);
        emit AdminClaimed(newAdmin, admin);
        admin = newAdmin;
    }

    /**
     * @dev Allows the pendingAdmin address to finalize the change admin process.
     */
    function claimAdmin() public {
        require(pendingAdmin == msg.sender, "not pending");
        emit AdminClaimed(pendingAdmin, admin);
        admin = pendingAdmin;
        pendingAdmin = address(0);
    }
}

File 6 of 8 : IERC20.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.7.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

File 7 of 8 : SafeMath.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.7.0;

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        uint256 c = a + b;
        if (c < a) return (false, 0);
        return (true, c);
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        if (b > a) return (false, 0);
        return (true, a - b);
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) return (true, 0);
        uint256 c = a * b;
        if (c / a != b) return (false, 0);
        return (true, c);
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        if (b == 0) return (false, 0);
        return (true, a / b);
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        if (b == 0) return (false, 0);
        return (true, a % b);
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");
        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b <= a, "SafeMath: subtraction overflow");
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) return 0;
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b > 0, "SafeMath: division by zero");
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b > 0, "SafeMath: modulo by zero");
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        return a - b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryDiv}.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        return a % b;
    }
}

File 8 of 8 : Address.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.7.0;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        // solhint-disable-next-line no-inline-assembly
        assembly { size := extcodesize(account) }
        return size > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain`call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: value }(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Claimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"leaf","type":"bytes32"}],"name":"printLeaf","type":"event"},{"inputs":[{"internalType":"address payable","name":"wallet","type":"address"},{"internalType":"string","name":"gameId","type":"string"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"contract IBEP20","name":"token","type":"address"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"},{"internalType":"string","name":"zkProof","type":"string"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"currentTimeStamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"","type":"string"}],"name":"gameExpiryMap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IBEP20","name":"token","type":"address"}],"name":"getContractTokenBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"string","name":"gameId","type":"string"}],"name":"hasClaimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"root","type":"bytes32"},{"internalType":"bytes32","name":"leaf","type":"bytes32"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"name":"isClaimable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"string","name":"gameId","type":"string"}],"name":"setClaim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"gameId","type":"string"},{"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"setGameExpiry","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"gameId","type":"string"},{"internalType":"bytes32","name":"root","type":"bytes32"}],"name":"setRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"wallet","type":"address"},{"internalType":"contract IBEP20","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawTokensFromContract","outputs":[],"stateMutability":"payable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040524260015534801561001457600080fd5b506040516116ae3803806116ae8339818101604052602081101561003757600080fd5b5051600080546001600160a01b039092166001600160a01b0319909216919091179055611645806100696000396000f3fe6080604052600436106100a05760003560e01c80638da5cb5b116100645780638da5cb5b1461034a578063976226201461037b578063b5e62fb714610558578063d9b07ac11461060b578063e4b91f69146106bc578063ef44e3eb1461077d576100a7565b806314205e28146100ac578063340a9a1c146100f157806350736978146101065780635b6e32de146101c95780635c4c96ea14610297576100a7565b366100a757005b600080fd5b3480156100b857600080fd5b506100df600480360360208110156100cf57600080fd5b50356001600160a01b03166107b3565b60408051918252519081900360200190f35b3480156100fd57600080fd5b506100df61085b565b34801561011257600080fd5b506101c76004803603604081101561012957600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561015357600080fd5b82018360208201111561016557600080fd5b803590602001918460018302840111600160201b8311171561018657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610861945050505050565b005b3480156101d557600080fd5b50610283600480360360608110156101ec57600080fd5b813591602081013591810190606081016040820135600160201b81111561021257600080fd5b82018360208201111561022457600080fd5b803590602001918460208302840111600160201b8311171561024557600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506108bb945050505050565b604080519115158252519081900360200190f35b3480156102a357600080fd5b506101c7600480360360408110156102ba57600080fd5b810190602081018135600160201b8111156102d457600080fd5b8201836020820111156102e657600080fd5b803590602001918460018302840111600160201b8311171561030757600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505091359250610966915050565b34801561035657600080fd5b5061035f610a1a565b604080516001600160a01b039092168252519081900360200190f35b34801561038757600080fd5b506101c7600480360360c081101561039e57600080fd5b6001600160a01b038235169190810190604081016020820135600160201b8111156103c857600080fd5b8201836020820111156103da57600080fd5b803590602001918460018302840111600160201b831117156103fb57600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092958435956001600160a01b0360208701351695919450925060608101915060400135600160201b81111561046257600080fd5b82018360208201111561047457600080fd5b803590602001918460208302840111600160201b8311171561049557600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b8111156104e457600080fd5b8201836020820111156104f657600080fd5b803590602001918460018302840111600160201b8311171561051757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610a29945050505050565b34801561056457600080fd5b506101c76004803603604081101561057b57600080fd5b810190602081018135600160201b81111561059557600080fd5b8201836020820111156105a757600080fd5b803590602001918460018302840111600160201b831117156105c857600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505091359250610e07915050565b34801561061757600080fd5b506100df6004803603602081101561062e57600080fd5b810190602081018135600160201b81111561064857600080fd5b82018360208201111561065a57600080fd5b803590602001918460018302840111600160201b8311171561067b57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610e85945050505050565b3480156106c857600080fd5b50610283600480360360408110156106df57600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561070957600080fd5b82018360208201111561071b57600080fd5b803590602001918460018302840111600160201b8311171561073c57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610ea2945050505050565b6101c76004803603606081101561079357600080fd5b506001600160a01b03813581169160208101359091169060400135610f17565b60006001600160a01b03821673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14156107e1575047610856565b604080516370a0823160e01b815230600482015290516001600160a01b038416916370a08231916024808301926020929190829003018186803b15801561082757600080fd5b505afa15801561083b573d6000803e3d6000fd5b505050506040513d602081101561085157600080fd5b505190505b919050565b60015481565b6000546001600160a01b031633146108ad576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9037bbb732b960b11b604482015290519081900360640190fd5b6108b78282610f73565b5050565b600082815b83518110156109595760008482815181106108d757fe5b6020026020010151905080831161091e5782816040516020018083815260200182815260200192505050604051602081830303815290604052805190602001209250610950565b808360405160200180838152602001828152602001925050506040516020818303038152906040528051906020012092505b506001016108c0565b50841490505b9392505050565b6000546001600160a01b031633146109b2576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9037bbb732b960b11b604482015290519081900360640190fd5b806004836040518082805190602001908083835b602083106109e55780518252601f1990920191602091820191016109c6565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092209290925550505050565b6000546001600160a01b031681565b6003856040518082805190602001908083835b60208310610a5b5780518252601f199092019160209182019101610a3c565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092205415801592509050610af857506003856040518082805190602001908083835b60208310610ac55780518252601f199092019160209182019101610aa6565b51815160209384036101000a60001901801990921691161790529201948552506040519384900301909220544211159150505b8015610b6d575060008019166004866040518082805190602001908083835b60208310610b365780518252601f199092019160209182019101610b17565b6001836020036101000a03801982511681845116808217855250505050505090500191505090815260200160405180910390205414155b610bbe576040805162461bcd60e51b815260206004820152601960248201527f496e76616c6964206f72206578706972656420436c61696d7300000000000000604482015290519081900360640190fd5b60008685858460405160200180856001600160a01b03168152602001848152602001836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610c28578181015183820152602001610c10565b50505050905090810190601f168015610c555780820380516001836020036101000a031916815260200191505b5095505050505050604051602081830303815290604052805190602001209050610ce16004876040518082805190602001908083835b60208310610caa5780518252601f199092019160209182019101610c8b565b51815160209384036101000a60001901801990921691161790529201948552506040519384900301909220549150839050856108bb565b8015610d5757506002610cf48888610ff1565b6040518082805190602001908083835b60208310610d235780518252601f199092019160209182019101610d04565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092205460ff16159150505b610d9e576040805162461bcd60e51b81526020600482015260136024820152724e6f20636c61696d7320617661696c61626c6560681b604482015290519081900360640190fd5b610da88787610f73565b610db38785876110aa565b866001600160a01b0316846001600160a01b03167ff7a40077ff7a04c7e61f6f26fb13774259ddf1b6bce9ecf26a8276cdd3992683876040518082815260200191505060405180910390a350505050505050565b6000546001600160a01b03163314610e53576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9037bbb732b960b11b604482015290519081900360640190fd5b80600383604051808280519060200190808383602083106109e55780518252601f1990920191602091820191016109c6565b805160208183018101805160038252928201919093012091525481565b60006002610eb08484610ff1565b6040518082805190602001908083835b60208310610edf5780518252601f199092019160209182019101610ec0565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092205460ff1695945050505050565b6000546001600160a01b03163314610f63576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9037bbb732b960b11b604482015290519081900360640190fd5b610f6e8383836110aa565b505050565b60016002610f818484610ff1565b6040518082805190602001908083835b60208310610fb05780518252601f199092019160209182019101610f91565b51815160209384036101000a60001901801990921691161790529201948552506040519384900301909220805460ff19169315159390931790925550505050565b6060828260405160200180836001600160a01b03168152602001806020018060200183810383526001815260200180600160fd1b815250602001838103825284818151815260200191508051906020019080838360005b83811015611060578181015183820152602001611048565b50505050905090810190601f16801561108d5780820380516001836020036101000a031916815260200191505b5060408051601f1981840301815291905298975050505050505050565b6001600160a01b03821673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14156111c95780471015611124576040805162461bcd60e51b815260206004820152601d60248201527f626e6220616d6f756e74207265717569726564203e2062616c616e6365000000604482015290519081900360640190fd5b6040516000906001600160a01b0385169083908381818185875af1925050503d806000811461116f576040519150601f19603f3d011682016040523d82523d6000602084013e611174565b606091505b50509050806111c3576040805162461bcd60e51b81526020600482015260166024820152751cd95b99081d1bc81859191c995cdcc819985a5b195960521b604482015290519081900360640190fd5b50610f6e565b80826001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561121757600080fd5b505afa15801561122b573d6000803e3d6000fd5b505050506040513d602081101561124157600080fd5b50511015611296576040805162461bcd60e51b815260206004820152601f60248201527f746f6b656e20616d6f756e74207265717569726564203e2062616c616e636500604482015290519081900360640190fd5b610f6e6001600160a01b0383168483604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610f6e9084906000611347826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166113a39092919063ffffffff16565b805190915015610f6e5780806020019051602081101561136657600080fd5b5051610f6e5760405162461bcd60e51b815260040180806020018281038252602a8152602001806115e6602a913960400191505060405180910390fd5b60606113b284846000856113ba565b949350505050565b6060824710156113fb5760405162461bcd60e51b81526004018080602001828103825260268152602001806115c06026913960400191505060405180910390fd5b61140485611515565b611455576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b600080866001600160a01b031685876040518082805190602001908083835b602083106114935780518252601f199092019160209182019101611474565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146114f5576040519150601f19603f3d011682016040523d82523d6000602084013e6114fa565b606091505b509150915061150a82828661151b565b979650505050505050565b3b151590565b6060831561152a57508161095f565b82511561153a5782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561158457818101518382015260200161156c565b50505050905090810190601f1680156115b15780820380516001836020036101000a031916815260200191505b509250505060405180910390fdfe416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c5361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a264697066735822122080266a6ef04805ddbd68f556f90844343da7b82e93fe2972a510ac2227b3453864736f6c63430007060033000000000000000000000000cf79cab2061cf7a5dd26718b781cbecd6ce78b1a

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

000000000000000000000000cf79cab2061cf7a5dd26718b781cbecd6ce78b1a

-----Decoded View---------------
Arg [0] : _owner (address): 0xcf79cab2061cf7a5dd26718b781cbecd6ce78b1a

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000cf79cab2061cf7a5dd26718b781cbecd6ce78b1a


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.