Contract 0xae9269f27437f0fcbc232d39ec814844a51d6b8f

 

Contract Overview

BurgerSwap: BURGER Token
Balance:
0 BNB

BNB Value:
$0.00

Token:
Txn Hash
Block
From
To
Value [Txn Fee]
0x3d3d4420c1322580f02cc8c2cd870d02be317e352e5b5e04b9feba8256d0c84882853042021-06-14 8:39:3223 mins ago0x6016988a5e542acb90dc17e68767eafdbb86da3f IN  BurgerSwap: BURGER Token0 BNB0.00022008
0x437f966619839ecf749bbc67e9c19ab0866a20b4f6e01d82d4a046149a45803782852372021-06-14 8:36:1126 mins ago0xeaff5943a6e1c3352c8efa1b5d1397416522adae IN  BurgerSwap: BURGER Token0 BNB0.00018521
0xc4718c64a72dc9edb5691ae1e03453a7cf1305b1b5849844958fa4dca872349082852142021-06-14 8:35:0227 mins ago0x559b2f5d7c9ed1772f636e11538c5eda6dcdd9fe IN  BurgerSwap: BURGER Token0 BNB0.00022134
0xc93e57b41c843c41ded9da0c38ea4542070e3f1721632ad25354747178a954d882851702021-06-14 8:32:5029 mins ago0x559b2f5d7c9ed1772f636e11538c5eda6dcdd9fe IN  BurgerSwap: BURGER Token0 BNB0.00022008
0xb5f760466ba9e0ecb891ad01788335b69f561aa9ce9e4b723bbc8926f389664082851522021-06-14 8:31:5630 mins ago0x79640c6198aab8214d3f1dbf1bf2bd59ec8600c2 IN  BurgerSwap: BURGER Token0 BNB0.00012342
0x73c01763b7910fc7cb42c508309ae5c9b051178cf7b67e9c78e0bc338c18d26482850302021-06-14 8:25:5036 mins ago0x79640c6198aab8214d3f1dbf1bf2bd59ec8600c2 IN  BurgerSwap: BURGER Token0 BNB0.00022008
0x3a4993eaf1f2cfd0d1458ab2bb9785c4021b650faf75aee188b506164d1f779282846172021-06-14 8:05:1157 mins ago0x1a9218d7151579f57ebf86d80cde8981bc3a6960 IN  BurgerSwap: BURGER Token0 BNB0.00018515
0xaa2a9936bdea6890685ecbcc0121d90820d206367d63022bfac33bbe5451f72082845362021-06-14 8:01:081 hr 1 min agoBinance: Hot Wallet IN  BurgerSwap: BURGER Token0 BNB0.00052018
0xd13c4a7b39273696ae0823024447662de3945d7674eb19f278b0748da5c4fe3682840282021-06-14 7:35:441 hr 27 mins ago0xd1093cdf203ebcc85cefd494b7422d9fd56cf0b6 IN  BurgerSwap: BURGER Token0 BNB0.00111054
0xd4faff501bec640d6837bbf07252fe8a37ff1ef3a6eff9dfa1bcd7d8651aa9ca82839832021-06-14 7:33:291 hr 29 mins ago0x62473a4682546878e173f07d42498a0210632d25 IN  BurgerSwap: BURGER Token0 BNB0.00022008
0x1c44c2fdb629c26388076c7825e7a9ee00369c6e7dacac03772243074cc2163d82839412021-06-14 7:31:231 hr 31 mins ago0x52bc393b604626bbb7dff3fbd23e6d64f8a598cf IN  BurgerSwap: BURGER Token0 BNB0.00022134
0x0a159015014de013723d8aa30e3cf1b55b4160dbb28dbf38da8e4cd6edade93182838152021-06-14 7:25:051 hr 37 mins ago0x1a9218d7151579f57ebf86d80cde8981bc3a6960 IN  BurgerSwap: BURGER Token0 BNB0.00022008
0xe804ba84420c17dc08e98972c0a74d2d533b093d3ac0c99db555c7d290bacccc82837342021-06-14 7:20:231 hr 42 mins ago0x1a9218d7151579f57ebf86d80cde8981bc3a6960 IN  BurgerSwap: BURGER Token0 BNB0.00012342
0x733503e4568bee925cb772a4b448c9d04439977de50a262c07c16c61a5a0002082836622021-06-14 7:16:471 hr 45 mins agoBinance: Hot Wallet 2 IN  BurgerSwap: BURGER Token0 BNB0.0005203
0x9fe017aa20a666b817ed256c72e404c53d74f93c3c0c9b8d683a3ffe5cc95a1a82836322021-06-14 7:15:171 hr 47 mins ago0x63bf364f88530c498e7fa7387ed504cc9134992d IN  BurgerSwap: BURGER Token0 BNB0.00018521
0xeabff97b681c71aa6d35e9dc59877cc5c9dff61dc1f8cf20ac0f5583ce4c5bb282835422021-06-14 7:10:471 hr 51 mins ago0x01e6406b836f64f5633ae42a449a819c2d4b84de IN  BurgerSwap: BURGER Token0 BNB0.000296144
0xe43ed2279144f726ff58c38edf65b223aaade2d4612545180fc335895eb92aa582832112021-06-14 6:54:142 hrs 8 mins ago0x600b1459888ceda325e9c19c621722daf61830d6 IN  BurgerSwap: BURGER Token0 BNB0.00052042
0x5fd7f83196bd6d5569372c9eb73351c2798c1c37d645a1c09ad0456213c29fc282829182021-06-14 6:39:352 hrs 23 mins ago0xe75e6be89a94deabcf1c01054aa5a783b7fad59b IN  BurgerSwap: BURGER Token0 BNB0.00022008
0x4388488849507176307d468956a7e7a692f404f66af10adf717116fb1319e5da82819282021-06-14 5:48:423 hrs 14 mins ago0x919fde15ef020910ed2e81892d339abfa84a68f9 IN  BurgerSwap: BURGER Token0 BNB0.00022134
0xc748dc224de2f92b0be740e6e16ee9a4029c0d98db6e8f5171e42fb898192c3082813922021-06-14 5:21:093 hrs 41 mins ago0x765c91997511d6baa28862a5dc5d5ad651b106ea IN  BurgerSwap: BURGER Token0 BNB0.00022134
0xb4126d64771827592e5930ea507108b869cdd28b602a4bdad8ff09bdc6d8bf1582812952021-06-14 5:16:183 hrs 46 mins ago0xae81605c20efd578442123aaf00c9a35bbd792cd IN  BurgerSwap: BURGER Token0 BNB0.00026015
0xb149fb366148b4f70e94da98d38fa7e9cb99f72cbda4bc18b77c8c49e39a3f6e82812182021-06-14 5:12:273 hrs 50 mins ago0xffed835d5af4dd842ec69e25c0c4270e2ee669ec IN  BurgerSwap: BURGER Token0 BNB0.00018503
0xee0d07da4844beffdbd24442a6671f696aabe4a1eadd304d546389e94c74839282808042021-06-14 4:51:454 hrs 11 mins agoBinance: Hot Wallet 2 IN  BurgerSwap: BURGER Token0 BNB0.0005203
0x4f45c6d9009c1f10f77215731b401da17962aad83791aef029877a6bf86bf92882804932021-06-14 4:36:114 hrs 26 mins ago0x0618e8715a46b5285addb604d6323b86d10e26b9 IN  BurgerSwap: BURGER Token0 BNB0.00018509
0x5f2b86748cff143afdc2a0045da5089069f6bdf4e280d6867d9e37cba4738e6682804432021-06-14 4:33:414 hrs 29 mins ago0x5a00983afb42433f4d674b668deb64d62696bdb9 IN  BurgerSwap: BURGER Token0 BNB0.00018521
[ Download CSV Export 

OVERVIEW

BurgerSwap, a democratized AMM.

Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xd68c6e4b7b856c5e93ea58ac02f986ca4227e1483dbe153d4277b93c8389fce654713272021-03-07 11:59:1898 days 21 hrs ago 0x9216508886fea6bf9334a59f9c90411fc6c400e5 BurgerSwap: BURGER Token0 BNB
0xd68c6e4b7b856c5e93ea58ac02f986ca4227e1483dbe153d4277b93c8389fce654713272021-03-07 11:59:1898 days 21 hrs ago 0xcb40968e110df189c4d57519e1006602d0fb9c24 BurgerSwap: BURGER Token0 BNB
0xd68c6e4b7b856c5e93ea58ac02f986ca4227e1483dbe153d4277b93c8389fce654713272021-03-07 11:59:1898 days 21 hrs ago 0xcb40968e110df189c4d57519e1006602d0fb9c24 BurgerSwap: BURGER Token0 BNB
0xd68c6e4b7b856c5e93ea58ac02f986ca4227e1483dbe153d4277b93c8389fce654713272021-03-07 11:59:1898 days 21 hrs ago 0xcb40968e110df189c4d57519e1006602d0fb9c24 BurgerSwap: BURGER Token0 BNB
0xd68c6e4b7b856c5e93ea58ac02f986ca4227e1483dbe153d4277b93c8389fce654713272021-03-07 11:59:1898 days 21 hrs ago 0xcb40968e110df189c4d57519e1006602d0fb9c24 BurgerSwap: BURGER Token0 BNB
0x7998edac0a9181a589f78813127801d91527ee04fdea0610533bb511e9f4d2b954713002021-03-07 11:57:5798 days 21 hrs ago 0x9216508886fea6bf9334a59f9c90411fc6c400e5 BurgerSwap: BURGER Token0 BNB
0x7998edac0a9181a589f78813127801d91527ee04fdea0610533bb511e9f4d2b954713002021-03-07 11:57:5798 days 21 hrs ago 0xcb40968e110df189c4d57519e1006602d0fb9c24 BurgerSwap: BURGER Token0 BNB
0x7998edac0a9181a589f78813127801d91527ee04fdea0610533bb511e9f4d2b954713002021-03-07 11:57:5798 days 21 hrs ago 0xcb40968e110df189c4d57519e1006602d0fb9c24 BurgerSwap: BURGER Token0 BNB
0x7998edac0a9181a589f78813127801d91527ee04fdea0610533bb511e9f4d2b954713002021-03-07 11:57:5798 days 21 hrs ago 0xcb40968e110df189c4d57519e1006602d0fb9c24 BurgerSwap: BURGER Token0 BNB
0x7998edac0a9181a589f78813127801d91527ee04fdea0610533bb511e9f4d2b954713002021-03-07 11:57:5798 days 21 hrs ago 0xcb40968e110df189c4d57519e1006602d0fb9c24 BurgerSwap: BURGER Token0 BNB
0x903120703e4a711fa313e9f600d8bdce3d664e3f8d7b14676dfe08d0827e7c4254712782021-03-07 11:56:5198 days 21 hrs ago 0x86a327715d707bca24983b1145d1f6c40c5d4a74 BurgerSwap: BURGER Token0 BNB
0x903120703e4a711fa313e9f600d8bdce3d664e3f8d7b14676dfe08d0827e7c4254712782021-03-07 11:56:5198 days 21 hrs ago 0x9154c2684aef8d106babcb19aa81d4fabf7581ec BurgerSwap: BURGER Token0 BNB
0x903120703e4a711fa313e9f600d8bdce3d664e3f8d7b14676dfe08d0827e7c4254712782021-03-07 11:56:5198 days 21 hrs ago 0x86a327715d707bca24983b1145d1f6c40c5d4a74 BurgerSwap: BURGER Token0 BNB
0x903120703e4a711fa313e9f600d8bdce3d664e3f8d7b14676dfe08d0827e7c4254712782021-03-07 11:56:5198 days 21 hrs ago 0x86a327715d707bca24983b1145d1f6c40c5d4a74 BurgerSwap: BURGER Token0 BNB
0x903120703e4a711fa313e9f600d8bdce3d664e3f8d7b14676dfe08d0827e7c4254712782021-03-07 11:56:5198 days 21 hrs ago 0x3becd05231bbba6f7adda92f3c79fb3aa96d943b BurgerSwap: BURGER Token0 BNB
0x903120703e4a711fa313e9f600d8bdce3d664e3f8d7b14676dfe08d0827e7c4254712782021-03-07 11:56:5198 days 21 hrs ago BurgerSwap: USDT-BURGER BurgerSwap: BURGER Token0 BNB
0x903120703e4a711fa313e9f600d8bdce3d664e3f8d7b14676dfe08d0827e7c4254712782021-03-07 11:56:5198 days 21 hrs ago BurgerSwap: USDT-BURGER BurgerSwap: BURGER Token0 BNB
0x903120703e4a711fa313e9f600d8bdce3d664e3f8d7b14676dfe08d0827e7c4254712782021-03-07 11:56:5198 days 21 hrs ago 0x3becd05231bbba6f7adda92f3c79fb3aa96d943b BurgerSwap: BURGER Token0 BNB
0x903120703e4a711fa313e9f600d8bdce3d664e3f8d7b14676dfe08d0827e7c4254712782021-03-07 11:56:5198 days 21 hrs ago 0x3becd05231bbba6f7adda92f3c79fb3aa96d943b BurgerSwap: BURGER Token0 BNB
0x903120703e4a711fa313e9f600d8bdce3d664e3f8d7b14676dfe08d0827e7c4254712782021-03-07 11:56:5198 days 21 hrs ago 0x3becd05231bbba6f7adda92f3c79fb3aa96d943b BurgerSwap: BURGER Token0 BNB
0x903120703e4a711fa313e9f600d8bdce3d664e3f8d7b14676dfe08d0827e7c4254712782021-03-07 11:56:5198 days 21 hrs ago 0xbf6527834dbb89cdc97a79fcd62e6c08b19f8ec0 BurgerSwap: BURGER Token0 BNB
0x903120703e4a711fa313e9f600d8bdce3d664e3f8d7b14676dfe08d0827e7c4254712782021-03-07 11:56:5198 days 21 hrs ago BurgerSwap: USDT-BURGER BurgerSwap: BURGER Token0 BNB
0x903120703e4a711fa313e9f600d8bdce3d664e3f8d7b14676dfe08d0827e7c4254712782021-03-07 11:56:5198 days 21 hrs ago 0x3becd05231bbba6f7adda92f3c79fb3aa96d943b BurgerSwap: BURGER Token0 BNB
0x903120703e4a711fa313e9f600d8bdce3d664e3f8d7b14676dfe08d0827e7c4254712782021-03-07 11:56:5198 days 21 hrs ago 0xbf6527834dbb89cdc97a79fcd62e6c08b19f8ec0 BurgerSwap: BURGER Token0 BNB
0x903120703e4a711fa313e9f600d8bdce3d664e3f8d7b14676dfe08d0827e7c4254712782021-03-07 11:56:5198 days 21 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.