Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 1 from a total of 1 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
0x60806040 | 14527481 | 964 days ago | IN | 0 ETH | 0.2264603 |
Loading...
Loading
Contract Name:
ETHPoolV3
Compiler Version
v0.8.9+commit.e5eed63a
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity 0.8.9; import "./IERC20.sol"; import "./IETHPool.sol"; import "./IStrongPool.sol"; import "./PlatformFees.sol"; import "./ReentrancyGuard.sol"; import "./SafeMath.sol"; contract ETHPoolV3 is IETHPool, IStrongPool, ReentrancyGuard, PlatformFees { using SafeMath for uint256; bool public initialized; uint256 public epochId; uint256 public totalStaked; mapping(address => bool) public poolContracts; mapping(uint256 => address) public stakeOwner; mapping(uint256 => uint256) public stakeAmount; mapping(uint256 => uint256) public stakeTimestamp; mapping(uint256 => bool) public stakeStatus; uint256 private stakeId; IERC20 private strongTokenContract; mapping(address => mapping(uint256 => uint256)) private _ownerIdIndex; mapping(address => uint256[]) private _ownerIds; event FallBackLog(address sender, uint256 value); event PaymentProcessed(address receiver, uint256 amount); function init( address strongAddress_, uint256 stakeFeeNumerator_, uint256 stakeFeeDenominator_, uint256 unstakeFeeNumerator_, uint256 unstakeFeeDenominator_, uint256 minStakeAmount_, uint256 stakeTxLimit_, address payable feeWallet_, address serviceAdmin_ ) external { require(!initialized, "ETH2.0Pool: init done"); PlatformFees.init( stakeFeeNumerator_, stakeFeeDenominator_, unstakeFeeNumerator_, unstakeFeeDenominator_, minStakeAmount_, stakeTxLimit_, feeWallet_, serviceAdmin_ ); ReentrancyGuard.init(); epochId = 1; stakeId = 1; strongTokenContract = IERC20(strongAddress_); initialized = true; } function stake(uint256 amount_) external payable nonReentrant override { require(amount_.mul(stakeFeeNumerator).div(stakeFeeDenominator) == msg.value, "ETH2.0Pool: Value can not be greater or less than staking fee"); stake_(amount_, msg.sender); require(strongTokenContract.transferFrom(msg.sender, address(this), amount_), "ETH2.0Pool: Insufficient funds"); processPayment(feeWallet, msg.value); } function mineFor(address userAddress_, uint256 amount_) external override { require(poolContracts[msg.sender], "ETH2.0Pool: Caller not authorised to call this function"); stake_(amount_, userAddress_); require(strongTokenContract.transferFrom(msg.sender, address(this), amount_), "ETH2.0Pool: Insufficient funds"); } function unStake(uint256[] memory stakeIds_) external payable nonReentrant override { require(stakeIds_.length <= stakeTxLimit, "ETH2.0Pool: Input array length is greater than approved length"); uint256 userTokens = 0; for (uint256 i = 0; i < stakeIds_.length; i++) { require(stakeOwner[stakeIds_[i]] == msg.sender, "ETH2.0Pool: Only owner can unstake"); require(stakeStatus[stakeIds_[i]], "ETH2.0Pool: Transaction already unStaked"); stakeStatus[stakeIds_[i]] = false; userTokens = userTokens.add(stakeAmount[stakeIds_[i]]); if (_ownerIdExists(msg.sender, stakeIds_[i])) { _deleteOwnerId(msg.sender, stakeIds_[i]); } emit Unstaked(msg.sender, stakeIds_[i], stakeAmount[stakeIds_[i]], block.timestamp); } if (userTokens.mul(unstakeFeeNumerator).div(unstakeFeeDenominator) != msg.value) { revert("ETH2.0Pool: Value can not be greater or less than unstaking fee"); } totalStaked = totalStaked.sub(userTokens); require(strongTokenContract.transfer(msg.sender, userTokens), "ETH2.0Pool: Insufficient Strong tokens"); processPayment(feeWallet, userTokens.mul(unstakeFeeNumerator).div(unstakeFeeDenominator)); } function stake_(uint256 amount_, address userAddress_) internal { require(_ownerIds[userAddress_].length < stakeTxLimit, "ETH2.0Pool: User can not exceed stake tx limit"); require(amount_ >= minStakeAmount, "ETH2.0Pool: Amount can not be less than minimum staking amount"); require(userAddress_ != address(0), "ETH2.0Pool: Invalid user address"); stakeOwner[stakeId] = userAddress_; stakeAmount[stakeId] = amount_; stakeTimestamp[stakeId] = block.timestamp; stakeStatus[stakeId] = true; totalStaked = totalStaked.add(amount_); if (!_ownerIdExists(userAddress_, stakeId)) { _addOwnerId(userAddress_, stakeId); } emit Staked(userAddress_,stakeId, amount_, block.timestamp); incrementStakeId(); } function addVerifiedContract(address contractAddress_) external anyAdmin { require(contractAddress_ != address(0), "ETH2.0Pool: Invalid contract address"); poolContracts[contractAddress_] = true; } function removeVerifiedContract(address contractAddress_) external anyAdmin { require(poolContracts[contractAddress_], "ETH2.0Pool: Contract address not verified"); poolContracts[contractAddress_] = false; } function getUserIds(address user_) external view returns (uint256[] memory) { return _ownerIds[user_]; } function getUserIdIndex(address user_, uint256 id_) external view returns (uint256) { return _ownerIdIndex[user_][id_]; } // function to transfer eth to recipient account. function processPayment(address payable recipient_, uint256 amount_) private { (bool sent,) = recipient_.call{value : amount_}(""); require(sent, "ETH2.0Pool: Failed to send Ether"); emit PaymentProcessed(recipient_, amount_); } // function to increment the id counter of Staking entries function incrementStakeId() private { stakeId = stakeId.add(1); } function _deleteOwnerId(address owner_, uint256 id_) internal { uint256 lastIndex = _ownerIds[owner_].length.sub(1); uint256 lastId = _ownerIds[owner_][lastIndex]; if (id_ == lastId) { _ownerIdIndex[owner_][id_] = 0; _ownerIds[owner_].pop(); } else { uint256 indexOfId = _ownerIdIndex[owner_][id_]; _ownerIdIndex[owner_][id_] = 0; _ownerIds[owner_][indexOfId] = lastId; _ownerIdIndex[owner_][lastId] = indexOfId; _ownerIds[owner_].pop(); } } function _addOwnerId(address owner, uint256 id) internal { uint256 len = _ownerIds[owner].length; _ownerIdIndex[owner][id] = len; _ownerIds[owner].push(id); } function _ownerIdExists(address owner, uint256 id) internal view returns (bool) { if (_ownerIds[owner].length == 0) return false; uint256 index = _ownerIdIndex[owner][id]; return id == _ownerIds[owner][index]; } function setTokenContract(IERC20 tokenAddress) external onlyOwner { strongTokenContract = tokenAddress; } function withdrawToken(IERC20 token, address recipient, uint256 amount) external onlyOwner { require(token.transfer(recipient, amount)); } fallback() external payable { emit FallBackLog(msg.sender, msg.value); } receive() external nonReentrant payable { processPayment(feeWallet, msg.value); emit FallBackLog(msg.sender, msg.value); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. Does not include * the optional functions; to access them see {ERC20Detailed}. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; interface IETHPool { event Staked(address user, uint256 stakeId, uint256 amount, uint256 timestamp); event Unstaked(address user, uint256 stakeId, uint256 amount, uint256 timestamp); function stake(uint256 amount) external payable; function unStake(uint256[] memory stakeIds) external payable; }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; interface IStrongPool { function mineFor(address miner, uint256 amount) external; }
// SPDX-License-Identifier: MIT pragma solidity ^ 0.8.0; import "./Ownable.sol"; import "./IPlatformFees.sol"; contract PlatformFees is Ownable, IPlatformFees { uint256 public stakeFeeNumerator; uint256 public stakeFeeDenominator; uint256 public unstakeFeeNumerator; uint256 public unstakeFeeDenominator; uint256 public minStakeAmount; uint256 public stakeTxLimit; address payable public feeWallet; bool private initDone; function init( uint256 stakeFeeNumerator_, uint256 stakeFeeDenominator_, uint256 unstakeFeeNumerator_, uint256 unstakeFeeDenominator_, uint256 minStakeAmount_, uint256 stakeTxLimit_, address payable feeWallet_, address serviceAdmin ) internal { require(!initDone, "PlatformFee: init done"); stakeFeeNumerator = stakeFeeNumerator_; stakeFeeDenominator = stakeFeeDenominator_; unstakeFeeNumerator = unstakeFeeNumerator_; unstakeFeeDenominator = unstakeFeeDenominator_; minStakeAmount = minStakeAmount_; stakeTxLimit = stakeTxLimit_; feeWallet = feeWallet_; Ownable.init(serviceAdmin); initDone = true; } function setStakeFeeNumerator(uint256 numerator_) external override anyAdmin { stakeFeeNumerator = numerator_; } function setStakeFeeDenominator(uint256 denominator_) external override anyAdmin { require(denominator_ > 0, "PlatformFee: denominator can not be zero"); stakeFeeDenominator = denominator_; } function setUnstakeFeeNumerator(uint256 numerator_) external override anyAdmin { unstakeFeeNumerator = numerator_; } function setUnstakeFeeDenominator(uint256 denominator_) external override anyAdmin { require(denominator_ > 0, "PlatformFee: denominator can not be zero"); unstakeFeeDenominator = denominator_; } function setMinStakeAmount(uint256 amount_) external override anyAdmin { require(amount_ > 0, "PlatformFee: amount can not be zero"); minStakeAmount = amount_; } function setStakeTxLimit(uint256 limit_) external override anyAdmin { require(limit_ > 0, "PlatformFee: limit can not zero"); stakeTxLimit = limit_; } function setFeeWallet(address payable feeWallet_) external override anyAdmin { require(feeWallet_ != address(0), "PlatformFee: address can not be zero address"); feeWallet = feeWallet_; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; bool private init_; function init()internal{ require(!init_, "ReentrancyGuard: init done"); _status = _NOT_ENTERED; init_ = true; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./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; address private _serviceAdmin; bool private initialized; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); event NewServiceAdmin(address indexed previousServiceAdmin, address indexed newServiceAdmin); /** * @dev Initializes the contract setting the deployer as the initial owner. */ function init(address serviceAdmin_) internal { require(!initialized, "Ownable: init done"); _setOwner(_msgSender()); _setServiceAdmin(serviceAdmin_); initialized = true; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Returns the address of the current service admin. */ function serviceAdmin() public view virtual returns (address) { return _serviceAdmin; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Throws if called by any account other than the service Admin. */ modifier onlyServiceAdmin() { require(serviceAdmin() == _msgSender(), "Ownable: caller is not the serviceAdmin"); _; } modifier anyAdmin(){ require(serviceAdmin() == _msgSender() || owner() == _msgSender(), "Ownable: Caller is not authorized"); _; } /** * @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() external virtual onlyOwner { _setOwner(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) external virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } function _setServiceAdmin(address newServiceAdmin) private { address oldServiceAdmin = _serviceAdmin; _serviceAdmin = newServiceAdmin; emit NewServiceAdmin(oldServiceAdmin, newServiceAdmin); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; interface IPlatformFees { function setStakeFeeNumerator(uint256 numerator_) external; function setStakeFeeDenominator(uint256 denominator_) external; function setUnstakeFeeNumerator(uint256 numerator_) external; function setUnstakeFeeDenominator(uint256 denominator_) external; function setMinStakeAmount(uint256 _amount) external; function setStakeTxLimit(uint256 limit_) external; function setFeeWallet(address payable feeWallet_) external; }
// SPDX-License-Identifier: MIT 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": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "metadata": { "useLiteralContent": true }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"FallBackLog","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousServiceAdmin","type":"address"},{"indexed":true,"internalType":"address","name":"newServiceAdmin","type":"address"}],"name":"NewServiceAdmin","type":"event"},{"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":false,"internalType":"address","name":"receiver","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"PaymentProcessed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"stakeId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"Staked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"stakeId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"Unstaked","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"address","name":"contractAddress_","type":"address"}],"name":"addVerifiedContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"epochId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user_","type":"address"},{"internalType":"uint256","name":"id_","type":"uint256"}],"name":"getUserIdIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user_","type":"address"}],"name":"getUserIds","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"strongAddress_","type":"address"},{"internalType":"uint256","name":"stakeFeeNumerator_","type":"uint256"},{"internalType":"uint256","name":"stakeFeeDenominator_","type":"uint256"},{"internalType":"uint256","name":"unstakeFeeNumerator_","type":"uint256"},{"internalType":"uint256","name":"unstakeFeeDenominator_","type":"uint256"},{"internalType":"uint256","name":"minStakeAmount_","type":"uint256"},{"internalType":"uint256","name":"stakeTxLimit_","type":"uint256"},{"internalType":"address payable","name":"feeWallet_","type":"address"},{"internalType":"address","name":"serviceAdmin_","type":"address"}],"name":"init","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initialized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minStakeAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"userAddress_","type":"address"},{"internalType":"uint256","name":"amount_","type":"uint256"}],"name":"mineFor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"poolContracts","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"contractAddress_","type":"address"}],"name":"removeVerifiedContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"serviceAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"feeWallet_","type":"address"}],"name":"setFeeWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount_","type":"uint256"}],"name":"setMinStakeAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"denominator_","type":"uint256"}],"name":"setStakeFeeDenominator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numerator_","type":"uint256"}],"name":"setStakeFeeNumerator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"limit_","type":"uint256"}],"name":"setStakeTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"tokenAddress","type":"address"}],"name":"setTokenContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"denominator_","type":"uint256"}],"name":"setUnstakeFeeDenominator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numerator_","type":"uint256"}],"name":"setUnstakeFeeNumerator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount_","type":"uint256"}],"name":"stake","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"stakeAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakeFeeDenominator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakeFeeNumerator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"stakeOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"stakeStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"stakeTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakeTxLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalStaked","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":"stakeIds_","type":"uint256[]"}],"name":"unStake","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"unstakeFeeDenominator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unstakeFeeNumerator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
608060405234801561001057600080fd5b50612447806100206000396000f3fe6080604052600436106102135760003560e01c806385f90e7911610118578063bbcd5bbe116100a0578063eb4af0451161006f578063eb4af045146106f3578063eb7a75d714610713578063f188768414610729578063f25f4b561461073f578063f2fde38b1461075f5761029e565b8063bbcd5bbe1461067f578063bcb3d2831461069f578063da998dca146106bf578063ea6c9d73146106dd5761029e565b8063a694fc3a116100e7578063a694fc3a14610603578063aa9bbc0c14610616578063ac1a73011461062c578063b10dcc931461064c578063b6dfbd241461065f5761029e565b806385f90e791461057a5780638cf37da9146105aa5780638da5cb5b146105c057806390d49b9d146105e35761029e565b80633dbd46bd1161019b5780636c2d90c71161016a5780636c2d90c7146104d25780636c57f602146104f2578063715018a61461051f5780637bd168ee14610534578063817b1cd2146105645761029e565b80633dbd46bd146104215780633e10e49f1461046f5780634b4005cd146104855780634c313fc2146104a55761029e565b806323ac1896116101e257806323ac18961461038b57806330d6a975146103ab578063358826c5146103cb57806339f096ec146103eb5780633bbc1e88146104015761029e565b806301e33667146102d857806304a938e4146102fa5780630ca615e61461033a578063158ef93e1461035a5761029e565b3661029e57600260005414156102445760405162461bcd60e51b815260040161023b90611fd7565b60405180910390fd5b600260005560095461025f906001600160a01b03163461077f565b604080513381523460208201527fa9e666da7b35889f07032cafd026a2521cf03ac5296c024c18db1e2c3b788f9d910160405180910390a16001600055005b604080513381523460208201527fa9e666da7b35889f07032cafd026a2521cf03ac5296c024c18db1e2c3b788f9d910160405180910390a1005b3480156102e457600080fd5b506102f86102f3366004612023565b610869565b005b34801561030657600080fd5b50610327610315366004612064565b600f6020526000908152604090205481565b6040519081526020015b60405180910390f35b34801561034657600080fd5b506102f861035536600461207d565b610929565b34801561036657600080fd5b5060095461037b90600160a81b900460ff1681565b6040519015158152602001610331565b34801561039757600080fd5b506102f86103a6366004612064565b6109dc565b3480156103b757600080fd5b506102f86103c6366004612103565b610a46565b3480156103d757600080fd5b506102f86103e636600461212f565b610baf565b3480156103f757600080fd5b5061032760085481565b34801561040d57600080fd5b506102f861041c366004612064565b610c7a565b34801561042d57600080fd5b5061045761043c366004612064565b600d602052600090815260409020546001600160a01b031681565b6040516001600160a01b039091168152602001610331565b34801561047b57600080fd5b5061032760065481565b34801561049157600080fd5b506102f86104a036600461212f565b610ce4565b3480156104b157600080fd5b506104c56104c036600461212f565b610dc4565b604051610331919061214c565b3480156104de57600080fd5b506103276104ed366004612103565b610e30565b3480156104fe57600080fd5b5061032761050d366004612064565b600e6020526000908152604090205481565b34801561052b57600080fd5b506102f8610e5b565b34801561054057600080fd5b5061037b61054f36600461212f565b600c6020526000908152604090205460ff1681565b34801561057057600080fd5b50610327600b5481565b34801561058657600080fd5b5061037b610595366004612064565b60106020526000908152604090205460ff1681565b3480156105b657600080fd5b5061032760055481565b3480156105cc57600080fd5b5060015461010090046001600160a01b0316610457565b3480156105ef57600080fd5b506102f86105fe36600461212f565b610e97565b6102f8610611366004612064565b610f69565b34801561062257600080fd5b50610327600a5481565b34801561063857600080fd5b506102f8610647366004612064565b61111f565b6102f861065a3660046121a6565b6111b9565b34801561066b57600080fd5b506102f861067a366004612064565b6116cd565b34801561068b57600080fd5b506102f861069a36600461212f565b611717565b3480156106ab57600080fd5b506102f86106ba366004612064565b611769565b3480156106cb57600080fd5b506002546001600160a01b0316610457565b3480156106e957600080fd5b5061032760035481565b3480156106ff57600080fd5b506102f861070e366004612064565b6117b3565b34801561071f57600080fd5b5061032760045481565b34801561073557600080fd5b5061032760075481565b34801561074b57600080fd5b50600954610457906001600160a01b031681565b34801561076b57600080fd5b506102f861077a36600461212f565b611859565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146107cc576040519150601f19603f3d011682016040523d82523d6000602084013e6107d1565b606091505b50509050806108225760405162461bcd60e51b815260206004820181905260248201527f455448322e30506f6f6c3a204661696c656420746f2073656e64204574686572604482015260640161023b565b604080516001600160a01b0385168152602081018490527fa5957fefb5b0f981554450d4d8dde003083cd202e3d5a2992e09c88ad1f0d791910160405180910390a1505050565b6001546001600160a01b036101009091041633146108995760405162461bcd60e51b815260040161023b90612264565b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb90604401602060405180830381600087803b1580156108e357600080fd5b505af11580156108f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061091b9190612299565b61092457600080fd5b505050565b600954600160a81b900460ff161561097b5760405162461bcd60e51b8152602060048201526015602482015274455448322e30506f6f6c3a20696e697420646f6e6560581b604482015260640161023b565b61098b88888888888888886118fa565b6109936119ac565b50506001600a8190556011555050601280546001600160a01b039096166001600160a01b03199096169590951790945550506009805460ff60a81b1916600160a81b1790555050565b6002546001600160a01b0316331480610a0557506001546001600160a01b036101009091041633145b610a215760405162461bcd60e51b815260040161023b906122bb565b60008111610a415760405162461bcd60e51b815260040161023b906122fc565b600455565b336000908152600c602052604090205460ff16610acb5760405162461bcd60e51b815260206004820152603760248201527f455448322e30506f6f6c3a2043616c6c6572206e6f7420617574686f7269736560448201527f6420746f2063616c6c20746869732066756e6374696f6e000000000000000000606482015260840161023b565b610ad58183611a12565b6012546040516323b872dd60e01b8152336004820152306024820152604481018390526001600160a01b03909116906323b872dd90606401602060405180830381600087803b158015610b2757600080fd5b505af1158015610b3b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5f9190612299565b610bab5760405162461bcd60e51b815260206004820152601e60248201527f455448322e30506f6f6c3a20496e73756666696369656e742066756e64730000604482015260640161023b565b5050565b6002546001600160a01b0316331480610bd857506001546001600160a01b036101009091041633145b610bf45760405162461bcd60e51b815260040161023b906122bb565b6001600160a01b038116610c565760405162461bcd60e51b8152602060048201526024808201527f455448322e30506f6f6c3a20496e76616c696420636f6e7472616374206164646044820152637265737360e01b606482015260840161023b565b6001600160a01b03166000908152600c60205260409020805460ff19166001179055565b6002546001600160a01b0316331480610ca357506001546001600160a01b036101009091041633145b610cbf5760405162461bcd60e51b815260040161023b906122bb565b60008111610cdf5760405162461bcd60e51b815260040161023b906122fc565b600655565b6002546001600160a01b0316331480610d0d57506001546001600160a01b036101009091041633145b610d295760405162461bcd60e51b815260040161023b906122bb565b6001600160a01b0381166000908152600c602052604090205460ff16610da35760405162461bcd60e51b815260206004820152602960248201527f455448322e30506f6f6c3a20436f6e74726163742061646472657373206e6f74604482015268081d995c9a599a595960ba1b606482015260840161023b565b6001600160a01b03166000908152600c60205260409020805460ff19169055565b6001600160a01b038116600090815260146020908152604091829020805483518184028101840190945280845260609392830182828015610e2457602002820191906000526020600020905b815481526020019060010190808311610e10575b50505050509050919050565b6001600160a01b03821660009081526013602090815260408083208484529091529020545b92915050565b6001546001600160a01b03610100909104163314610e8b5760405162461bcd60e51b815260040161023b90612264565b610e956000611c7f565b565b6002546001600160a01b0316331480610ec057506001546001600160a01b036101009091041633145b610edc5760405162461bcd60e51b815260040161023b906122bb565b6001600160a01b038116610f475760405162461bcd60e51b815260206004820152602c60248201527f506c6174666f726d4665653a20616464726573732063616e206e6f742062652060448201526b7a65726f206164647265737360a01b606482015260840161023b565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b60026000541415610f8c5760405162461bcd60e51b815260040161023b90611fd7565b60026000556004546003543491610fae91610fa8908590611cd9565b90611cec565b146110215760405162461bcd60e51b815260206004820152603d60248201527f455448322e30506f6f6c3a2056616c75652063616e206e6f742062652067726560448201527f61746572206f72206c657373207468616e207374616b696e6720666565000000606482015260840161023b565b61102b8133611a12565b6012546040516323b872dd60e01b8152336004820152306024820152604481018390526001600160a01b03909116906323b872dd90606401602060405180830381600087803b15801561107d57600080fd5b505af1158015611091573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110b59190612299565b6111015760405162461bcd60e51b815260206004820152601e60248201527f455448322e30506f6f6c3a20496e73756666696369656e742066756e64730000604482015260640161023b565b600954611117906001600160a01b03163461077f565b506001600055565b6002546001600160a01b031633148061114857506001546001600160a01b036101009091041633145b6111645760405162461bcd60e51b815260040161023b906122bb565b600081116111b45760405162461bcd60e51b815260206004820152601f60248201527f506c6174666f726d4665653a206c696d69742063616e206e6f74207a65726f00604482015260640161023b565b600855565b600260005414156111dc5760405162461bcd60e51b815260040161023b90611fd7565b60026000556008548151111561125a5760405162461bcd60e51b815260206004820152603e60248201527f455448322e30506f6f6c3a20496e707574206172726179206c656e677468206960448201527f732067726561746572207468616e20617070726f766564206c656e6774680000606482015260840161023b565b6000805b825181101561151a57336001600160a01b0316600d600085848151811061128757611287612344565b6020908102919091018101518252810191909152604001600020546001600160a01b0316146113035760405162461bcd60e51b815260206004820152602260248201527f455448322e30506f6f6c3a204f6e6c79206f776e65722063616e20756e7374616044820152616b6560f01b606482015260840161023b565b6010600084838151811061131957611319612344565b60209081029190910181015182528101919091526040016000205460ff166113945760405162461bcd60e51b815260206004820152602860248201527f455448322e30506f6f6c3a205472616e73616374696f6e20616c7265616479206044820152671d5b94dd185ad95960c21b606482015260840161023b565b6000601060008584815181106113ac576113ac612344565b6020026020010151815260200190815260200160002060006101000a81548160ff021916908315150217905550611418600e60008584815181106113f2576113f2612344565b602002602001015181526020019081526020016000205483611cf890919063ffffffff16565b915061143d3384838151811061143057611430612344565b6020026020010151611d04565b15611465576114653384838151811061145857611458612344565b6020026020010151611d7f565b7f204fccf0d92ed8d48f204adb39b2e81e92bad0dedb93f5716ca9478cfb57de003384838151811061149957611499612344565b6020026020010151600e60008786815181106114b7576114b7612344565b60200260200101518152602001908152602001600020544260405161150094939291906001600160a01b0394909416845260208401929092526040830152606082015260800190565b60405180910390a18061151281612370565b91505061125e565b5034611537600654610fa860055485611cd990919063ffffffff16565b146115aa5760405162461bcd60e51b815260206004820152603f60248201527f455448322e30506f6f6c3a2056616c75652063616e206e6f742062652067726560448201527f61746572206f72206c657373207468616e20756e7374616b696e672066656500606482015260840161023b565b600b546115b79082611eef565b600b5560125460405163a9059cbb60e01b8152336004820152602481018390526001600160a01b039091169063a9059cbb90604401602060405180830381600087803b15801561160657600080fd5b505af115801561161a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061163e9190612299565b6116995760405162461bcd60e51b815260206004820152602660248201527f455448322e30506f6f6c3a20496e73756666696369656e74205374726f6e6720604482015265746f6b656e7360d01b606482015260840161023b565b6009546006546005546116c4926001600160a01b0316916116bf91610fa8908690611cd9565b61077f565b50506001600055565b6002546001600160a01b03163314806116f657506001546001600160a01b036101009091041633145b6117125760405162461bcd60e51b815260040161023b906122bb565b600355565b6001546001600160a01b036101009091041633146117475760405162461bcd60e51b815260040161023b90612264565b601280546001600160a01b0319166001600160a01b0392909216919091179055565b6002546001600160a01b031633148061179257506001546001600160a01b036101009091041633145b6117ae5760405162461bcd60e51b815260040161023b906122bb565b600555565b6002546001600160a01b03163314806117dc57506001546001600160a01b036101009091041633145b6117f85760405162461bcd60e51b815260040161023b906122bb565b600081116118545760405162461bcd60e51b815260206004820152602360248201527f506c6174666f726d4665653a20616d6f756e742063616e206e6f74206265207a60448201526265726f60e81b606482015260840161023b565b600755565b6001546001600160a01b036101009091041633146118895760405162461bcd60e51b815260040161023b90612264565b6001600160a01b0381166118ee5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161023b565b6118f781611c7f565b50565b600954600160a01b900460ff161561194d5760405162461bcd60e51b8152602060048201526016602482015275506c6174666f726d4665653a20696e697420646f6e6560501b604482015260640161023b565b600388905560048790556005869055600685905560078490556008839055600980546001600160a01b0319166001600160a01b03841617905561198f81611efb565b50506009805460ff60a01b1916600160a01b179055505050505050565b60015460ff16156119ff5760405162461bcd60e51b815260206004820152601a60248201527f5265656e7472616e637947756172643a20696e697420646f6e65000000000000604482015260640161023b565b60016000819055805460ff191681179055565b6008546001600160a01b03821660009081526014602052604090205410611a925760405162461bcd60e51b815260206004820152602e60248201527f455448322e30506f6f6c3a20557365722063616e206e6f74206578636565642060448201526d1cdd185ad9481d1e081b1a5b5a5d60921b606482015260840161023b565b600754821015611b0a5760405162461bcd60e51b815260206004820152603e60248201527f455448322e30506f6f6c3a20416d6f756e742063616e206e6f74206265206c6560448201527f7373207468616e206d696e696d756d207374616b696e6720616d6f756e740000606482015260840161023b565b6001600160a01b038116611b605760405162461bcd60e51b815260206004820181905260248201527f455448322e30506f6f6c3a20496e76616c696420757365722061646472657373604482015260640161023b565b601180546000908152600d6020908152604080832080546001600160a01b0319166001600160a01b03871617905583548352600e825280832086905583548352600f8252808320429055925482526010905220805460ff19166001179055600b54611bcb9083611cf8565b600b55601154611bdc908290611d04565b611c24576011546001600160a01b0382166000908152601460208181526040808420805460138452828620878752845291852082905592825260018101835591835290912001555b601154604080516001600160a01b0384168152602081019290925281018390524260608201527fb4caaf29adda3eefee3ad552a8e85058589bf834c7466cae4ee58787f70589ed9060800160405180910390a1610bab611f72565b600180546001600160a01b03838116610100818102610100600160a81b031985161790945560405193909204169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000611ce5828461238b565b9392505050565b6000611ce582846123aa565b6000611ce582846123cc565b6001600160a01b038216600090815260146020526040812054611d2957506000610e55565b6001600160a01b038316600081815260136020908152604080832086845282528083205493835260149091529020805482908110611d6957611d69612344565b9060005260206000200154831491505092915050565b6001600160a01b038216600090815260146020526040812054611da3906001611eef565b6001600160a01b03841660009081526014602052604081208054929350909183908110611dd257611dd2612344565b9060005260206000200154905080831415611e3f576001600160a01b038416600081815260136020908152604080832087845282528083208390559282526014905220805480611e2457611e246123e4565b60019003818190600052602060002001600090559055611ee9565b6001600160a01b0384166000818152601360209081526040808320878452825280832080549084905593835260149091529020805483919083908110611e8757611e87612344565b60009182526020808320909101929092556001600160a01b0387168082526013835260408083208684528452808320859055908252601490925220805480611ed157611ed16123e4565b60019003818190600052602060002001600090559055505b50505050565b6000611ce582846123fa565b600254600160a01b900460ff1615611f4a5760405162461bcd60e51b81526020600482015260126024820152714f776e61626c653a20696e697420646f6e6560701b604482015260640161023b565b611f5333611c7f565b611f5c81611f85565b506002805460ff60a01b1916600160a01b179055565b601154611f80906001611cf8565b601155565b600280546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f9dfd842f298fc1353677dd28d7991f3c0effcf42d2c8e5e139dd56cf2fd6632390600090a35050565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b6001600160a01b03811681146118f757600080fd5b60008060006060848603121561203857600080fd5b83356120438161200e565b925060208401356120538161200e565b929592945050506040919091013590565b60006020828403121561207657600080fd5b5035919050565b60008060008060008060008060006101208a8c03121561209c57600080fd5b89356120a78161200e565b985060208a0135975060408a0135965060608a0135955060808a0135945060a08a0135935060c08a0135925060e08a01356120e18161200e565b91506101008a01356120f28161200e565b809150509295985092959850929598565b6000806040838503121561211657600080fd5b82356121218161200e565b946020939093013593505050565b60006020828403121561214157600080fd5b8135611ce58161200e565b6020808252825182820181905260009190848201906040850190845b8181101561218457835183529284019291840191600101612168565b50909695505050505050565b634e487b7160e01b600052604160045260246000fd5b600060208083850312156121b957600080fd5b823567ffffffffffffffff808211156121d157600080fd5b818501915085601f8301126121e557600080fd5b8135818111156121f7576121f7612190565b8060051b604051601f19603f8301168101818110858211171561221c5761221c612190565b60405291825284820192508381018501918883111561223a57600080fd5b938501935b828510156122585784358452938501939285019261223f565b98975050505050505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6000602082840312156122ab57600080fd5b81518015158114611ce557600080fd5b60208082526021908201527f4f776e61626c653a2043616c6c6572206973206e6f7420617574686f72697a656040820152601960fa1b606082015260800190565b60208082526028908201527f506c6174666f726d4665653a2064656e6f6d696e61746f722063616e206e6f74604082015267206265207a65726f60c01b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006000198214156123845761238461235a565b5060010190565b60008160001904831182151516156123a5576123a561235a565b500290565b6000826123c757634e487b7160e01b600052601260045260246000fd5b500490565b600082198211156123df576123df61235a565b500190565b634e487b7160e01b600052603160045260246000fd5b60008282101561240c5761240c61235a565b50039056fea264697066735822122028a2518f4afbe88779636d6abdb4fe7f44d60d7b28836f0bbfce24abbbfdab7b64736f6c63430008090033
Deployed Bytecode
0x6080604052600436106102135760003560e01c806385f90e7911610118578063bbcd5bbe116100a0578063eb4af0451161006f578063eb4af045146106f3578063eb7a75d714610713578063f188768414610729578063f25f4b561461073f578063f2fde38b1461075f5761029e565b8063bbcd5bbe1461067f578063bcb3d2831461069f578063da998dca146106bf578063ea6c9d73146106dd5761029e565b8063a694fc3a116100e7578063a694fc3a14610603578063aa9bbc0c14610616578063ac1a73011461062c578063b10dcc931461064c578063b6dfbd241461065f5761029e565b806385f90e791461057a5780638cf37da9146105aa5780638da5cb5b146105c057806390d49b9d146105e35761029e565b80633dbd46bd1161019b5780636c2d90c71161016a5780636c2d90c7146104d25780636c57f602146104f2578063715018a61461051f5780637bd168ee14610534578063817b1cd2146105645761029e565b80633dbd46bd146104215780633e10e49f1461046f5780634b4005cd146104855780634c313fc2146104a55761029e565b806323ac1896116101e257806323ac18961461038b57806330d6a975146103ab578063358826c5146103cb57806339f096ec146103eb5780633bbc1e88146104015761029e565b806301e33667146102d857806304a938e4146102fa5780630ca615e61461033a578063158ef93e1461035a5761029e565b3661029e57600260005414156102445760405162461bcd60e51b815260040161023b90611fd7565b60405180910390fd5b600260005560095461025f906001600160a01b03163461077f565b604080513381523460208201527fa9e666da7b35889f07032cafd026a2521cf03ac5296c024c18db1e2c3b788f9d910160405180910390a16001600055005b604080513381523460208201527fa9e666da7b35889f07032cafd026a2521cf03ac5296c024c18db1e2c3b788f9d910160405180910390a1005b3480156102e457600080fd5b506102f86102f3366004612023565b610869565b005b34801561030657600080fd5b50610327610315366004612064565b600f6020526000908152604090205481565b6040519081526020015b60405180910390f35b34801561034657600080fd5b506102f861035536600461207d565b610929565b34801561036657600080fd5b5060095461037b90600160a81b900460ff1681565b6040519015158152602001610331565b34801561039757600080fd5b506102f86103a6366004612064565b6109dc565b3480156103b757600080fd5b506102f86103c6366004612103565b610a46565b3480156103d757600080fd5b506102f86103e636600461212f565b610baf565b3480156103f757600080fd5b5061032760085481565b34801561040d57600080fd5b506102f861041c366004612064565b610c7a565b34801561042d57600080fd5b5061045761043c366004612064565b600d602052600090815260409020546001600160a01b031681565b6040516001600160a01b039091168152602001610331565b34801561047b57600080fd5b5061032760065481565b34801561049157600080fd5b506102f86104a036600461212f565b610ce4565b3480156104b157600080fd5b506104c56104c036600461212f565b610dc4565b604051610331919061214c565b3480156104de57600080fd5b506103276104ed366004612103565b610e30565b3480156104fe57600080fd5b5061032761050d366004612064565b600e6020526000908152604090205481565b34801561052b57600080fd5b506102f8610e5b565b34801561054057600080fd5b5061037b61054f36600461212f565b600c6020526000908152604090205460ff1681565b34801561057057600080fd5b50610327600b5481565b34801561058657600080fd5b5061037b610595366004612064565b60106020526000908152604090205460ff1681565b3480156105b657600080fd5b5061032760055481565b3480156105cc57600080fd5b5060015461010090046001600160a01b0316610457565b3480156105ef57600080fd5b506102f86105fe36600461212f565b610e97565b6102f8610611366004612064565b610f69565b34801561062257600080fd5b50610327600a5481565b34801561063857600080fd5b506102f8610647366004612064565b61111f565b6102f861065a3660046121a6565b6111b9565b34801561066b57600080fd5b506102f861067a366004612064565b6116cd565b34801561068b57600080fd5b506102f861069a36600461212f565b611717565b3480156106ab57600080fd5b506102f86106ba366004612064565b611769565b3480156106cb57600080fd5b506002546001600160a01b0316610457565b3480156106e957600080fd5b5061032760035481565b3480156106ff57600080fd5b506102f861070e366004612064565b6117b3565b34801561071f57600080fd5b5061032760045481565b34801561073557600080fd5b5061032760075481565b34801561074b57600080fd5b50600954610457906001600160a01b031681565b34801561076b57600080fd5b506102f861077a36600461212f565b611859565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146107cc576040519150601f19603f3d011682016040523d82523d6000602084013e6107d1565b606091505b50509050806108225760405162461bcd60e51b815260206004820181905260248201527f455448322e30506f6f6c3a204661696c656420746f2073656e64204574686572604482015260640161023b565b604080516001600160a01b0385168152602081018490527fa5957fefb5b0f981554450d4d8dde003083cd202e3d5a2992e09c88ad1f0d791910160405180910390a1505050565b6001546001600160a01b036101009091041633146108995760405162461bcd60e51b815260040161023b90612264565b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb90604401602060405180830381600087803b1580156108e357600080fd5b505af11580156108f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061091b9190612299565b61092457600080fd5b505050565b600954600160a81b900460ff161561097b5760405162461bcd60e51b8152602060048201526015602482015274455448322e30506f6f6c3a20696e697420646f6e6560581b604482015260640161023b565b61098b88888888888888886118fa565b6109936119ac565b50506001600a8190556011555050601280546001600160a01b039096166001600160a01b03199096169590951790945550506009805460ff60a81b1916600160a81b1790555050565b6002546001600160a01b0316331480610a0557506001546001600160a01b036101009091041633145b610a215760405162461bcd60e51b815260040161023b906122bb565b60008111610a415760405162461bcd60e51b815260040161023b906122fc565b600455565b336000908152600c602052604090205460ff16610acb5760405162461bcd60e51b815260206004820152603760248201527f455448322e30506f6f6c3a2043616c6c6572206e6f7420617574686f7269736560448201527f6420746f2063616c6c20746869732066756e6374696f6e000000000000000000606482015260840161023b565b610ad58183611a12565b6012546040516323b872dd60e01b8152336004820152306024820152604481018390526001600160a01b03909116906323b872dd90606401602060405180830381600087803b158015610b2757600080fd5b505af1158015610b3b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5f9190612299565b610bab5760405162461bcd60e51b815260206004820152601e60248201527f455448322e30506f6f6c3a20496e73756666696369656e742066756e64730000604482015260640161023b565b5050565b6002546001600160a01b0316331480610bd857506001546001600160a01b036101009091041633145b610bf45760405162461bcd60e51b815260040161023b906122bb565b6001600160a01b038116610c565760405162461bcd60e51b8152602060048201526024808201527f455448322e30506f6f6c3a20496e76616c696420636f6e7472616374206164646044820152637265737360e01b606482015260840161023b565b6001600160a01b03166000908152600c60205260409020805460ff19166001179055565b6002546001600160a01b0316331480610ca357506001546001600160a01b036101009091041633145b610cbf5760405162461bcd60e51b815260040161023b906122bb565b60008111610cdf5760405162461bcd60e51b815260040161023b906122fc565b600655565b6002546001600160a01b0316331480610d0d57506001546001600160a01b036101009091041633145b610d295760405162461bcd60e51b815260040161023b906122bb565b6001600160a01b0381166000908152600c602052604090205460ff16610da35760405162461bcd60e51b815260206004820152602960248201527f455448322e30506f6f6c3a20436f6e74726163742061646472657373206e6f74604482015268081d995c9a599a595960ba1b606482015260840161023b565b6001600160a01b03166000908152600c60205260409020805460ff19169055565b6001600160a01b038116600090815260146020908152604091829020805483518184028101840190945280845260609392830182828015610e2457602002820191906000526020600020905b815481526020019060010190808311610e10575b50505050509050919050565b6001600160a01b03821660009081526013602090815260408083208484529091529020545b92915050565b6001546001600160a01b03610100909104163314610e8b5760405162461bcd60e51b815260040161023b90612264565b610e956000611c7f565b565b6002546001600160a01b0316331480610ec057506001546001600160a01b036101009091041633145b610edc5760405162461bcd60e51b815260040161023b906122bb565b6001600160a01b038116610f475760405162461bcd60e51b815260206004820152602c60248201527f506c6174666f726d4665653a20616464726573732063616e206e6f742062652060448201526b7a65726f206164647265737360a01b606482015260840161023b565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b60026000541415610f8c5760405162461bcd60e51b815260040161023b90611fd7565b60026000556004546003543491610fae91610fa8908590611cd9565b90611cec565b146110215760405162461bcd60e51b815260206004820152603d60248201527f455448322e30506f6f6c3a2056616c75652063616e206e6f742062652067726560448201527f61746572206f72206c657373207468616e207374616b696e6720666565000000606482015260840161023b565b61102b8133611a12565b6012546040516323b872dd60e01b8152336004820152306024820152604481018390526001600160a01b03909116906323b872dd90606401602060405180830381600087803b15801561107d57600080fd5b505af1158015611091573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110b59190612299565b6111015760405162461bcd60e51b815260206004820152601e60248201527f455448322e30506f6f6c3a20496e73756666696369656e742066756e64730000604482015260640161023b565b600954611117906001600160a01b03163461077f565b506001600055565b6002546001600160a01b031633148061114857506001546001600160a01b036101009091041633145b6111645760405162461bcd60e51b815260040161023b906122bb565b600081116111b45760405162461bcd60e51b815260206004820152601f60248201527f506c6174666f726d4665653a206c696d69742063616e206e6f74207a65726f00604482015260640161023b565b600855565b600260005414156111dc5760405162461bcd60e51b815260040161023b90611fd7565b60026000556008548151111561125a5760405162461bcd60e51b815260206004820152603e60248201527f455448322e30506f6f6c3a20496e707574206172726179206c656e677468206960448201527f732067726561746572207468616e20617070726f766564206c656e6774680000606482015260840161023b565b6000805b825181101561151a57336001600160a01b0316600d600085848151811061128757611287612344565b6020908102919091018101518252810191909152604001600020546001600160a01b0316146113035760405162461bcd60e51b815260206004820152602260248201527f455448322e30506f6f6c3a204f6e6c79206f776e65722063616e20756e7374616044820152616b6560f01b606482015260840161023b565b6010600084838151811061131957611319612344565b60209081029190910181015182528101919091526040016000205460ff166113945760405162461bcd60e51b815260206004820152602860248201527f455448322e30506f6f6c3a205472616e73616374696f6e20616c7265616479206044820152671d5b94dd185ad95960c21b606482015260840161023b565b6000601060008584815181106113ac576113ac612344565b6020026020010151815260200190815260200160002060006101000a81548160ff021916908315150217905550611418600e60008584815181106113f2576113f2612344565b602002602001015181526020019081526020016000205483611cf890919063ffffffff16565b915061143d3384838151811061143057611430612344565b6020026020010151611d04565b15611465576114653384838151811061145857611458612344565b6020026020010151611d7f565b7f204fccf0d92ed8d48f204adb39b2e81e92bad0dedb93f5716ca9478cfb57de003384838151811061149957611499612344565b6020026020010151600e60008786815181106114b7576114b7612344565b60200260200101518152602001908152602001600020544260405161150094939291906001600160a01b0394909416845260208401929092526040830152606082015260800190565b60405180910390a18061151281612370565b91505061125e565b5034611537600654610fa860055485611cd990919063ffffffff16565b146115aa5760405162461bcd60e51b815260206004820152603f60248201527f455448322e30506f6f6c3a2056616c75652063616e206e6f742062652067726560448201527f61746572206f72206c657373207468616e20756e7374616b696e672066656500606482015260840161023b565b600b546115b79082611eef565b600b5560125460405163a9059cbb60e01b8152336004820152602481018390526001600160a01b039091169063a9059cbb90604401602060405180830381600087803b15801561160657600080fd5b505af115801561161a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061163e9190612299565b6116995760405162461bcd60e51b815260206004820152602660248201527f455448322e30506f6f6c3a20496e73756666696369656e74205374726f6e6720604482015265746f6b656e7360d01b606482015260840161023b565b6009546006546005546116c4926001600160a01b0316916116bf91610fa8908690611cd9565b61077f565b50506001600055565b6002546001600160a01b03163314806116f657506001546001600160a01b036101009091041633145b6117125760405162461bcd60e51b815260040161023b906122bb565b600355565b6001546001600160a01b036101009091041633146117475760405162461bcd60e51b815260040161023b90612264565b601280546001600160a01b0319166001600160a01b0392909216919091179055565b6002546001600160a01b031633148061179257506001546001600160a01b036101009091041633145b6117ae5760405162461bcd60e51b815260040161023b906122bb565b600555565b6002546001600160a01b03163314806117dc57506001546001600160a01b036101009091041633145b6117f85760405162461bcd60e51b815260040161023b906122bb565b600081116118545760405162461bcd60e51b815260206004820152602360248201527f506c6174666f726d4665653a20616d6f756e742063616e206e6f74206265207a60448201526265726f60e81b606482015260840161023b565b600755565b6001546001600160a01b036101009091041633146118895760405162461bcd60e51b815260040161023b90612264565b6001600160a01b0381166118ee5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161023b565b6118f781611c7f565b50565b600954600160a01b900460ff161561194d5760405162461bcd60e51b8152602060048201526016602482015275506c6174666f726d4665653a20696e697420646f6e6560501b604482015260640161023b565b600388905560048790556005869055600685905560078490556008839055600980546001600160a01b0319166001600160a01b03841617905561198f81611efb565b50506009805460ff60a01b1916600160a01b179055505050505050565b60015460ff16156119ff5760405162461bcd60e51b815260206004820152601a60248201527f5265656e7472616e637947756172643a20696e697420646f6e65000000000000604482015260640161023b565b60016000819055805460ff191681179055565b6008546001600160a01b03821660009081526014602052604090205410611a925760405162461bcd60e51b815260206004820152602e60248201527f455448322e30506f6f6c3a20557365722063616e206e6f74206578636565642060448201526d1cdd185ad9481d1e081b1a5b5a5d60921b606482015260840161023b565b600754821015611b0a5760405162461bcd60e51b815260206004820152603e60248201527f455448322e30506f6f6c3a20416d6f756e742063616e206e6f74206265206c6560448201527f7373207468616e206d696e696d756d207374616b696e6720616d6f756e740000606482015260840161023b565b6001600160a01b038116611b605760405162461bcd60e51b815260206004820181905260248201527f455448322e30506f6f6c3a20496e76616c696420757365722061646472657373604482015260640161023b565b601180546000908152600d6020908152604080832080546001600160a01b0319166001600160a01b03871617905583548352600e825280832086905583548352600f8252808320429055925482526010905220805460ff19166001179055600b54611bcb9083611cf8565b600b55601154611bdc908290611d04565b611c24576011546001600160a01b0382166000908152601460208181526040808420805460138452828620878752845291852082905592825260018101835591835290912001555b601154604080516001600160a01b0384168152602081019290925281018390524260608201527fb4caaf29adda3eefee3ad552a8e85058589bf834c7466cae4ee58787f70589ed9060800160405180910390a1610bab611f72565b600180546001600160a01b03838116610100818102610100600160a81b031985161790945560405193909204169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000611ce5828461238b565b9392505050565b6000611ce582846123aa565b6000611ce582846123cc565b6001600160a01b038216600090815260146020526040812054611d2957506000610e55565b6001600160a01b038316600081815260136020908152604080832086845282528083205493835260149091529020805482908110611d6957611d69612344565b9060005260206000200154831491505092915050565b6001600160a01b038216600090815260146020526040812054611da3906001611eef565b6001600160a01b03841660009081526014602052604081208054929350909183908110611dd257611dd2612344565b9060005260206000200154905080831415611e3f576001600160a01b038416600081815260136020908152604080832087845282528083208390559282526014905220805480611e2457611e246123e4565b60019003818190600052602060002001600090559055611ee9565b6001600160a01b0384166000818152601360209081526040808320878452825280832080549084905593835260149091529020805483919083908110611e8757611e87612344565b60009182526020808320909101929092556001600160a01b0387168082526013835260408083208684528452808320859055908252601490925220805480611ed157611ed16123e4565b60019003818190600052602060002001600090559055505b50505050565b6000611ce582846123fa565b600254600160a01b900460ff1615611f4a5760405162461bcd60e51b81526020600482015260126024820152714f776e61626c653a20696e697420646f6e6560701b604482015260640161023b565b611f5333611c7f565b611f5c81611f85565b506002805460ff60a01b1916600160a01b179055565b601154611f80906001611cf8565b601155565b600280546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f9dfd842f298fc1353677dd28d7991f3c0effcf42d2c8e5e139dd56cf2fd6632390600090a35050565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b6001600160a01b03811681146118f757600080fd5b60008060006060848603121561203857600080fd5b83356120438161200e565b925060208401356120538161200e565b929592945050506040919091013590565b60006020828403121561207657600080fd5b5035919050565b60008060008060008060008060006101208a8c03121561209c57600080fd5b89356120a78161200e565b985060208a0135975060408a0135965060608a0135955060808a0135945060a08a0135935060c08a0135925060e08a01356120e18161200e565b91506101008a01356120f28161200e565b809150509295985092959850929598565b6000806040838503121561211657600080fd5b82356121218161200e565b946020939093013593505050565b60006020828403121561214157600080fd5b8135611ce58161200e565b6020808252825182820181905260009190848201906040850190845b8181101561218457835183529284019291840191600101612168565b50909695505050505050565b634e487b7160e01b600052604160045260246000fd5b600060208083850312156121b957600080fd5b823567ffffffffffffffff808211156121d157600080fd5b818501915085601f8301126121e557600080fd5b8135818111156121f7576121f7612190565b8060051b604051601f19603f8301168101818110858211171561221c5761221c612190565b60405291825284820192508381018501918883111561223a57600080fd5b938501935b828510156122585784358452938501939285019261223f565b98975050505050505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6000602082840312156122ab57600080fd5b81518015158114611ce557600080fd5b60208082526021908201527f4f776e61626c653a2043616c6c6572206973206e6f7420617574686f72697a656040820152601960fa1b606082015260800190565b60208082526028908201527f506c6174666f726d4665653a2064656e6f6d696e61746f722063616e206e6f74604082015267206265207a65726f60c01b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006000198214156123845761238461235a565b5060010190565b60008160001904831182151516156123a5576123a561235a565b500290565b6000826123c757634e487b7160e01b600052601260045260246000fd5b500490565b600082198211156123df576123df61235a565b500190565b634e487b7160e01b600052603160045260246000fd5b60008282101561240c5761240c61235a565b50039056fea264697066735822122028a2518f4afbe88779636d6abdb4fe7f44d60d7b28836f0bbfce24abbbfdab7b64736f6c63430008090033
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.