More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 88 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Withdraw | 20079874 | 158 days ago | IN | 0 ETH | 0.00444204 | ||||
Withdraw | 20067494 | 159 days ago | IN | 0 ETH | 0.00195412 | ||||
Withdraw | 20067391 | 159 days ago | IN | 0 ETH | 0.00248299 | ||||
Withdraw | 20067276 | 159 days ago | IN | 0 ETH | 0.00092292 | ||||
Withdraw | 19921637 | 180 days ago | IN | 0 ETH | 0.0003018 | ||||
Emergency Withdr... | 19921618 | 180 days ago | IN | 0 ETH | 0.00025782 | ||||
Emergency Withdr... | 19921228 | 180 days ago | IN | 0 ETH | 0.00030822 | ||||
Claim Rewards | 19916494 | 181 days ago | IN | 0 ETH | 0.00131739 | ||||
Withdraw | 19907251 | 182 days ago | IN | 0 ETH | 0.00047551 | ||||
Claim Rewards | 19906270 | 182 days ago | IN | 0 ETH | 0.00054386 | ||||
Deposit | 19905667 | 182 days ago | IN | 0 ETH | 0.00122206 | ||||
Deposit | 19905576 | 182 days ago | IN | 0 ETH | 0.00187855 | ||||
Deposit | 19905445 | 182 days ago | IN | 0 ETH | 0.00119521 | ||||
Claim Rewards | 19905435 | 182 days ago | IN | 0 ETH | 0.00052257 | ||||
Claim Rewards | 19905431 | 182 days ago | IN | 0 ETH | 0.00057454 | ||||
Deposit | 19905339 | 182 days ago | IN | 0 ETH | 0.00207629 | ||||
Claim Rewards | 19905326 | 182 days ago | IN | 0 ETH | 0.00071918 | ||||
Deposit | 19905294 | 182 days ago | IN | 0 ETH | 0.00126416 | ||||
Deposit | 19904789 | 182 days ago | IN | 0 ETH | 0.00168187 | ||||
Deposit | 19904742 | 182 days ago | IN | 0 ETH | 0.00127241 | ||||
Deposit | 19904610 | 182 days ago | IN | 0 ETH | 0.00196318 | ||||
Deposit | 19899891 | 183 days ago | IN | 0 ETH | 0.00080982 | ||||
Deposit | 19892020 | 184 days ago | IN | 0 ETH | 0.00124443 | ||||
Deposit | 19890771 | 184 days ago | IN | 0 ETH | 0.00389588 | ||||
Deposit | 19879580 | 186 days ago | IN | 0 ETH | 0.00196069 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
DAPPAIStaking
Compiler Version
v0.8.20+commit.a1b79de6
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.20; import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/IERC20.sol"; import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/access/Ownable.sol"; import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/ReentrancyGuard.sol" ; // Contract definition inheriting from Ownable and ReentrancyGuard contract DAPPAIStaking is Ownable, ReentrancyGuard { // Struct to store information about each staking pool struct PoolInfo { uint256 lockupDuration; // Duration for which funds are locked up uint256 returnPer; // Return percentage for the pool APY } // Struct to store information about each staking order struct OrderInfo { address beneficiary; // Address of the staker uint256 amount; // Amount of tokens staked uint256 lockupDuration; // Duration for which the stake is locked up uint256 returnPer; // Return percentage for the stake uint256 starttime; // Start time of the stake uint256 endtime; // End time of the stake uint256 claimedReward; // Amount of claimed rewards bool claimed; // Flag indicating whether rewards are claimed } // Constants defining various durations in seconds uint256 private constant _days0 = 1 minutes; uint256 private constant _days7 = 7 days; uint256 private constant _days14 = 14 days; uint256 private constant _days30 = 30 days; uint256 private constant _days365 = 365 days; // Public variables IERC20 public token; // Token being staked bool public started = true; // Flag indicating whether staking has started uint256 public emergencyWithdrawFeesPercentage = 2; // Fees percentage for emergency withdrawals // Percentage returns for different lockup durations uint256 private _0daysPercentage = 20; uint256 private _7daysPercentage = 30; uint256 private _14daysPercentage = 45; uint256 private _30daysPercentage = 60; // Tracking variables uint256 private latestOrderId = 0; // Latest staking order ID uint public totalStakers; // Total number of unique stakers uint public totalStaked; // Total amount of tokens staked uint256 public totalStake = 0; // Total amount of tokens currently staked uint256 public totalWithdrawal = 0; // Total amount withdrawn by users uint256 public totalRewardPending = 0; // Total pending rewards uint256 public totalRewardsDistribution = 0; // Total rewards distributed // Modifier to allow only EOA callers modifier onlyEOA() { require(msg.sender == tx.origin, "DAPPAIStaking: Caller must be an EOA"); _; } // Mappings to store data mapping(uint256 => PoolInfo) public pooldata; // Mapping of lockup duration to pool info mapping(address => uint256) public balanceOf; // Balance of tokens for each address mapping(address => uint256) public totalRewardEarn; // Total rewards earned by each address mapping(uint256 => OrderInfo) public orders; // Mapping of order ID to order info mapping(address => uint256[]) private orderIds; // Mapping of address to array of order IDs // Additional mappings for tracking staking status mapping(address => mapping(uint => bool)) public hasStaked; // Mapping of address and lockup duration to staking status mapping(uint => uint) public stakeOnPool; // Total staked amount on each pool mapping(uint => uint) public rewardOnPool; // Total rewards on each pool mapping(uint => uint) public stakersPlan; // Total number of stakers on each lockup duration // Events event Deposit( address indexed user, uint256 indexed lockupDuration, uint256 amount, uint256 returnPer ); event Withdraw( address indexed user, uint256 amount, uint256 reward, uint256 total ); event WithdrawAll(address indexed user, uint256 amount); event RewardClaimed(address indexed user, uint256 reward); event RefRewardClaimed(address indexed user, uint256 reward); // Constructor function constructor(address _token, bool _started) Ownable(msg.sender){ token = IERC20(_token); started = _started; // Initialize pooldata with lockup durations and return percentages APY pooldata[1].lockupDuration = _days0; // 0 days pooldata[1].returnPer = _0daysPercentage; pooldata[2].lockupDuration = _days7; // 7 days pooldata[2].returnPer = _7daysPercentage; pooldata[3].lockupDuration = _days14; // 14 days pooldata[3].returnPer = _14daysPercentage; pooldata[4].lockupDuration = _days30; // 30 days pooldata[4].returnPer = _30daysPercentage; } // Function to deposit tokens into the staking contract function deposit(uint256 _amount, uint256 _lockupDuration) external onlyEOA { // Retrieve pool info based on lockup duration PoolInfo storage pool = pooldata[_lockupDuration]; // Check validity of staking parameters require(pool.lockupDuration > 0, "TokenStakingDAPPAI: asked pool does not exist"); require(started, "TokenStakingDAPPAI: staking not yet started"); require(_amount > 0, "TokenStakingDAPPAI: stake amount must be non-zero"); // Calculate APY (Annual Percentage Yield) and user reward uint256 APY = (_amount * pool.returnPer) / 100; uint256 userReward = (APY * pool.lockupDuration) / _days365; // Transfer tokens from user to staking contract require(token.transferFrom(_msgSender(), address(this), _amount), "TokenStakingDAPPAI: token transferFrom via deposit not succeeded"); // Update staking information orders[++latestOrderId] = OrderInfo( _msgSender(), _amount, pool.lockupDuration, pool.returnPer, block.timestamp, block.timestamp + pool.lockupDuration, 0, false ); // Update staking status if (!hasStaked[msg.sender][_lockupDuration]) { stakersPlan[_lockupDuration] = stakersPlan[_lockupDuration] + 1; totalStakers = totalStakers + 1; } hasStaked[msg.sender][_lockupDuration] = true; stakeOnPool[_lockupDuration] = stakeOnPool[_lockupDuration] + _amount; totalStaked = totalStaked + _amount; totalStake += _amount; totalRewardPending += userReward; balanceOf[_msgSender()] += _amount; orderIds[_msgSender()].push(latestOrderId); // Emit deposit event emit Deposit(_msgSender(), pool.lockupDuration, _amount, pool.returnPer); } // Function to withdraw tokens and rewards function withdraw(uint256 orderId) external nonReentrant { // Retrieve order info based on order ID OrderInfo storage orderInfo = orders[orderId]; // Check validity of order and caller require(orderId <= latestOrderId, "TokenStakingDAPPAI: INVALID orderId, orderId greater than latestOrderId"); require(_msgSender() == orderInfo.beneficiary, "TokenStakingDAPPAI: caller is not the beneficiary"); require(!orderInfo.claimed, "TokenStakingDAPPAI: order already unstaked"); require(block.timestamp >= orderInfo.endtime, "TokenStakingDAPPAI: stake locked until lock duration completion"); // Calculate available rewards for claiming uint256 claimAvailable = pendingRewards(orderId); uint256 total = orderInfo.amount + claimAvailable; // Update reward and withdrawal information totalRewardEarn[_msgSender()] += claimAvailable; totalRewardsDistribution += claimAvailable; orderInfo.claimedReward += claimAvailable; totalRewardPending -= claimAvailable; // Update balance and staking information balanceOf[_msgSender()] -= orderInfo.amount; totalWithdrawal += orderInfo.amount; orderInfo.claimed = true; totalStake -= orderInfo.amount; // Transfer tokens to the beneficiary require(token.transfer(address(_msgSender()), total), "TokenStakingDAPPAI: token transfer via withdraw not succeeded"); rewardOnPool[orderInfo.lockupDuration] = rewardOnPool[orderInfo.lockupDuration] + claimAvailable; // Emit withdrawal event emit Withdraw(_msgSender(), orderInfo.amount, claimAvailable, total); } // Function to claim rewards function claimRewards(uint256 orderId) external nonReentrant { // Retrieve order info based on order ID OrderInfo storage orderInfo = orders[orderId]; // Check validity of order and caller require(orderId <= latestOrderId, "TokenStakingDAPPAI: INVALID orderId, orderId greater than latestOrderId"); require(_msgSender() == orderInfo.beneficiary, "TokenStakingDAPPAI: caller is not the beneficiary"); require(!orderInfo.claimed, "TokenStakingDAPPAI: order already unstaked"); // Calculate available rewards for claiming uint256 claimAvailable = pendingRewards(orderId); // Update reward information totalRewardEarn[_msgSender()] += claimAvailable; totalRewardsDistribution += claimAvailable; totalRewardPending -= claimAvailable; orderInfo.claimedReward += claimAvailable; // Transfer tokens to the beneficiary require(token.transfer(address(_msgSender()), claimAvailable), "TokenStakingDAPPAI: token transfer via claim rewards not succeeded"); rewardOnPool[orderInfo.lockupDuration] = rewardOnPool[orderInfo.lockupDuration] + claimAvailable; // Emit reward claimed event emit RewardClaimed(address(_msgSender()), claimAvailable); } // Function to calculate pending rewards for a given order function pendingRewards(uint256 orderId) public view returns (uint256) { // Retrieve order info based on order ID OrderInfo storage orderInfo = orders[orderId]; // Check if rewards are claimed if (!orderInfo.claimed) { if (block.timestamp >= orderInfo.endtime) { // Calculate rewards if stake duration has ended uint256 APY = (orderInfo.amount * orderInfo.returnPer) / 100; uint256 reward = (APY * orderInfo.lockupDuration) / _days365; uint256 claimAvailable = reward - orderInfo.claimedReward; return claimAvailable; } else { // Calculate rewards based on current time if stake is still active uint256 stakeTime = block.timestamp - orderInfo.starttime; uint256 APY = (orderInfo.amount * orderInfo.returnPer) / 100; uint256 reward = (APY * stakeTime) / _days365; uint256 claimAvailableNow = reward - orderInfo.claimedReward; return claimAvailableNow; } } else { return 0; } } // Function for emergency withdrawal function emergencyWithdraw(uint256 orderId) external nonReentrant { // Retrieve order info based on order ID OrderInfo storage orderInfo = orders[orderId]; // Check validity of order and caller require(orderId <= latestOrderId, "TokenStakingDAPPAI: INVALID orderId, orderId greater than latestOrderId"); require(orderInfo.lockupDuration == _days0, "Please run Withdraw function for unstake"); require(_msgSender() == orderInfo.beneficiary, "TokenStakingDAPPAI: caller is not the beneficiary"); require(!orderInfo.claimed, "TokenStakingDAPPAI: order already unstaked"); // Calculate available rewards for claiming uint256 claimAvailable = pendingRewards(orderId); uint256 fees = (orderInfo.amount * emergencyWithdrawFeesPercentage) / 1000; orderInfo.amount -= fees; uint256 total = orderInfo.amount + claimAvailable; // Update reward information totalRewardEarn[_msgSender()] += claimAvailable; totalRewardsDistribution += claimAvailable; totalRewardPending -= claimAvailable; orderInfo.claimedReward += claimAvailable; // Calculate total reward for the stake uint256 APY = ((orderInfo.amount + fees) * orderInfo.returnPer) / 100; uint256 totalReward = (APY * orderInfo.lockupDuration) / _days365; totalRewardPending -= (totalReward - orderInfo.claimedReward); // Update balance and withdrawal information balanceOf[_msgSender()] -= (orderInfo.amount + fees); totalWithdrawal += (orderInfo.amount + fees); orderInfo.claimed = true; // Transfer tokens to the beneficiary and fees to the owner require(token.transfer(address(_msgSender()), total), "TokenStakingDAPPAI: token transfer via emergency withdraw not succeeded"); require(token.transfer(owner(), fees), "TokenStakingDAPPAI: token transfer via emergency withdraw to admin is not succeeded"); // Emit withdrawal event emit WithdrawAll(_msgSender(), total); } // Function to toggle staking status function toggleStaking(bool _start) external onlyOwner returns (bool) { started = _start; return true; } // Function to get order IDs of an investor function investorOrderIds(address investor) external view returns (uint256[] memory ids) { uint256[] memory arr = orderIds[investor]; return arr; } // Function to calculate total rewards of an address function _totalRewards(address ref) private view returns (uint256) { uint256 rewards; uint256[] memory arr = orderIds[ref]; for (uint256 i = 0; i < arr.length; i++) { OrderInfo memory order = orders[arr[i]]; rewards += (order.claimedReward + pendingRewards(arr[i])); } return rewards; } // Function to transfer remaining tokens to the owner function transferToken() external onlyOwner { uint256 amount = IERC20(token).balanceOf(address(this)); uint256 transferAmount = amount - totalStake; IERC20(token).transfer(owner(), transferAmount); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (utils/ReentrancyGuard.sol) pragma solidity ^0.8.20; /** * @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 EIP-1153 (transient storage) is available on the chain you're deploying at, * consider using {ReentrancyGuardTransient} instead. * * 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; /** * @dev Unauthorized reentrant call. */ error ReentrancyGuardReentrantCall(); constructor() { _status = NOT_ENTERED; } /** * @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() { _nonReentrantBefore(); _; _nonReentrantAfter(); } function _nonReentrantBefore() private { // On the first call to nonReentrant, _status will be NOT_ENTERED if (_status == ENTERED) { revert ReentrancyGuardReentrantCall(); } // Any calls to nonReentrant after this point will fail _status = ENTERED; } function _nonReentrantAfter() private { // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = NOT_ENTERED; } /** * @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a * `nonReentrant` function in the call stack. */ function _reentrancyGuardEntered() internal view returns (bool) { return _status == ENTERED; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol) pragma solidity ^0.8.20; import {Context} from "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * The initial owner is set to the address provided by the deployer. 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; /** * @dev The caller account is not authorized to perform an operation. */ error OwnableUnauthorizedAccount(address account); /** * @dev The owner is not a valid owner account. (eg. `address(0)`) */ error OwnableInvalidOwner(address owner); event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the address provided by the deployer as the initial owner. */ constructor(address initialOwner) { if (initialOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(initialOwner); } /** * @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 { if (owner() != _msgSender()) { revert OwnableUnauthorizedAccount(_msgSender()); } } /** * @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 { if (newOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.20; /** * @dev Interface of the ERC-20 standard as defined in the ERC. */ 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 value of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the value of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves a `value` amount of 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 value) 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 a `value` amount of tokens 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 value) external returns (bool); /** * @dev Moves a `value` amount of tokens from `from` to `to` using the * allowance mechanism. `value` 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 value) external returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol) pragma solidity ^0.8.20; /** * @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; } function _contextSuffixLength() internal view virtual returns (uint256) { return 0; } }
{ "optimizer": { "enabled": true, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"bool","name":"_started","type":"bool"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"lockupDuration","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"returnPer","type":"uint256"}],"name":"Deposit","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":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"RefRewardClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"RewardClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"total","type":"uint256"}],"name":"Withdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"WithdrawAll","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"orderId","type":"uint256"}],"name":"claimRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_lockupDuration","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"orderId","type":"uint256"}],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"emergencyWithdrawFeesPercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"hasStaked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"investor","type":"address"}],"name":"investorOrderIds","outputs":[{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"orders","outputs":[{"internalType":"address","name":"beneficiary","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"lockupDuration","type":"uint256"},{"internalType":"uint256","name":"returnPer","type":"uint256"},{"internalType":"uint256","name":"starttime","type":"uint256"},{"internalType":"uint256","name":"endtime","type":"uint256"},{"internalType":"uint256","name":"claimedReward","type":"uint256"},{"internalType":"bool","name":"claimed","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"orderId","type":"uint256"}],"name":"pendingRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"pooldata","outputs":[{"internalType":"uint256","name":"lockupDuration","type":"uint256"},{"internalType":"uint256","name":"returnPer","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"rewardOnPool","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"stakeOnPool","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"stakersPlan","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"started","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_start","type":"bool"}],"name":"toggleStaking","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"totalRewardEarn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalRewardPending","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalRewardsDistribution","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalStake","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalStaked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalStakers","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalWithdrawal","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":[],"name":"transferToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"orderId","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526002805460ff60a01b1916600160a01b1781556003556014600455601e600555602d600655603c6007555f6008819055600b819055600c819055600d819055600e5534801562000052575f80fd5b5060405162001e3938038062001e3983398101604081905262000075916200025d565b33806200009b57604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b620000a6816200020e565b506001805560028054911515600160a01b026001600160a81b03199092166001600160a01b0390931692909217179055600f602052603c7f169f97de0d9a84d840042b17d3c6b9638b3d6fd9024c9eb0c7a306a17b49f88f55600480547f169f97de0d9a84d840042b17d3c6b9638b3d6fd9024c9eb0c7a306a17b49f8905562093a807fa74ba3945261e09fde15ba3db55005b205e61eeb4ad811ac0faa2b315bffeead556005547fa74ba3945261e09fde15ba3db55005b205e61eeb4ad811ac0faa2b315bffeeae55621275007f45f76dafbbad695564362934e24d72eedc57f9fc1a65f39bca62176cc8296828556006547f45f76dafbbad695564362934e24d72eedc57f9fc1a65f39bca62176cc8296829555f5262278d007f367ccd2d0ac16bf7110a5dffe0801fdc9452a95a1adb7e1a12fe97dd3e9a4edd556007547f367ccd2d0ac16bf7110a5dffe0801fdc9452a95a1adb7e1a12fe97dd3e9a4ede55620002a7565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f80604083850312156200026f575f80fd5b82516001600160a01b038116811462000286575f80fd5b602084015190925080151581146200029c575f80fd5b809150509250929050565b611b8480620002b55f395ff3fe608060405234801561000f575f80fd5b50600436106101bb575f3560e01c8063799a5359116100f3578063aa60494711610093578063f2fde38b1161006e578063f2fde38b1461044a578063fa1e15141461045d578063fc0c546a1461047c578063fce50f171461048f575f80fd5b8063aa604947146103ea578063da4b2e751461040a578063e2bbb15814610437575f80fd5b806386989038116100ce57806386989038146103105780638b0e9f3f146103195780638da5cb5b14610322578063a85c38ef14610346575f80fd5b8063799a5359146102ec5780637dcb2abf146102f4578063817b1cd214610307575f80fd5b80635312ea8e1161015e5780636b56ee02116101395780636b56ee021461029d57806370a08231146102a6578063715018a6146102c5578063799102a2146102cd575f80fd5b80635312ea8e1461026e5780636353e00214610281578063698059811461028a575f80fd5b80631f2698ab116101995780631f2698ab1461020f5780632c26afae146102335780632e1a7d4d1461025257806332e26d3214610265575f80fd5b80630962ef79146101bf5780630bd8072d146101d45780631a6c5e7e146101f0575b5f80fd5b6101d26101cd366004611866565b6104ca565b005b6101dd60035481565b6040519081526020015b60405180910390f35b6101dd6101fe366004611866565b60166020525f908152604090205481565b60025461022390600160a01b900460ff1681565b60405190151581526020016101e7565b6101dd610241366004611866565b60176020525f908152604090205481565b6101d2610260366004611866565b610749565b6101dd600e5481565b6101d261027c366004611866565b610abd565b6101dd600d5481565b61022361029836600461188a565b610f9c565b6101dd600c5481565b6101dd6102b43660046118c2565b60106020525f908152604090205481565b6101d2610fc5565b6101dd6102db366004611866565b60156020525f908152604090205481565b6101d2610fd8565b6101dd610302366004611866565b6110f3565b6101dd600a5481565b6101dd60095481565b6101dd600b5481565b5f546001600160a01b03165b6040516001600160a01b0390911681526020016101e7565b6103a3610354366004611866565b60126020525f9081526040902080546001820154600283015460038401546004850154600586015460068701546007909701546001600160a01b03909616969495939492939192909160ff1688565b604080516001600160a01b0390991689526020890197909752958701949094526060860192909252608085015260a084015260c0830152151560e0820152610100016101e7565b6103fd6103f83660046118c2565b6111ed565b6040516101e791906118db565b61022361041836600461191e565b601460209081525f928352604080842090915290825290205460ff1681565b6101d2610445366004611946565b611256565b6101d26104583660046118c2565b611787565b6101dd61046b3660046118c2565b60116020525f908152604090205481565b60025461032e906001600160a01b031681565b6104b561049d366004611866565b600f6020525f90815260409020805460019091015482565b604080519283526020830191909152016101e7565b6104d26117c1565b5f81815260126020526040902060085482111561050a5760405162461bcd60e51b815260040161050190611966565b60405180910390fd5b80546001600160a01b0316336001600160a01b03161461053c5760405162461bcd60e51b8152600401610501906119d3565b600781015460ff16156105615760405162461bcd60e51b815260040161050190611a24565b5f61056b836110f3565b335f9081526011602052604081208054929350839290919061058e908490611a82565b9250508190555080600e5f8282546105a69190611a82565b9250508190555080600d5f8282546105be9190611a9b565b9250508190555080826006015f8282546105d89190611a82565b90915550506002546001600160a01b031663a9059cbb336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018490526044016020604051808303815f875af1158015610639573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061065d9190611aae565b6106c75760405162461bcd60e51b815260206004820152604260248201525f80516020611b2f83398151915260448201527f65722076696120636c61696d2072657761726473206e6f742073756363656564606482015261195960f21b608482015260a401610501565b60028201545f908152601660205260409020546106e5908290611a82565b60028301545f90815260166020526040902055336001600160a01b03167f106f923f993c2149d49b4255ff723acafa1f2d94393f561d3eda32ae348f72418260405161073391815260200190565b60405180910390a2505061074660018055565b50565b6107516117c1565b5f8181526012602052604090206008548211156107805760405162461bcd60e51b815260040161050190611966565b80546001600160a01b0316336001600160a01b0316146107b25760405162461bcd60e51b8152600401610501906119d3565b600781015460ff16156107d75760405162461bcd60e51b815260040161050190611a24565b80600501544210156108515760405162461bcd60e51b815260206004820152603f60248201527f546f6b656e5374616b696e674441505041493a207374616b65206c6f636b656460448201527f20756e74696c206c6f636b206475726174696f6e20636f6d706c6574696f6e006064820152608401610501565b5f61085b836110f3565b90505f81836001015461086e9190611a82565b335f90815260116020526040812080549293508492909190610891908490611a82565b9250508190555081600e5f8282546108a99190611a82565b9250508190555081836006015f8282546108c39190611a82565b9250508190555081600d5f8282546108db9190611a9b565b90915550506001830154335f9081526010602052604081208054909190610903908490611a9b565b90915550506001830154600c80545f9061091e908490611a82565b909155505060078301805460ff19166001908117909155830154600b80545f90610949908490611a9b565b90915550506002546001600160a01b031663a9059cbb336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018490526044016020604051808303815f875af11580156109aa573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109ce9190611aae565b610a2d5760405162461bcd60e51b815260206004820152603d60248201525f80516020611b2f83398151915260448201527f657220766961207769746864726177206e6f74207375636365656465640000006064820152608401610501565b60028301545f90815260166020526040902054610a4b908390611a82565b60028401545f90815260166020526040902055336001840154604080519182526020820185905281018390526001600160a01b0391909116907f02f25270a4d87bea75db541cdfe559334a275b4a233520ed6c0a2429667cca949060600160405180910390a250505061074660018055565b610ac56117c1565b5f818152601260205260409020600854821115610af45760405162461bcd60e51b815260040161050190611966565b603c816002015414610b595760405162461bcd60e51b815260206004820152602860248201527f506c656173652072756e2057697468647261772066756e6374696f6e20666f7260448201526720756e7374616b6560c01b6064820152608401610501565b80546001600160a01b0316336001600160a01b031614610b8b5760405162461bcd60e51b8152600401610501906119d3565b600781015460ff1615610bb05760405162461bcd60e51b815260040161050190611a24565b5f610bba836110f3565b90505f6103e86003548460010154610bd29190611ac9565b610bdc9190611ae0565b905080836001015f828254610bf19190611a9b565b909155505060018301545f90610c08908490611a82565b335f90815260116020526040812080549293508592909190610c2b908490611a82565b9250508190555082600e5f828254610c439190611a82565b9250508190555082600d5f828254610c5b9190611a9b565b9250508190555082846006015f828254610c759190611a82565b925050819055505f60648560030154848760010154610c949190611a82565b610c9e9190611ac9565b610ca89190611ae0565b90505f6301e13380866002015483610cc09190611ac9565b610cca9190611ae0565b9050856006015481610cdc9190611a9b565b600d5f828254610cec9190611a9b565b90915550506001860154610d01908590611a82565b335f9081526010602052604081208054909190610d1f908490611a9b565b90915550506001860154610d34908590611a82565b600c5f828254610d449190611a82565b909155505060078601805460ff191660011790556002546001600160a01b031663a9059cbb610d703390565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018690526044016020604051808303815f875af1158015610dba573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dde9190611aae565b610e4d5760405162461bcd60e51b815260206004820152604760248201525f80516020611b2f83398151915260448201527f65722076696120656d657267656e6379207769746864726177206e6f7420737560648201526618d8d95959195960ca1b608482015260a401610501565b6002546001600160a01b031663a9059cbb610e6f5f546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018790526044016020604051808303815f875af1158015610eb9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610edd9190611aae565b610f585760405162461bcd60e51b815260206004820152605360248201525f80516020611b2f83398151915260448201527f65722076696120656d657267656e637920776974686472617720746f2061646d6064820152721a5b881a5cc81b9bdd081cdd58d8d959591959606a1b608482015260a401610501565b60405183815233907fd7a4aa9f3dca5f6606ac15d7e1850920201bbb02c38cd986793779f58ae0dfd39060200160405180910390a250505050505061074660018055565b5f610fa56117eb565b506002805460ff60a01b1916600160a01b8315150217905560015b919050565b610fcd6117eb565b610fd65f611817565b565b610fe06117eb565b6002546040516370a0823160e01b81523060048201525f916001600160a01b0316906370a0823190602401602060405180830381865afa158015611026573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061104a9190611aff565b90505f600b548261105b9190611a9b565b6002549091506001600160a01b031663a9059cbb6110805f546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018490526044016020604051808303815f875af11580156110ca573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110ee9190611aae565b505050565b5f818152601260205260408120600781015460ff166111e55780600501544210611177575f60648260030154836001015461112e9190611ac9565b6111389190611ae0565b90505f6301e133808360020154836111509190611ac9565b61115a9190611ae0565b90505f83600601548261116d9190611a9b565b9695505050505050565b5f8160040154426111889190611a9b565b90505f6064836003015484600101546111a19190611ac9565b6111ab9190611ae0565b90505f6301e133806111bd8484611ac9565b6111c79190611ae0565b90505f8460060154826111da9190611a9b565b979650505050505050565b505f92915050565b6001600160a01b0381165f90815260136020908152604080832080548251818502810185019093528083526060949383018282801561124957602002820191905f5260205f20905b815481526020019060010190808311611235575b5093979650505050505050565b3332146112b15760405162461bcd60e51b8152602060048201526024808201527f4441505041495374616b696e673a2043616c6c6572206d75737420626520616e60448201526320454f4160e01b6064820152608401610501565b5f818152600f6020526040902080546113225760405162461bcd60e51b815260206004820152602d60248201527f546f6b656e5374616b696e674441505041493a2061736b656420706f6f6c206460448201526c1bd95cc81b9bdd08195e1a5cdd609a1b6064820152608401610501565b600254600160a01b900460ff1661138f5760405162461bcd60e51b815260206004820152602b60248201527f546f6b656e5374616b696e674441505041493a207374616b696e67206e6f742060448201526a1e595d081cdd185c9d195960aa1b6064820152608401610501565b5f83116113f85760405162461bcd60e51b815260206004820152603160248201527f546f6b656e5374616b696e674441505041493a207374616b6520616d6f756e74604482015270206d757374206265206e6f6e2d7a65726f60781b6064820152608401610501565b5f606482600101548561140b9190611ac9565b6114159190611ae0565b90505f6301e13380835f01548361142c9190611ac9565b6114369190611ae0565b6002549091506001600160a01b03166323b872dd336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152306024820152604481018890526064016020604051808303815f875af115801561149b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114bf9190611aae565b611520576040805162461bcd60e51b81526020600482015260248101919091525f80516020611b2f83398151915260448201527f657246726f6d20766961206465706f736974206e6f74207375636365656465646064820152608401610501565b6040518061010001604052806115333390565b6001600160a01b03168152602001868152602001845f0154815260200184600101548152602001428152602001845f01544261156f9190611a82565b81526020015f81526020015f151581525060125f60085f815461159190611b16565b9182905550815260208082019290925260409081015f908120845181546001600160a01b0319166001600160a01b03909116178155848401516001820155848301516002820155606085015160038201556080850151600482015560a0850151600582015560c0850151600682015560e0909401516007909401805460ff1916941515949094179093553383526014825280832087845290915290205460ff1661166e575f8481526017602052604090205461164e906001611a82565b5f8581526017602052604090205560095461166a906001611a82565b6009555b335f9081526014602090815260408083208784528252808320805460ff1916600117905560159091529020546116a5908690611a82565b5f85815260156020526040902055600a546116c1908690611a82565b600a8190555084600b5f8282546116d89190611a82565b9250508190555080600d5f8282546116f09190611a82565b9091555050335f9081526010602052604081208054879290611713908490611a82565b9091555050335f818152601360209081526040808320600854815460018082018455928652948490209094019390935586549287015481518a8152928301529192917f36af321ec8d3c75236829c5317affd40ddb308863a1236d2d277a4025cccee1e910160405180910390a35050505050565b61178f6117eb565b6001600160a01b0381166117b857604051631e4fbdf760e01b81525f6004820152602401610501565b61074681611817565b6002600154036117e457604051633ee5aeb560e01b815260040160405180910390fd5b6002600155565b5f546001600160a01b03163314610fd65760405163118cdaa760e01b8152336004820152602401610501565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f60208284031215611876575f80fd5b5035919050565b8015158114610746575f80fd5b5f6020828403121561189a575f80fd5b81356118a58161187d565b9392505050565b80356001600160a01b0381168114610fc0575f80fd5b5f602082840312156118d2575f80fd5b6118a5826118ac565b602080825282518282018190525f9190848201906040850190845b81811015611912578351835292840192918401916001016118f6565b50909695505050505050565b5f806040838503121561192f575f80fd5b611938836118ac565b946020939093013593505050565b5f8060408385031215611957575f80fd5b50508035926020909101359150565b60208082526047908201527f546f6b656e5374616b696e674441505041493a20494e56414c4944206f72646560408201527f7249642c206f7264657249642067726561746572207468616e206c617465737460608201526613dc99195c925960ca1b608082015260a00190565b60208082526031908201527f546f6b656e5374616b696e674441505041493a2063616c6c6572206973206e6f60408201527074207468652062656e656669636961727960781b606082015260800190565b6020808252602a908201527f546f6b656e5374616b696e674441505041493a206f7264657220616c726561646040820152691e481d5b9cdd185ad95960b21b606082015260800190565b634e487b7160e01b5f52601160045260245ffd5b80820180821115611a9557611a95611a6e565b92915050565b81810381811115611a9557611a95611a6e565b5f60208284031215611abe575f80fd5b81516118a58161187d565b8082028115828204841417611a9557611a95611a6e565b5f82611afa57634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215611b0f575f80fd5b5051919050565b5f60018201611b2757611b27611a6e565b506001019056fe546f6b656e5374616b696e674441505041493a20746f6b656e207472616e7366a2646970667358221220bc8536d15355667f923916d511e21e4aca972d2d5f09ef5c8fb8991e62e09a4164736f6c63430008140033000000000000000000000000bf72ee725f9b06dc564324774801acebad0619460000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x608060405234801561000f575f80fd5b50600436106101bb575f3560e01c8063799a5359116100f3578063aa60494711610093578063f2fde38b1161006e578063f2fde38b1461044a578063fa1e15141461045d578063fc0c546a1461047c578063fce50f171461048f575f80fd5b8063aa604947146103ea578063da4b2e751461040a578063e2bbb15814610437575f80fd5b806386989038116100ce57806386989038146103105780638b0e9f3f146103195780638da5cb5b14610322578063a85c38ef14610346575f80fd5b8063799a5359146102ec5780637dcb2abf146102f4578063817b1cd214610307575f80fd5b80635312ea8e1161015e5780636b56ee02116101395780636b56ee021461029d57806370a08231146102a6578063715018a6146102c5578063799102a2146102cd575f80fd5b80635312ea8e1461026e5780636353e00214610281578063698059811461028a575f80fd5b80631f2698ab116101995780631f2698ab1461020f5780632c26afae146102335780632e1a7d4d1461025257806332e26d3214610265575f80fd5b80630962ef79146101bf5780630bd8072d146101d45780631a6c5e7e146101f0575b5f80fd5b6101d26101cd366004611866565b6104ca565b005b6101dd60035481565b6040519081526020015b60405180910390f35b6101dd6101fe366004611866565b60166020525f908152604090205481565b60025461022390600160a01b900460ff1681565b60405190151581526020016101e7565b6101dd610241366004611866565b60176020525f908152604090205481565b6101d2610260366004611866565b610749565b6101dd600e5481565b6101d261027c366004611866565b610abd565b6101dd600d5481565b61022361029836600461188a565b610f9c565b6101dd600c5481565b6101dd6102b43660046118c2565b60106020525f908152604090205481565b6101d2610fc5565b6101dd6102db366004611866565b60156020525f908152604090205481565b6101d2610fd8565b6101dd610302366004611866565b6110f3565b6101dd600a5481565b6101dd60095481565b6101dd600b5481565b5f546001600160a01b03165b6040516001600160a01b0390911681526020016101e7565b6103a3610354366004611866565b60126020525f9081526040902080546001820154600283015460038401546004850154600586015460068701546007909701546001600160a01b03909616969495939492939192909160ff1688565b604080516001600160a01b0390991689526020890197909752958701949094526060860192909252608085015260a084015260c0830152151560e0820152610100016101e7565b6103fd6103f83660046118c2565b6111ed565b6040516101e791906118db565b61022361041836600461191e565b601460209081525f928352604080842090915290825290205460ff1681565b6101d2610445366004611946565b611256565b6101d26104583660046118c2565b611787565b6101dd61046b3660046118c2565b60116020525f908152604090205481565b60025461032e906001600160a01b031681565b6104b561049d366004611866565b600f6020525f90815260409020805460019091015482565b604080519283526020830191909152016101e7565b6104d26117c1565b5f81815260126020526040902060085482111561050a5760405162461bcd60e51b815260040161050190611966565b60405180910390fd5b80546001600160a01b0316336001600160a01b03161461053c5760405162461bcd60e51b8152600401610501906119d3565b600781015460ff16156105615760405162461bcd60e51b815260040161050190611a24565b5f61056b836110f3565b335f9081526011602052604081208054929350839290919061058e908490611a82565b9250508190555080600e5f8282546105a69190611a82565b9250508190555080600d5f8282546105be9190611a9b565b9250508190555080826006015f8282546105d89190611a82565b90915550506002546001600160a01b031663a9059cbb336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018490526044016020604051808303815f875af1158015610639573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061065d9190611aae565b6106c75760405162461bcd60e51b815260206004820152604260248201525f80516020611b2f83398151915260448201527f65722076696120636c61696d2072657761726473206e6f742073756363656564606482015261195960f21b608482015260a401610501565b60028201545f908152601660205260409020546106e5908290611a82565b60028301545f90815260166020526040902055336001600160a01b03167f106f923f993c2149d49b4255ff723acafa1f2d94393f561d3eda32ae348f72418260405161073391815260200190565b60405180910390a2505061074660018055565b50565b6107516117c1565b5f8181526012602052604090206008548211156107805760405162461bcd60e51b815260040161050190611966565b80546001600160a01b0316336001600160a01b0316146107b25760405162461bcd60e51b8152600401610501906119d3565b600781015460ff16156107d75760405162461bcd60e51b815260040161050190611a24565b80600501544210156108515760405162461bcd60e51b815260206004820152603f60248201527f546f6b656e5374616b696e674441505041493a207374616b65206c6f636b656460448201527f20756e74696c206c6f636b206475726174696f6e20636f6d706c6574696f6e006064820152608401610501565b5f61085b836110f3565b90505f81836001015461086e9190611a82565b335f90815260116020526040812080549293508492909190610891908490611a82565b9250508190555081600e5f8282546108a99190611a82565b9250508190555081836006015f8282546108c39190611a82565b9250508190555081600d5f8282546108db9190611a9b565b90915550506001830154335f9081526010602052604081208054909190610903908490611a9b565b90915550506001830154600c80545f9061091e908490611a82565b909155505060078301805460ff19166001908117909155830154600b80545f90610949908490611a9b565b90915550506002546001600160a01b031663a9059cbb336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018490526044016020604051808303815f875af11580156109aa573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109ce9190611aae565b610a2d5760405162461bcd60e51b815260206004820152603d60248201525f80516020611b2f83398151915260448201527f657220766961207769746864726177206e6f74207375636365656465640000006064820152608401610501565b60028301545f90815260166020526040902054610a4b908390611a82565b60028401545f90815260166020526040902055336001840154604080519182526020820185905281018390526001600160a01b0391909116907f02f25270a4d87bea75db541cdfe559334a275b4a233520ed6c0a2429667cca949060600160405180910390a250505061074660018055565b610ac56117c1565b5f818152601260205260409020600854821115610af45760405162461bcd60e51b815260040161050190611966565b603c816002015414610b595760405162461bcd60e51b815260206004820152602860248201527f506c656173652072756e2057697468647261772066756e6374696f6e20666f7260448201526720756e7374616b6560c01b6064820152608401610501565b80546001600160a01b0316336001600160a01b031614610b8b5760405162461bcd60e51b8152600401610501906119d3565b600781015460ff1615610bb05760405162461bcd60e51b815260040161050190611a24565b5f610bba836110f3565b90505f6103e86003548460010154610bd29190611ac9565b610bdc9190611ae0565b905080836001015f828254610bf19190611a9b565b909155505060018301545f90610c08908490611a82565b335f90815260116020526040812080549293508592909190610c2b908490611a82565b9250508190555082600e5f828254610c439190611a82565b9250508190555082600d5f828254610c5b9190611a9b565b9250508190555082846006015f828254610c759190611a82565b925050819055505f60648560030154848760010154610c949190611a82565b610c9e9190611ac9565b610ca89190611ae0565b90505f6301e13380866002015483610cc09190611ac9565b610cca9190611ae0565b9050856006015481610cdc9190611a9b565b600d5f828254610cec9190611a9b565b90915550506001860154610d01908590611a82565b335f9081526010602052604081208054909190610d1f908490611a9b565b90915550506001860154610d34908590611a82565b600c5f828254610d449190611a82565b909155505060078601805460ff191660011790556002546001600160a01b031663a9059cbb610d703390565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018690526044016020604051808303815f875af1158015610dba573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dde9190611aae565b610e4d5760405162461bcd60e51b815260206004820152604760248201525f80516020611b2f83398151915260448201527f65722076696120656d657267656e6379207769746864726177206e6f7420737560648201526618d8d95959195960ca1b608482015260a401610501565b6002546001600160a01b031663a9059cbb610e6f5f546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018790526044016020604051808303815f875af1158015610eb9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610edd9190611aae565b610f585760405162461bcd60e51b815260206004820152605360248201525f80516020611b2f83398151915260448201527f65722076696120656d657267656e637920776974686472617720746f2061646d6064820152721a5b881a5cc81b9bdd081cdd58d8d959591959606a1b608482015260a401610501565b60405183815233907fd7a4aa9f3dca5f6606ac15d7e1850920201bbb02c38cd986793779f58ae0dfd39060200160405180910390a250505050505061074660018055565b5f610fa56117eb565b506002805460ff60a01b1916600160a01b8315150217905560015b919050565b610fcd6117eb565b610fd65f611817565b565b610fe06117eb565b6002546040516370a0823160e01b81523060048201525f916001600160a01b0316906370a0823190602401602060405180830381865afa158015611026573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061104a9190611aff565b90505f600b548261105b9190611a9b565b6002549091506001600160a01b031663a9059cbb6110805f546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018490526044016020604051808303815f875af11580156110ca573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110ee9190611aae565b505050565b5f818152601260205260408120600781015460ff166111e55780600501544210611177575f60648260030154836001015461112e9190611ac9565b6111389190611ae0565b90505f6301e133808360020154836111509190611ac9565b61115a9190611ae0565b90505f83600601548261116d9190611a9b565b9695505050505050565b5f8160040154426111889190611a9b565b90505f6064836003015484600101546111a19190611ac9565b6111ab9190611ae0565b90505f6301e133806111bd8484611ac9565b6111c79190611ae0565b90505f8460060154826111da9190611a9b565b979650505050505050565b505f92915050565b6001600160a01b0381165f90815260136020908152604080832080548251818502810185019093528083526060949383018282801561124957602002820191905f5260205f20905b815481526020019060010190808311611235575b5093979650505050505050565b3332146112b15760405162461bcd60e51b8152602060048201526024808201527f4441505041495374616b696e673a2043616c6c6572206d75737420626520616e60448201526320454f4160e01b6064820152608401610501565b5f818152600f6020526040902080546113225760405162461bcd60e51b815260206004820152602d60248201527f546f6b656e5374616b696e674441505041493a2061736b656420706f6f6c206460448201526c1bd95cc81b9bdd08195e1a5cdd609a1b6064820152608401610501565b600254600160a01b900460ff1661138f5760405162461bcd60e51b815260206004820152602b60248201527f546f6b656e5374616b696e674441505041493a207374616b696e67206e6f742060448201526a1e595d081cdd185c9d195960aa1b6064820152608401610501565b5f83116113f85760405162461bcd60e51b815260206004820152603160248201527f546f6b656e5374616b696e674441505041493a207374616b6520616d6f756e74604482015270206d757374206265206e6f6e2d7a65726f60781b6064820152608401610501565b5f606482600101548561140b9190611ac9565b6114159190611ae0565b90505f6301e13380835f01548361142c9190611ac9565b6114369190611ae0565b6002549091506001600160a01b03166323b872dd336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152306024820152604481018890526064016020604051808303815f875af115801561149b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114bf9190611aae565b611520576040805162461bcd60e51b81526020600482015260248101919091525f80516020611b2f83398151915260448201527f657246726f6d20766961206465706f736974206e6f74207375636365656465646064820152608401610501565b6040518061010001604052806115333390565b6001600160a01b03168152602001868152602001845f0154815260200184600101548152602001428152602001845f01544261156f9190611a82565b81526020015f81526020015f151581525060125f60085f815461159190611b16565b9182905550815260208082019290925260409081015f908120845181546001600160a01b0319166001600160a01b03909116178155848401516001820155848301516002820155606085015160038201556080850151600482015560a0850151600582015560c0850151600682015560e0909401516007909401805460ff1916941515949094179093553383526014825280832087845290915290205460ff1661166e575f8481526017602052604090205461164e906001611a82565b5f8581526017602052604090205560095461166a906001611a82565b6009555b335f9081526014602090815260408083208784528252808320805460ff1916600117905560159091529020546116a5908690611a82565b5f85815260156020526040902055600a546116c1908690611a82565b600a8190555084600b5f8282546116d89190611a82565b9250508190555080600d5f8282546116f09190611a82565b9091555050335f9081526010602052604081208054879290611713908490611a82565b9091555050335f818152601360209081526040808320600854815460018082018455928652948490209094019390935586549287015481518a8152928301529192917f36af321ec8d3c75236829c5317affd40ddb308863a1236d2d277a4025cccee1e910160405180910390a35050505050565b61178f6117eb565b6001600160a01b0381166117b857604051631e4fbdf760e01b81525f6004820152602401610501565b61074681611817565b6002600154036117e457604051633ee5aeb560e01b815260040160405180910390fd5b6002600155565b5f546001600160a01b03163314610fd65760405163118cdaa760e01b8152336004820152602401610501565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f60208284031215611876575f80fd5b5035919050565b8015158114610746575f80fd5b5f6020828403121561189a575f80fd5b81356118a58161187d565b9392505050565b80356001600160a01b0381168114610fc0575f80fd5b5f602082840312156118d2575f80fd5b6118a5826118ac565b602080825282518282018190525f9190848201906040850190845b81811015611912578351835292840192918401916001016118f6565b50909695505050505050565b5f806040838503121561192f575f80fd5b611938836118ac565b946020939093013593505050565b5f8060408385031215611957575f80fd5b50508035926020909101359150565b60208082526047908201527f546f6b656e5374616b696e674441505041493a20494e56414c4944206f72646560408201527f7249642c206f7264657249642067726561746572207468616e206c617465737460608201526613dc99195c925960ca1b608082015260a00190565b60208082526031908201527f546f6b656e5374616b696e674441505041493a2063616c6c6572206973206e6f60408201527074207468652062656e656669636961727960781b606082015260800190565b6020808252602a908201527f546f6b656e5374616b696e674441505041493a206f7264657220616c726561646040820152691e481d5b9cdd185ad95960b21b606082015260800190565b634e487b7160e01b5f52601160045260245ffd5b80820180821115611a9557611a95611a6e565b92915050565b81810381811115611a9557611a95611a6e565b5f60208284031215611abe575f80fd5b81516118a58161187d565b8082028115828204841417611a9557611a95611a6e565b5f82611afa57634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215611b0f575f80fd5b5051919050565b5f60018201611b2757611b27611a6e565b506001019056fe546f6b656e5374616b696e674441505041493a20746f6b656e207472616e7366a2646970667358221220bc8536d15355667f923916d511e21e4aca972d2d5f09ef5c8fb8991e62e09a4164736f6c63430008140033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000bf72ee725f9b06dc564324774801acebad0619460000000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _token (address): 0xBF72ee725f9B06DC564324774801aCEBAd061946
Arg [1] : _started (bool): False
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000bf72ee725f9b06dc564324774801acebad061946
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000000
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.