More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 35 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Claim | 18047063 | 469 days ago | IN | 0 ETH | 0.00125885 | ||||
Withdraw | 18042025 | 470 days ago | IN | 0 ETH | 0.00226873 | ||||
Withdraw | 18038533 | 471 days ago | IN | 0 ETH | 0.00184783 | ||||
Deposit | 18028207 | 472 days ago | IN | 0 ETH | 0.00976355 | ||||
Deposit | 18027558 | 472 days ago | IN | 0 ETH | 0.00498932 | ||||
Withdraw | 18023890 | 473 days ago | IN | 0 ETH | 0.00201749 | ||||
Withdraw | 18021716 | 473 days ago | IN | 0 ETH | 0.00698372 | ||||
Withdraw | 18021455 | 473 days ago | IN | 0 ETH | 0.00918282 | ||||
Withdraw | 18021005 | 473 days ago | IN | 0 ETH | 0.00946883 | ||||
Deposit | 18019622 | 473 days ago | IN | 0 ETH | 0.00263253 | ||||
Deposit | 18017719 | 474 days ago | IN | 0 ETH | 0.0017164 | ||||
Deposit | 18016284 | 474 days ago | IN | 0 ETH | 0.00358711 | ||||
Deposit | 18015539 | 474 days ago | IN | 0 ETH | 0.00690452 | ||||
Deposit | 18014826 | 474 days ago | IN | 0 ETH | 0.00536573 | ||||
Claim | 18014485 | 474 days ago | IN | 0 ETH | 0.00302773 | ||||
Deposit | 18014469 | 474 days ago | IN | 0 ETH | 0.00440571 | ||||
Deposit | 18014389 | 474 days ago | IN | 0 ETH | 0.00455557 | ||||
Claim | 18014286 | 474 days ago | IN | 0 ETH | 0.00526778 | ||||
Deposit | 18014145 | 474 days ago | IN | 0 ETH | 0.00558499 | ||||
Deposit | 18014127 | 474 days ago | IN | 0 ETH | 0.00581448 | ||||
Deposit | 18013950 | 474 days ago | IN | 0 ETH | 0.00778277 | ||||
Deposit | 18013796 | 474 days ago | IN | 0 ETH | 0.0043645 | ||||
Claim | 18013702 | 474 days ago | IN | 0 ETH | 0.0038527 | ||||
Deposit | 18013695 | 474 days ago | IN | 0 ETH | 0.0052692 | ||||
Claim | 18013679 | 474 days ago | IN | 0 ETH | 0.0014305 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
Staking
Compiler Version
v0.8.10+commit.fc410830
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-08-28 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; // OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol) /** * @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); } // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) /** * @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; } } // OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.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. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling 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); } } // OpenZeppelin Contracts (last updated v4.9.0) (utils/Address.sol) /** * @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 * * Furthermore, `isContract` will also return true if the target contract within * the same transaction is already scheduled for destruction by `SELFDESTRUCT`, * which only has an effect at the end of a transaction. * ==== * * [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://consensys.net/diligence/blog/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.8.0/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); } } } contract Staking is Ownable { struct Share { uint depositTime; uint initialDeposit; uint sumReward; } mapping(address => Share) public shares; IERC20 public stakingToken; IERC20 public rewardToken; uint public sumReward; uint private constant PRECISION = 1e18; address private _taxWallet; uint public totalReward; uint256 public totalDistributed; bool public initialized; constructor() { _taxWallet = _msgSender(); } function init(address _rewardToken, address _stakingToken) external { require(!initialized, "alrealy initialized"); stakingToken = IERC20(_stakingToken); rewardToken = IERC20(_rewardToken); initialized = true; } function setStakeToken(IERC20 token_) external onlyOwner { stakingToken = token_; } function setRewardToken(IERC20 token_) external onlyOwner { stakingToken = token_; } function deposit(uint amount) external { require(amount > 0, "Amount must be greater than zero"); Share memory share = shares[_msgSender()]; stakingToken.transferFrom(_msgSender(), address(this), amount); _payoutGainsUpdateShare( _msgSender(), share, share.initialDeposit + amount, true ); } function withdraw() external { Share memory share = shares[_msgSender()]; require(share.initialDeposit > 0, "No initial deposit"); require( share.depositTime + 1 days < block.timestamp, "withdraw after one week" ); stakingToken.transfer(_msgSender(), share.initialDeposit); _payoutGainsUpdateShare(_msgSender(), share, 0, true); } function claim() external { Share memory share = shares[_msgSender()]; require(share.initialDeposit > 0, "No initial deposit"); _payoutGainsUpdateShare( _msgSender(), share, share.initialDeposit, false ); } function _payoutGainsUpdateShare( address who, Share memory share, uint newAmount, bool resetTimer ) private { uint gains; if (share.initialDeposit != 0) gains = (share.initialDeposit * (sumReward - share.sumReward)) / PRECISION; if (newAmount == 0) delete shares[who]; else if (resetTimer) shares[who] = Share(block.timestamp, newAmount, sumReward); else shares[who] = Share(share.depositTime, newAmount, sumReward); if (gains > 0) { rewardToken.transfer(who, gains); totalDistributed = totalDistributed + gains; } } function pending(address who) external view returns (uint) { Share memory share = shares[who]; return (share.initialDeposit * (sumReward - share.sumReward)) / PRECISION; } function updateReward(uint256 _amount) external { require( _msgSender() == address(rewardToken), "only accept token contract" ); uint balance = stakingToken.balanceOf(address(this)); if (_amount == 0 || balance == 0) return; uint gpus = (_amount * PRECISION) / balance; sumReward += gpus; totalReward += _amount; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"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"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_rewardToken","type":"address"},{"internalType":"address","name":"_stakingToken","type":"address"}],"name":"init","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initialized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"}],"name":"pending","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token_","type":"address"}],"name":"setRewardToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token_","type":"address"}],"name":"setStakeToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"shares","outputs":[{"internalType":"uint256","name":"depositTime","type":"uint256"},{"internalType":"uint256","name":"initialDeposit","type":"uint256"},{"internalType":"uint256","name":"sumReward","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakingToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sumReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalDistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalReward","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":"updateReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b5061001a33610031565b600580546001600160a01b03191633179055610081565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610c5e806100906000396000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c80638a2dced9116100a2578063ce7c2ac211610071578063ce7c2ac2146101ff578063efca2eed14610248578063f09a401614610251578063f2fde38b14610264578063f7c618c11461027757600080fd5b80638a2dced9146101d25780638aee81271461011b5780638da5cb5b146101db578063b6b55f25146101ec57600080fd5b80634e71d92d116100e95780634e71d92d1461016d5780635eebea2014610175578063715018a61461019657806372f702f31461019e578063750142e6146101c957600080fd5b80630397d4581461011b578063158ef93e146101305780633ccfd60b14610152578063425c8abd1461015a575b600080fd5b61012e610129366004610af8565b61028a565b005b60085461013d9060ff1681565b60405190151581526020015b60405180910390f35b61012e6102b4565b61012e610168366004610b15565b610425565b61012e610561565b610188610183366004610af8565b6105e8565b604051908152602001610149565b61012e61065c565b6002546101b1906001600160a01b031681565b6040516001600160a01b039091168152602001610149565b61018860065481565b61018860045481565b6000546001600160a01b03166101b1565b61012e6101fa366004610b15565b610670565b61022d61020d366004610af8565b600160208190526000918252604090912080549181015460029091015483565b60408051938452602084019290925290820152606001610149565b61018860075481565b61012e61025f366004610b2e565b610792565b61012e610272366004610af8565b610819565b6003546101b1906001600160a01b031681565b61029261088f565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b336000908152600160208181526040928390208351606081018552815481529281015491830182905260020154928201929092529061032f5760405162461bcd60e51b8152602060048201526012602482015271139bc81a5b9a5d1a585b0819195c1bdcda5d60721b60448201526064015b60405180910390fd5b805142906103409062015180610b7d565b1061038d5760405162461bcd60e51b815260206004820152601760248201527f7769746864726177206166746572206f6e65207765656b0000000000000000006044820152606401610326565b6002546001600160a01b031663a9059cbb3360208401516040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af11580156103ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104139190610b95565b506104223382600060016108e9565b50565b6003546001600160a01b0316336001600160a01b0316146104885760405162461bcd60e51b815260206004820152601a60248201527f6f6e6c792061636365707420746f6b656e20636f6e74726163740000000000006044820152606401610326565b6002546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa1580156104d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104f59190610bb7565b9050811580610502575080155b1561050b575050565b600081610520670de0b6b3a764000085610bd0565b61052a9190610bef565b9050806004600082825461053e9190610b7d565b9250508190555082600660008282546105579190610b7d565b9091555050505050565b33600090815260016020818152604092839020835160608101855281548152928101549183018290526002015492820192909252906105d75760405162461bcd60e51b8152602060048201526012602482015271139bc81a5b9a5d1a585b0819195c1bdcda5d60721b6044820152606401610326565b6104223382836020015160006108e9565b6001600160a01b03811660009081526001602081815260408084208151606081018352815481529381015492840192909252600290910154908201819052600454670de0b6b3a76400009161063c91610c11565b826020015161064b9190610bd0565b6106559190610bef565b9392505050565b61066461088f565b61066e6000610a93565b565b600081116106c05760405162461bcd60e51b815260206004820181905260248201527f416d6f756e74206d7573742062652067726561746572207468616e207a65726f6044820152606401610326565b3360008181526001602081815260408084208151606081018352815481529381015484840152600290810154848301525481516323b872dd60e01b8152600481019690965230602487015260448601879052905192946001600160a01b03909116936323b872dd936064808401949391929183900301908290875af115801561074d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107719190610b95565b5061078e33828484602001516107879190610b7d565b60016108e9565b5050565b60085460ff16156107db5760405162461bcd60e51b8152602060048201526013602482015272185b1c99585b1e481a5b9a5d1a585b1a5e9959606a1b6044820152606401610326565b600280546001600160a01b039283166001600160a01b031991821617909155600380549390921692169190911790556008805460ff19166001179055565b61082161088f565b6001600160a01b0381166108865760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610326565b61042281610a93565b6000546001600160a01b0316331461066e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610326565b6000836020015160001461092e57670de0b6b3a764000084604001516004546109129190610c11565b85602001516109219190610bd0565b61092b9190610bef565b90505b8261095f576001600160a01b03851660009081526001602081905260408220828155908101829055600201556109fc565b81156109b2576040805160608101825242815260208082018681526004548385019081526001600160a01b038a1660009081526001938490529490942092518355519082015590516002909101556109fc565b604080516060810182528551815260208082018681526004548385019081526001600160a01b038a1660009081526001938490529490942092518355519082015590516002909101555b8015610a8c5760035460405163a9059cbb60e01b81526001600160a01b038781166004830152602482018490529091169063a9059cbb906044016020604051808303816000875af1158015610a55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a799190610b95565b5080600754610a889190610b7d565b6007555b5050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038116811461042257600080fd5b600060208284031215610b0a57600080fd5b813561065581610ae3565b600060208284031215610b2757600080fd5b5035919050565b60008060408385031215610b4157600080fd5b8235610b4c81610ae3565b91506020830135610b5c81610ae3565b809150509250929050565b634e487b7160e01b600052601160045260246000fd5b60008219821115610b9057610b90610b67565b500190565b600060208284031215610ba757600080fd5b8151801515811461065557600080fd5b600060208284031215610bc957600080fd5b5051919050565b6000816000190483118215151615610bea57610bea610b67565b500290565b600082610c0c57634e487b7160e01b600052601260045260246000fd5b500490565b600082821015610c2357610c23610b67565b50039056fea2646970667358221220225e28474aff3fab29738373f67f0b8bd4a4c903ba4932373870e752ba1f7cbe64736f6c634300080a0033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101165760003560e01c80638a2dced9116100a2578063ce7c2ac211610071578063ce7c2ac2146101ff578063efca2eed14610248578063f09a401614610251578063f2fde38b14610264578063f7c618c11461027757600080fd5b80638a2dced9146101d25780638aee81271461011b5780638da5cb5b146101db578063b6b55f25146101ec57600080fd5b80634e71d92d116100e95780634e71d92d1461016d5780635eebea2014610175578063715018a61461019657806372f702f31461019e578063750142e6146101c957600080fd5b80630397d4581461011b578063158ef93e146101305780633ccfd60b14610152578063425c8abd1461015a575b600080fd5b61012e610129366004610af8565b61028a565b005b60085461013d9060ff1681565b60405190151581526020015b60405180910390f35b61012e6102b4565b61012e610168366004610b15565b610425565b61012e610561565b610188610183366004610af8565b6105e8565b604051908152602001610149565b61012e61065c565b6002546101b1906001600160a01b031681565b6040516001600160a01b039091168152602001610149565b61018860065481565b61018860045481565b6000546001600160a01b03166101b1565b61012e6101fa366004610b15565b610670565b61022d61020d366004610af8565b600160208190526000918252604090912080549181015460029091015483565b60408051938452602084019290925290820152606001610149565b61018860075481565b61012e61025f366004610b2e565b610792565b61012e610272366004610af8565b610819565b6003546101b1906001600160a01b031681565b61029261088f565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b336000908152600160208181526040928390208351606081018552815481529281015491830182905260020154928201929092529061032f5760405162461bcd60e51b8152602060048201526012602482015271139bc81a5b9a5d1a585b0819195c1bdcda5d60721b60448201526064015b60405180910390fd5b805142906103409062015180610b7d565b1061038d5760405162461bcd60e51b815260206004820152601760248201527f7769746864726177206166746572206f6e65207765656b0000000000000000006044820152606401610326565b6002546001600160a01b031663a9059cbb3360208401516040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af11580156103ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104139190610b95565b506104223382600060016108e9565b50565b6003546001600160a01b0316336001600160a01b0316146104885760405162461bcd60e51b815260206004820152601a60248201527f6f6e6c792061636365707420746f6b656e20636f6e74726163740000000000006044820152606401610326565b6002546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa1580156104d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104f59190610bb7565b9050811580610502575080155b1561050b575050565b600081610520670de0b6b3a764000085610bd0565b61052a9190610bef565b9050806004600082825461053e9190610b7d565b9250508190555082600660008282546105579190610b7d565b9091555050505050565b33600090815260016020818152604092839020835160608101855281548152928101549183018290526002015492820192909252906105d75760405162461bcd60e51b8152602060048201526012602482015271139bc81a5b9a5d1a585b0819195c1bdcda5d60721b6044820152606401610326565b6104223382836020015160006108e9565b6001600160a01b03811660009081526001602081815260408084208151606081018352815481529381015492840192909252600290910154908201819052600454670de0b6b3a76400009161063c91610c11565b826020015161064b9190610bd0565b6106559190610bef565b9392505050565b61066461088f565b61066e6000610a93565b565b600081116106c05760405162461bcd60e51b815260206004820181905260248201527f416d6f756e74206d7573742062652067726561746572207468616e207a65726f6044820152606401610326565b3360008181526001602081815260408084208151606081018352815481529381015484840152600290810154848301525481516323b872dd60e01b8152600481019690965230602487015260448601879052905192946001600160a01b03909116936323b872dd936064808401949391929183900301908290875af115801561074d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107719190610b95565b5061078e33828484602001516107879190610b7d565b60016108e9565b5050565b60085460ff16156107db5760405162461bcd60e51b8152602060048201526013602482015272185b1c99585b1e481a5b9a5d1a585b1a5e9959606a1b6044820152606401610326565b600280546001600160a01b039283166001600160a01b031991821617909155600380549390921692169190911790556008805460ff19166001179055565b61082161088f565b6001600160a01b0381166108865760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610326565b61042281610a93565b6000546001600160a01b0316331461066e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610326565b6000836020015160001461092e57670de0b6b3a764000084604001516004546109129190610c11565b85602001516109219190610bd0565b61092b9190610bef565b90505b8261095f576001600160a01b03851660009081526001602081905260408220828155908101829055600201556109fc565b81156109b2576040805160608101825242815260208082018681526004548385019081526001600160a01b038a1660009081526001938490529490942092518355519082015590516002909101556109fc565b604080516060810182528551815260208082018681526004548385019081526001600160a01b038a1660009081526001938490529490942092518355519082015590516002909101555b8015610a8c5760035460405163a9059cbb60e01b81526001600160a01b038781166004830152602482018490529091169063a9059cbb906044016020604051808303816000875af1158015610a55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a799190610b95565b5080600754610a889190610b7d565b6007555b5050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038116811461042257600080fd5b600060208284031215610b0a57600080fd5b813561065581610ae3565b600060208284031215610b2757600080fd5b5035919050565b60008060408385031215610b4157600080fd5b8235610b4c81610ae3565b91506020830135610b5c81610ae3565b809150509250929050565b634e487b7160e01b600052601160045260246000fd5b60008219821115610b9057610b90610b67565b500190565b600060208284031215610ba757600080fd5b8151801515811461065557600080fd5b600060208284031215610bc957600080fd5b5051919050565b6000816000190483118215151615610bea57610bea610b67565b500290565b600082610c0c57634e487b7160e01b600052601260045260246000fd5b500490565b600082821015610c2357610c23610b67565b50039056fea2646970667358221220225e28474aff3fab29738373f67f0b8bd4a4c903ba4932373870e752ba1f7cbe64736f6c634300080a0033
Deployed Bytecode Sourcemap
16840:3487:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17629:97;;;;;;:::i;:::-;;:::i;:::-;;17271:23;;;;;;;;;;;;596:14:1;;589:22;571:41;;559:2;544:18;17271:23:0;;;;;;;;18241:415;;;:::i;19910:414::-;;;;;;:::i;:::-;;:::i;18664:299::-;;;:::i;19695:207::-;;;;;;:::i;:::-;;:::i;:::-;;;1214:25:1;;;1202:2;1187:18;19695:207:0;1068:177:1;5531:103:0;;;:::i;17032:26::-;;;;;-1:-1:-1;;;;;17032:26:0;;;;;;-1:-1:-1;;;;;1427:32:1;;;1409:51;;1397:2;1382:18;17032:26:0;1250:216:1;17203:23:0;;;;;;17097:21;;;;;;4890:87;4936:7;4963:6;-1:-1:-1;;;;;4963:6:0;4890:87;;17840:393;;;;;;:::i;:::-;;:::i;16986:39::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1881:25:1;;;1937:2;1922:18;;1915:34;;;;1965:18;;;1958:34;1869:2;1854:18;16986:39:0;1679:319:1;17233:31:0;;;;;;17369:252;;;;;;:::i;:::-;;:::i;5789:238::-;;;;;;:::i;:::-;;:::i;17065:25::-;;;;;-1:-1:-1;;;;;17065:25:0;;;17629:97;4776:13;:11;:13::i;:::-;17697:12:::1;:21:::0;;-1:-1:-1;;;;;;17697:21:0::1;-1:-1:-1::0;;;;;17697:21:0;;;::::1;::::0;;;::::1;::::0;;17629:97::o;18241:415::-;3584:10;18281:18;18302:20;;;:6;:20;;;;;;;;;18281:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18333:55;;;;-1:-1:-1;;;18333:55:0;;2614:2:1;18333:55:0;;;2596:21:1;2653:2;2633:18;;;2626:30;-1:-1:-1;;;2672:18:1;;;2665:48;2730:18;;18333:55:0;;;;;;;;;18421:17;;18450:15;;18421:26;;18441:6;18421:26;:::i;:::-;:44;18399:117;;;;-1:-1:-1;;;18399:117:0;;3226:2:1;18399:117:0;;;3208:21:1;3265:2;3245:18;;;3238:30;3304:25;3284:18;;;3277:53;3347:18;;18399:117:0;3024:347:1;18399:117:0;18527:12;;-1:-1:-1;;;;;18527:12:0;:21;3584:10;18563:20;;;;18527:57;;-1:-1:-1;;;;;;18527:57:0;;;;;;;-1:-1:-1;;;;;3568:32:1;;;18527:57:0;;;3550:51:1;3617:18;;;3610:34;3523:18;;18527:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;18595:53:0;3584:10;18633:5;18640:1;18643:4;18595:23;:53::i;:::-;18270:386;18241:415::o;19910:414::-;20015:11;;-1:-1:-1;;;;;20015:11:0;3584:10;-1:-1:-1;;;;;19991:36:0;;19969:112;;;;-1:-1:-1;;;19969:112:0;;4139:2:1;19969:112:0;;;4121:21:1;4178:2;4158:18;;;4151:30;4217:28;4197:18;;;4190:56;4263:18;;19969:112:0;3937:350:1;19969:112:0;20109:12;;:37;;-1:-1:-1;;;20109:37:0;;20140:4;20109:37;;;1409:51:1;20094:12:0;;-1:-1:-1;;;;;20109:12:0;;:22;;1382:18:1;;20109:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20094:52;-1:-1:-1;20163:12:0;;;:28;;-1:-1:-1;20179:12:0;;20163:28;20159:41;;;20193:7;19910:414;:::o;20159:41::-;20212:9;20248:7;20225:19;17159:4;20225:7;:19;:::i;:::-;20224:31;;;;:::i;:::-;20212:43;;20279:4;20266:9;;:17;;;;;;;:::i;:::-;;;;;;;;20309:7;20294:11;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;19910:414:0:o;18664:299::-;3584:10;18701:18;18722:20;;;:6;:20;;;;;;;;;18701:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18753:55;;;;-1:-1:-1;;;18753:55:0;;2614:2:1;18753:55:0;;;2596:21:1;2653:2;2633:18;;;2626:30;-1:-1:-1;;;2672:18:1;;;2665:48;2730:18;;18753:55:0;2412:342:1;18753:55:0;18819:136;3584:10;18884:5;18904;:20;;;18939:5;18819:23;:136::i;19695:207::-;-1:-1:-1;;;;;19786:11:0;;19748:4;19786:11;;;:6;:11;;;;;;;;19765:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19853:9;;17159:4;;19853:27;;;:::i;:::-;19829:5;:20;;;:52;;;;:::i;:::-;19828:66;;;;:::i;:::-;19808:86;19695:207;-1:-1:-1;;;19695:207:0:o;5531:103::-;4776:13;:11;:13::i;:::-;5596:30:::1;5623:1;5596:18;:30::i;:::-;5531:103::o:0;17840:393::-;17907:1;17898:6;:10;17890:55;;;;-1:-1:-1;;;17890:55:0;;5208:2:1;17890:55:0;;;5190:21:1;;;5227:18;;;5220:30;5286:34;5266:18;;;5259:62;5338:18;;17890:55:0;5006:356:1;17890:55:0;3584:10;17956:18;17977:20;;;:6;:20;;;;;;;;17956:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;18008:12;:62;;-1:-1:-1;;;18008:62:0;;;;;5607:34:1;;;;18056:4:0;5657:18:1;;;5650:43;5709:18;;;5702:34;;;18008:62:0;;17956:41;;-1:-1:-1;;;;;18008:12:0;;;;:25;;5542:18:1;;;;;17977:20:0;18008:62;;;;;;;;;;:12;:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;18081:144:0;3584:10;18146:5;18189:6;18166:5;:20;;;:29;;;;:::i;:::-;18210:4;18081:23;:144::i;:::-;17879:354;17840:393;:::o;17369:252::-;17457:11;;;;17456:12;17448:44;;;;-1:-1:-1;;;17448:44:0;;5949:2:1;17448:44:0;;;5931:21:1;5988:2;5968:18;;;5961:30;-1:-1:-1;;;6007:18:1;;;6000:49;6066:18;;17448:44:0;5747:343:1;17448:44:0;17503:12;:36;;-1:-1:-1;;;;;17503:36:0;;;-1:-1:-1;;;;;;17503:36:0;;;;;;;17550:11;:34;;;;;;;;;;;;;;17595:11;:18;;-1:-1:-1;;17595:18:0;17503:36;17595:18;;;17369:252::o;5789:238::-;4776:13;:11;:13::i;:::-;-1:-1:-1;;;;;5892:22:0;::::1;5870:110;;;::::0;-1:-1:-1;;;5870:110:0;;6297:2:1;5870:110:0::1;::::0;::::1;6279:21:1::0;6336:2;6316:18;;;6309:30;6375:34;6355:18;;;6348:62;-1:-1:-1;;;6426:18:1;;;6419:36;6472:19;;5870:110:0::1;6095:402:1::0;5870:110:0::1;5991:28;6010:8;5991:18;:28::i;5055:132::-:0;4936:7;4963:6;-1:-1:-1;;;;;4963:6:0;3584:10;5119:23;5111:68;;;;-1:-1:-1;;;5111:68:0;;6704:2:1;5111:68:0;;;6686:21:1;;;6723:18;;;6716:30;6782:34;6762:18;;;6755:62;6834:18;;5111:68:0;6502:356:1;18971:716:0;19132:10;19157:5;:20;;;19181:1;19157:25;19153:152;;17159:4;19259:5;:15;;;19247:9;;:27;;;;:::i;:::-;19223:5;:20;;;:52;;;;:::i;:::-;19222:83;;;;:::i;:::-;19197:108;;19153:152;19322:14;19318:217;;-1:-1:-1;;;;;19345:11:0;;;;;;:6;:11;;;;;;;19338:18;;;;;;;;;;;;19318:217;;;19376:10;19372:163;;;19415:44;;;;;;;;19421:15;19415:44;;;;;;;;;19449:9;;19415:44;;;;;;-1:-1:-1;;;;;19401:11:0;;-1:-1:-1;19401:11:0;;;:6;:11;;;;;;;;:58;;;;;;;;;;;;;;;;19372:163;;;19489:46;;;;;;;;19495:17;;19489:46;;;;;;;;;19525:9;;19489:46;;;;;;-1:-1:-1;;;;;19475:11:0;;-1:-1:-1;19475:11:0;;;:6;:11;;;;;;;;:60;;;;;;;;;;;;;;;;19372:163;19552:9;;19548:132;;19578:11;;:32;;-1:-1:-1;;;19578:32:0;;-1:-1:-1;;;;;3568:32:1;;;19578::0;;;3550:51:1;3617:18;;;3610:34;;;19578:11:0;;;;:20;;3523:18:1;;19578:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;19663:5;19644:16;;:24;;;;:::i;:::-;19625:16;:43;19548:132;19121:566;18971:716;;;;:::o;6187:191::-;6261:16;6280:6;;-1:-1:-1;;;;;6297:17:0;;;-1:-1:-1;;;;;;6297:17:0;;;;;;6330:40;;6280:6;;;;;;;6330:40;;6261:16;6330:40;6250:128;6187:191;:::o;14:139:1:-;-1:-1:-1;;;;;97:31:1;;87:42;;77:70;;143:1;140;133:12;158:268;230:6;283:2;271:9;262:7;258:23;254:32;251:52;;;299:1;296;289:12;251:52;338:9;325:23;357:39;390:5;357:39;:::i;623:180::-;682:6;735:2;723:9;714:7;710:23;706:32;703:52;;;751:1;748;741:12;703:52;-1:-1:-1;774:23:1;;623:180;-1:-1:-1;623:180:1:o;2003:404::-;2071:6;2079;2132:2;2120:9;2111:7;2107:23;2103:32;2100:52;;;2148:1;2145;2138:12;2100:52;2187:9;2174:23;2206:39;2239:5;2206:39;:::i;:::-;2264:5;-1:-1:-1;2321:2:1;2306:18;;2293:32;2334:41;2293:32;2334:41;:::i;:::-;2394:7;2384:17;;;2003:404;;;;;:::o;2759:127::-;2820:10;2815:3;2811:20;2808:1;2801:31;2851:4;2848:1;2841:15;2875:4;2872:1;2865:15;2891:128;2931:3;2962:1;2958:6;2955:1;2952:13;2949:39;;;2968:18;;:::i;:::-;-1:-1:-1;3004:9:1;;2891:128::o;3655:277::-;3722:6;3775:2;3763:9;3754:7;3750:23;3746:32;3743:52;;;3791:1;3788;3781:12;3743:52;3823:9;3817:16;3876:5;3869:13;3862:21;3855:5;3852:32;3842:60;;3898:1;3895;3888:12;4292:184;4362:6;4415:2;4403:9;4394:7;4390:23;4386:32;4383:52;;;4431:1;4428;4421:12;4383:52;-1:-1:-1;4454:16:1;;4292:184;-1:-1:-1;4292:184:1:o;4481:168::-;4521:7;4587:1;4583;4579:6;4575:14;4572:1;4569:21;4564:1;4557:9;4550:17;4546:45;4543:71;;;4594:18;;:::i;:::-;-1:-1:-1;4634:9:1;;4481:168::o;4654:217::-;4694:1;4720;4710:132;;4764:10;4759:3;4755:20;4752:1;4745:31;4799:4;4796:1;4789:15;4827:4;4824:1;4817:15;4710:132;-1:-1:-1;4856:9:1;;4654:217::o;4876:125::-;4916:4;4944:1;4941;4938:8;4935:34;;;4949:18;;:::i;:::-;-1:-1:-1;4986:9:1;;4876:125::o
Swarm Source
ipfs://225e28474aff3fab29738373f67f0b8bd4a4c903ba4932373870e752ba1f7cbe
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 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.