Contract 0x1f77f20f910772eed184fbb258a14a3585f36ca5 1

Contract Overview

Balance:
0 HT

HT Value:
$0.00

Token:
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x9099dbc7cbe7d9cffaabb965864197c5c5d3ebf5aa588bd9442f14ce76cd0577Stake92579612021-10-19 18:24:023 hrs 44 mins ago0xd98b75d7782f5ef36310979ad07661f112ff726a IN  0x1f77f20f910772eed184fbb258a14a3585f36ca50 HT0.00016393252.5
0x7e6848eab93cf457b6c4bc0bbe3d86aa802ecb2bd54fbed5c5265b83ba07cae7Get Reward92579392021-10-19 18:22:563 hrs 45 mins ago0xd98b75d7782f5ef36310979ad07661f112ff726a IN  0x1f77f20f910772eed184fbb258a14a3585f36ca50 HT0.0000613452.5
0x3e3a2789f66f383ae4348e942afb13a4c68a4d949d21a2a904a9d5a1c3459ae7Stake92567752021-10-19 17:24:444 hrs 43 mins ago0x6ede30452e9f16d35e326fd1b16173b2a59847ac IN  0x1f77f20f910772eed184fbb258a14a3585f36ca50 HT0.00015199252.5
0x2547f7ddc90ef46125ca2b8418cc6da0b31a37aa8030f7a699a4b9608e0da666Get Reward92567412021-10-19 17:23:024 hrs 45 mins ago0x6ede30452e9f16d35e326fd1b16173b2a59847ac IN  0x1f77f20f910772eed184fbb258a14a3585f36ca50 HT0.0000613452.5
0x26e2311f3abbb40581683ea2f83d10d47cda904aa35a7c3fc15640302bbefa7fStake92566192021-10-19 17:16:564 hrs 51 mins ago0x86972235557849fbedee5746d3184c888d9f2a31 IN  0x1f77f20f910772eed184fbb258a14a3585f36ca50 HT0.00015202252.5
0xb0590f0da34c614a576d8f5d1a5d5336c540ebe81de13092219b4db259434f81Stake92566142021-10-19 17:16:414 hrs 51 mins ago0x0c7c3fd9c225526ccebf836c814e67dae9fad4b7 IN  0x1f77f20f910772eed184fbb258a14a3585f36ca50 HT0.00015202252.5
0xf2c73017c6fcd2945e31f23a57598d41494df289b9be9cdba9ec48e7c2bab25eStake92566092021-10-19 17:16:264 hrs 52 mins ago0xb9a127c2ee24cbbb9b86bbb7ac268878dc529d13 IN  0x1f77f20f910772eed184fbb258a14a3585f36ca50 HT0.00015202252.5
0x736d9cc3ab9006e7bee5b100216b5ad296301e5270573ba7542599db436f724eStake92566052021-10-19 17:16:144 hrs 52 mins ago0x0984cc32c4a94fc030fe6df42a8a3216a8d74449 IN  0x1f77f20f910772eed184fbb258a14a3585f36ca50 HT0.00015199252.5
0xc9d5192bfdbd5e12aab5a3278c797e7c46a264a1d27915fd5e71376bc199918bStake92565972021-10-19 17:15:504 hrs 52 mins ago0x2979764c81d5375dd3dccf801892bb0dea9c3fc7 IN  0x1f77f20f910772eed184fbb258a14a3585f36ca50 HT0.00015199252.5
0x81cb05c001cbd8baee30b49b5e16c16db5d599887980acc654a8416170d0bbc2Get Reward92565952021-10-19 17:15:444 hrs 52 mins ago0x86972235557849fbedee5746d3184c888d9f2a31 IN  0x1f77f20f910772eed184fbb258a14a3585f36ca50 HT0.0000613452.5
0xdb45bffd33c9387029f68b6e54702eded8924079d33a2657f7ebc7acfdbb6c16Get Reward92565912021-10-19 17:15:324 hrs 52 mins ago0x0c7c3fd9c225526ccebf836c814e67dae9fad4b7 IN  0x1f77f20f910772eed184fbb258a14a3585f36ca50 HT0.0000613452.5
0xf183b4c0740278bbac08bfe521b556227d6c36d71b77d13c5f1c216c064341e7Get Reward92565872021-10-19 17:15:204 hrs 53 mins ago0xb9a127c2ee24cbbb9b86bbb7ac268878dc529d13 IN  0x1f77f20f910772eed184fbb258a14a3585f36ca50 HT0.0000613452.5
0x00eeafff1348a1d46aa91af28e596a53fd3a634dcd13cb8b4d00bdc11aa926f3Get Reward92565832021-10-19 17:15:084 hrs 53 mins ago0x0984cc32c4a94fc030fe6df42a8a3216a8d74449 IN  0x1f77f20f910772eed184fbb258a14a3585f36ca50 HT0.0000613452.5
0xc79d072d58326c73dcaf62e7097b55149a950cfdbe92bef473e2c253853d5683Get Reward92565672021-10-19 17:14:204 hrs 54 mins ago0x2979764c81d5375dd3dccf801892bb0dea9c3fc7 IN  0x1f77f20f910772eed184fbb258a14a3585f36ca50 HT0.0000613452.5
0xe45f2fb8ca0e14c9323cf6e3bc0826748a6b367f96f3b5e679ca640343411db8Stake92564862021-10-19 17:10:174 hrs 58 mins ago0x2779b3d15f81cf1dd8378661b69ccf40cf12086b IN  0x1f77f20f910772eed184fbb258a14a3585f36ca50 HT0.00015199252.5
0x90a398d5f7a52c53460927b78b89b13025fc436453dfd97a5b46ba4bb91a2140Stake92564792021-10-19 17:09:564 hrs 58 mins ago0x1741de98a65179535a873a992e880c924688f2ee IN  0x1f77f20f910772eed184fbb258a14a3585f36ca50 HT0.00015199252.5
0xeee65e2d717cc6df631d0caac9381bb746af01fdcbeff802bdb4996d1a289179Stake92564712021-10-19 17:09:324 hrs 58 mins ago0x885ab1e7770aa2b1948edeca0ddcde5fc2c77c76 IN  0x1f77f20f910772eed184fbb258a14a3585f36ca50 HT0.00015199252.5
0x730a745b3be70c622fee31195ea2a10749bbe42a7a3f42efc75c376a059b1699Stake92564632021-10-19 17:09:084 hrs 59 mins ago0x0128c450737fc22cbcbe8d58c112a5302a536791 IN  0x1f77f20f910772eed184fbb258a14a3585f36ca50 HT0.00015199252.5
0x47c4043ca99b33011d62c4f6ca44718659849a1081727b332b91f97e010f2185Get Reward92554932021-10-19 16:20:365 hrs 47 mins ago0x2779b3d15f81cf1dd8378661b69ccf40cf12086b IN  0x1f77f20f910772eed184fbb258a14a3585f36ca50 HT0.0000613452.5
0x5019ba42066a0e87c952322179eadf987d4db837d3b9df42aa557142b5b377f0Get Reward92554902021-10-19 16:20:275 hrs 48 mins ago0x1741de98a65179535a873a992e880c924688f2ee IN  0x1f77f20f910772eed184fbb258a14a3585f36ca50 HT0.0000613452.5
0xecdf34aeb199114dfb2f2be86d7fb7c9ed9daaefa59f19dc8b9a07fcd692e05fGet Reward92554862021-10-19 16:20:155 hrs 48 mins ago0x885ab1e7770aa2b1948edeca0ddcde5fc2c77c76 IN  0x1f77f20f910772eed184fbb258a14a3585f36ca50 HT0.0000613452.5
0xfde64a4b4acf7d5b6a26ef918e0de78e9f83918ce5924696f73a60950d83387bGet Reward92554832021-10-19 16:20:065 hrs 48 mins ago0x0128c450737fc22cbcbe8d58c112a5302a536791 IN  0x1f77f20f910772eed184fbb258a14a3585f36ca50 HT0.0000613452.5
0x3d9cf20908c3c14738dc48e063282e33b2d1229ece48a81e8eebbe65799e2bacStake92542642021-10-19 15:19:096 hrs 49 mins ago0xff590c87f4b0ee02e0dc07e723e7b8699d12c2c5 IN  0x1f77f20f910772eed184fbb258a14a3585f36ca50 HT0.00015196252.5
0x9e235e3e4e00910250a17cb7141badbbb1dec9d7e5662ef40cf27f4b39ded478Get Reward92542552021-10-19 15:18:426 hrs 49 mins ago0xff590c87f4b0ee02e0dc07e723e7b8699d12c2c5 IN  0x1f77f20f910772eed184fbb258a14a3585f36ca50 HT0.0000613452.5
0xb00f0f5eee579b3af57808fccbc19e20af3ddbeda250ae44c1c15615246d8b1bStake92542302021-10-19 15:17:276 hrs 51 mins ago0xefa667fb78aba7489eb3109f844205fe6f9bc5a2 IN  0x1f77f20f910772eed184fbb258a14a3585f36ca50 HT0.00016396252.5
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
VolPool

Compiler Version
v0.7.6+commit.7338295f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 1 of 6: VolPool.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.7.0;

import './Math.sol';

import './SafeMath.sol';

import './IERC20.sol';

import './Address.sol';

import './SafeERC20.sol';

contract VolPool {

    using SafeERC20 for IERC20;
    using SafeMath for uint256;

    uint256 public starttime;

    address public defaultReferrer;

    IERC20 public USDT;
    IERC20 public VOL;

    mapping(address => User) public userInfo;

    event Staked(address indexed user, address token0, address token1, uint256 amount0, uint256 amount1);
    event Withdrawn(address indexed user, address token0, address token1, uint256 amount0, uint256 amount1);
    event RewardPaid(address indexed user);

    struct User {
        bool active;
        uint256 usdtAmount;
        uint256 volAmount;
        address referrer;
        address[] subordinates;
    }

    constructor(
        address USDT_,
        address VOL_,
        address defaultReferrer_,
        uint256 starttime_
    ) {
        USDT = IERC20(USDT_);
        VOL = IERC20(VOL_);
        defaultReferrer = defaultReferrer_;
        starttime = starttime_;
    }

    modifier checkStart() {
        require(block.timestamp >= starttime, 'not start');
        _;
    }

    // stake visibility is public as overriding LPTokenWrapper's stake() function

    function stake(address _referrer, uint256 _amount0, uint256 _amount1)
        public
        checkStart
    {
        if(!userInfo[msg.sender].active) {
            if(userInfo[_referrer].active) {
                userInfo[_referrer].subordinates.push(msg.sender);
                userInfo[msg.sender].referrer = _referrer;
            }else {
                userInfo[msg.sender].referrer = defaultReferrer;
            }
            userInfo[msg.sender].active = true;
        }
        require(_amount0 > 0 || _amount1 > 0, 'Cannot stake 0');
        if(_amount0 > 0) {
            userInfo[msg.sender].usdtAmount = userInfo[msg.sender].usdtAmount.add(_amount0);
            USDT.safeTransferFrom(msg.sender, address(this), _amount0);
        }
        if(_amount1 > 0) {
            userInfo[msg.sender].volAmount = userInfo[msg.sender].volAmount.add(_amount1);
            VOL.safeTransferFrom(msg.sender, address(this), _amount1);
        }
        emit Staked(msg.sender, address(USDT), address(VOL), _amount0, _amount1);
    }

    function withdraw(uint256 amount0, uint256 amount1)
        public
        checkStart
    {
        require(amount0 > 0 || amount1 > 0, 'Cannot withdraw 0');
        if(amount0 > 0) {
            userInfo[msg.sender].usdtAmount = userInfo[msg.sender].usdtAmount.sub(amount0);
            USDT.safeTransfer(msg.sender, amount0);
        }
        if(amount1 > 0) {
            userInfo[msg.sender].volAmount = userInfo[msg.sender].volAmount.sub(amount1);
            VOL.safeTransfer(msg.sender, amount1);
        }
        emit Withdrawn(msg.sender, address(USDT), address(VOL), amount0, amount1);
    }

    function exit() external {
        uint256 amount0 = userInfo[msg.sender].usdtAmount;
        uint256 amount1 = userInfo[msg.sender].volAmount;
        withdraw(amount0, amount1);
        getReward();
    }

    function getReward() public checkStart {
        emit RewardPaid(msg.sender);
    }

    function getSubordinates() external view returns(address[] memory) {
        return userInfo[msg.sender].subordinates;
    }
}

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

pragma solidity >=0.6.2 <0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

pragma solidity >=0.6.0 <0.8.0;

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

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

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

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

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

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

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

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

File 4 of 6: Math.sol
// SPDX-License-Identifier: MIT

pragma solidity >=0.6.0 <0.8.0;

/**
 * @dev Standard math utilities missing in the Solidity language.
 */
library Math {
    /**
     * @dev Returns the largest of two numbers.
     */
    function max(uint256 a, uint256 b) internal pure returns (uint256) {
        return a >= b ? a : b;
    }

    /**
     * @dev Returns the smallest of two numbers.
     */
    function min(uint256 a, uint256 b) internal pure returns (uint256) {
        return a < b ? a : b;
    }

    /**
     * @dev Returns the average of two numbers. The result is rounded towards
     * zero.
     */
    function average(uint256 a, uint256 b) internal pure returns (uint256) {
        // (a + b) / 2 can overflow, so we distribute
        return (a / 2) + (b / 2) + ((a % 2 + b % 2) / 2);
    }
}

File 5 of 6: SafeERC20.sol
// SPDX-License-Identifier: MIT

pragma solidity >=0.6.0 <0.8.0;

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

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

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

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

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

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

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

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

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

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

pragma solidity >=0.6.0 <0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"USDT_","type":"address"},{"internalType":"address","name":"VOL_","type":"address"},{"internalType":"address","name":"defaultReferrer_","type":"address"},{"internalType":"uint256","name":"starttime_","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"}],"name":"RewardPaid","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"address","name":"token0","type":"address"},{"indexed":false,"internalType":"address","name":"token1","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount0","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1","type":"uint256"}],"name":"Staked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"address","name":"token0","type":"address"},{"indexed":false,"internalType":"address","name":"token1","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount0","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1","type":"uint256"}],"name":"Withdrawn","type":"event"},{"inputs":[],"name":"USDT","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"VOL","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"defaultReferrer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"exit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getSubordinates","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_referrer","type":"address"},{"internalType":"uint256","name":"_amount0","type":"uint256"},{"internalType":"uint256","name":"_amount1","type":"uint256"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"starttime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userInfo","outputs":[{"internalType":"bool","name":"active","type":"bool"},{"internalType":"uint256","name":"usdtAmount","type":"uint256"},{"internalType":"uint256","name":"volAmount","type":"uint256"},{"internalType":"address","name":"referrer","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount0","type":"uint256"},{"internalType":"uint256","name":"amount1","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405234801561001057600080fd5b506040516117ef3803806117ef8339818101604052608081101561003357600080fd5b810190808051906020019092919080519060200190929190805190602001909291908051906020019092919050505083600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600081905550505050506116b08061013f6000396000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c806391b331251161006657806391b33125146101e0578063c54e44eb14610214578063e9086e5a14610248578063e9fad8ee146102a7578063fc93fa0e146102b15761009e565b80630c51b88f146100a35780631959a002146100fb5780633d18b91214610180578063441a3e701461018a5780638da58897146101c2575b600080fd5b6100f9600480360360608110156100b957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291905050506102e5565b005b61013d6004803603602081101561011157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610973565b6040518085151581526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff16815260200194505050505060405180910390f35b6101886109d0565b005b6101c0600480360360408110156101a057600080fd5b810190808035906020019092919080359060200190929190505050610a8d565b005b6101ca610e44565b6040518082815260200191505060405180910390f35b6101e8610e4a565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61021c610e70565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610250610e96565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015610293578082015181840152602081019050610278565b505050509050019250505060405180910390f35b6102af610f64565b005b6102b9611008565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60005442101561035d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f6e6f74207374617274000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff1661062f57600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff161561052f57600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600401339080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506105d3565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b6001600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160006101000a81548160ff0219169083151502179055505b600082118061063e5750600081115b6106b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f43616e6e6f74207374616b65203000000000000000000000000000000000000081525060200191505060405180910390fd5b60008211156107a45761070e82600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015461102e90919063ffffffff16565b600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055506107a3333084600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166110b6909392919063ffffffff16565b5b60008111156108985761080281600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002015461102e90919063ffffffff16565b600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020181905550610897333083600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166110b6909392919063ffffffff16565b5b3373ffffffffffffffffffffffffffffffffffffffff167f2adfdcbeab2f37c13101fc8d345f8ac16dbf5529b4ea9cd9fcf7e588f9b29dbc600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168585604051808573ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff16815260200183815260200182815260200194505050505060405180910390a2505050565b60046020528060005260406000206000915090508060000160009054906101000a900460ff16908060010154908060020154908060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905084565b600054421015610a48576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f6e6f74207374617274000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff167f89d5d62b3361ed94828951e26b7ada188d74e344b4df3348076f223ca424bae860405160405180910390a2565b600054421015610b05576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f6e6f74207374617274000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000821180610b145750600081115b610b86576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f43616e6e6f74207769746864726177203000000000000000000000000000000081525060200191505060405180910390fd5b6000821115610c7857610be482600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015461117790919063ffffffff16565b600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010181905550610c773383600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166111fa9092919063ffffffff16565b5b6000811115610d6a57610cd681600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002015461117790919063ffffffff16565b600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020181905550610d693382600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166111fa9092919063ffffffff16565b5b3373ffffffffffffffffffffffffffffffffffffffff167f144f5f62c08d623a6f383205dc8d5ef825b693748e2977846e18121b6780413a600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168585604051808573ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff16815260200183815260200182815260200194505050505060405180910390a25050565b60005481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600401805480602002602001604051908101604052809291908181526020018280548015610f5a57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610f10575b5050505050905090565b6000600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015490506000600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201549050610ffc8282610a8d565b6110046109d0565b5050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000808284019050838110156110ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b611171846323b872dd60e01b858585604051602401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061129c565b50505050565b6000828211156111ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525060200191505060405180910390fd5b818303905092915050565b6112978363a9059cbb60e01b8484604051602401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061129c565b505050565b60006112fe826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661138b9092919063ffffffff16565b90506000815111156113865780806020019051602081101561131f57600080fd5b8101908080519060200190929190505050611385576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180611651602a913960400191505060405180910390fd5b5b505050565b606061139a84846000856113a3565b90509392505050565b6060824710156113fe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061162b6026913960400191505060405180910390fd5b6114078561154b565b611479576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000081525060200191505060405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040518082805190602001908083835b602083106114c857805182526020820191506020810190506020830392506114a5565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d806000811461152a576040519150601f19603f3d011682016040523d82523d6000602084013e61152f565b606091505b509150915061153f82828661155e565b92505050949350505050565b600080823b905060008111915050919050565b6060831561156e57829050611623565b6000835111156115815782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156115e85780820151818401526020810190506115cd565b50505050905090810190601f1680156116155780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b939250505056fe416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c5361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a2646970667358221220ca85f55435aa1ae335911732ce4fd6776f2e804e210ce868d145e3548ec3faef64736f6c63430007060033000000000000000000000000a71edc38d189767582c38a3145b5873052c3e47a0000000000000000000000001d84a8826aeb06d3844a5d3893d32c6da64dcd7b0000000000000000000000002979764c81d5375dd3dccf801892bb0dea9c3fc700000000000000000000000000000000000000000000000000000000609907e0

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

000000000000000000000000a71edc38d189767582c38a3145b5873052c3e47a0000000000000000000000001d84a8826aeb06d3844a5d3893d32c6da64dcd7b0000000000000000000000002979764c81d5375dd3dccf801892bb0dea9c3fc700000000000000000000000000000000000000000000000000000000609907e0

-----Decoded View---------------
Arg [0] : USDT_ (address): 0xa71edc38d189767582c38a3145b5873052c3e47a
Arg [1] : VOL_ (address): 0x1d84a8826aeb06d3844a5d3893d32c6da64dcd7b
Arg [2] : defaultReferrer_ (address): 0x2979764c81d5375dd3dccf801892bb0dea9c3fc7
Arg [3] : starttime_ (uint256): 1620641760

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 000000000000000000000000a71edc38d189767582c38a3145b5873052c3e47a
Arg [1] : 0000000000000000000000001d84a8826aeb06d3844a5d3893d32c6da64dcd7b
Arg [2] : 0000000000000000000000002979764c81d5375dd3dccf801892bb0dea9c3fc7
Arg [3] : 00000000000000000000000000000000000000000000000000000000609907e0


Deployed ByteCode Sourcemap

181:3208:5:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1313:1034;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;386:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3174:83;;;:::i;:::-;;2353:603;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;270:24;;;:::i;:::-;;;;;;;;;;;;;;;;;;;301:30;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;338:18;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;3263:124;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2962:206;;;:::i;:::-;;362:17;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;1313:1034;1183:9;;1164:15;:28;;1156:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1435:8:::1;:20;1444:10;1435:20;;;;;;;;;;;;;;;:27;;;;;;;;;;;;1431:362;;1481:8;:19;1490:9;1481:19;;;;;;;;;;;;;;;:26;;;;;;;;;;;;1478:257;;;1527:8;:19;1536:9;1527:19;;;;;;;;;;;;;;;:32;;1565:10;1527:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1626:9;1594:8;:20;1603:10;1594:20;;;;;;;;;;;;;;;:29;;;:41;;;;;;;;;;;;;;;;;;1478:257;;;1705:15;;;;;;;;;;;1673:8;:20;1682:10;1673:20;;;;;;;;;;;;;;;:29;;;:47;;;;;;;;;;;;;;;;;;1478:257;1778:4;1748:8;:20;1757:10;1748:20;;;;;;;;;;;;;;;:27;;;:34;;;;;;;;;;;;;;;;;;1431:362;1821:1;1810:8;:12;:28;;;;1837:1;1826:8;:12;1810:28;1802:55;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;1881:1;1870:8;:12;1867:193;;;1932:45;1968:8;1932;:20;1941:10;1932:20;;;;;;;;;;;;;;;:31;;;:35;;:45;;;;:::i;:::-;1898:8;:20;1907:10;1898:20;;;;;;;;;;;;;;;:31;;:79;;;;1991:58;2013:10;2033:4;2040:8;1991:4;;;;;;;;;;;:21;;;;:58;;;;;;:::i;:::-;1867:193;2083:1;2072:8;:12;2069:190;;;2133:44;2168:8;2133;:20;2142:10;2133:20;;;;;;;;;;;;;;;:30;;;:34;;:44;;;;:::i;:::-;2100:8;:20;2109:10;2100:20;;;;;;;;;;;;;;;:30;;:77;;;;2191:57;2212:10;2232:4;2239:8;2191:3;;;;;;;;;;;:20;;;;:57;;;;;;:::i;:::-;2069:190;2280:10;2273:67;;;2300:4;;;;;;;;;;;2315:3;;;;;;;;;;;2321:8;2331;2273:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1313:1034:::0;;;:::o;386:40::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;3174:83::-;1183:9;;1164:15;:28;;1156:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3239:10:::1;3228:22;;;;;;;;;;;;3174:83::o:0;2353:603::-;1183:9;;1164:15;:28;;1156:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2471:1:::1;2461:7;:11;:26;;;;2486:1;2476:7;:11;2461:26;2453:56;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;2532:1;2522:7;:11;2519:171;;;2583:44;2619:7;2583:8;:20;2592:10;2583:20;;;;;;;;;;;;;;;:31;;;:35;;:44;;;;:::i;:::-;2549:8;:20;2558:10;2549:20;;;;;;;;;;;;;;;:31;;:78;;;;2641:38;2659:10;2671:7;2641:4;;;;;;;;;;;:17;;;;:38;;;;;:::i;:::-;2519:171;2712:1;2702:7;:11;2699:168;;;2762:43;2797:7;2762:8;:20;2771:10;2762:20;;;;;;;;;;;;;;;:30;;;:34;;:43;;;;:::i;:::-;2729:8;:20;2738:10;2729:20;;;;;;;;;;;;;;;:30;;:76;;;;2819:37;2836:10;2848:7;2819:3;;;;;;;;;;;:16;;;;:37;;;;;:::i;:::-;2699:168;2891:10;2881:68;;;2911:4;;;;;;;;;;;2926:3;;;;;;;;;;;2932:7;2941;2881:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2353:603:::0;;:::o;270:24::-;;;;:::o;301:30::-;;;;;;;;;;;;;:::o;338:18::-;;;;;;;;;;;;;:::o;3263:124::-;3312:16;3347:8;:20;3356:10;3347:20;;;;;;;;;;;;;;;:33;;3340:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3263:124;:::o;2962:206::-;2997:15;3015:8;:20;3024:10;3015:20;;;;;;;;;;;;;;;:31;;;2997:49;;3056:15;3074:8;:20;3083:10;3074:20;;;;;;;;;;;;;;;:30;;;3056:48;;3114:26;3123:7;3132;3114:8;:26::i;:::-;3150:11;:9;:11::i;:::-;2962:206;;:::o;362:17::-;;;;;;;;;;;;;:::o;2690:175:4:-;2748:7;2767:9;2783:1;2779;:5;2767:17;;2807:1;2802;:6;;2794:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2857:1;2850:8;;;2690:175;;;;:::o;866:203:3:-;966:96;986:5;1016:27;;;1045:4;1051:2;1055:5;993:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;966:19;:96::i;:::-;866:203;;;;:::o;3136:155:4:-;3194:7;3226:1;3221;:6;;3213:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3283:1;3279;:5;3272:12;;3136:155;;;;:::o;685:175:3:-;767:86;787:5;817:23;;;842:2;846:5;794:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;767:19;:86::i;:::-;685:175;;;:::o;2948:751::-;3367:23;3393:69;3421:4;3393:69;;;;;;;;;;;;;;;;;3401:5;3393:27;;;;:69;;;;;:::i;:::-;3367:95;;3496:1;3476:10;:17;:21;3472:221;;;3616:10;3605:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3597:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3472:221;2948:751;;;:::o;3581:193:0:-;3684:12;3715:52;3737:6;3745:4;3751:1;3754:12;3715:21;:52::i;:::-;3708:59;;3581:193;;;;;:::o;4608:523::-;4735:12;4792:5;4767:21;:30;;4759:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4858:18;4869:6;4858:10;:18::i;:::-;4850:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4981:12;4995:23;5022:6;:11;;5042:5;5050:4;5022:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4980:75;;;;5072:52;5090:7;5099:10;5111:12;5072:17;:52::i;:::-;5065:59;;;;4608:523;;;;;;:::o;726:413::-;786:4;989:12;1098:7;1086:20;1078:28;;1131:1;1124:4;:8;1117:15;;;726:413;;;:::o;7091:725::-;7206:12;7234:7;7230:580;;;7264:10;7257:17;;;;7230:580;7395:1;7375:10;:17;:21;7371:429;;;7633:10;7627:17;7693:15;7680:10;7676:2;7672:19;7665:44;7582:145;7772:12;7765:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7091:725;;;;;;:::o

Swarm Source

ipfs://ca85f55435aa1ae335911732ce4fd6776f2e804e210ce868d145e3548ec3faef
Block Transaction Gas Used Reward
Age Block Fee Address Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading