More Info
Private Name Tags
ContractCreator
Multichain Info
No addresses found
Latest 25 from a total of 41,143 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Unstake | 69350176 | 11 hrs ago | IN | 0 POL | 0.00293318 | ||||
Claim | 69333083 | 22 hrs ago | IN | 0 POL | 0.0124398 | ||||
Claim | 69332784 | 22 hrs ago | IN | 0 POL | 0.00109387 | ||||
Claim | 69328578 | 24 hrs ago | IN | 0 POL | 0.00128544 | ||||
Claim | 69326054 | 26 hrs ago | IN | 0 POL | 0.00115731 | ||||
Claim | 69323808 | 27 hrs ago | IN | 0 POL | 0.00115234 | ||||
Unstake | 69319502 | 30 hrs ago | IN | 0 POL | 0.00263721 | ||||
Claim | 69318625 | 30 hrs ago | IN | 0 POL | 0.00124398 | ||||
Stake | 69303412 | 39 hrs ago | IN | 0 POL | 0.000684 | ||||
Unstake | 69297043 | 43 hrs ago | IN | 0 POL | 0.00213039 | ||||
Stake | 69293603 | 45 hrs ago | IN | 0 POL | 0.00078145 | ||||
Claim | 69282177 | 2 days ago | IN | 0 POL | 0.00058958 | ||||
Claim | 69282177 | 2 days ago | IN | 0 POL | 0.00058958 | ||||
Claim | 69282177 | 2 days ago | IN | 0 POL | 0.00058958 | ||||
Claim | 69282177 | 2 days ago | IN | 0 POL | 0.00058958 | ||||
Claim | 69282177 | 2 days ago | IN | 0 POL | 0.00070745 | ||||
Claim | 69282177 | 2 days ago | IN | 0 POL | 0.00070745 | ||||
Claim | 69282177 | 2 days ago | IN | 0 POL | 0.00084913 | ||||
Claim | 69282177 | 2 days ago | IN | 0 POL | 0.00070722 | ||||
Claim | 69282177 | 2 days ago | IN | 0 POL | 0.00070722 | ||||
Claim | 69282177 | 2 days ago | IN | 0 POL | 0.00070722 | ||||
Claim | 69282177 | 2 days ago | IN | 0 POL | 0.00070722 | ||||
Claim | 69282177 | 2 days ago | IN | 0 POL | 0.00070722 | ||||
Claim | 69282177 | 2 days ago | IN | 0 POL | 0.00070722 | ||||
Claim | 69282177 | 2 days ago | IN | 0 POL | 0.00070745 |
Loading...
Loading
Contract Name:
WombatStaking
Compiler Version
v0.8.5+commit.a4f2e591
Optimization Enabled:
Yes with 1000 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: UNLICENSED import "../openzeppelin-contracts/contracts/token/ERC20/IERC20.sol"; import "../openzeppelin-contracts/contracts/access/Ownable.sol"; pragma solidity 0.8.5; /** * @dev Smart contract that allows staking a token. Staking means a user transfers an amount of a * token to the smart contract. The smart contract keeps track of the stakes. Tokens can be * unstaked and reclaimed after a cooldown period. * * While the token is staked the user might get some benefit in applications. That benefit gets * lost as soon as the tokens are unstaked. */ contract WombatStaking is Ownable { /** * @dev The maximum amount of seconds that can be set for the unstake time. This is 30 days * (30 * 24 * 3600 seconds). */ uint private constant MAX_UNSTAKE_TIME_SECONDS = 2592000; /** * @dev A struct to describe how much and when someone unstaked tokens */ struct Unstake { /** * @dev The amount of tokens unstaked */ uint256 amount; /** * @dev The timestamp at which the last unstake can be claimed. This is not updated when the unstakeTime is * updated. */ uint256 claimableAt; } /** * @dev Event that is emitted when someone stakes tokens */ event TokensStaked(address indexed from, uint256 value, uint256 totalStaked); /** * @dev Event that is emitted when someone unstakes tokens */ event TokensUnstaked(address indexed from, uint256 value, uint256 totalStaked); /** * @dev Event that is emitted when someone claims unstaked tokens */ event TokensClaimed(address indexed from, uint256 value); /** * @dev Event that is emitted when the unstake time is updated */ event UnstakeTimeSet(uint newValue); /** * @dev Flag determining if staking is paused. When this is true, no one can stake anymore. */ bool public stakingPaused; /** * @dev The token that can be staked. */ IERC20 public immutable token; /** * @dev The time in seconds a user has to wait to reclaim their tokens after unstaking. Can be * updated. */ uint public unstakeTimeSeconds; /** * @dev The total amount of tokens currently staked. */ uint256 public totalStakedAmount; /** * @dev Mapping of who staked how much */ mapping(address => uint256) private _stakes; /** * @dev Mapping of who unstaked how much and when */ mapping(address => Unstake) private _unstakes; /** * @param _token The address of the token that can be staked * @param _unstakeTimeSeconds The amount of seconds that has to be waited to claim tokens after * unstaking * @param _newOwner An address that will be set as the owner of the smart contract. */ constructor(address _token, uint _unstakeTimeSeconds, address _newOwner) Ownable() { require(_token != address(0), "Token address must not be 0"); token = IERC20(_token); unstakeTimeSeconds = _unstakeTimeSeconds; stakingPaused = false; require(_newOwner != address(0), "New owner must not be 0"); _transferOwnership(_newOwner); totalStakedAmount = 0; } /** * @dev Owner function to update the unstake cooldown period. This will not change the unstake cooldown period for * existing unstakes. * @param _seconds The new value to set */ function setUnstakeTime(uint _seconds) external onlyOwner() { require(_seconds <= MAX_UNSTAKE_TIME_SECONDS, "Must be less than 30 days"); unstakeTimeSeconds = _seconds; emit UnstakeTimeSet(_seconds); } /** * @dev Owner function to pause staking. After this is called, no one can stake anymore unless * resumeStaking is called. */ function pauseStaking() external onlyOwner() { stakingPaused = true; } /** * @dev Owner function to resume staking after pauseStaking has been called. */ function resumeStaking() external onlyOwner() { stakingPaused = false; } /** * @dev Stake an amount of tokens to the smart contract. Before this is called, the "approve" * function of the token has to be called with at least the amount that should be staked. * (Usually a user would be asked to approve a very high amount to this smart contract so it * only has to be done once). * * Staked tokens are locked in this smart contract. A release process can be initiated with * unstake and then claim. */ function stake(uint256 amount) external { require(amount > 0, "Must stake more than 0"); require(stakingPaused == false, "Staking is paused"); require(token.transferFrom(msg.sender, address(this), amount), "Token transfer failed"); _stakes[msg.sender] += amount; totalStakedAmount += amount; emit TokensStaked(msg.sender, amount, _stakes[msg.sender]); } /** * @dev Unstake an amount of tokens. This "moves" them internally so they don't appear as staked * anymore. The unstaked tokens can be claimed after unstakeTimeSeconds has passed. Afterwards * they can be claimed via the claim function. * * Unstaking multiple times resets the claimableAt timestamp. */ function unstake(uint256 amount) external { require(amount > 0, "Must unstake more than 0"); uint256 currentStake = _stakes[msg.sender]; require(currentStake >= amount, "Not enough staked"); _stakes[msg.sender] -= amount; totalStakedAmount -= amount; // "Transfer" the tokens from staked to the unstake. Unstake storage _unstake = _unstakes[msg.sender]; _unstake.amount += amount; // Also reset the claimable timestamp to the block time + the unstake time _unstake.claimableAt = block.timestamp + unstakeTimeSeconds; emit TokensUnstaked(msg.sender, amount, _stakes[msg.sender]); } /** * @dev Claim unstaked tokens. This transfers the tokens back to their original owner. Can only * be called when the user has unstaked tokens and unstakeTimeSeconds has passed since they * last unstaked. */ function claim() external { Unstake storage _unstake = _unstakes[msg.sender]; uint256 amount = _unstake.amount; require(amount > 0, "No tokens claimable found"); require( block.timestamp >= _unstake.claimableAt, "Claim too early" ); delete _unstakes[msg.sender]; require(token.transfer(msg.sender, amount), "Token transfer failed"); emit TokensClaimed(msg.sender, amount); } /** * @dev Get the amount of tokens staked by a user. * @param _address The address to get the stake for. */ function getStake(address _address) external view returns (uint256) { return _stakes[_address]; } /** * @dev Get the unstake for a user * @param _address The address to get the unstake for. */ function getUnstake(address _address) external view returns (Unstake memory) { return _unstakes[_address]; } }
// 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.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
{ "optimizer": { "enabled": true, "runs": 1000 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_unstakeTimeSeconds","type":"uint256"},{"internalType":"address","name":"_newOwner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TokensClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalStaked","type":"uint256"}],"name":"TokensStaked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalStaked","type":"uint256"}],"name":"TokensUnstaked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"UnstakeTimeSet","type":"event"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"getStake","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"getUnstake","outputs":[{"components":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"claimableAt","type":"uint256"}],"internalType":"struct WombatStaking.Unstake","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pauseStaking","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"resumeStaking","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_seconds","type":"uint256"}],"name":"setUnstakeTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakingPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalStakedAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"unstake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unstakeTimeSeconds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60a060405234801561001057600080fd5b50604051610d7e380380610d7e83398101604081905261002f9161018f565b61003833610123565b6001600160a01b0383166100935760405162461bcd60e51b815260206004820152601b60248201527f546f6b656e2061646472657373206d757374206e6f742062652030000000000060448201526064015b60405180910390fd5b6001600160601b0319606084901b1660805260018290556000805460ff60a01b191690556001600160a01b03811661010d5760405162461bcd60e51b815260206004820152601760248201527f4e6577206f776e6572206d757374206e6f742062652030000000000000000000604482015260640161008a565b61011681610123565b50506000600255506101cb565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b038116811461018a57600080fd5b919050565b6000806000606084860312156101a457600080fd5b6101ad84610173565b9250602084015191506101c260408501610173565b90509250925092565b60805160601c610b876101f760003960008181610274015281816105b001526107c10152610b876000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80637a76646011610097578063bbb781cc11610066578063bbb781cc14610230578063f2fde38b14610254578063f999c50614610267578063fc0c546a1461026f57600080fd5b80637a7664601461015f5780638da5cb5b14610188578063947ae12a146101ad578063a694fc3a1461021d57600080fd5b8063567e98f9116100d3578063567e98f91461012a578063699112f814610146578063715018a61461014f5780637475f9131461015757600080fd5b806313f9f340146100fa5780632e17de781461010f5780634e71d92d14610122575b600080fd5b61010d610108366004610ada565b610296565b005b61010d61011d366004610ada565b610331565b61010d6104a5565b61013360025481565b6040519081526020015b60405180910390f35b61013360015481565b61010d6106b1565b61010d6106c5565b61013361016d366004610a88565b6001600160a01b031660009081526003602052604090205490565b6000546001600160a01b03165b6040516001600160a01b03909116815260200161013d565b6102026101bb366004610a88565b6040805180820190915260008082526020820152506001600160a01b0316600090815260046020908152604091829020825180840190935280548352600101549082015290565b6040805182518152602092830151928101929092520161013d565b61010d61022b366004610ada565b6106dc565b60005461024490600160a01b900460ff1681565b604051901515815260200161013d565b61010d610262366004610a88565b610919565b61010d6109a9565b6101957f000000000000000000000000000000000000000000000000000000000000000081565b61029e6109c6565b62278d008111156102f65760405162461bcd60e51b815260206004820152601960248201527f4d757374206265206c657373207468616e20333020646179730000000000000060448201526064015b60405180910390fd5b60018190556040518181527fdf8fa9b618c25937dbd6ab7d4339dc510adde30b73e1a287fadb514231e67fb99060200160405180910390a150565b600081116103815760405162461bcd60e51b815260206004820152601860248201527f4d75737420756e7374616b65206d6f7265207468616e2030000000000000000060448201526064016102ed565b33600090815260036020526040902054818110156103e15760405162461bcd60e51b815260206004820152601160248201527f4e6f7420656e6f756768207374616b656400000000000000000000000000000060448201526064016102ed565b3360009081526003602052604081208054849290610400908490610b0b565b9250508190555081600260008282546104199190610b0b565b9091555050336000908152600460205260408120805490918491839190610441908490610af3565b90915550506001546104539042610af3565b600182015533600081815260036020908152604091829020548251878152918201527f6f2d3e000c89d37446b7c0374c0125068ff316d1e3ee302336478a8cd03c2336910160405180910390a2505050565b3360009081526004602052604090208054806105035760405162461bcd60e51b815260206004820152601960248201527f4e6f20746f6b656e7320636c61696d61626c6520666f756e640000000000000060448201526064016102ed565b81600101544210156105575760405162461bcd60e51b815260206004820152600f60248201527f436c61696d20746f6f206561726c79000000000000000000000000000000000060448201526064016102ed565b3360008181526004602081905260408083208381556001019290925590517fa9059cbb00000000000000000000000000000000000000000000000000000000815290810191909152602481018290526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb90604401602060405180830381600087803b1580156105f457600080fd5b505af1158015610608573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061062c9190610ab8565b6106785760405162461bcd60e51b815260206004820152601560248201527f546f6b656e207472616e73666572206661696c6564000000000000000000000060448201526064016102ed565b60405181815233907f896e034966eaaf1adc54acc0f257056febbd300c9e47182cf761982cf1f5e4309060200160405180910390a25050565b6106b96109c6565b6106c36000610a20565b565b6106cd6109c6565b6000805460ff60a01b19169055565b6000811161072c5760405162461bcd60e51b815260206004820152601660248201527f4d757374207374616b65206d6f7265207468616e20300000000000000000000060448201526064016102ed565b600054600160a01b900460ff16156107865760405162461bcd60e51b815260206004820152601160248201527f5374616b696e672069732070617573656400000000000000000000000000000060448201526064016102ed565b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906323b872dd90606401602060405180830381600087803b15801561080d57600080fd5b505af1158015610821573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108459190610ab8565b6108915760405162461bcd60e51b815260206004820152601560248201527f546f6b656e207472616e73666572206661696c6564000000000000000000000060448201526064016102ed565b33600090815260036020526040812080548392906108b0908490610af3565b9250508190555080600260008282546108c99190610af3565b909155505033600081815260036020908152604091829020548251858152918201527fdd2a19c3bdd089cbe77c04f5655f83de0504d6140d12c8667646f55d0557c4dc910160405180910390a250565b6109216109c6565b6001600160a01b03811661099d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016102ed565b6109a681610a20565b50565b6109b16109c6565b6000805460ff60a01b1916600160a01b179055565b6000546001600160a01b031633146106c35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102ed565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600060208284031215610a9a57600080fd5b81356001600160a01b0381168114610ab157600080fd5b9392505050565b600060208284031215610aca57600080fd5b81518015158114610ab157600080fd5b600060208284031215610aec57600080fd5b5035919050565b60008219821115610b0657610b06610b22565b500190565b600082821015610b1d57610b1d610b22565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220bb9ae668a06b082d1ffd089d96131f8d35c6d1012e355b1fbdad54a295044d0d64736f6c634300080500330000000000000000000000000c9c7712c83b3c70e7c5e11100d33d9401bdf9dd0000000000000000000000000000000000000000000000000000000000000e1000000000000000000000000032060928490447f6934094223d350e646de148d1
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100f55760003560e01c80637a76646011610097578063bbb781cc11610066578063bbb781cc14610230578063f2fde38b14610254578063f999c50614610267578063fc0c546a1461026f57600080fd5b80637a7664601461015f5780638da5cb5b14610188578063947ae12a146101ad578063a694fc3a1461021d57600080fd5b8063567e98f9116100d3578063567e98f91461012a578063699112f814610146578063715018a61461014f5780637475f9131461015757600080fd5b806313f9f340146100fa5780632e17de781461010f5780634e71d92d14610122575b600080fd5b61010d610108366004610ada565b610296565b005b61010d61011d366004610ada565b610331565b61010d6104a5565b61013360025481565b6040519081526020015b60405180910390f35b61013360015481565b61010d6106b1565b61010d6106c5565b61013361016d366004610a88565b6001600160a01b031660009081526003602052604090205490565b6000546001600160a01b03165b6040516001600160a01b03909116815260200161013d565b6102026101bb366004610a88565b6040805180820190915260008082526020820152506001600160a01b0316600090815260046020908152604091829020825180840190935280548352600101549082015290565b6040805182518152602092830151928101929092520161013d565b61010d61022b366004610ada565b6106dc565b60005461024490600160a01b900460ff1681565b604051901515815260200161013d565b61010d610262366004610a88565b610919565b61010d6109a9565b6101957f0000000000000000000000000c9c7712c83b3c70e7c5e11100d33d9401bdf9dd81565b61029e6109c6565b62278d008111156102f65760405162461bcd60e51b815260206004820152601960248201527f4d757374206265206c657373207468616e20333020646179730000000000000060448201526064015b60405180910390fd5b60018190556040518181527fdf8fa9b618c25937dbd6ab7d4339dc510adde30b73e1a287fadb514231e67fb99060200160405180910390a150565b600081116103815760405162461bcd60e51b815260206004820152601860248201527f4d75737420756e7374616b65206d6f7265207468616e2030000000000000000060448201526064016102ed565b33600090815260036020526040902054818110156103e15760405162461bcd60e51b815260206004820152601160248201527f4e6f7420656e6f756768207374616b656400000000000000000000000000000060448201526064016102ed565b3360009081526003602052604081208054849290610400908490610b0b565b9250508190555081600260008282546104199190610b0b565b9091555050336000908152600460205260408120805490918491839190610441908490610af3565b90915550506001546104539042610af3565b600182015533600081815260036020908152604091829020548251878152918201527f6f2d3e000c89d37446b7c0374c0125068ff316d1e3ee302336478a8cd03c2336910160405180910390a2505050565b3360009081526004602052604090208054806105035760405162461bcd60e51b815260206004820152601960248201527f4e6f20746f6b656e7320636c61696d61626c6520666f756e640000000000000060448201526064016102ed565b81600101544210156105575760405162461bcd60e51b815260206004820152600f60248201527f436c61696d20746f6f206561726c79000000000000000000000000000000000060448201526064016102ed565b3360008181526004602081905260408083208381556001019290925590517fa9059cbb00000000000000000000000000000000000000000000000000000000815290810191909152602481018290526001600160a01b037f0000000000000000000000000c9c7712c83b3c70e7c5e11100d33d9401bdf9dd169063a9059cbb90604401602060405180830381600087803b1580156105f457600080fd5b505af1158015610608573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061062c9190610ab8565b6106785760405162461bcd60e51b815260206004820152601560248201527f546f6b656e207472616e73666572206661696c6564000000000000000000000060448201526064016102ed565b60405181815233907f896e034966eaaf1adc54acc0f257056febbd300c9e47182cf761982cf1f5e4309060200160405180910390a25050565b6106b96109c6565b6106c36000610a20565b565b6106cd6109c6565b6000805460ff60a01b19169055565b6000811161072c5760405162461bcd60e51b815260206004820152601660248201527f4d757374207374616b65206d6f7265207468616e20300000000000000000000060448201526064016102ed565b600054600160a01b900460ff16156107865760405162461bcd60e51b815260206004820152601160248201527f5374616b696e672069732070617573656400000000000000000000000000000060448201526064016102ed565b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018290527f0000000000000000000000000c9c7712c83b3c70e7c5e11100d33d9401bdf9dd6001600160a01b0316906323b872dd90606401602060405180830381600087803b15801561080d57600080fd5b505af1158015610821573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108459190610ab8565b6108915760405162461bcd60e51b815260206004820152601560248201527f546f6b656e207472616e73666572206661696c6564000000000000000000000060448201526064016102ed565b33600090815260036020526040812080548392906108b0908490610af3565b9250508190555080600260008282546108c99190610af3565b909155505033600081815260036020908152604091829020548251858152918201527fdd2a19c3bdd089cbe77c04f5655f83de0504d6140d12c8667646f55d0557c4dc910160405180910390a250565b6109216109c6565b6001600160a01b03811661099d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016102ed565b6109a681610a20565b50565b6109b16109c6565b6000805460ff60a01b1916600160a01b179055565b6000546001600160a01b031633146106c35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102ed565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600060208284031215610a9a57600080fd5b81356001600160a01b0381168114610ab157600080fd5b9392505050565b600060208284031215610aca57600080fd5b81518015158114610ab157600080fd5b600060208284031215610aec57600080fd5b5035919050565b60008219821115610b0657610b06610b22565b500190565b600082821015610b1d57610b1d610b22565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220bb9ae668a06b082d1ffd089d96131f8d35c6d1012e355b1fbdad54a295044d0d64736f6c63430008050033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000c9c7712c83b3c70e7c5e11100d33d9401bdf9dd0000000000000000000000000000000000000000000000000000000000000e1000000000000000000000000032060928490447f6934094223d350e646de148d1
-----Decoded View---------------
Arg [0] : _token (address): 0x0C9c7712C83B3C70e7c5E11100D33D9401BdF9dd
Arg [1] : _unstakeTimeSeconds (uint256): 3600
Arg [2] : _newOwner (address): 0x32060928490447F6934094223D350e646De148d1
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000000c9c7712c83b3c70e7c5e11100d33d9401bdf9dd
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000e10
Arg [2] : 00000000000000000000000032060928490447f6934094223d350e646de148d1
Loading...
Loading
Loading...
Loading
Loading...
Loading
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.