Contract 0xae9269f27437f0fcbc232d39ec814844a51d6b8f 5

 

Contract Overview

BurgerSwap: BURGER Token
Balance:
0 BNB

BNB Value:
$0.00

Token:
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x7c5b8a6c453924a3a262213ec25bd32cb6e0f512a6c3eea4923693e2eea7aea3Transfer130819272021-11-30 17:22:4950 mins ago0xdba0ff75331163fd9dd0befce7dbbb1c5f0ee195 IN  BurgerSwap: BURGER Token0 BNB0.00018515
0x06f2a9b04e1349df4513cdd799fc2d6804b97dbbba1f65db6f9a2af1bac9d322Approve130817252021-11-30 17:12:051 hr 1 min ago0x706e1c4ffbcb807003c79b137fe91d976487740f IN  BurgerSwap: BURGER Token0 BNB0.00022008
0xfefa6072cbbf99e704ce857565c305e15a309a1441545dfdc4c9367a70dfd6e2Transfer130816422021-11-30 17:07:521 hr 5 mins ago0x2e021dbb7b1e175752d6cb78cc3c6cc027889c09 IN  BurgerSwap: BURGER Token0 BNB0.00018515
0x723ca0b808e21faa4167772e8df65a4ee8f2aed3b92c34b28e72568bb5d231b9Approve130814032021-11-30 16:55:431 hr 17 mins ago0xdc218e47d08ea1249d4f76495fa1b3a1e41cc73e IN  BurgerSwap: BURGER Token0 BNB0.00022134
0x6450efa1cf42f53ff0226ef760b3c70a4993fff49b71195b02a37803dd7915a3Transfer130810242021-11-30 16:36:011 hr 37 mins agoBinance: Hot Wallet 7 IN  BurgerSwap: BURGER Token0 BNB0.00052018
0xc3bf9b7bb95abc1dc50a0e3b89a1c0572dbb9656ed3f681aaefd2bafdeb9cef6Transfer130807302021-11-30 16:20:391 hr 52 mins ago0x43ad7accfce354a4ad6da5821eb6562aea11dd7a IN  BurgerSwap: BURGER Token0 BNB0.00018509
0x0e4a2d26de524af1d7bc1cead840137c1c1d9732b1093e907be197c01664282dTransfer130807182021-11-30 16:19:561 hr 53 mins agoBinance: Hot Wallet 7 IN  BurgerSwap: BURGER Token0 BNB0.00052018
0x5ff1c3faef0361f7423b7ac51a0bb6910f17ffb0ec5b31d3c8755d30b377381bApprove130799502021-11-30 15:38:322 hrs 34 mins ago0x1787207a129ead9ee747f6c421b0c29790d4be22 IN  BurgerSwap: BURGER Token0 BNB0.00022134
0xf9d76246702eeff77cec1f8ca0039afbf53921d51ecc7465c07d9009dd443bf8Approve130798202021-11-30 15:31:492 hrs 41 mins ago0xbced711c938e2dc7313954f133d0737a04c11251 IN  BurgerSwap: BURGER Token0 BNB0.00022008
0x3d3bfee208588558f38b9d64c4a6c3140b10d31b4bb88ef519551bce7f75e931Transfer130798182021-11-30 15:31:422 hrs 41 mins ago0xf2f2a93fb75a39377a3fa22976a3a507b3eadb65 IN  BurgerSwap: BURGER Token0 BNB0.00011021
0xe13468636866840ae9d8bfcb35509a240e2d57d868dbf3f151760e3d84fcdd63Approve130797772021-11-30 15:29:382 hrs 43 mins ago0xbced711c938e2dc7313954f133d0737a04c11251 IN  BurgerSwap: BURGER Token0 BNB0.00022134
0xa4ccd419f55d867eefe3c341b3f89cdf7bdd303192b3dcabf49a51690c3a553aTransfer130792152021-11-30 14:59:373 hrs 13 mins agoBinance: Hot Wallet 7 IN  BurgerSwap: BURGER Token0 BNB0.00052006
0xfc3e9ca6acf8590b12446e7b60300a92c7a4b741408030bcb0350e0770a045f9Transfer130791152021-11-30 14:53:473 hrs 19 mins ago0x5fd98e7e7ac113d1226c5e343b0ac03c51391a34 IN  BurgerSwap: BURGER Token0 BNB0.000259042
0x36223d5fc81cdc042746bcdf2e1ab52bf1ac552dc74c73554403f94bee9ce2b0Transfer130790522021-11-30 14:50:353 hrs 22 mins agoBinance: Hot Wallet 7 IN  BurgerSwap: BURGER Token0 BNB0.0005203
0x6b53ae1f87cc03884b88a85f685b34d8e800f39609619b39670669896cfc8ba6Transfer130789572021-11-30 14:45:503 hrs 27 mins ago0x9635d2a5fede9e5ca7598f7bf7d239dcd159f234 IN  BurgerSwap: BURGER Token0 BNB0.00018497
0xf409f88a0a7a58151d29ede8e079c468a5bfb175e94c2343d0e724a834247dfaTransfer130785842021-11-30 14:26:123 hrs 47 mins ago0x34f1ebaf7485d3d6c836e23df51ebadbb7400f48 IN  BurgerSwap: BURGER Token0 BNB0.00018503
0xd894226a817775d511dc707948e618a8a84aa94dd26ecb3c46b82f1d5e069e20Approve130784202021-11-30 14:17:123 hrs 56 mins ago0xc719bc9e0c3e07dd9942c488c97f1db09e849d8d IN  BurgerSwap: BURGER Token0 BNB0.00007221
0x1ffbe26718aba6234a3e0dc1986d528e6c7a9a00564ef50fc5f9206e1f7c8451Approve130782172021-11-30 14:06:194 hrs 7 mins ago0x2a01e4bc319c93298f6f3886ba38061a0d9f51fd IN  BurgerSwap: BURGER Token0 BNB0.00022134
0x0a5aa5909dab71114fa65ba0de3f447da139eb8c9dd975a4d2047044d46d54edTransfer130781162021-11-30 14:00:514 hrs 12 mins agoBinance: Hot Wallet 7 IN  BurgerSwap: BURGER Token0 BNB0.000728084
0x2399ea9e13aabfd154e1334f8a262bacf8ad41c7162f0b58031f2f6e0ff07e03Transfer130779552021-11-30 13:51:194 hrs 22 mins ago0x60e8e776639e2d1e29e65bb1033addce4275a026 IN  BurgerSwap: BURGER Token0 BNB0.00018509
0x183975da30e82323ea663947b7a22bf3aebac53a3b43bccb58c3f5cea031fd9bTransfer130768312021-11-30 12:52:015 hrs 21 mins ago0x4982085c9e2f89f2ecb8131eca71afad896e89cb IN  BurgerSwap: BURGER Token0 BNB0.00104036
0xe2caf4ae6f83924af693e751b5b2c310f49f21546a8cc7228955b3dce671bb2aApprove130766872021-11-30 12:44:085 hrs 29 mins ago0x9e0f86a64aca45efc903736e3074b2a445aab7d5 IN  BurgerSwap: BURGER Token0 BNB0.00022134
0x2be5c5f600f778a55316855c337926484675e4048775163f9726e822d4480ce8Transfer130766502021-11-30 12:42:015 hrs 31 mins agoBinance: Hot Wallet 7 IN  BurgerSwap: BURGER Token0 BNB0.00052006
0x3e1ecf06b80a32a5c2100113d54d0e82598fb4d712ca9a6f0cefd8fa6141595cApprove130766242021-11-30 12:40:435 hrs 32 mins ago0xaaf8ecbe5d3e7db563ffa9eb2aeb4c272a2d8ec2 IN  BurgerSwap: BURGER Token0 BNB0.00007221
0x7f2a1ac1e1bf8b397fc706ea9320c170dc44192b298e6de571f8476362c8db4aApprove130763102021-11-30 12:23:465 hrs 49 mins ago0xaaf8ecbe5d3e7db563ffa9eb2aeb4c272a2d8ec2 IN  BurgerSwap: BURGER Token0 BNB0.00007221
[ Download CSV Export 

OVERVIEW

BurgerSwap, a democratized AMM.

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

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.