More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 3,408 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
Value | ||||
---|---|---|---|---|---|---|---|---|---|
Withdraw | 20064007 | 27 days ago | IN | 0 ETH | 0.00110297 | ||||
Withdraw | 20009882 | 35 days ago | IN | 0 ETH | 0.0008141 | ||||
Withdraw | 20006908 | 35 days ago | IN | 0 ETH | 0.00082209 | ||||
Withdraw | 20001446 | 36 days ago | IN | 0 ETH | 0.00034451 | ||||
Withdraw | 19991065 | 37 days ago | IN | 0 ETH | 0.00150764 | ||||
Withdraw | 19950127 | 43 days ago | IN | 0 ETH | 0.0004021 | ||||
Withdraw | 19933297 | 45 days ago | IN | 0 ETH | 0.00026791 | ||||
Withdraw | 19933297 | 45 days ago | IN | 0 ETH | 0.00077421 | ||||
Withdraw | 19922888 | 47 days ago | IN | 0 ETH | 0.00079902 | ||||
Withdraw | 19898795 | 50 days ago | IN | 0 ETH | 0.00021871 | ||||
Withdraw | 19893982 | 51 days ago | IN | 0 ETH | 0.00039322 | ||||
Withdraw | 19871077 | 54 days ago | IN | 0 ETH | 0.00051732 | ||||
Withdraw | 19824855 | 60 days ago | IN | 0 ETH | 0.00038234 | ||||
Withdraw | 19812485 | 62 days ago | IN | 0 ETH | 0.0004809 | ||||
Withdraw | 19799342 | 64 days ago | IN | 0 ETH | 0.00037028 | ||||
Withdraw | 19787080 | 66 days ago | IN | 0 ETH | 0.00041334 | ||||
Withdraw | 19760443 | 69 days ago | IN | 0 ETH | 0.00064165 | ||||
Withdraw | 19758087 | 70 days ago | IN | 0 ETH | 0.00033735 | ||||
Withdraw | 19734331 | 73 days ago | IN | 0 ETH | 0.00119902 | ||||
Withdraw | 19729702 | 74 days ago | IN | 0 ETH | 0.00057044 | ||||
Withdraw | 19666362 | 83 days ago | IN | 0 ETH | 0.00088578 | ||||
Withdraw | 19635863 | 87 days ago | IN | 0 ETH | 0.00075236 | ||||
Withdraw | 19600824 | 92 days ago | IN | 0 ETH | 0.0010957 | ||||
Withdraw | 19600717 | 92 days ago | IN | 0 ETH | 0.00104608 | ||||
Withdraw | 19574682 | 95 days ago | IN | 0 ETH | 0.00205893 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
MetacadeStaking
Compiler Version
v0.8.18+commit.87f61d96
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: UNLICENSED pragma solidity 0.8.18; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; import "../interfaces/staking/IStaking.sol"; import "../interfaces/staking/IPresalePurchases.sol"; contract MetacadeStaking is IStaking { using SafeERC20 for IERC20; IERC20 public token; IPresalePurchases public presale; /// @notice Interest that should be accrued to the user as a reward /// @dev It is represented as a regular blockchain number with 2 decimal places (10000 is 100.00%) uint256 public immutable interestRate; uint256 public immutable stakingStart; uint256 public immutable stakingEnd; uint256 public immutable withdrawalStart; uint256 public immutable stakingPoolLimit; uint256 public stakingPool; mapping(address => uint256) public userDeposits; mapping(address => bool) public hasWithdrawn; constructor( address _token, address _presale, uint256 _stakingStart, uint256 _stakingPeriod, uint256 _lockPeriod, uint256 _stakingPoolLimit, uint256 _interestRange ) { token = IERC20(_token); presale = IPresalePurchases(_presale); stakingStart = _stakingStart; stakingEnd = _stakingStart + _stakingPeriod; withdrawalStart = _stakingStart + _stakingPeriod + _lockPeriod; interestRate = _interestRange; stakingPoolLimit = _stakingPoolLimit; } /// @dev Deposit tokens to be locked until the end of the locking period /// @param _amount The amount of tokens to deposit function stake(uint256 _amount) public { if (block.timestamp < stakingStart || block.timestamp >= stakingEnd) revert InvalidTimePeriod(); if (!presale.hasClaimed(msg.sender) && presale.userDeposits(msg.sender) == 0) revert NotPresaleParticipant(); if (stakingPool + _amount > stakingPoolLimit) revert ExceedsStakingLimit(stakingPoolLimit - stakingPool); userDeposits[msg.sender] += _amount; stakingPool += _amount; token.safeTransferFrom(msg.sender, address(this), _amount); emit Staked(msg.sender, _amount, block.timestamp); } /// @dev Withdraw tokens after the end of the locking period or during the deposit period function withdraw() public { if (block.timestamp < withdrawalStart) revert InvalidTimePeriod(); if (hasWithdrawn[msg.sender]) revert AlreadyWithdrawn(); if (userDeposits[msg.sender] == 0) revert NoStake(); uint256 tokensToTransfer = userDeposits[msg.sender] + (userDeposits[msg.sender] * interestRate / 10000); hasWithdrawn[msg.sender] = true; token.safeTransfer(msg.sender, tokensToTransfer); emit Withdrawn(msg.sender, tokensToTransfer, block.timestamp); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/draft-IERC20Permit.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612]. * * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't * need to send a transaction, and thus is not required to hold Ether at all. */ interface IERC20Permit { /** * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens, * given ``owner``'s signed approval. * * IMPORTANT: The same issues {IERC20-approve} has related to transaction * ordering also apply here. * * Emits an {Approval} event. * * Requirements: * * - `spender` cannot be the zero address. * - `deadline` must be a timestamp in the future. * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner` * over the EIP712-formatted function arguments. * - the signature must use ``owner``'s current nonce (see {nonces}). * * For more information on the signature format, see the * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP * section]. */ function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; /** * @dev Returns the current nonce for `owner`. This value must be * included whenever a signature is generated for {permit}. * * Every successful call to {permit} increases ``owner``'s nonce by one. This * prevents a signature from being used multiple times. */ function nonces(address owner) external view returns (uint256); /** * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}. */ // solhint-disable-next-line func-name-mixedcase function DOMAIN_SEPARATOR() external view returns (bytes32); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @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 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 `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, 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 `from` to `to` 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 from, address to, uint256 amount ) external returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/utils/SafeERC20.sol) pragma solidity ^0.8.0; import "../IERC20.sol"; import "../extensions/draft-IERC20Permit.sol"; import "../../../utils/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 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)); } } function safePermit( IERC20Permit token, address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) internal { uint256 nonceBefore = token.nonces(owner); token.permit(owner, spender, value, deadline, v, r, s); uint256 nonceAfter = token.nonces(owner); require(nonceAfter == nonceBefore + 1, "SafeERC20: permit did not succeed"); } /** * @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"); } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @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 * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 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 functionCallWithValue(target, data, 0, "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"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResultFromTarget(target, 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) { (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResultFromTarget(target, 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) { (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract. * * _Available since v4.8._ */ function verifyCallResultFromTarget( address target, bool success, bytes memory returndata, string memory errorMessage ) internal view returns (bytes memory) { if (success) { if (returndata.length == 0) { // only check isContract if the call was successful and the return data is empty // otherwise we already know that it was a contract require(isContract(target), "Address: call to non-contract"); } return returndata; } else { _revert(returndata, errorMessage); } } /** * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason or using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { _revert(returndata, errorMessage); } } function _revert(bytes memory returndata, string memory errorMessage) private pure { // 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 /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } }
// SPDX-License-Identifier: UNLICENSED pragma solidity 0.8.18; interface IPresalePurchases { function hasClaimed(address _user) external returns(bool); function userDeposits(address _user) external returns(uint256); }
// SPDX-License-Identifier: UNLICENSED pragma solidity 0.8.18; interface IStaking { /// @notice Stake exceeds stake pool limit /// @dev returns amount of tokens remaining before stake limit will be reached error ExceedsStakingLimit(uint256 remainingLimit); /// @notice Could not withdraw if no tokens were staked error NoStake(); /// @notice Thrown when trying to run function in wrong time error InvalidTimePeriod(); /// @notice Could not deposit if user not participated in presale error NotPresaleParticipant(); /// @notice Could not withdraw if already withdrawn error AlreadyWithdrawn(); event Staked ( address indexed user, uint256 indexed amount, uint256 timestamp ); event Withdrawn ( address indexed user, uint256 indexed amount, uint256 timestamp ); }
{ "optimizer": { "enabled": true, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_presale","type":"address"},{"internalType":"uint256","name":"_stakingStart","type":"uint256"},{"internalType":"uint256","name":"_stakingPeriod","type":"uint256"},{"internalType":"uint256","name":"_lockPeriod","type":"uint256"},{"internalType":"uint256","name":"_stakingPoolLimit","type":"uint256"},{"internalType":"uint256","name":"_interestRange","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AlreadyWithdrawn","type":"error"},{"inputs":[{"internalType":"uint256","name":"remainingLimit","type":"uint256"}],"name":"ExceedsStakingLimit","type":"error"},{"inputs":[],"name":"InvalidTimePeriod","type":"error"},{"inputs":[],"name":"NoStake","type":"error"},{"inputs":[],"name":"NotPresaleParticipant","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"Staked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"Withdrawn","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"hasWithdrawn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"interestRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presale","outputs":[{"internalType":"contract IPresalePurchases","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakingEnd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakingPool","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakingPoolLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakingStart","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userDeposits","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawalStart","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
61012060405234801561001157600080fd5b50604051610c95380380610c95833981016040819052610030916100b8565b600080546001600160a01b03808a166001600160a01b031992831617909255600180549289169290911691909117905560a085905261006f848661011a565b60c0528261007d858761011a565b610087919061011a565b60e05260805261010052506101419350505050565b80516001600160a01b03811681146100b357600080fd5b919050565b600080600080600080600060e0888a0312156100d357600080fd5b6100dc8861009c565b96506100ea6020890161009c565b604089015160608a015160808b015160a08c015160c0909c01519a9d939c50919a90999198509650945092505050565b8082018082111561013b57634e487b7160e01b600052601160045260246000fd5b92915050565b60805160a05160c05160e05161010051610ae66101af600039600081816101980152818161052901526105650152600081816101e6015261024801526000818161010401526103e20152600081816101bf01526103b901526000818161015e01526103010152610ae66000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c8063a694fc3a11610071578063a694fc3a14610180578063c50c6aeb14610193578063d771b0a6146101ba578063e6682428146101e1578063fc0c546a14610208578063fdea8e0b1461023357600080fd5b80630ba36dcd146100b95780630c56ae3b146100ec5780633ccfd60b146100f5578063517d0411146100ff5780635e2c19db146101265780637c3a00fd14610159575b600080fd5b6100d96100c736600461093e565b60036020526000908152604090205481565b6040519081526020015b60405180910390f35b6100d960025481565b6100fd610246565b005b6100d97f000000000000000000000000000000000000000000000000000000000000000081565b61014961013436600461093e565b60046020526000908152604090205460ff1681565b60405190151581526020016100e3565b6100d97f000000000000000000000000000000000000000000000000000000000000000081565b6100fd61018e36600461096e565b6103b7565b6100d97f000000000000000000000000000000000000000000000000000000000000000081565b6100d97f000000000000000000000000000000000000000000000000000000000000000081565b6100d97f000000000000000000000000000000000000000000000000000000000000000081565b60005461021b906001600160a01b031681565b6040516001600160a01b0390911681526020016100e3565b60015461021b906001600160a01b031681565b7f0000000000000000000000000000000000000000000000000000000000000000421015610287576040516329fc802760e11b815260040160405180910390fd5b3360009081526004602052604090205460ff16156102b857604051636507689f60e01b815260040160405180910390fd5b3360009081526003602052604081205490036102e757604051636567cc4d60e11b815260040160405180910390fd5b3360009081526003602052604081205461271090610326907f00000000000000000000000000000000000000000000000000000000000000009061099d565b61033091906109ba565b3360009081526003602052604090205461034a91906109dc565b336000818152600460205260408120805460ff191660011790555491925061037c916001600160a01b03169083610636565b604051428152819033907f92ccf450a286a957af52509bc1c9939d1a6a481783e142e41e2499f0bb66ebc6906020015b60405180910390a350565b7f000000000000000000000000000000000000000000000000000000000000000042108061040557507f00000000000000000000000000000000000000000000000000000000000000004210155b15610423576040516329fc802760e11b815260040160405180910390fd5b6001546040516339d9740760e11b81523360048201526001600160a01b03909116906373b2e80e906024016020604051808303816000875af115801561046d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061049191906109ef565b1580156105095750600154604051630ba36dcd60e01b81523360048201526001600160a01b0390911690630ba36dcd906024016020604051808303816000875af11580156104e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105079190610a11565b155b156105275760405163c0f0c56160e01b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000008160025461055691906109dc565b11156105ad57600254610589907f0000000000000000000000000000000000000000000000000000000000000000610a2a565b60405162e891e560e81b81526004016105a491815260200190565b60405180910390fd5b33600090815260036020526040812080548392906105cc9084906109dc565b9250508190555080600260008282546105e591906109dc565b9091555050600054610602906001600160a01b031633308461069e565b604051428152819033907f1449c6dd7851abc30abf37f57715f492010519147cc2652fbc38202c18a6ee90906020016103ac565b6040516001600160a01b03831660248201526044810182905261069990849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526106dc565b505050565b6040516001600160a01b03808516602483015283166044820152606481018290526106d69085906323b872dd60e01b90608401610662565b50505050565b6000610731826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166107ae9092919063ffffffff16565b805190915015610699578080602001905181019061074f91906109ef565b6106995760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016105a4565b60606107bd84846000856107c5565b949350505050565b6060824710156108265760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016105a4565b600080866001600160a01b031685876040516108429190610a61565b60006040518083038185875af1925050503d806000811461087f576040519150601f19603f3d011682016040523d82523d6000602084013e610884565b606091505b5091509150610895878383876108a0565b979650505050505050565b6060831561090f578251600003610908576001600160a01b0385163b6109085760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016105a4565b50816107bd565b6107bd83838151156109245781518083602001fd5b8060405162461bcd60e51b81526004016105a49190610a7d565b60006020828403121561095057600080fd5b81356001600160a01b038116811461096757600080fd5b9392505050565b60006020828403121561098057600080fd5b5035919050565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176109b4576109b4610987565b92915050565b6000826109d757634e487b7160e01b600052601260045260246000fd5b500490565b808201808211156109b4576109b4610987565b600060208284031215610a0157600080fd5b8151801515811461096757600080fd5b600060208284031215610a2357600080fd5b5051919050565b818103818111156109b4576109b4610987565b60005b83811015610a58578181015183820152602001610a40565b50506000910152565b60008251610a73818460208701610a3d565b9190910192915050565b6020815260008251806020840152610a9c816040850160208701610a3d565b601f01601f1916919091016040019291505056fea26469706673582212202fff46c507df19c844a0f28f5d960c12f5da87f332001cd4fa18e6dc6af0e29464736f6c63430008120033000000000000000000000000ed328e9c1179a30ddc1e7595e036aed8760c22af0000000000000000000000000b9869c0b6601544f776284320423bc31fa0dc8000000000000000000000000000000000000000000000000000000000642f16b000000000000000000000000000000000000000000000000000000000000151800000000000000000000000000000000000000000000000000000000000f14280000000000000000000000000000000000000000000cecb8f27f4200f3a0000000000000000000000000000000000000000000000000000000000000000000fa0
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100b45760003560e01c8063a694fc3a11610071578063a694fc3a14610180578063c50c6aeb14610193578063d771b0a6146101ba578063e6682428146101e1578063fc0c546a14610208578063fdea8e0b1461023357600080fd5b80630ba36dcd146100b95780630c56ae3b146100ec5780633ccfd60b146100f5578063517d0411146100ff5780635e2c19db146101265780637c3a00fd14610159575b600080fd5b6100d96100c736600461093e565b60036020526000908152604090205481565b6040519081526020015b60405180910390f35b6100d960025481565b6100fd610246565b005b6100d97f000000000000000000000000000000000000000000000000000000006430683081565b61014961013436600461093e565b60046020526000908152604090205460ff1681565b60405190151581526020016100e3565b6100d97f0000000000000000000000000000000000000000000000000000000000000fa081565b6100fd61018e36600461096e565b6103b7565b6100d97f000000000000000000000000000000000000000000cecb8f27f4200f3a00000081565b6100d97f00000000000000000000000000000000000000000000000000000000642f16b081565b6100d97f000000000000000000000000000000000000000000000000000000006521aab081565b60005461021b906001600160a01b031681565b6040516001600160a01b0390911681526020016100e3565b60015461021b906001600160a01b031681565b7f000000000000000000000000000000000000000000000000000000006521aab0421015610287576040516329fc802760e11b815260040160405180910390fd5b3360009081526004602052604090205460ff16156102b857604051636507689f60e01b815260040160405180910390fd5b3360009081526003602052604081205490036102e757604051636567cc4d60e11b815260040160405180910390fd5b3360009081526003602052604081205461271090610326907f0000000000000000000000000000000000000000000000000000000000000fa09061099d565b61033091906109ba565b3360009081526003602052604090205461034a91906109dc565b336000818152600460205260408120805460ff191660011790555491925061037c916001600160a01b03169083610636565b604051428152819033907f92ccf450a286a957af52509bc1c9939d1a6a481783e142e41e2499f0bb66ebc6906020015b60405180910390a350565b7f00000000000000000000000000000000000000000000000000000000642f16b042108061040557507f00000000000000000000000000000000000000000000000000000000643068304210155b15610423576040516329fc802760e11b815260040160405180910390fd5b6001546040516339d9740760e11b81523360048201526001600160a01b03909116906373b2e80e906024016020604051808303816000875af115801561046d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061049191906109ef565b1580156105095750600154604051630ba36dcd60e01b81523360048201526001600160a01b0390911690630ba36dcd906024016020604051808303816000875af11580156104e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105079190610a11565b155b156105275760405163c0f0c56160e01b815260040160405180910390fd5b7f000000000000000000000000000000000000000000cecb8f27f4200f3a0000008160025461055691906109dc565b11156105ad57600254610589907f000000000000000000000000000000000000000000cecb8f27f4200f3a000000610a2a565b60405162e891e560e81b81526004016105a491815260200190565b60405180910390fd5b33600090815260036020526040812080548392906105cc9084906109dc565b9250508190555080600260008282546105e591906109dc565b9091555050600054610602906001600160a01b031633308461069e565b604051428152819033907f1449c6dd7851abc30abf37f57715f492010519147cc2652fbc38202c18a6ee90906020016103ac565b6040516001600160a01b03831660248201526044810182905261069990849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526106dc565b505050565b6040516001600160a01b03808516602483015283166044820152606481018290526106d69085906323b872dd60e01b90608401610662565b50505050565b6000610731826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166107ae9092919063ffffffff16565b805190915015610699578080602001905181019061074f91906109ef565b6106995760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016105a4565b60606107bd84846000856107c5565b949350505050565b6060824710156108265760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016105a4565b600080866001600160a01b031685876040516108429190610a61565b60006040518083038185875af1925050503d806000811461087f576040519150601f19603f3d011682016040523d82523d6000602084013e610884565b606091505b5091509150610895878383876108a0565b979650505050505050565b6060831561090f578251600003610908576001600160a01b0385163b6109085760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016105a4565b50816107bd565b6107bd83838151156109245781518083602001fd5b8060405162461bcd60e51b81526004016105a49190610a7d565b60006020828403121561095057600080fd5b81356001600160a01b038116811461096757600080fd5b9392505050565b60006020828403121561098057600080fd5b5035919050565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176109b4576109b4610987565b92915050565b6000826109d757634e487b7160e01b600052601260045260246000fd5b500490565b808201808211156109b4576109b4610987565b600060208284031215610a0157600080fd5b8151801515811461096757600080fd5b600060208284031215610a2357600080fd5b5051919050565b818103818111156109b4576109b4610987565b60005b83811015610a58578181015183820152602001610a40565b50506000910152565b60008251610a73818460208701610a3d565b9190910192915050565b6020815260008251806020840152610a9c816040850160208701610a3d565b601f01601f1916919091016040019291505056fea26469706673582212202fff46c507df19c844a0f28f5d960c12f5da87f332001cd4fa18e6dc6af0e29464736f6c63430008120033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000ed328e9c1179a30ddc1e7595e036aed8760c22af0000000000000000000000000b9869c0b6601544f776284320423bc31fa0dc8000000000000000000000000000000000000000000000000000000000642f16b000000000000000000000000000000000000000000000000000000000000151800000000000000000000000000000000000000000000000000000000000f14280000000000000000000000000000000000000000000cecb8f27f4200f3a0000000000000000000000000000000000000000000000000000000000000000000fa0
-----Decoded View---------------
Arg [0] : _token (address): 0xed328E9C1179a30ddC1E7595E036AEd8760C22aF
Arg [1] : _presale (address): 0x0b9869C0b6601544F776284320423bC31fA0dc80
Arg [2] : _stakingStart (uint256): 1680807600
Arg [3] : _stakingPeriod (uint256): 86400
Arg [4] : _lockPeriod (uint256): 15811200
Arg [5] : _stakingPoolLimit (uint256): 250000000000000000000000000
Arg [6] : _interestRange (uint256): 4000
-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 000000000000000000000000ed328e9c1179a30ddc1e7595e036aed8760c22af
Arg [1] : 0000000000000000000000000b9869c0b6601544f776284320423bc31fa0dc80
Arg [2] : 00000000000000000000000000000000000000000000000000000000642f16b0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000015180
Arg [4] : 0000000000000000000000000000000000000000000000000000000000f14280
Arg [5] : 000000000000000000000000000000000000000000cecb8f27f4200f3a000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000fa0
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ 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.