Contract 0xc62Ce84A80110FeFFB3A74d91a32E34A457a9d05

Contract Overview

Balance:
0 Ether
Txn Hash
Method
Block
From
To
Value
0xbee75ca4a78459230556e6be394d9de2ff2acaedf8bf4b298a15d1303557e22fRelease126277912022-07-20 2:13:3630 days 22 hrs ago0x14b3898fc82e078f3638066cf9b92c9d90230a79 IN 0xc62ce84a80110feffb3a74d91a32e34a457a9d050 Ether0.00002741 1
0x43d17f96f56d6b15261bd774cca1d88c91e5df6239d926f05d636f3eba288363Release108769032021-08-20 21:30:24364 days 3 hrs ago0x3313946a8da386ffef7d2f69ed27d6d00b72e466 IN 0xc62ce84a80110feffb3a74d91a32e34a457a9d050 Ether0.00007866 1.5
0xed600883db11a78faba5a24b1fdef0c1967dfdea8d380c5d3de114791c04fc820x60e06040105483612021-07-01 11:56:58414 days 12 hrs ago0xed95f222731e7948cbcde54e2d7793e1e7193bbb IN  Create: TokenTimelock0 Ether0.000670171.00099999
[ Download CSV Export 
Latest 3 internal transactions
Parent Txn Hash Block From To Value
0xbee75ca4a78459230556e6be394d9de2ff2acaedf8bf4b298a15d1303557e22f126277912022-07-20 2:13:3630 days 22 hrs ago 0xc62ce84a80110feffb3a74d91a32e34a457a9d05 0x1c5dee94a34d795f9eeef830b68b80e44868d3160 Ether
0x43d17f96f56d6b15261bd774cca1d88c91e5df6239d926f05d636f3eba288363108769032021-08-20 21:30:24364 days 3 hrs ago 0xc62ce84a80110feffb3a74d91a32e34a457a9d05 0x1c5dee94a34d795f9eeef830b68b80e44868d3160 Ether
0x43d17f96f56d6b15261bd774cca1d88c91e5df6239d926f05d636f3eba288363108769032021-08-20 21:30:24364 days 3 hrs ago 0xc62ce84a80110feffb3a74d91a32e34a457a9d05 0x1c5dee94a34d795f9eeef830b68b80e44868d3160 Ether
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
TokenTimelock

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license
/**
 *Submitted for verification at Etherscan.io on 2021-07-01
*/

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/utils/SafeERC20.sol

// SPDX-License-Identifier: MIT


pragma solidity ^0.8.0;



/**
 * @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 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'
        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) + value;
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    function safeDecreaseAllowance(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        unchecked {
            uint256 oldAllowance = token.allowance(address(this), spender);
            require(oldAllowance >= value, "SafeERC20: decreased allowance below zero");
            uint256 newAllowance = oldAllowance - value;
            _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
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }
}

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Address.sol



pragma solidity ^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;
        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");

        (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");

        (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");

        (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");

        (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

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/IERC20.sol



pragma solidity ^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: contracts/TokenLock.sol


pragma solidity ^0.8.0;







contract TokenTimelock {
    using SafeERC20 for IERC20;

    // ERC20 basic token contract being held
    IERC20 private immutable _token;

    // beneficiary of tokens after they are released
    address private immutable _beneficiary;

    // timestamp when token release is enabled
    uint256 private immutable _releaseTime;

    constructor(
        IERC20 token_,
        address beneficiary_,
        uint256 releaseTime_
    ) {
        require(releaseTime_ > block.timestamp, "TokenTimelock: release time is before current time");
        _token = token_;
        _beneficiary = beneficiary_;
        _releaseTime = releaseTime_;
    }

    /**
     * @return the token being held.
     */
    function token() public view virtual returns (IERC20) {
        return _token;
    }

    /**
     * @return the beneficiary of the tokens.
     */
    function beneficiary() public view virtual returns (address) {
        return _beneficiary;
    }

    /**
     * @return the time when the tokens are released.
     */
    function releaseTime() public view virtual returns (uint256) {
        return _releaseTime;
    }

    /**
     * @notice Transfers tokens held by timelock to beneficiary.
     */
    function release() public virtual {
        require(block.timestamp >= releaseTime(), "TokenTimelock: current time is before release time");

        uint256 amount = token().balanceOf(address(this));
        require(amount > 0, "TokenTimelock: no tokens to release");

        token().safeTransfer(beneficiary(), amount);
    }
}

Contract ABI

[{"inputs":[{"internalType":"contract IERC20","name":"token_","type":"address"},{"internalType":"address","name":"beneficiary_","type":"address"},{"internalType":"uint256","name":"releaseTime_","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"beneficiary","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"release","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"releaseTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

60e06040523480156200001157600080fd5b5060405162000e0738038062000e07833981810160405281019062000037919062000140565b4281116200007c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200007390620001fe565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b815250508173ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b815250508060c08181525050505050620002d1565b6000815190506200010c8162000283565b92915050565b60008151905062000123816200029d565b92915050565b6000815190506200013a81620002b7565b92915050565b6000806000606084860312156200015657600080fd5b6000620001668682870162000112565b93505060206200017986828701620000fb565b92505060406200018c8682870162000129565b9150509250925092565b6000620001a560328362000220565b91507f546f6b656e54696d656c6f636b3a2072656c656173652074696d65206973206260008301527f65666f72652063757272656e742074696d6500000000000000000000000000006020830152604082019050919050565b60006020820190508181036000830152620002198162000196565b9050919050565b600082825260208201905092915050565b60006200023e8262000259565b9050919050565b6000620002528262000231565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6200028e8162000231565b81146200029a57600080fd5b50565b620002a88162000245565b8114620002b457600080fd5b50565b620002c28162000279565b8114620002ce57600080fd5b50565b60805160601c60a05160601c60c051610b0162000306600039600061023e0152600060b9015260006102660152610b016000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c806338af3eed1461005157806386d1a69f1461006f578063b91d400114610079578063fc0c546a14610097575b600080fd5b6100596100b5565b604051610066919061087f565b60405180910390f35b6100776100dd565b005b61008161023a565b60405161008e91906109a0565b60405180910390f35b61009f610262565b6040516100ac91906108c3565b60405180910390f35b60007f0000000000000000000000000000000000000000000000000000000000000000905090565b6100e561023a565b421015610127576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161011e90610900565b60405180910390fd5b6000610131610262565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610169919061087f565b60206040518083038186803b15801561018157600080fd5b505afa158015610195573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101b991906105d0565b9050600081116101fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101f590610980565b60405180910390fd5b6102376102096100b5565b82610212610262565b73ffffffffffffffffffffffffffffffffffffffff1661028a9092919063ffffffff16565b50565b60007f0000000000000000000000000000000000000000000000000000000000000000905090565b60007f0000000000000000000000000000000000000000000000000000000000000000905090565b61030b8363a9059cbb60e01b84846040516024016102a992919061089a565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050610310565b505050565b6000610372826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166103d79092919063ffffffff16565b90506000815111156103d2578080602001905181019061039291906105a7565b6103d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103c890610960565b60405180910390fd5b5b505050565b60606103e684846000856103ef565b90509392505050565b606082471015610434576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042b90610920565b60405180910390fd5b61043d85610503565b61047c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161047390610940565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516104a59190610868565b60006040518083038185875af1925050503d80600081146104e2576040519150601f19603f3d011682016040523d82523d6000602084013e6104e7565b606091505b50915091506104f7828286610516565b92505050949350505050565b600080823b905060008111915050919050565b6060831561052657829050610576565b6000835111156105395782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161056d91906108de565b60405180910390fd5b9392505050565b60008151905061058c81610a9d565b92915050565b6000815190506105a181610ab4565b92915050565b6000602082840312156105b957600080fd5b60006105c78482850161057d565b91505092915050565b6000602082840312156105e257600080fd5b60006105f084828501610592565b91505092915050565b610602816109ed565b82525050565b6000610613826109bb565b61061d81856109d1565b935061062d818560208601610a59565b80840191505092915050565b61064281610a35565b82525050565b6000610653826109c6565b61065d81856109dc565b935061066d818560208601610a59565b61067681610a8c565b840191505092915050565b600061068e6032836109dc565b91507f546f6b656e54696d656c6f636b3a2063757272656e742074696d65206973206260008301527f65666f72652072656c656173652074696d6500000000000000000000000000006020830152604082019050919050565b60006106f46026836109dc565b91507f416464726573733a20696e73756666696369656e742062616c616e636520666f60008301527f722063616c6c00000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061075a601d836109dc565b91507f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006000830152602082019050919050565b600061079a602a836109dc565b91507f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008301527f6f742073756363656564000000000000000000000000000000000000000000006020830152604082019050919050565b60006108006023836109dc565b91507f546f6b656e54696d656c6f636b3a206e6f20746f6b656e7320746f2072656c6560008301527f61736500000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b61086281610a2b565b82525050565b60006108748284610608565b915081905092915050565b600060208201905061089460008301846105f9565b92915050565b60006040820190506108af60008301856105f9565b6108bc6020830184610859565b9392505050565b60006020820190506108d86000830184610639565b92915050565b600060208201905081810360008301526108f88184610648565b905092915050565b6000602082019050818103600083015261091981610681565b9050919050565b60006020820190508181036000830152610939816106e7565b9050919050565b600060208201905081810360008301526109598161074d565b9050919050565b600060208201905081810360008301526109798161078d565b9050919050565b60006020820190508181036000830152610999816107f3565b9050919050565b60006020820190506109b56000830184610859565b92915050565b600081519050919050565b600081519050919050565b600081905092915050565b600082825260208201905092915050565b60006109f882610a0b565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000610a4082610a47565b9050919050565b6000610a5282610a0b565b9050919050565b60005b83811015610a77578082015181840152602081019050610a5c565b83811115610a86576000848401525b50505050565b6000601f19601f8301169050919050565b610aa6816109ff565b8114610ab157600080fd5b50565b610abd81610a2b565b8114610ac857600080fd5b5056fea2646970667358221220b7e61c61d933f44c18aa4e31a184b9ccd5a9a3e12cd2a9fe9bb8b98dce0d838764736f6c634300080000330000000000000000000000001c5dee94a34d795f9eeef830b68b80e44868d316000000000000000000000000ed95f222731e7948cbcde54e2d7793e1e7193bbb0000000000000000000000000000000000000000000000000000000060ddbacd

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

0000000000000000000000001c5dee94a34d795f9eeef830b68b80e44868d316000000000000000000000000ed95f222731e7948cbcde54e2d7793e1e7193bbb0000000000000000000000000000000000000000000000000000000060ddbacd

-----Decoded View---------------
Arg [0] : token_ (address): 0x1c5dee94a34d795f9eeef830b68b80e44868d316
Arg [1] : beneficiary_ (address): 0xed95f222731e7948cbcde54e2d7793e1e7193bbb
Arg [2] : releaseTime_ (uint256): 1625144013

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000001c5dee94a34d795f9eeef830b68b80e44868d316
Arg [1] : 000000000000000000000000ed95f222731e7948cbcde54e2d7793e1e7193bbb
Arg [2] : 0000000000000000000000000000000000000000000000000000000060ddbacd


Deployed ByteCode Sourcemap

14911:1598:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15800:99;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16171:335;;;:::i;:::-;;15980:99;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15641:86;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15800:99;15852:7;15879:12;15872:19;;15800:99;:::o;16171:335::-;16243:13;:11;:13::i;:::-;16224:15;:32;;16216:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;16324:14;16341:7;:5;:7::i;:::-;:17;;;16367:4;16341:32;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16324:49;;16401:1;16392:6;:10;16384:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;16455:43;16476:13;:11;:13::i;:::-;16491:6;16455:7;:5;:7::i;:::-;:20;;;;:43;;;;;:::i;:::-;16171:335;:::o;15980:99::-;16032:7;16059:12;16052:19;;15980:99;:::o;15641:86::-;15687:6;15713;15706:13;;15641:86;:::o;715:211::-;832:86;852:5;882:23;;;907:2;911:5;859:58;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;832:19;:86::i;:::-;715:211;;;:::o;3288:716::-;3712:23;3738:69;3766:4;3738:69;;;;;;;;;;;;;;;;;3746:5;3738:27;;;;:69;;;;;:::i;:::-;3712:95;;3842:1;3822:10;:17;:21;3818:179;;;3919:10;3908:30;;;;;;;;;;;;:::i;:::-;3900:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;3818:179;3288:716;;;:::o;7636:229::-;7773:12;7805:52;7827:6;7835:4;7841:1;7844:12;7805:21;:52::i;:::-;7798:59;;7636:229;;;;;:::o;8756:511::-;8926:12;8984:5;8959:21;:30;;8951:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;9051:18;9062:6;9051:10;:18::i;:::-;9043:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;9117:12;9131:23;9158:6;:11;;9177:5;9184:4;9158:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9116:73;;;;9207:52;9225:7;9234:10;9246:12;9207:17;:52::i;:::-;9200:59;;;;8756:511;;;;;;:::o;4830:387::-;4890:4;5098:12;5165:7;5153:20;5145:28;;5208:1;5201:4;:8;5194:15;;;4830:387;;;:::o;11225:712::-;11375:12;11404:7;11400:530;;;11435:10;11428:17;;;;11400:530;11569:1;11549:10;:17;:21;11545:374;;;11747:10;11741:17;11808:15;11795:10;11791:2;11787:19;11780:44;11695:148;11890:12;11883:20;;;;;;;;;;;:::i;:::-;;;;;;;;11225:712;;;;;;:::o;7:137:1:-;;92:6;86:13;77:22;;108:30;132:5;108:30;:::i;:::-;67:77;;;;:::o;150:143::-;;238:6;232:13;223:22;;254:33;281:5;254:33;:::i;:::-;213:80;;;;:::o;299:278::-;;415:2;403:9;394:7;390:23;386:32;383:2;;;431:1;428;421:12;383:2;474:1;499:61;552:7;543:6;532:9;528:22;499:61;:::i;:::-;489:71;;445:125;373:204;;;;:::o;583:284::-;;702:2;690:9;681:7;677:23;673:32;670:2;;;718:1;715;708:12;670:2;761:1;786:64;842:7;833:6;822:9;818:22;786:64;:::i;:::-;776:74;;732:128;660:207;;;;:::o;873:118::-;960:24;978:5;960:24;:::i;:::-;955:3;948:37;938:53;;:::o;997:373::-;;1129:38;1161:5;1129:38;:::i;:::-;1183:88;1264:6;1259:3;1183:88;:::i;:::-;1176:95;;1280:52;1325:6;1320:3;1313:4;1306:5;1302:16;1280:52;:::i;:::-;1357:6;1352:3;1348:16;1341:23;;1105:265;;;;;:::o;1376:159::-;1477:51;1522:5;1477:51;:::i;:::-;1472:3;1465:64;1455:80;;:::o;1541:364::-;;1657:39;1690:5;1657:39;:::i;:::-;1712:71;1776:6;1771:3;1712:71;:::i;:::-;1705:78;;1792:52;1837:6;1832:3;1825:4;1818:5;1814:16;1792:52;:::i;:::-;1869:29;1891:6;1869:29;:::i;:::-;1864:3;1860:39;1853:46;;1633:272;;;;;:::o;1911:382::-;;2074:67;2138:2;2133:3;2074:67;:::i;:::-;2067:74;;2171:34;2167:1;2162:3;2158:11;2151:55;2237:20;2232:2;2227:3;2223:12;2216:42;2284:2;2279:3;2275:12;2268:19;;2057:236;;;:::o;2299:370::-;;2462:67;2526:2;2521:3;2462:67;:::i;:::-;2455:74;;2559:34;2555:1;2550:3;2546:11;2539:55;2625:8;2620:2;2615:3;2611:12;2604:30;2660:2;2655:3;2651:12;2644:19;;2445:224;;;:::o;2675:327::-;;2838:67;2902:2;2897:3;2838:67;:::i;:::-;2831:74;;2935:31;2931:1;2926:3;2922:11;2915:52;2993:2;2988:3;2984:12;2977:19;;2821:181;;;:::o;3008:374::-;;3171:67;3235:2;3230:3;3171:67;:::i;:::-;3164:74;;3268:34;3264:1;3259:3;3255:11;3248:55;3334:12;3329:2;3324:3;3320:12;3313:34;3373:2;3368:3;3364:12;3357:19;;3154:228;;;:::o;3388:367::-;;3551:67;3615:2;3610:3;3551:67;:::i;:::-;3544:74;;3648:34;3644:1;3639:3;3635:11;3628:55;3714:5;3709:2;3704:3;3700:12;3693:27;3746:2;3741:3;3737:12;3730:19;;3534:221;;;:::o;3761:118::-;3848:24;3866:5;3848:24;:::i;:::-;3843:3;3836:37;3826:53;;:::o;3885:271::-;;4037:93;4126:3;4117:6;4037:93;:::i;:::-;4030:100;;4147:3;4140:10;;4019:137;;;;:::o;4162:222::-;;4293:2;4282:9;4278:18;4270:26;;4306:71;4374:1;4363:9;4359:17;4350:6;4306:71;:::i;:::-;4260:124;;;;:::o;4390:332::-;;4549:2;4538:9;4534:18;4526:26;;4562:71;4630:1;4619:9;4615:17;4606:6;4562:71;:::i;:::-;4643:72;4711:2;4700:9;4696:18;4687:6;4643:72;:::i;:::-;4516:206;;;;;:::o;4728:250::-;;4873:2;4862:9;4858:18;4850:26;;4886:85;4968:1;4957:9;4953:17;4944:6;4886:85;:::i;:::-;4840:138;;;;:::o;4984:313::-;;5135:2;5124:9;5120:18;5112:26;;5184:9;5178:4;5174:20;5170:1;5159:9;5155:17;5148:47;5212:78;5285:4;5276:6;5212:78;:::i;:::-;5204:86;;5102:195;;;;:::o;5303:419::-;;5507:2;5496:9;5492:18;5484:26;;5556:9;5550:4;5546:20;5542:1;5531:9;5527:17;5520:47;5584:131;5710:4;5584:131;:::i;:::-;5576:139;;5474:248;;;:::o;5728:419::-;;5932:2;5921:9;5917:18;5909:26;;5981:9;5975:4;5971:20;5967:1;5956:9;5952:17;5945:47;6009:131;6135:4;6009:131;:::i;:::-;6001:139;;5899:248;;;:::o;6153:419::-;;6357:2;6346:9;6342:18;6334:26;;6406:9;6400:4;6396:20;6392:1;6381:9;6377:17;6370:47;6434:131;6560:4;6434:131;:::i;:::-;6426:139;;6324:248;;;:::o;6578:419::-;;6782:2;6771:9;6767:18;6759:26;;6831:9;6825:4;6821:20;6817:1;6806:9;6802:17;6795:47;6859:131;6985:4;6859:131;:::i;:::-;6851:139;;6749:248;;;:::o;7003:419::-;;7207:2;7196:9;7192:18;7184:26;;7256:9;7250:4;7246:20;7242:1;7231:9;7227:17;7220:47;7284:131;7410:4;7284:131;:::i;:::-;7276:139;;7174:248;;;:::o;7428:222::-;;7559:2;7548:9;7544:18;7536:26;;7572:71;7640:1;7629:9;7625:17;7616:6;7572:71;:::i;:::-;7526:124;;;;:::o;7656:98::-;;7741:5;7735:12;7725:22;;7714:40;;;:::o;7760:99::-;;7846:5;7840:12;7830:22;;7819:40;;;:::o;7865:147::-;;8003:3;7988:18;;7978:34;;;;:::o;8018:169::-;;8136:6;8131:3;8124:19;8176:4;8171:3;8167:14;8152:29;;8114:73;;;;:::o;8193:96::-;;8259:24;8277:5;8259:24;:::i;:::-;8248:35;;8238:51;;;:::o;8295:90::-;;8372:5;8365:13;8358:21;8347:32;;8337:48;;;:::o;8391:126::-;;8468:42;8461:5;8457:54;8446:65;;8436:81;;;:::o;8523:77::-;;8589:5;8578:16;;8568:32;;;:::o;8606:154::-;;8703:51;8748:5;8703:51;:::i;:::-;8690:64;;8680:80;;;:::o;8766:127::-;;8863:24;8881:5;8863:24;:::i;:::-;8850:37;;8840:53;;;:::o;8899:307::-;8967:1;8977:113;8991:6;8988:1;8985:13;8977:113;;;9076:1;9071:3;9067:11;9061:18;9057:1;9052:3;9048:11;9041:39;9013:2;9010:1;9006:10;9001:15;;8977:113;;;9108:6;9105:1;9102:13;9099:2;;;9188:1;9179:6;9174:3;9170:16;9163:27;9099:2;8948:258;;;;:::o;9212:102::-;;9304:2;9300:7;9295:2;9288:5;9284:14;9280:28;9270:38;;9260:54;;;:::o;9320:116::-;9390:21;9405:5;9390:21;:::i;:::-;9383:5;9380:32;9370:2;;9426:1;9423;9416:12;9370:2;9360:76;:::o;9442:122::-;9515:24;9533:5;9515:24;:::i;:::-;9508:5;9505:35;9495:2;;9554:1;9551;9544:12;9495:2;9485:79;:::o

Swarm Source

ipfs://b7e61c61d933f44c18aa4e31a184b9ccd5a9a3e12cd2a9fe9bb8b98dce0d8387
Block Transaction Difficulty Gas Used Reward
Block Uncle Number Difficulty Gas Used Reward
Loading

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.