Contract 0xae9269f27437f0fcbc232d39ec814844a51d6b8f

 
Txn Hash
Block
From
To
Value [Txn Fee]
0x5b8e33c883ad72a14c1c66c9ade4fba53e0d116ba23e2ac2791d21580cb1061255042752021-03-08 15:27:5831 secs ago0x96cf0a1e2225162fb8c707e0166f69158364853f IN  BurgerSwap: BURGER Token0 BNB0.0006367096
0x15be38595adfe0e503a2f200c14e6bca4e596ee9f6ce1c9c4f32178f2fd43c2a55042302021-03-08 15:25:432 mins ago0x3f6d5d1d9f13b1bcfeba5b727a96977cca92e69c IN  BurgerSwap: BURGER Token0 BNB0.00044016
0x9096317879bb26e4d933adb10bd4b753d62b1d34310a81d40a7d6ba0b5572bd455041912021-03-08 15:23:464 mins ago0x992db735645fd945273a8e63365623624f5a109a IN  BurgerSwap: BURGER Token0 BNB0.0003703
0x82a264f042f3138ab3db899804bbb10c071bddf746305501128224d0f88d015655041502021-03-08 15:21:436 mins ago0x96cf0a1e2225162fb8c707e0166f69158364853f IN  BurgerSwap: BURGER Token0 BNB0.0008947096
0x5c3dc235a3a29a641e233214685947e46644c0f9687b847cede58246d210cef955041292021-03-08 15:20:367 mins ago0xb54382c2307d3215fd0c11abc2f6e380a0936463 IN  BurgerSwap: BURGER Token0 BNB0.000396221
0x1db8cf022e823a3af6390974f4feb875cce4255d98cad9fc57787e2972df1a6f55040152021-03-08 15:14:1414 mins ago0xaf308156c2a172747592111dd4c01fd1c739d9ab IN  BurgerSwap: BURGER Token0 BNB0.00044016
0x2864672a3a9a1c715277c038d038b0b573dffbc49f2c31a88c0ef0835844b59155039802021-03-08 15:12:2916 mins ago0x5a849b9eee6f79bd7e978866a4efd23e9c6eb760 IN  BurgerSwap: BURGER Token0 BNB0.00037018
0x1adc1c49651ef010532e2013bdb8974d47a2a50d045013b0d09deaa06695297255038992021-03-08 15:08:2620 mins ago0x9d39ef11796c5d926d4aad76dd21327d5cc663a9 IN  BurgerSwap: BURGER Token0 BNB0.00044016
0x436727e2f733ed50bec6e386c429a3003be86b11c864d3bb633804a63e94d29055038962021-03-08 15:08:1720 mins ago0xfa69446046a961a1dc7782a2fbd4ca3739e1b7df IN  BurgerSwap: BURGER Token0 BNB0.00044016
0x63b992a91bd7b899b7a804b8bb51c973a1d2d1beb96b4e87a78fe7539ae4179155038802021-03-08 15:07:2921 mins ago0x8a673b6243974b0c7f9835c1e60443ca38d504c0 IN  BurgerSwap: BURGER Token0 BNB0.0004709712
0x805cd7b1f54c51a7b82f9739c3dfba4f7463e643903779509eea0ebca84cbe2555038792021-03-08 15:07:2621 mins ago0x9d39ef11796c5d926d4aad76dd21327d5cc663a9 IN  BurgerSwap: BURGER Token0 BNB0.00044268
0x4891f0d09fb9ceee5394487f716d688f0b235a4969bcb55b266fd8efeeec9d1a55038752021-03-08 15:07:1421 mins agoBinance: Hot Wallet IN  BurgerSwap: BURGER Token0 BNB0.00052018
0x3ae0583283df2277cb5fe8be0b405d35d70eac65fa30a01ea4ea2c8a016dfa8f55037792021-03-08 15:02:2626 mins ago0x4734da8a72cc7d1730600741c2e5b7e030b10309 IN  BurgerSwap: BURGER Token0 BNB0.00044268
0x0f71d415a9a267405b8db011bb589aff34cc872d3f4aa2059a87db75f4811b4055037342021-03-08 15:00:1128 mins ago0x8a5383a8b9ceeec28d7c96014339ca199d55b8ec IN  BurgerSwap: BURGER Token0 BNB0.00022018
0x2ca38b5b431fe6540061c65a525d7ad3e8133d576e6b37e9ef0833bb55d5ead655035642021-03-08 14:51:4136 mins ago0x1fff35456e30bd82da46c66e9d04c0e8eb5eec9b IN  BurgerSwap: BURGER Token0 BNB0.0005565926
0x21b083865450213340d2ba25fbb29804487f6f68b94c4810967057c4731c9ca755034762021-03-08 14:47:1741 mins ago0x96cf0a1e2225162fb8c707e0166f69158364853f IN  BurgerSwap: BURGER Token0 BNB0.0008947096
0xa50d17d8105f766e56c72cebfeb0c89fd3de50737d529f4a63df9646a19bc7f755034442021-03-08 14:45:4142 mins ago0x98444195f9e0979ea0b9bfa00be49566899123fd IN  BurgerSwap: BURGER Token0 BNB0.00044268
0x2c9794529778a7d99fc098f65de060140a55374406f6b919d12be13974aecb6255033382021-03-08 14:40:2348 mins ago0xedfe501c5439debd34de34f04c3180e9d2baebc0 IN  BurgerSwap: BURGER Token0 BNB0.00044268
0x8616516ac4992ee57456ce0f502c38e534223b280200e618ef3d11d37c83c6c155031212021-03-08 14:29:3258 mins ago0xef575087f1e7bec54046f98119c8c392a37c51dd IN  BurgerSwap: BURGER Token0 BNB0.001456168
0xa828d84668eb9bcbcc75b811ef3ac49ad82b96b1807f0eee665dfb3a1fdc6b9b55031162021-03-08 14:29:1759 mins agoBinance: Hot Wallet IN  BurgerSwap: BURGER Token0 BNB0.0003703
0x044c669a792f28b02a636a11e4cb16fd3ae26e1ebf043dd7bb87b768f391e70555031162021-03-08 14:29:1759 mins agoBinance: Hot Wallet IN  BurgerSwap: BURGER Token0 BNB0.00037018
0x405bfc168573a3e0b58d7b5328d7ec596c0526902b22e178e880b21b9f46a00255030322021-03-08 14:25:051 hr 3 mins agoBinance: Hot Wallet IN  BurgerSwap: BURGER Token0 BNB0.00037018
0x338fa51ea5aae72426e4cdd4aeda8f79eb837a21f9bccd2a01ecfb7eaf68502655029522021-03-08 14:21:051 hr 7 mins ago0x24eebc58ed572dd30623e519022e757206f22e5d IN  BurgerSwap: BURGER Token0 BNB0.00044016
0x5f3a6852ac7e4588d1e1be05374651e49d0157d6e6a3979c632e6ca43c65f65f55029022021-03-08 14:18:351 hr 9 mins ago0xa11e6a4b791e93899f349d7e2c54cb4a97e0c867 IN  BurgerSwap: BURGER Token0 BNB0.00044016
0xed3e02dfcb12b1136756c8c600c7f7fc3d639701762fa2936f4d85224255253155028032021-03-08 14:13:381 hr 14 mins agoBinance: Hot Wallet IN  BurgerSwap: BURGER Token0 BNB0.0005203
[ Download CSV Export 

OVERVIEW

BurgerSwap, a democratized AMM.

Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xd68c6e4b7b856c5e93ea58ac02f986ca4227e1483dbe153d4277b93c8389fce654713272021-03-07 11:59:181 day 3 hrs ago 0x9216508886fea6bf9334a59f9c90411fc6c400e5 BurgerSwap: BURGER Token0 BNB
0xd68c6e4b7b856c5e93ea58ac02f986ca4227e1483dbe153d4277b93c8389fce654713272021-03-07 11:59:181 day 3 hrs ago 0xcb40968e110df189c4d57519e1006602d0fb9c24 BurgerSwap: BURGER Token0 BNB
0xd68c6e4b7b856c5e93ea58ac02f986ca4227e1483dbe153d4277b93c8389fce654713272021-03-07 11:59:181 day 3 hrs ago 0xcb40968e110df189c4d57519e1006602d0fb9c24 BurgerSwap: BURGER Token0 BNB
0xd68c6e4b7b856c5e93ea58ac02f986ca4227e1483dbe153d4277b93c8389fce654713272021-03-07 11:59:181 day 3 hrs ago 0xcb40968e110df189c4d57519e1006602d0fb9c24 BurgerSwap: BURGER Token0 BNB
0xd68c6e4b7b856c5e93ea58ac02f986ca4227e1483dbe153d4277b93c8389fce654713272021-03-07 11:59:181 day 3 hrs ago 0xcb40968e110df189c4d57519e1006602d0fb9c24 BurgerSwap: BURGER Token0 BNB
0x7998edac0a9181a589f78813127801d91527ee04fdea0610533bb511e9f4d2b954713002021-03-07 11:57:571 day 3 hrs ago 0x9216508886fea6bf9334a59f9c90411fc6c400e5 BurgerSwap: BURGER Token0 BNB
0x7998edac0a9181a589f78813127801d91527ee04fdea0610533bb511e9f4d2b954713002021-03-07 11:57:571 day 3 hrs ago 0xcb40968e110df189c4d57519e1006602d0fb9c24 BurgerSwap: BURGER Token0 BNB
0x7998edac0a9181a589f78813127801d91527ee04fdea0610533bb511e9f4d2b954713002021-03-07 11:57:571 day 3 hrs ago 0xcb40968e110df189c4d57519e1006602d0fb9c24 BurgerSwap: BURGER Token0 BNB
0x7998edac0a9181a589f78813127801d91527ee04fdea0610533bb511e9f4d2b954713002021-03-07 11:57:571 day 3 hrs ago 0xcb40968e110df189c4d57519e1006602d0fb9c24 BurgerSwap: BURGER Token0 BNB
0x7998edac0a9181a589f78813127801d91527ee04fdea0610533bb511e9f4d2b954713002021-03-07 11:57:571 day 3 hrs ago 0xcb40968e110df189c4d57519e1006602d0fb9c24 BurgerSwap: BURGER Token0 BNB
0x903120703e4a711fa313e9f600d8bdce3d664e3f8d7b14676dfe08d0827e7c4254712782021-03-07 11:56:511 day 3 hrs ago 0x86a327715d707bca24983b1145d1f6c40c5d4a74 BurgerSwap: BURGER Token0 BNB
0x903120703e4a711fa313e9f600d8bdce3d664e3f8d7b14676dfe08d0827e7c4254712782021-03-07 11:56:511 day 3 hrs ago 0x9154c2684aef8d106babcb19aa81d4fabf7581ec BurgerSwap: BURGER Token0 BNB
0x903120703e4a711fa313e9f600d8bdce3d664e3f8d7b14676dfe08d0827e7c4254712782021-03-07 11:56:511 day 3 hrs ago 0x86a327715d707bca24983b1145d1f6c40c5d4a74 BurgerSwap: BURGER Token0 BNB
0x903120703e4a711fa313e9f600d8bdce3d664e3f8d7b14676dfe08d0827e7c4254712782021-03-07 11:56:511 day 3 hrs ago 0x86a327715d707bca24983b1145d1f6c40c5d4a74 BurgerSwap: BURGER Token0 BNB
0x903120703e4a711fa313e9f600d8bdce3d664e3f8d7b14676dfe08d0827e7c4254712782021-03-07 11:56:511 day 3 hrs ago 0x3becd05231bbba6f7adda92f3c79fb3aa96d943b BurgerSwap: BURGER Token0 BNB
0x903120703e4a711fa313e9f600d8bdce3d664e3f8d7b14676dfe08d0827e7c4254712782021-03-07 11:56:511 day 3 hrs ago BurgerSwap: USDT-BURGER BurgerSwap: BURGER Token0 BNB
0x903120703e4a711fa313e9f600d8bdce3d664e3f8d7b14676dfe08d0827e7c4254712782021-03-07 11:56:511 day 3 hrs ago BurgerSwap: USDT-BURGER BurgerSwap: BURGER Token0 BNB
0x903120703e4a711fa313e9f600d8bdce3d664e3f8d7b14676dfe08d0827e7c4254712782021-03-07 11:56:511 day 3 hrs ago 0x3becd05231bbba6f7adda92f3c79fb3aa96d943b BurgerSwap: BURGER Token0 BNB
0x903120703e4a711fa313e9f600d8bdce3d664e3f8d7b14676dfe08d0827e7c4254712782021-03-07 11:56:511 day 3 hrs ago 0x3becd05231bbba6f7adda92f3c79fb3aa96d943b BurgerSwap: BURGER Token0 BNB
0x903120703e4a711fa313e9f600d8bdce3d664e3f8d7b14676dfe08d0827e7c4254712782021-03-07 11:56:511 day 3 hrs ago 0x3becd05231bbba6f7adda92f3c79fb3aa96d943b BurgerSwap: BURGER Token0 BNB
0x903120703e4a711fa313e9f600d8bdce3d664e3f8d7b14676dfe08d0827e7c4254712782021-03-07 11:56:511 day 3 hrs ago 0xbf6527834dbb89cdc97a79fcd62e6c08b19f8ec0 BurgerSwap: BURGER Token0 BNB
0x903120703e4a711fa313e9f600d8bdce3d664e3f8d7b14676dfe08d0827e7c4254712782021-03-07 11:56:511 day 3 hrs ago BurgerSwap: USDT-BURGER BurgerSwap: BURGER Token0 BNB
0x903120703e4a711fa313e9f600d8bdce3d664e3f8d7b14676dfe08d0827e7c4254712782021-03-07 11:56:511 day 3 hrs ago 0x3becd05231bbba6f7adda92f3c79fb3aa96d943b BurgerSwap: BURGER Token0 BNB
0x903120703e4a711fa313e9f600d8bdce3d664e3f8d7b14676dfe08d0827e7c4254712782021-03-07 11:56:511 day 3 hrs ago 0xbf6527834dbb89cdc97a79fcd62e6c08b19f8ec0 BurgerSwap: BURGER Token0 BNB
0x903120703e4a711fa313e9f600d8bdce3d664e3f8d7b14676dfe08d0827e7c4254712782021-03-07 11:56:511 day 3 hrs ago PancakeSwap: BURGER BurgerSwap: BURGER Token0 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Dgas

Compiler Version
v0.6.6+commit.6c089d02

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at BscScan.com on 2020-09-10
*/

// Dependency file: contracts/interfaces/IERC20.sol

// pragma solidity >=0.5.0;

interface IERC20 {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);
}

// Dependency file: contracts/libraries/SafeMath.sol

// SPDX-License-Identifier: MIT

// pragma solidity ^0.6.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, 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) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * 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);
        uint256 c = a - b;

        return c;
    }

    /**
     * @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) {
        // 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 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts 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) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message 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, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts 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) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message 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, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}
// Dependency file: contracts/modules/Upgradable.sol

// pragma solidity >=0.5.16;

contract UpgradableProduct {
    address public impl;

    event ImplChanged(address indexed _oldImpl, address indexed _newImpl);

    constructor() public {
        impl = msg.sender;
    }

    modifier requireImpl() {
        require(msg.sender == impl, 'FORBIDDEN');
        _;
    }

    function upgradeImpl(address _newImpl) public requireImpl {
        require(_newImpl != address(0), 'INVALID_ADDRESS');
        require(_newImpl != impl, 'NO_CHANGE');
        address lastImpl = impl;
        impl = _newImpl;
        emit ImplChanged(lastImpl, _newImpl);
    }
}

contract UpgradableGovernance {
    address public governor;

    event GovernorChanged(address indexed _oldGovernor, address indexed _newGovernor);

    constructor() public {
        governor = msg.sender;
    }

    modifier requireGovernor() {
        require(msg.sender == governor, 'FORBIDDEN');
        _;
    }

    function upgradeGovernance(address _newGovernor) public requireGovernor {
        require(_newGovernor != address(0), 'INVALID_ADDRESS');
        require(_newGovernor != governor, 'NO_CHANGE');
        address lastGovernor = governor;
        governor = _newGovernor;
        emit GovernorChanged(lastGovernor, _newGovernor);
    }
}

// Dependency file: contracts/interfaces/ERC2917-Interface.sol

//SPDX-License-Identifier: MIT
// pragma solidity >=0.6.6;
// import '../interfaces/IERC20.sol';

interface IERC2917 is IERC20 {

    /// @dev This emit when interests amount per block is changed by the owner of the contract.
    /// It emits with the old interests amount and the new interests amount.
    event InterestRatePerBlockChanged (uint oldValue, uint newValue);

    /// @dev This emit when a users' productivity has changed
    /// It emits with the user's address and the the value after the change.
    event ProductivityIncreased (address indexed user, uint value);

    /// @dev This emit when a users' productivity has changed
    /// It emits with the user's address and the the value after the change.
    event ProductivityDecreased (address indexed user, uint value);

    /// @dev Return the current contract's interests rate per block.
    /// @return The amount of interests currently producing per each block.
    function interestsPerBlock() external view returns (uint);

    /// @notice Change the current contract's interests rate.
    /// @dev Note the best practice will be restrict the gross product provider's contract address to call this.
    /// @return The true/fase to notice that the value has successfully changed or not, when it succeed, it will emite the InterestRatePerBlockChanged event.
    function changeInterestRatePerBlock(uint value) external returns (bool);

    /// @notice It will get the productivity of given user.
    /// @dev it will return 0 if user has no productivity proved in the contract.
    /// @return user's productivity and overall productivity.
    function getProductivity(address user) external view returns (uint, uint);

    /// @notice increase a user's productivity.
    /// @dev Note the best practice will be restrict the callee to prove of productivity's contract address.
    /// @return true to confirm that the productivity added success.
    function increaseProductivity(address user, uint value) external returns (bool);

    /// @notice decrease a user's productivity.
    /// @dev Note the best practice will be restrict the callee to prove of productivity's contract address.
    /// @return true to confirm that the productivity removed success.
    function decreaseProductivity(address user, uint value) external returns (bool);

    /// @notice take() will return the interests that callee will get at current block height.
    /// @dev it will always calculated by block.number, so it will change when block height changes.
    /// @return amount of the interests that user are able to mint() at current block height.
    function take() external view returns (uint);

    /// @notice similar to take(), but with the block height joined to calculate return.
    /// @dev for instance, it returns (_amount, _block), which means at block height _block, the callee has accumulated _amount of interests.
    /// @return amount of interests and the block height.
    function takeWithBlock() external view returns (uint, uint);

    /// @notice mint the avaiable interests to callee.
    /// @dev once it mint, the amount of interests will transfer to callee's address.
    /// @return the amount of interests minted.
    function mint() external returns (uint);
}
// Dependency file: contracts/modules/ERC2917Impl.sol

 //SPDX-License-Identifier: MIT
// pragma solidity >=0.6.6;

// import '../interfaces/ERC2917-Interface.sol';
// import '../modules/Upgradable.sol';
// import '../libraries/SafeMath.sol';

/*
    The Objective of ERC2917 Demo is to implement a decentralized staking mechanism, which calculates users' share
    by accumulating productiviy * time. And calculates users revenue from anytime t0 to t1 by the formula below:

        user_accumulated_productivity(time1) - user_accumulated_productivity(time0)
       _____________________________________________________________________________  * (gross_product(t1) - gross_product(t0))
       total_accumulated_productivity(time1) - total_accumulated_productivity(time0)

*/
contract ERC2917Impl is IERC2917, UpgradableProduct, UpgradableGovernance {
    using SafeMath for uint;

    uint public mintCumulation;
    uint public amountPerBlock;

    uint public nounce;

    function incNounce() public {
        nounce ++;
    }

    // implementation of ERC20 interfaces.
    string override public name;
    string override public symbol;
    uint8 override public decimals = 18;
    uint override public totalSupply;

    mapping(address => uint) override public balanceOf;
    mapping(address => mapping(address => uint)) override public allowance;

    function _transfer(address from, address to, uint value) internal virtual {
        require(balanceOf[from] >= value, 'ERC20Token: INSUFFICIENT_BALANCE');
        balanceOf[from] = balanceOf[from].sub(value);
        balanceOf[to] = balanceOf[to].add(value);
        if (to == address(0)) { // burn
            totalSupply = totalSupply.sub(value);
        }
        emit Transfer(from, to, value);
    }

    function approve(address spender, uint value) external virtual override  returns (bool) {
        allowance[msg.sender][spender] = value;
        emit Approval(msg.sender, spender, value);
        return true;
    }

    function transfer(address to, uint value) external virtual override returns (bool) {
        _transfer(msg.sender, to, value);
        return true;
    }

    function transferFrom(address from, address to, uint value) external virtual override returns (bool) {
        require(allowance[from][msg.sender] >= value, 'ERC20Token: INSUFFICIENT_ALLOWANCE');
        allowance[from][msg.sender] = allowance[from][msg.sender].sub(value);
        _transfer(from, to, value);
        return true;
    }

    // end of implementation of ERC20
    
    uint lastRewardBlock;
    uint totalProductivity;
    uint accAmountPerShare;
    struct UserInfo {
        uint amount;     // How many LP tokens the user has provided.
        uint rewardDebt; // Reward debt. 
        uint rewardEarn; // Reward earn and not minted
    }

    mapping(address => UserInfo) public users;

    // creation of the interests token.
    constructor(string memory _name, string memory _symbol, uint8 _decimals, uint _interestsRate) UpgradableProduct() UpgradableGovernance() public {
        name        = _name;
        symbol      = _symbol;
        decimals    = _decimals;

        amountPerBlock = _interestsRate;
    }

    // External function call
    // This function adjust how many token will be produced by each block, eg:
    // changeAmountPerBlock(100)
    // will set the produce rate to 100/block.
    function changeInterestRatePerBlock(uint value) external virtual override requireGovernor returns (bool) {
        uint old = amountPerBlock;
        require(value != old, 'AMOUNT_PER_BLOCK_NO_CHANGE');

        _update();
        amountPerBlock = value;

        emit InterestRatePerBlockChanged(old, value);
        return true;
    }

    // Update reward variables of the given pool to be up-to-date.
    function _update() internal virtual {
        if (block.number <= lastRewardBlock) {
            return;
        }

        if (totalProductivity == 0) {
            lastRewardBlock = block.number;
            return;
        }
        
        uint256 reward = _currentReward();
        balanceOf[address(this)] = balanceOf[address(this)].add(reward);
        totalSupply = totalSupply.add(reward);

        accAmountPerShare = accAmountPerShare.add(reward.mul(1e12).div(totalProductivity));
        lastRewardBlock = block.number;
    }
    
    function _currentReward() internal virtual view returns (uint){
        uint256 multiplier = block.number.sub(lastRewardBlock);
        return multiplier.mul(amountPerBlock);
    }
    
    // Audit user's reward to be up-to-date
    function _audit(address user) internal virtual {
        UserInfo storage userInfo = users[user];
        if (userInfo.amount > 0) {
            uint pending = userInfo.amount.mul(accAmountPerShare).div(1e12).sub(userInfo.rewardDebt);
            userInfo.rewardEarn = userInfo.rewardEarn.add(pending);
            mintCumulation = mintCumulation.add(pending);
            userInfo.rewardDebt = userInfo.amount.mul(accAmountPerShare).div(1e12);
        }
    }

    // External function call
    // This function increase user's productivity and updates the global productivity.
    // the users' actual share percentage will calculated by:
    // Formula:     user_productivity / global_productivity
    function increaseProductivity(address user, uint value) external virtual override requireImpl returns (bool) {
        require(value > 0, 'PRODUCTIVITY_VALUE_MUST_BE_GREATER_THAN_ZERO');

        UserInfo storage userInfo = users[user];
        _update();
        _audit(user);

        totalProductivity = totalProductivity.add(value);

        userInfo.amount = userInfo.amount.add(value);
        userInfo.rewardDebt = userInfo.amount.mul(accAmountPerShare).div(1e12);
        emit ProductivityIncreased(user, value);
        return true;
    }

    // External function call 
    // This function will decreases user's productivity by value, and updates the global productivity
    // it will record which block this is happenning and accumulates the area of (productivity * time)
    function decreaseProductivity(address user, uint value) external virtual override requireImpl returns (bool) {
        UserInfo storage userInfo = users[user];
        require(value > 0 && userInfo.amount >= value, "INSUFFICIENT_PRODUCTIVITY");
        _update();
        _audit(user);
        
        userInfo.amount = userInfo.amount.sub(value);
        userInfo.rewardDebt = userInfo.amount.mul(accAmountPerShare).div(1e12);
        totalProductivity = totalProductivity.sub(value);

        emit ProductivityDecreased(user, value);
        return true;
    }
    
    function takeWithAddress(address user) public view returns (uint) {
        UserInfo storage userInfo = users[user];
        uint _accAmountPerShare = accAmountPerShare;
        // uint256 lpSupply = totalProductivity;
        if (block.number > lastRewardBlock && totalProductivity != 0) {
            uint reward = _currentReward();
            _accAmountPerShare = _accAmountPerShare.add(reward.mul(1e12).div(totalProductivity));
        }
        return userInfo.amount.mul(_accAmountPerShare).div(1e12).sub(userInfo.rewardDebt).add(userInfo.rewardEarn);
    }

    function take() external override virtual view returns (uint) {
        return takeWithAddress(msg.sender);
    }

    // Returns how much a user could earn plus the giving block number.
    function takeWithBlock() external override virtual view returns (uint, uint) {
        uint earn = takeWithAddress(msg.sender);
        return (earn, block.number);
    }


    // External function call
    // When user calls this function, it will calculate how many token will mint to user from his productivity * time
    // Also it calculates global token supply from last time the user mint to this time.
    function mint() external override virtual returns (uint) {
        _update();
        _audit(msg.sender);
        require(users[msg.sender].rewardEarn > 0, "NO_PRODUCTIVITY");
        uint amount = users[msg.sender].rewardEarn;
        _transfer(address(this), msg.sender, users[msg.sender].rewardEarn);
        users[msg.sender].rewardEarn = 0;
        return amount;
    }

    // Returns how many productivity a user has and global has.
    function getProductivity(address user) external override virtual view returns (uint, uint) {
        return (users[user].amount, totalProductivity);
    }

    // Returns the current gorss product rate.
    function interestsPerBlock() external override virtual view returns (uint) {
        return accAmountPerShare;
    }
}

pragma solidity >=0.5.16;

// import './modules/ERC2917Impl.sol';

contract Dgas is ERC2917Impl("Burger Swap", "BURGER", 18, 40 * (10 ** 18)) {
	
}

Contract ABI

[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_oldGovernor","type":"address"},{"indexed":true,"internalType":"address","name":"_newGovernor","type":"address"}],"name":"GovernorChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_oldImpl","type":"address"},{"indexed":true,"internalType":"address","name":"_newImpl","type":"address"}],"name":"ImplChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldValue","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"InterestRatePerBlockChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"ProductivityDecreased","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"ProductivityIncreased","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"amountPerBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"changeInterestRatePerBlock","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"decreaseProductivity","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getProductivity","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"governor","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"impl","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"incNounce","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"increaseProductivity","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"interestsPerBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"mintCumulation","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nounce","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"take","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"takeWithAddress","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"takeWithBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newGovernor","type":"address"}],"name":"upgradeGovernance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newImpl","type":"address"}],"name":"upgradeImpl","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"users","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"rewardDebt","type":"uint256"},{"internalType":"uint256","name":"rewardEarn","type":"uint256"}],"stateMutability":"view","type":"function"}]

6007805460ff19166012908117909155600b60808181526a042757267657220537761760ac1b60a0908152610100604052600660c090815265212aa923a2a960d11b60e052600080546001600160a01b0319908116339081179092556001805490911690911790559193919268022b1c8c1227a0000091620000859160059190620000bd565b5082516200009b906006906020860190620000bd565b506007805460ff191660ff939093169290921790915560035550620001629050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200010057805160ff191683800117855562000130565b8280016001018555821562000130579182015b828111156200013057825182559160200191906001019062000113565b506200013e92915062000142565b5090565b6200015f91905b808211156200013e576000815560010162000149565b90565b61159b80620001726000396000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c80634afa66d6116100f95780638abf607711610097578063a9059cbb11610071578063a9059cbb146104cf578063bfc8b208146104fb578063cf67536514610503578063dd62ed3e1461050b576101a9565b80638abf60771461047b57806395d89b4114610483578063a87430ba1461048b576101a9565b8063616d2463116100d3578063616d24631461040a5780636622c8381461041257806370a08231146104385780637b381b351461045e576101a9565b80634afa66d6146103ce5780634c61f047146103fa5780635808b75b14610402576101a9565b806318160ddd1161016657806323b872dd1161014057806323b872dd1461032857806328e964e91461035e578063313ce5671461038457806336f04e45146103a2576101a9565b806318160ddd146102d25780631a2f1363146102da5780631fedded514610302576101a9565b806306fdde03146101ae578063095ea7b31461022b5780630c340a241461026b5780630e0b6eb51461028f5780631249c58b146102b0578063159090bd146102ca575b600080fd5b6101b6610539565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101f05781810151838201526020016101d8565b50505050905090810190601f16801561021d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102576004803603604081101561024157600080fd5b506001600160a01b0381351690602001356105c7565b604080519115158252519081900360200190f35b61027361062e565b604080516001600160a01b039092168252519081900360200190f35b61029761063d565b6040805192835260208301919091528051918290030190f35b6102b8610654565b60408051918252519081900360200190f35b6102b86106f5565b6102b8610705565b610300600480360360208110156102f057600080fd5b50356001600160a01b031661070b565b005b6103006004803603602081101561031857600080fd5b50356001600160a01b0316610842565b6102576004803603606081101561033e57600080fd5b506001600160a01b0381358116916020810135909116906040013561097b565b6102976004803603602081101561037457600080fd5b50356001600160a01b0316610a4a565b61038c610a69565b6040805160ff9092168252519081900360200190f35b610257600480360360408110156103b857600080fd5b506001600160a01b038135169060200135610a72565b610257600480360360408110156103e457600080fd5b506001600160a01b038135169060200135610bc9565b6102b8610d36565b610300610d3c565b6102b8610d47565b6102b86004803603602081101561042857600080fd5b50356001600160a01b0316610d4d565b6102b86004803603602081101561044e57600080fd5b50356001600160a01b0316610e0d565b6102576004803603602081101561047457600080fd5b5035610e1f565b610273610f16565b6101b6610f25565b6104b1600480360360208110156104a157600080fd5b50356001600160a01b0316610f80565b60408051938452602084019290925282820152519081900360600190f35b610257600480360360408110156104e557600080fd5b506001600160a01b038135169060200135610fa1565b6102b8610fb7565b6102b8610fbd565b6102b86004803603604081101561052157600080fd5b506001600160a01b0381358116916020013516610fc3565b6005805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156105bf5780601f10610594576101008083540402835291602001916105bf565b820191906000526020600020905b8154815290600101906020018083116105a257829003601f168201915b505050505081565b336000818152600a602090815260408083206001600160a01b038716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a35060015b92915050565b6001546001600160a01b031681565b600080600061064b33610d4d565b93439350915050565b600061065e610fe0565b6106673361108b565b336000908152600e60205260409020600201546106bd576040805162461bcd60e51b815260206004820152600f60248201526e4e4f5f50524f44554354495649545960881b604482015290519081900360640190fd5b336000818152600e6020526040902060020154906106dd90309083611135565b336000908152600e6020526040812060020155905090565b600061070033610d4d565b905090565b60085481565b6000546001600160a01b03163314610756576040805162461bcd60e51b81526020600482015260096024820152682327a92124a22222a760b91b604482015290519081900360640190fd5b6001600160a01b0381166107a3576040805162461bcd60e51b815260206004820152600f60248201526e494e56414c49445f4144445245535360881b604482015290519081900360640190fd5b6000546001600160a01b03828116911614156107f2576040805162461bcd60e51b81526020600482015260096024820152684e4f5f4348414e474560b81b604482015290519081900360640190fd5b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917faad46b89531ed10d02d926f4d6bfe234a6126e3fffc02d3b07167575f9c143379190a35050565b6001546001600160a01b0316331461088d576040805162461bcd60e51b81526020600482015260096024820152682327a92124a22222a760b91b604482015290519081900360640190fd5b6001600160a01b0381166108da576040805162461bcd60e51b815260206004820152600f60248201526e494e56414c49445f4144445245535360881b604482015290519081900360640190fd5b6001546001600160a01b0382811691161415610929576040805162461bcd60e51b81526020600482015260096024820152684e4f5f4348414e474560b81b604482015290519081900360640190fd5b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907fde4b3f61490b74c0ed6237523974fe299126bbbf8a8a7482fd220104c59b0c8490600090a35050565b6001600160a01b0383166000908152600a602090815260408083203384529091528120548211156109dd5760405162461bcd60e51b81526004018080602001828103825260228152602001806114f76022913960400191505060405180910390fd5b6001600160a01b0384166000908152600a60209081526040808320338452909152902054610a11908363ffffffff61128716565b6001600160a01b0385166000908152600a60209081526040808320338452909152902055610a40848484611135565b5060019392505050565b6001600160a01b03166000908152600e6020526040902054600c549091565b60075460ff1681565b600080546001600160a01b03163314610abe576040805162461bcd60e51b81526020600482015260096024820152682327a92124a22222a760b91b604482015290519081900360640190fd5b60008211610afd5760405162461bcd60e51b815260040180806020018281038252602c81526020018061153a602c913960400191505060405180910390fd5b6001600160a01b0383166000908152600e60205260409020610b1d610fe0565b610b268461108b565b600c54610b39908463ffffffff6112d016565b600c558054610b4e908463ffffffff6112d016565b808255600d54610b7b9164e8d4a5100091610b6f919063ffffffff61132a16565b9063ffffffff61138316565b60018201556040805184815290516001600160a01b038616917f6c0a24b06ee7f1d9c3c6680c7328531c32bc59cd665436fc686f973cb8c01be7919081900360200190a25060019392505050565b600080546001600160a01b03163314610c15576040805162461bcd60e51b81526020600482015260096024820152682327a92124a22222a760b91b604482015290519081900360640190fd5b6001600160a01b0383166000908152600e602052604090208215801590610c3d575080548311155b610c8e576040805162461bcd60e51b815260206004820152601960248201527f494e53554646494349454e545f50524f44554354495649545900000000000000604482015290519081900360640190fd5b610c96610fe0565b610c9f8461108b565b8054610cb1908463ffffffff61128716565b808255600d54610cd29164e8d4a5100091610b6f919063ffffffff61132a16565b6001820155600c54610cea908463ffffffff61128716565b600c556040805184815290516001600160a01b038616917fddb757202feefdd10c1666f1bb8f9744309ab811b6ef3ec0404a20c36e426697919081900360200190a25060019392505050565b60035481565b600480546001019055565b60045481565b6001600160a01b0381166000908152600e60205260408120600d54600b5443118015610d7a5750600c5415155b15610dbd576000610d896113c5565b9050610db9610dac600c54610b6f64e8d4a510008561132a90919063ffffffff16565b839063ffffffff6112d016565b9150505b610e058260020154610df98460010154610ded64e8d4a51000610b6f87896000015461132a90919063ffffffff16565b9063ffffffff61128716565b9063ffffffff6112d016565b949350505050565b60096020526000908152604090205481565b6001546000906001600160a01b03163314610e6d576040805162461bcd60e51b81526020600482015260096024820152682327a92124a22222a760b91b604482015290519081900360640190fd5b60035482811415610ec5576040805162461bcd60e51b815260206004820152601a60248201527f414d4f554e545f5045525f424c4f434b5f4e4f5f4348414e4745000000000000604482015290519081900360640190fd5b610ecd610fe0565b6003839055604080518281526020810185905281517fc44c80d7c6ac73ee13b2c62e50522dadb6c646b4509ca93e52a45abb38a78e33929181900390910190a150600192915050565b6000546001600160a01b031681565b6006805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156105bf5780601f10610594576101008083540402835291602001916105bf565b600e6020526000908152604090208054600182015460029092015490919083565b6000610fae338484611135565b50600192915050565b600d5490565b60025481565b600a60209081526000928352604080842090915290825290205481565b600b544311610fee57611089565b600c54610ffe5743600b55611089565b60006110086113c5565b3060009081526009602052604090205490915061102b908263ffffffff6112d016565b3060009081526009602052604090205560085461104e908263ffffffff6112d016565b600855600c546110809061107190610b6f8464e8d4a5100063ffffffff61132a16565b600d549063ffffffff6112d016565b600d555043600b555b565b6001600160a01b0381166000908152600e602052604090208054156111315760006110d68260010154610ded64e8d4a51000610b6f600d54876000015461132a90919063ffffffff16565b60028301549091506110ee908263ffffffff6112d016565b60028084019190915554611108908263ffffffff6112d016565b600255600d54825461112a9164e8d4a5100091610b6f9163ffffffff61132a16565b6001830155505b5050565b6001600160a01b0383166000908152600960205260409020548111156111a2576040805162461bcd60e51b815260206004820181905260248201527f4552433230546f6b656e3a20494e53554646494349454e545f42414c414e4345604482015290519081900360640190fd5b6001600160a01b0383166000908152600960205260409020546111cb908263ffffffff61128716565b6001600160a01b038085166000908152600960205260408082209390935590841681522054611200908263ffffffff6112d016565b6001600160a01b03831660008181526009602052604090209190915561123757600854611233908263ffffffff61128716565b6008555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b60006112c983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506113fa565b9392505050565b6000828201838110156112c9576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60008261133957506000610628565b8282028284828161134657fe5b04146112c95760405162461bcd60e51b81526004018080602001828103825260218152602001806115196021913960400191505060405180910390fd5b60006112c983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611491565b6000806113dd600b544361128790919063ffffffff16565b90506113f46003548261132a90919063ffffffff16565b91505090565b600081848411156114895760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561144e578181015183820152602001611436565b50505050905090810190601f16801561147b5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600081836114e05760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561144e578181015183820152602001611436565b5060008385816114ec57fe5b049594505050505056fe4552433230546f6b656e3a20494e53554646494349454e545f414c4c4f57414e4345536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7750524f4455435449564954595f56414c55455f4d5553545f42455f475245415445525f5448414e5f5a45524fa2646970667358221220be438afe413958fc29f4bbb689e40ad200c774a93a9e6ab9a128db742981af3d64736f6c63430006060033

Deployed ByteCode Sourcemap

19940:82:0:-:0;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;19940:82:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;9;2:12;12172:27:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;12172:27:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12881:219;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;12881:219:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;7041:23;;;:::i;:::-;;;;-1:-1:-1;;;;;7041:23:0;;;;;;;;;;;;;;18654:173;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;19077:382;;;:::i;:::-;;;;;;;;;;;;;;;;18458:115;;;:::i;12284:32::-;;;:::i;6714:283::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;6714:283:0;-1:-1:-1;;;;;6714:283:0;;:::i;:::-;;7342:337;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;7342:337:0;-1:-1:-1;;;;;7342:337:0;;:::i;13272:341::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;13272:341:0;;;;;;;;;;;;;;;;;:::i;19532:156::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;19532:156:0;-1:-1:-1;;;;;19532:156:0;;:::i;12242:35::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;16483:560;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;16483:560:0;;;;;;;;:::i;17290:575::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;17290:575:0;;;;;;;;:::i;12002:26::-;;;:::i;12064:56::-;;;:::i;12037:18::-;;;:::i;17877:573::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;17877:573:0;-1:-1:-1;;;;;17877:573:0;;:::i;12325:50::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;12325:50:0;-1:-1:-1;;;;;12325:50:0;;:::i;14537:345::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;14537:345:0;;:::i;6441:19::-;;;:::i;12206:29::-;;;:::i;13953:41::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;13953:41:0;-1:-1:-1;;;;;13953:41:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;13108:156;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;13108:156:0;;;;;;;;:::i;19744:118::-;;;:::i;11969:26::-;;;:::i;12382:70::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;12382:70:0;;;;;;;;;;:::i;12172:27::-;;;;;;;;;;;;;;;-1:-1:-1;;12172:27:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;12881:219::-;12990:10;12963:4;12980:21;;;:9;:21;;;;;;;;-1:-1:-1;;;;;12980:30:0;;;;;;;;;;;:38;;;13034:36;;;;;;;12963:4;;12980:30;;12990:10;;13034:36;;;;;;;;-1:-1:-1;13088:4:0;12881:219;;;;;:::o;7041:23::-;;;-1:-1:-1;;;;;7041:23:0;;:::o;18654:173::-;18719:4;18725;18742:9;18754:27;18770:10;18754:15;:27::i;:::-;18742:39;18806:12;;-1:-1:-1;18654:173:0;-1:-1:-1;;18654:173:0:o;19077:382::-;19128:4;19145:9;:7;:9::i;:::-;19165:18;19172:10;19165:6;:18::i;:::-;19208:10;19233:1;19202:17;;;:5;:17;;;;;:28;;;19194:60;;;;;-1:-1:-1;;;19194:60:0;;;;;;;;;;;;-1:-1:-1;;;19194:60:0;;;;;;;;;;;;;;;19285:10;19265:11;19279:17;;;:5;:17;;;;;:28;;;;19318:66;;19336:4;;19279:28;19318:9;:66::i;:::-;19401:10;19426:1;19395:17;;;:5;:17;;;;;:28;;:32;19445:6;-1:-1:-1;19077:382:0;:::o;18458:115::-;18514:4;18538:27;18554:10;18538:15;:27::i;:::-;18531:34;;18458:115;:::o;12284:32::-;;;;:::o;6714:283::-;6668:4;;-1:-1:-1;;;;;6668:4:0;6654:10;:18;6646:40;;;;;-1:-1:-1;;;6646:40:0;;;;;;;;;;;;-1:-1:-1;;;6646:40:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;6791:22:0;::::1;6783:50;;;::::0;;-1:-1:-1;;;6783:50:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;6783:50:0;;;;;;;;;;;;;::::1;;6864:4;::::0;-1:-1:-1;;;;;6852:16:0;;::::1;6864:4:::0;::::1;6852:16;;6844:38;;;::::0;;-1:-1:-1;;;6844:38:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;6844:38:0;;;;;;;;;;;;;::::1;;6893:16;6912:4:::0;;-1:-1:-1;;;;;6927:15:0;;::::1;-1:-1:-1::0;;;;;;6927:15:0;::::1;::::0;::::1;::::0;;6958:31:::1;::::0;6912:4;;;::::1;::::0;;;6958:31:::1;::::0;6893:16;6958:31:::1;6697:1;6714:283:::0;:::o;7342:337::-;7292:8;;-1:-1:-1;;;;;7292:8:0;7278:10;:22;7270:44;;;;;-1:-1:-1;;;7270:44:0;;;;;;;;;;;;-1:-1:-1;;;7270:44:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;7433:26:0;::::1;7425:54;;;::::0;;-1:-1:-1;;;7425:54:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;7425:54:0;;;;;;;;;;;;;::::1;;7514:8;::::0;-1:-1:-1;;;;;7498:24:0;;::::1;7514:8:::0;::::1;7498:24;;7490:46;;;::::0;;-1:-1:-1;;;7490:46:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;7490:46:0;;;;;;;;;;;;;::::1;;7570:8;::::0;;-1:-1:-1;;;;;7589:23:0;;::::1;-1:-1:-1::0;;;;;;7589:23:0;::::1;::::0;::::1;::::0;;;7628:43:::1;::::0;7570:8;::::1;::::0;7589:23;7570:8;;7628:43:::1;::::0;7547:20:::1;::::0;7628:43:::1;7325:1;7342:337:::0;:::o;13272:341::-;-1:-1:-1;;;;;13392:15:0;;13367:4;13392:15;;;:9;:15;;;;;;;;13408:10;13392:27;;;;;;;;:36;-1:-1:-1;13392:36:0;13384:83;;;;-1:-1:-1;;;13384:83:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13508:15:0;;;;;;:9;:15;;;;;;;;13524:10;13508:27;;;;;;;;:38;;13540:5;13508:38;:31;:38;:::i;:::-;-1:-1:-1;;;;;13478:15:0;;;;;;:9;:15;;;;;;;;13494:10;13478:27;;;;;;;:68;13557:26;13488:4;13573:2;13577:5;13557:9;:26::i;:::-;-1:-1:-1;13601:4:0;13272:341;;;;;:::o;19532:156::-;-1:-1:-1;;;;;19642:11:0;19611:4;19642:11;;;:5;:11;;;;;:18;19662:17;;19642:18;;19532:156::o;12242:35::-;;;;;;:::o;16483:560::-;16586:4;6668;;-1:-1:-1;;;;;6668:4:0;6654:10;:18;6646:40;;;;;-1:-1:-1;;;6646:40:0;;;;;;;;;;;;-1:-1:-1;;;6646:40:0;;;;;;;;;;;;;;;16619:1:::1;16611:5;:9;16603:66;;;;-1:-1:-1::0;;;16603:66:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;16710:11:0;::::1;16682:25;16710:11:::0;;;:5:::1;:11;::::0;;;;16732:9:::1;:7;:9::i;:::-;16752:12;16759:4;16752:6;:12::i;:::-;16797:17;::::0;:28:::1;::::0;16819:5;16797:28:::1;:21;:28;:::i;:::-;16777:17;:48:::0;16856:15;;:26:::1;::::0;16876:5;16856:26:::1;:19;:26;:::i;:::-;16838:44:::0;;;16935:17:::1;::::0;16915:48:::1;::::0;16958:4:::1;::::0;16915:38:::1;::::0;16838:44;16915:38:::1;:19;:38;:::i;:::-;:42:::0;:48:::1;:42;:48;:::i;:::-;16893:19;::::0;::::1;:70:::0;16979:34:::1;::::0;;;;;;;-1:-1:-1;;;;;16979:34:0;::::1;::::0;::::1;::::0;;;;;::::1;::::0;;::::1;-1:-1:-1::0;17031:4:0::1;::::0;16483:560;-1:-1:-1;;;16483:560:0:o;17290:575::-;17393:4;6668;;-1:-1:-1;;;;;6668:4:0;6654:10;:18;6646:40;;;;;-1:-1:-1;;;6646:40:0;;;;;;;;;;;;-1:-1:-1;;;6646:40:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;17438:11:0;::::1;17410:25;17438:11:::0;;;:5:::1;:11;::::0;;;;17468:9;;;;;:37:::1;;-1:-1:-1::0;17481:15:0;;:24;-1:-1:-1;17481:24:0::1;17468:37;17460:75;;;::::0;;-1:-1:-1;;;17460:75:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;17546:9;:7;:9::i;:::-;17566:12;17573:4;17566:6;:12::i;:::-;17617:15:::0;;:26:::1;::::0;17637:5;17617:26:::1;:19;:26;:::i;:::-;17599:44:::0;;;17696:17:::1;::::0;17676:48:::1;::::0;17719:4:::1;::::0;17676:38:::1;::::0;17599:44;17676:38:::1;:19;:38;:::i;:48::-;17654:19;::::0;::::1;:70:::0;17755:17:::1;::::0;:28:::1;::::0;17777:5;17755:28:::1;:21;:28;:::i;:::-;17735:17;:48:::0;17801:34:::1;::::0;;;;;;;-1:-1:-1;;;;;17801:34:0;::::1;::::0;::::1;::::0;;;;;::::1;::::0;;::::1;-1:-1:-1::0;17853:4:0::1;::::0;17290:575;-1:-1:-1;;;17290:575:0:o;12002:26::-;;;;:::o;12064:56::-;12103:6;:9;;;;;;12064:56::o;12037:18::-;;;;:::o;17877:573::-;-1:-1:-1;;;;;17982:11:0;;17937:4;17982:11;;;:5;:11;;;;;18030:17;;18127:15;;18112:12;:30;:56;;;;-1:-1:-1;18146:17:0;;:22;;18112:56;18108:218;;;18185:11;18199:16;:14;:16::i;:::-;18185:30;;18251:63;18274:39;18295:17;;18274:16;18285:4;18274:6;:10;;:16;;;;:::i;:39::-;18251:18;;:63;:22;:63;:::i;:::-;18230:84;;18108:218;;18343:99;18422:8;:19;;;18343:74;18397:8;:19;;;18343:49;18387:4;18343:39;18363:18;18343:8;:15;;;:19;;:39;;;;:::i;:49::-;:53;:74;:53;:74;:::i;:::-;:78;:99;:78;:99;:::i;:::-;18336:106;17877:573;-1:-1:-1;;;;17877:573:0:o;12325:50::-;;;;;;;;;;;;;:::o;14537:345::-;7292:8;;14636:4;;-1:-1:-1;;;;;7292:8:0;7278:10;:22;7270:44;;;;;-1:-1:-1;;;7270:44:0;;;;;;;;;;;;-1:-1:-1;;;7270:44:0;;;;;;;;;;;;;;;14664:14:::1;::::0;14697:12;;::::1;;14689:51;;;::::0;;-1:-1:-1;;;14689:51:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;14753:9;:7;:9::i;:::-;14773:14;:22:::0;;;14813:39:::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;;;;;;;;;::::1;-1:-1:-1::0;14870:4:0::1;::::0;14537:345;-1:-1:-1;;14537:345:0:o;6441:19::-;;;-1:-1:-1;;;;;6441:19:0;;:::o;12206:29::-;;;;;;;;;;;;;;;-1:-1:-1;;12206:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13953:41;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;13108:156::-;13185:4;13202:32;13212:10;13224:2;13228:5;13202:9;:32::i;:::-;-1:-1:-1;13252:4:0;13108:156;;;;:::o;19744:118::-;19837:17;;19744:118;:::o;11969:26::-;;;;:::o;12382:70::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;14958:554::-;15025:15;;15009:12;:31;15005:70;;15057:7;;15005:70;15091:17;;15087:106;;15148:12;15130:15;:30;15175:7;;15087:106;15213:14;15230:16;:14;:16::i;:::-;15302:4;15284:24;;;;:9;:24;;;;;;15213:33;;-1:-1:-1;15284:36:0;;15213:33;15284:36;:28;:36;:::i;:::-;15275:4;15257:24;;;;:9;:24;;;;;:63;15345:11;;:23;;15361:6;15345:23;:15;:23;:::i;:::-;15331:11;:37;15444:17;;15401:62;;15423:39;;:16;:6;15434:4;15423:16;:10;:16;:::i;:39::-;15401:17;;;:62;:21;:62;:::i;:::-;15381:17;:82;-1:-1:-1;15492:12:0;15474:15;:30;14958:554;:::o;15764:468::-;-1:-1:-1;;;;;15850:11:0;;15822:25;15850:11;;;:5;:11;;;;;15876:15;;:19;15872:353;;15912:12;15927:73;15980:8;:19;;;15927:48;15970:4;15927:38;15947:17;;15927:8;:15;;;:19;;:38;;;;:::i;:73::-;16037:19;;;;15912:88;;-1:-1:-1;16037:32:0;;15912:88;16037:32;:23;:32;:::i;:::-;16015:19;;;;:54;;;;16101:14;:27;;16120:7;16101:27;:18;:27;:::i;:::-;16084:14;:44;16185:17;;16165:15;;:48;;16208:4;;16165:38;;;:19;:38;:::i;:48::-;16143:19;;;:70;-1:-1:-1;15872:353:0;15764:468;;:::o;12461:412::-;-1:-1:-1;;;;;12554:15:0;;;;;;:9;:15;;;;;;:24;-1:-1:-1;12554:24:0;12546:69;;;;;-1:-1:-1;;;12546:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12644:15:0;;;;;;:9;:15;;;;;;:26;;12664:5;12644:26;:19;:26;:::i;:::-;-1:-1:-1;;;;;12626:15:0;;;;;;;:9;:15;;;;;;:44;;;;12697:13;;;;;;;:24;;12715:5;12697:24;:17;:24;:::i;:::-;-1:-1:-1;;;;;12681:13:0;;;;;;:9;:13;;;;;:40;;;;12732:93;;12791:11;;:22;;12807:5;12791:22;:15;:22;:::i;:::-;12777:11;:36;12732:93;12855:2;-1:-1:-1;;;;;12840:25:0;12849:4;-1:-1:-1;;;;;12840:25:0;;12859:5;12840:25;;;;;;;;;;;;;;;;;;12461:412;;;:::o;2325:136::-;2383:7;2410:43;2414:1;2417;2410:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;2403:50;2325:136;-1:-1:-1;;;2325:136:0:o;1861:181::-;1919:7;1951:5;;;1975:6;;;;1967:46;;;;;-1:-1:-1;;;1967:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;3215:471;3273:7;3518:6;3514:47;;-1:-1:-1;3548:1:0;3541:8;;3514:47;3585:5;;;3589:1;3585;:5;:1;3609:5;;;;;:10;3601:56;;;;-1:-1:-1;;;3601:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4162:132;4220:7;4247:39;4251:1;4254;4247:39;;;;;;;;;;;;;;;;;:3;:39::i;15524:183::-;15581:4;15597:18;15618:33;15635:15;;15618:12;:16;;:33;;;;:::i;:::-;15597:54;;15669:30;15684:14;;15669:10;:14;;:30;;;;:::i;:::-;15662:37;;;15524:183;:::o;2764:192::-;2850:7;2886:12;2878:6;;;;2870:29;;;;-1:-1:-1;;;2870:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;2870:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2922:5:0;;;2764:192::o;4790:278::-;4876:7;4911:12;4904:5;4896:28;;;;-1:-1:-1;;;4896:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;4896:28:0;;4935:9;4951:1;4947;:5;;;;;;;4790:278;-1:-1:-1;;;;;4790:278:0:o

Swarm Source

ipfs://be438afe413958fc29f4bbb689e40ad200c774a93a9e6ab9a128db742981af3d
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.