Feature Tip: Add private address tag to any address under My Name Tag !
More Info
Private Name Tags
ContractCreator
Multi Chain
Multichain Addresses
7 addresses found via
Latest 4 from a total of 4 transactions
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
TokenTimelock
Compiler Version
v0.5.1+commit.c8a2cb62
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2020-03-28 */ pragma solidity ^0.5.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. * * _Available since v2.4.0._ */ 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. * * _Available since v2.4.0._ */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { // Solidity only automatically asserts when dividing by 0 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. * * _Available since v2.4.0._ */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } /** * @dev Interface of the ERC20 standard as defined in the EIP. Does not include * the optional functions; to access them see {ERC20Detailed}. */ 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); } /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * This test is non-exhaustive, and there may be false-negatives: during the * execution of a contract's constructor, its address will be reported as * not containing 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. */ function isContract(address account) internal view returns (bool) { // This method relies in extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != 0x0 && codehash != accountHash); } /** * @dev Converts an `address` into `address payable`. Note that this is * simply a type cast: the actual underlying value is not changed. */ function toPayable(address account) internal pure returns (address payable) { return address(uint160(account)); } } /** * @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 ERC20;` 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)); } 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); 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. // A Solidity high level call has three parts: // 1. The target address is checked to verify it contains contract code // 2. The call itself is made, and success asserted // 3. The return value is decoded, which in turn checks the size of the returned data. // solhint-disable-next-line max-line-length require(address(token).isContract(), "SafeERC20: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = address(token).call(data); require(success, "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"); } } } /** * @dev A token holder contract that will allow a beneficiary to extract the * tokens after a given release time. * * Useful for simple vesting schedules like "advisors get all of their tokens * after 1 year". * * For a more complete vesting schedule, see {TokenVesting}. */ contract TokenTimelock { using SafeMath for uint256; using SafeERC20 for IERC20; // ERC20 basic token contract being held IERC20 private _token; // The count of upcoming releases uint256 private _releasesCount; // Delay between releases is constant value uint256 private constant _delay = 365 days; // beneficiary of tokens after they are released address private _beneficiary; struct Release { uint256 amount; uint256 releaseTime; bool released; } // Information of releases mapping (uint8 => Release) private _releases; constructor ( IERC20 token, address beneficiary, uint256 firstReleaseTimestamp, uint256 [] memory tokensPerRelease ) public { require(address(token) != address(0), "TokenTimelock: invalid token address"); require(beneficiary != address(0), "TokenTimelock: invalid beneficiary address"); require(firstReleaseTimestamp > block.timestamp, "TokenTimelock: invalid first release timestamp"); require(tokensPerRelease.length > 0 && tokensPerRelease.length < 20, "TokenTimelock: invalid release tokens amount"); _token = token; _beneficiary = beneficiary; _releasesCount = tokensPerRelease.length; for (uint8 i = 0; i < _releasesCount; i++) { require(tokensPerRelease[i] > 0, "TokenTimelock: invalid tokens amount inside array"); uint256 tokensAmount = tokensPerRelease[i] * 1 ether; uint256 releaseDate = firstReleaseTimestamp.add(_delay.mul(i)); _releases[i] = Release(tokensAmount, releaseDate, false); } } function () external payable { // empty fallback method } /** * @notice Transfers tokens held by TokenTimelock to beneficiary. */ function release() public { uint256 amount = _token.balanceOf(address(this)); require(amount > 0, "release: no tokens to release"); // Get current release id (uint8 releaseId, uint256 tokensAmount) = _getCurrentReleaseIdAndTokens(); require(tokensAmount > 0, "release: tokens is not available for release"); // Set as released _releases[releaseId].released = true; // Transfer tokens to beneficiary address _token.safeTransfer(_beneficiary, tokensAmount); } /** * @return the token being held. */ function token() public view returns (IERC20) { return _token; } /** * @return the beneficiary of the tokens. */ function beneficiary() public view returns (address) { return _beneficiary; } /** * @return the delay for release */ function delay() public pure returns (uint256) { return _delay; } /** * @return the total releases count */ function releasesCount() public view returns (uint256) { return _releasesCount; } /** * @return details of provided release id */ function getReleaseInfo(uint8 releaseId) public view returns (uint256, uint256, bool) { Release memory r = _releases[releaseId]; return ( r.amount, r.releaseTime, r.released ); } /** * @return the it of current release. */ function _getCurrentReleaseIdAndTokens() private view returns (uint8, uint256) { uint8 releaseId = 0; uint256 tokensAmount = 0; for (uint8 i = 0; i < _releasesCount; i++) { if (!_releases[i].released && block.timestamp >= _releases[i].releaseTime) { releaseId = i; tokensAmount = _releases[i].amount; break; } } return ( releaseId, tokensAmount ); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":true,"inputs":[],"name":"beneficiary","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"delay","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[],"name":"release","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"releasesCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"releaseId","type":"uint8"}],"name":"getReleaseInfo","outputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"token","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"token","type":"address"},{"name":"beneficiary","type":"address"},{"name":"firstReleaseTimestamp","type":"uint256"},{"name":"tokensPerRelease","type":"uint256[]"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"}]
Contract Creation Code
608060405234801561001057600080fd5b50604051610e2f380380610e2f8339810180604052608081101561003357600080fd5b815160208301516040840151606085018051939592949193918301929164010000000081111561006257600080fd5b8201602081018481111561007557600080fd5b815185602082028301116401000000008211171561009257600080fd5b50909350505050600160a060020a038416151561013557604080517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f546f6b656e54696d656c6f636b3a20696e76616c696420746f6b656e2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600160a060020a03831615156101d257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f546f6b656e54696d656c6f636b3a20696e76616c69642062656e65666963696160448201527f7279206164647265737300000000000000000000000000000000000000000000606482015290519081900360840190fd5b42821161026657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f546f6b656e54696d656c6f636b3a20696e76616c69642066697273742072656c60448201527f656173652074696d657374616d70000000000000000000000000000000000000606482015290519081900360840190fd5b60008151118015610278575060148151105b151561030b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f546f6b656e54696d656c6f636b3a20696e76616c69642072656c65617365207460448201527f6f6b656e7320616d6f756e740000000000000000000000000000000000000000606482015290519081900360840190fd5b60008054600160a060020a03808716600160a060020a0319928316178355600280549187169190921617905581516001555b6001548160ff1610156104b2576000828260ff1681518110151561035d57fe5b60209081029091010151116103f957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f546f6b656e54696d656c6f636b3a20696e76616c696420746f6b656e7320616d60448201527f6f756e7420696e73696465206172726179000000000000000000000000000000606482015290519081900360840190fd5b6000828260ff1681518110151561040c57fe5b60209081029091010151670de0b6b3a764000002905060006104596104456301e1338060ff86166401000000006107066104bc82021704565b86906401000000006107ab61057882021704565b604080516060810182529384526020808501928352600085830181815260ff8816825260039092529190912093518455905160018085019190915590516002909301805460ff191693151593909317909255500161033d565b50505050506105ec565b60008215156104cd57506000610572565b8282028284828115156104dc57fe5b041461056f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60448201527f7700000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b90505b92915050565b60008282018381101561056f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b610834806105fb6000396000f3fe608060405260043610610071577c0100000000000000000000000000000000000000000000000000000000600035046338af3eed81146100735780636a42b8f8146100a457806386d1a69f146100cb578063d02764f3146100e0578063d2213b5b146100f5578063fc0c546a14610142575b005b34801561007f57600080fd5b50610088610157565b60408051600160a060020a039092168252519081900360200190f35b3480156100b057600080fd5b506100b9610166565b60408051918252519081900360200190f35b3480156100d757600080fd5b5061007161016e565b3480156100ec57600080fd5b506100b961032e565b34801561010157600080fd5b506101226004803603602081101561011857600080fd5b503560ff16610334565b604080519384526020840192909252151582820152519081900360600190f35b34801561014e57600080fd5b5061008861038d565b600254600160a060020a031690565b6301e1338090565b60008054604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051600160a060020a03909216916370a0823191602480820192602092909190829003018186803b1580156101d357600080fd5b505afa1580156101e7573d6000803e3d6000fd5b505050506040513d60208110156101fd57600080fd5b5051905060008111610259576040805160e560020a62461bcd02815260206004820152601d60248201527f72656c656173653a206e6f20746f6b656e7320746f2072656c65617365000000604482015290519081900360640190fd5b60008061026461039c565b9092509050600081116102e7576040805160e560020a62461bcd02815260206004820152602c60248201527f72656c656173653a20746f6b656e73206973206e6f7420617661696c61626c6560448201527f20666f722072656c656173650000000000000000000000000000000000000000606482015290519081900360840190fd5b60ff821660009081526003602052604081206002908101805460ff1916600117905554905461032991600160a060020a0391821691168363ffffffff61041f16565b505050565b60015490565b60008060006103416106e2565b5050505060ff9081166000908152600360209081526040918290208251606081018452815480825260018301549382018490526002909201549094161515939092018390529092909190565b600054600160a060020a031690565b6000808080805b6001548160ff1610156104155760ff808216600090815260036020526040902060020154161580156103ea575060ff81166000908152600360205260409020600101544210155b1561040d5760ff8116600090815260036020526040902054909250905081610415565b6001016103a3565b5090925090509091565b60408051600160a060020a038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526103299084906104ac82600160a060020a03166106a6565b1515610502576040805160e560020a62461bcd02815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b6000606083600160a060020a0316836040518082805190602001908083835b602083106105405780518252601f199092019160209182019101610521565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146105a2576040519150601f19603f3d011682016040523d82523d6000602084013e6105a7565b606091505b5091509150811515610603576040805160e560020a62461bcd02815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b6000815111156106a05780806020019051602081101561062257600080fd5b505115156106a0576040805160e560020a62461bcd02815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015290519081900360840190fd5b50505050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081158015906106da5750808214155b949350505050565b60606040519081016040528060008152602001600081526020016000151581525090565b6000821515610717575060006107a5565b82820282848281151561072657fe5b04146107a2576040805160e560020a62461bcd02815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60448201527f7700000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b90505b92915050565b6000828201838110156107a2576040805160e560020a62461bcd02815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fdfea165627a7a72305820d2b012e51e872223fe7a15957b7cf336b19c02b05a3cdd0a9dfbc15196dad22c00290000000000000000000000009f033897c1957aa11ac18428c1f9f85985196b55000000000000000000000000a5d260108c5edf76e69cfb092afca32b3751045f0000000000000000000000000000000000000000000000000000000060dd0580000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000002aea5400000000000000000000000000000000000000000000000000000000002aea5400000000000000000000000000000000000000000000000000000000002aea5400000000000000000000000000000000000000000000000000000000000e4e1c0
Deployed Bytecode
0x608060405260043610610071577c0100000000000000000000000000000000000000000000000000000000600035046338af3eed81146100735780636a42b8f8146100a457806386d1a69f146100cb578063d02764f3146100e0578063d2213b5b146100f5578063fc0c546a14610142575b005b34801561007f57600080fd5b50610088610157565b60408051600160a060020a039092168252519081900360200190f35b3480156100b057600080fd5b506100b9610166565b60408051918252519081900360200190f35b3480156100d757600080fd5b5061007161016e565b3480156100ec57600080fd5b506100b961032e565b34801561010157600080fd5b506101226004803603602081101561011857600080fd5b503560ff16610334565b604080519384526020840192909252151582820152519081900360600190f35b34801561014e57600080fd5b5061008861038d565b600254600160a060020a031690565b6301e1338090565b60008054604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051600160a060020a03909216916370a0823191602480820192602092909190829003018186803b1580156101d357600080fd5b505afa1580156101e7573d6000803e3d6000fd5b505050506040513d60208110156101fd57600080fd5b5051905060008111610259576040805160e560020a62461bcd02815260206004820152601d60248201527f72656c656173653a206e6f20746f6b656e7320746f2072656c65617365000000604482015290519081900360640190fd5b60008061026461039c565b9092509050600081116102e7576040805160e560020a62461bcd02815260206004820152602c60248201527f72656c656173653a20746f6b656e73206973206e6f7420617661696c61626c6560448201527f20666f722072656c656173650000000000000000000000000000000000000000606482015290519081900360840190fd5b60ff821660009081526003602052604081206002908101805460ff1916600117905554905461032991600160a060020a0391821691168363ffffffff61041f16565b505050565b60015490565b60008060006103416106e2565b5050505060ff9081166000908152600360209081526040918290208251606081018452815480825260018301549382018490526002909201549094161515939092018390529092909190565b600054600160a060020a031690565b6000808080805b6001548160ff1610156104155760ff808216600090815260036020526040902060020154161580156103ea575060ff81166000908152600360205260409020600101544210155b1561040d5760ff8116600090815260036020526040902054909250905081610415565b6001016103a3565b5090925090509091565b60408051600160a060020a038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526103299084906104ac82600160a060020a03166106a6565b1515610502576040805160e560020a62461bcd02815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b6000606083600160a060020a0316836040518082805190602001908083835b602083106105405780518252601f199092019160209182019101610521565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146105a2576040519150601f19603f3d011682016040523d82523d6000602084013e6105a7565b606091505b5091509150811515610603576040805160e560020a62461bcd02815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b6000815111156106a05780806020019051602081101561062257600080fd5b505115156106a0576040805160e560020a62461bcd02815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015290519081900360840190fd5b50505050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081158015906106da5750808214155b949350505050565b60606040519081016040528060008152602001600081526020016000151581525090565b6000821515610717575060006107a5565b82820282848281151561072657fe5b04146107a2576040805160e560020a62461bcd02815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60448201527f7700000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b90505b92915050565b6000828201838110156107a2576040805160e560020a62461bcd02815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fdfea165627a7a72305820d2b012e51e872223fe7a15957b7cf336b19c02b05a3cdd0a9dfbc15196dad22c0029
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000009f033897c1957aa11ac18428c1f9f85985196b55000000000000000000000000a5d260108c5edf76e69cfb092afca32b3751045f0000000000000000000000000000000000000000000000000000000060dd0580000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000002aea5400000000000000000000000000000000000000000000000000000000002aea5400000000000000000000000000000000000000000000000000000000002aea5400000000000000000000000000000000000000000000000000000000000e4e1c0
-----Decoded View---------------
Arg [0] : token (address): 0x9F033897C1957AA11Ac18428c1f9f85985196b55
Arg [1] : beneficiary (address): 0xa5d260108C5eDF76e69CFB092afcA32B3751045F
Arg [2] : firstReleaseTimestamp (uint256): 1625097600
Arg [3] : tokensPerRelease (uint256[]): 45000000,45000000,45000000,15000000
-----Encoded View---------------
9 Constructor Arguments found :
Arg [0] : 0000000000000000000000009f033897c1957aa11ac18428c1f9f85985196b55
Arg [1] : 000000000000000000000000a5d260108c5edf76e69cfb092afca32b3751045f
Arg [2] : 0000000000000000000000000000000000000000000000000000000060dd0580
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [5] : 0000000000000000000000000000000000000000000000000000000002aea540
Arg [6] : 0000000000000000000000000000000000000000000000000000000002aea540
Arg [7] : 0000000000000000000000000000000000000000000000000000000002aea540
Arg [8] : 0000000000000000000000000000000000000000000000000000000000e4e1c0
Deployed Bytecode Sourcemap
13250:3940:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15915:91;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15915:91:0;;;:::i;:::-;;;;-1:-1:-1;;;;;15915:91:0;;;;;;;;;;;;;;16064:70;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16064:70:0;;;:::i;:::-;;;;;;;;;;;;;;;;15151:549;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15151:549:0;;;:::i;16195:86::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16195:86:0;;;:::i;16354:249::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16354:249:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16354:249:0;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15764:78;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15764:78:0;;;:::i;15915:91::-;15986:12;;-1:-1:-1;;;;;15986:12:0;15915:91;:::o;16064:70::-;13585:8;16064:70;:::o;15151:549::-;15188:14;15205:6;;:31;;;;;;15230:4;15205:31;;;;;;-1:-1:-1;;;;;15205:6:0;;;;:16;;:31;;;;;;;;;;;;;;;:6;:31;;;5:2:-1;;;;30:1;27;20:12;5:2;15205:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15205:31:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15205:31:0;;-1:-1:-1;15264:1:0;15255:10;;15247:52;;;;;-1:-1:-1;;;;;15247:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;15348:15;15365:20;15389:31;:29;:31::i;:::-;15347:73;;-1:-1:-1;15347:73:0;-1:-1:-1;15454:1:0;15439:16;;15431:73;;;;;-1:-1:-1;;;;;15431:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15545:20;;;;;;;:9;:20;;;;;:29;;;;:36;;-1:-1:-1;;15545:36:0;15577:4;15545:36;;;15665:12;15645:6;;:47;;-1:-1:-1;;;;;15645:6:0;;;;15665:12;15679;15645:47;:19;:47;:::i;:::-;15151:549;;;:::o;16195:86::-;16262:14;;16195:86;:::o;16354:249::-;16416:7;16425;16434:4;16451:16;;:::i;:::-;-1:-1:-1;;;;16470:20:0;;;;;;;;:9;:20;;;;;;;;;16451:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16354:249::o;15764:78::-;15802:6;15828;-1:-1:-1;;;;;15828:6:0;15764:78;:::o;16672:515::-;16735:5;;;;;16829:269;16851:14;;16847:1;:18;;;16829:269;;;16892:12;;;;;;;;:9;:12;;;;;:21;;;;16891:22;:69;;;;-1:-1:-1;16936:12:0;;;;;;;:9;:12;;;;;:24;;;16917:15;:43;;16891:69;16887:200;;;17028:12;;;;;;;:9;:12;;;;;:19;16993:1;;-1:-1:-1;17028:19:0;-1:-1:-1;16993:1:0;17066:5;;16887:200;16867:3;;16829:269;;;-1:-1:-1;17132:9:0;;-1:-1:-1;17156:12:0;-1:-1:-1;16672:515:0;;:::o;9840:176::-;9949:58;;;-1:-1:-1;;;;;9949:58:0;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;9949:58:0;;;;;;;;25:18:-1;;61:17;;9949:58:0;182:15:-1;9972:23:0;179:29:-1;160:49;;9923:85:0;;9942:5;;12438:27;12446:5;-1:-1:-1;;;;;12438:25:0;;:27::i;:::-;12430:71;;;;;;;-1:-1:-1;;;;;12430:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;12575:12;12589:23;12624:5;-1:-1:-1;;;;;12616:19:0;12636:4;12616:25;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;12616:25:0;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;12574:67:0;;;;12660:7;12652:52;;;;;;;-1:-1:-1;;;;;12652:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12741:1;12721:10;:17;:21;12717:224;;;12863:10;12852:30;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;12852:30:0;12844:85;;;;;;;-1:-1:-1;;;;;12844:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11834:1114;;;;:::o;8155:818::-;8215:4;8882:20;;8725:66;8922:15;;;;;:42;;;8953:11;8941:8;:23;;8922:42;8914:51;8155:818;-1:-1:-1;;;;8155:818:0:o;13250:3940::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2054:411::-;2112:7;2333:6;;2329:32;;;-1:-1:-1;2354:1:0;2347:8;;2329:32;2379:5;;;2383:1;2379;:5;2397;;;;;;;;:10;2389:56;;;;;-1:-1:-1;;;;;2389:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2459:1;-1:-1:-1;2054:411:0;;;;;:::o;829:160::-;887:7;913:5;;;931:6;;;;923:46;;;;;-1:-1:-1;;;;;923:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;
Swarm Source
bzzr://d2b012e51e872223fe7a15957b7cf336b19c02b05a3cdd0a9dfbc15196dad22c
Loading...
Loading
Loading...
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.
[ Download: CSV Export ]
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.