Source Code
Latest 25 from a total of 459 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Withdraw | 24312872 | 45 days ago | IN | 0 ETH | 0.00020392 | ||||
| Stake | 24182600 | 64 days ago | IN | 0 ETH | 0.00032753 | ||||
| Withdraw | 24182584 | 64 days ago | IN | 0 ETH | 0.00016263 | ||||
| Stake | 23888925 | 105 days ago | IN | 0 ETH | 0.000326 | ||||
| Withdraw | 23878835 | 106 days ago | IN | 0 ETH | 0.00016325 | ||||
| Stake | 23834390 | 112 days ago | IN | 0 ETH | 0.0005193 | ||||
| Withdraw | 23412336 | 171 days ago | IN | 0 ETH | 0.00016675 | ||||
| Withdraw | 23161296 | 206 days ago | IN | 0 ETH | 0.00016857 | ||||
| Withdraw | 23105791 | 214 days ago | IN | 0 ETH | 0.00019047 | ||||
| Stake | 23002977 | 229 days ago | IN | 0 ETH | 0.00035102 | ||||
| Stake | 23000411 | 229 days ago | IN | 0 ETH | 0.00035291 | ||||
| Withdraw | 22889822 | 244 days ago | IN | 0 ETH | 0.0003779 | ||||
| Withdraw | 22799873 | 257 days ago | IN | 0 ETH | 0.00018856 | ||||
| Stake | 22539066 | 293 days ago | IN | 0 ETH | 0.00125599 | ||||
| Withdraw | 22539030 | 293 days ago | IN | 0 ETH | 0.00057596 | ||||
| Withdraw | 22330747 | 323 days ago | IN | 0 ETH | 0.00022998 | ||||
| Stake | 22212781 | 339 days ago | IN | 0 ETH | 0.00070827 | ||||
| Withdraw | 22212711 | 339 days ago | IN | 0 ETH | 0.00027468 | ||||
| Withdraw | 22201483 | 341 days ago | IN | 0 ETH | 0.00018403 | ||||
| Stake | 22181978 | 343 days ago | IN | 0 ETH | 0.00046466 | ||||
| Stake | 22001454 | 369 days ago | IN | 0 ETH | 0.00002775 | ||||
| Stake | 22001454 | 369 days ago | IN | 0 ETH | 0.00002522 | ||||
| Stake | 21999033 | 369 days ago | IN | 0 ETH | 0.00002522 | ||||
| Withdraw | 21982587 | 371 days ago | IN | 0 ETH | 0.00019875 | ||||
| Withdraw | 21918199 | 380 days ago | IN | 0 ETH | 0.00019214 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
StakingContract
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2021-06-04
*/
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
/**
* @dev Collection of functions related to the address type
*/
library Address {
/**
* @dev Returns true if `account` is a contract.
*
* [IMPORTANT]
* ====
* It is unsafe to assume that an address for which this function returns
* false is an externally-owned account (EOA) and not a contract.
*
* Among others, `isContract` will return false for the following
* types of addresses:
*
* - an externally-owned account
* - a contract in construction
* - an address where a contract will be created
* - an address where a contract lived, but was destroyed
* ====
*/
function isContract(address account) internal view returns (bool) {
// This method relies on extcodesize, which returns 0 for contracts in
// construction, since the code is only stored at the end of the
// constructor execution.
uint256 size;
// solhint-disable-next-line no-inline-assembly
assembly { size := extcodesize(account) }
return size > 0;
}
/**
* @dev Replacement for Solidity's `transfer`: sends `amount` wei to
* `recipient`, forwarding all available gas and reverting on errors.
*
* https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
* of certain opcodes, possibly making contracts go over the 2300 gas limit
* imposed by `transfer`, making them unable to receive funds via
* `transfer`. {sendValue} removes this limitation.
*
* https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
*
* IMPORTANT: because control is transferred to `recipient`, care must be
* taken to not create reentrancy vulnerabilities. Consider using
* {ReentrancyGuard} or the
* https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
*/
function sendValue(address payable recipient, uint256 amount) internal {
require(address(this).balance >= amount, "Address: insufficient balance");
// solhint-disable-next-line avoid-low-level-calls, avoid-call-value
(bool success, ) = recipient.call{ value: amount }("");
require(success, "Address: unable to send value, recipient may have reverted");
}
/**
* @dev Performs a Solidity function call using a low level `call`. A
* plain`call` is an unsafe replacement for a function call: use this
* function instead.
*
* If `target` reverts with a revert reason, it is bubbled up by this
* function (like regular Solidity function calls).
*
* Returns the raw returned data. To convert to the expected return value,
* use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
*
* Requirements:
*
* - `target` must be a contract.
* - calling `target` with `data` must not revert.
*
* _Available since v3.1._
*/
function functionCall(address target, bytes memory data) internal returns (bytes memory) {
return functionCall(target, data, "Address: low-level call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
* `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but also transferring `value` wei to `target`.
*
* Requirements:
*
* - the calling contract must have an ETH balance of at least `value`.
* - the called Solidity function must be `payable`.
*
* _Available since v3.1._
*/
function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
}
/**
* @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
* with `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
require(address(this).balance >= value, "Address: insufficient balance for call");
require(isContract(target), "Address: call to non-contract");
// solhint-disable-next-line avoid-low-level-calls
(bool success, bytes memory returndata) = target.call{ value: value }(data);
return _verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
return functionStaticCall(target, data, "Address: low-level static call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {
require(isContract(target), "Address: static call to non-contract");
// solhint-disable-next-line avoid-low-level-calls
(bool success, bytes memory returndata) = target.staticcall(data);
return _verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
return functionDelegateCall(target, data, "Address: low-level delegate call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
require(isContract(target), "Address: delegate call to non-contract");
// solhint-disable-next-line avoid-low-level-calls
(bool success, bytes memory returndata) = target.delegatecall(data);
return _verifyCallResult(success, returndata, errorMessage);
}
function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {
if (success) {
return returndata;
} else {
// Look for revert reason and bubble it up if present
if (returndata.length > 0) {
// The easiest way to bubble the revert reason is using memory via assembly
// solhint-disable-next-line no-inline-assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
}
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
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);
}
/**
* @title SafeERC20
* @dev Wrappers around ERC20 operations that throw on failure (when the token
* contract returns false). Tokens that return no value (and instead revert or
* throw on failure) are also supported, non-reverting calls are assumed to be
* successful.
* To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,
* which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
*/
library SafeERC20 {
using Address for address;
function safeTransfer(IERC20 token, address to, uint256 value) internal {
_callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
}
function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
_callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
}
/**
* @dev Deprecated. This function has issues similar to the ones found in
* {IERC20-approve}, and its usage is discouraged.
*
* Whenever possible, use {safeIncreaseAllowance} and
* {safeDecreaseAllowance} instead.
*/
function safeApprove(IERC20 token, address spender, uint256 value) internal {
// safeApprove should only be called when setting an initial allowance,
// or when resetting it to zero. To increase and decrease it, use
// 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
// solhint-disable-next-line max-line-length
require((value == 0) || (token.allowance(address(this), spender) == 0),
"SafeERC20: approve from non-zero to non-zero allowance"
);
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
}
function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {
uint256 newAllowance = token.allowance(address(this), spender) + value;
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
}
function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal {
unchecked {
uint256 oldAllowance = token.allowance(address(this), spender);
require(oldAllowance >= value, "SafeERC20: decreased allowance below zero");
uint256 newAllowance = oldAllowance - value;
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
}
}
/**
* @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
* on the return value: the return value is optional (but if data is returned, it must not be false).
* @param token The token targeted by the call.
* @param data The call data (encoded using abi.encode or one of its variants).
*/
function _callOptionalReturn(IERC20 token, bytes memory data) private {
// We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
// we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that
// the target address contains contract code and also asserts for success in the low-level call.
bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
if (returndata.length > 0) { // Return data is optional
// solhint-disable-next-line max-line-length
require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
}
}
}
// 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. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* 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;
}
}
}
/*
* @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) {
this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
return msg.data;
}
}
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* By default, the owner account will be the one that deploys the contract. This
* can later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor () {
address msgSender = _msgSender();
_owner = msgSender;
emit OwnershipTransferred(address(0), msgSender);
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
_;
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
emit OwnershipTransferred(_owner, address(0));
_owner = address(0);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
emit OwnershipTransferred(_owner, newOwner);
_owner = newOwner;
}
}
/**
* @dev A token staking contract that will allow a beneficiary to get a reward in tokens
*
*/
contract StakingContract is Ownable {
using SafeERC20 for IERC20;
using Address for address;
using SafeMath for uint;
// ERC20 basic token contract being held
IERC20 immutable private _token;
// Staking variables, amount and days needed
uint public rewardInterest = 14; // Percentage 14%
uint public rewardPeriod = 31536000; // Number of seconds needed to get the whole percentage = 1 Year
uint public MIN_ALLOWED_AMOUNT = 10000; // Minumum number of tokens to stake
bool public closed; // is the staking closed?
address[] public StakeHoldersList; // List of all stakeholders
// Struct for tracking stakeholders
struct stakeHolder {
uint joinDate;
uint stake;
}
// Stakeholders
mapping (address => stakeHolder) public StakeHolders;
// Amount of actually staked tokens
uint public stakedTokens;
// Total amount of tokens rewarded
uint public rewardedTokens;
/*** MODIFIERS *******************************************************************************/
/**
@dev Checks if the msg.sender is staking tokens
*/
modifier isStakeHolder() {
require(StakeHolders[msg.sender].stake != 0);
_;
}
/*** EVENTS **********************************************************************************/
event Staked(address _address, uint _amount);
event Withdrawed(address _address, uint _amount);
event StakingisClosed(bool _closed);
event CleanedUp(address _recipient, uint _amount);
/*** CONSTRUCTOR *****************************************************************************/
constructor(address _tokenAddress) {
_token = IERC20(_tokenAddress);
stakedTokens = 0;
rewardedTokens = 0;
closed = false;
}
/*** METHODS *********************************************************************************/
/**
Stake tokens
@notice conditions are:
@notice - staking must be open
@notice - must be stakeholder
@notice - must stake at least MIN_ALLOWED_AMOUNT tokens
@notice - can't stake more than he owns
@notice - transfer must be successful
*/
function stake(uint _amount) external {
// if closed cannot accept new stakes
require( ! closed, "Sorry, staking is closed");
// One address can stake only once
require(StakeHolders[msg.sender].stake == 0, "Already Staking");
// Do we have anought tokens ?
require(_amount >= MIN_ALLOWED_AMOUNT);
require(_token.balanceOf(msg.sender) >= _amount);
// Get user tokens (must be allowed first)
require(_token.transferFrom(msg.sender,address(this),_amount));
// Update internal counters
StakeHolders[msg.sender].stake = _amount;
StakeHoldersList.push(msg.sender);
// solhint-disable-next-line not-rely-on-time
StakeHolders[msg.sender].joinDate = block.timestamp;
stakedTokens = stakedTokens.add(_amount);
emit Staked(msg.sender, _amount);
}
/**
Withdraw stake
gets back the staked tokens and the matured interests if any
If staking is closed will not get interests
@notice Only stakeholders can call this
*/
function withdraw() isStakeHolder external {
// How much to send back?
// A closed staking allow only to get stake back
// A non-closed staking state adds matured interest
uint _toSend = StakeHolders[msg.sender].stake;
uint _interest = 0;
if (closed == false) {
_interest = getInterest();
_toSend = _toSend.add(_interest);
}
// Do we have anoughgt tokens in the contract?
require(_token.balanceOf(address(this)) >= _toSend, "Not enough tokens on the contract");
// Update internal counters
stakedTokens = stakedTokens.sub(StakeHolders[msg.sender].stake);
rewardedTokens = rewardedTokens.add(_interest);
// Give tokens to the staker
returnTokens(msg.sender,_toSend);
}
/**
Forcefully return funds to a stakeholder
*/
function returnTokens(address _hodler, uint _toSend) internal {
// Give tokens to the staker
require(_token.transfer(_hodler,_toSend));
// Update internal counters
StakeHolders[_hodler].stake = 0;
StakeHolders[_hodler].joinDate = 0;
emit Withdrawed(_hodler, _toSend);
}
/**
@dev Internal function to compute the interests matured
*/
function getInterest() isStakeHolder public view returns (uint) {
uint _stake = StakeHolders[msg.sender].stake;
uint _time = StakeHolders[msg.sender].joinDate;
uint _now = block.timestamp;
uint _diff = _now.sub(_time);
uint numerator = _stake.mul(_diff).mul(rewardInterest);
uint denominator = rewardPeriod.mul(100);
uint _interest = numerator.div(denominator);
return _interest;
}
/**
Sets the staking as closed. In a closed state:
- won't accept new stakes
- those who staked can only get back theyr stake without interest
@notice Only owner can set the staking closed/open
*/
function openStaking() public onlyOwner {
closed = false;
emit StakingisClosed (false);
}
function closeStaking() public onlyOwner {
// Set the staking as open/closed
closed = true;
uint hodlers = StakeHoldersList.length;
for (uint i=0; i<hodlers; i++) {
if (StakeHolders[StakeHoldersList[i]].stake > 0) {
stakedTokens = stakedTokens.sub(StakeHolders[StakeHoldersList[i]].stake);
returnTokens(StakeHoldersList[i], StakeHolders[StakeHoldersList[i]].stake);
}
}
// Get back remaining tokens
cleanUpRemainings();
emit StakingisClosed (true);
}
/**
Once the staking is closed and all stakeholders withdrawed their
stakes, allow owner to get back all remaining tokens handled by
the staking contract
@notice staking must be closed
@notice stakedTokens must be zero
*/
function cleanUpRemainings() internal onlyOwner {
// Staking must be closed first
require (closed, "Contract is not closed");
// Owner can cleanup only last
require (stakedTokens == 0, "Someone still has his token in stake");
// Send all remaining tokens to owner = msg.sender
uint remainings = _token.balanceOf(address(this));
require(_token.transfer(msg.sender,remainings));
emit CleanedUp(msg.sender, remainings);
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"CleanedUp","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":"_address","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"Staked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"_closed","type":"bool"}],"name":"StakingisClosed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"Withdrawed","type":"event"},{"inputs":[],"name":"MIN_ALLOWED_AMOUNT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"StakeHolders","outputs":[{"internalType":"uint256","name":"joinDate","type":"uint256"},{"internalType":"uint256","name":"stake","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"StakeHoldersList","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"closeStaking","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"closed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getInterest","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openStaking","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardInterest","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardedTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakedTokens","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":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
60a0604052600e6001556301e133806002556127106003553480156200002457600080fd5b50604051620020b6380380620020b683398181016040528101906200004a919062000182565b60006200005c6200016360201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b81525050600060078190555060006008819055506000600460006101000a81548160ff02191690831515021790555050620001fc565b600033905090565b6000815190506200017c81620001e2565b92915050565b6000602082840312156200019557600080fd5b6000620001a5848285016200016b565b91505092915050565b6000620001bb82620001c2565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b620001ed81620001ae565b8114620001f957600080fd5b50565b60805160601c611e786200023e6000396000818161038d01528181610bf001528181610ca40152818161121f015281816114bc01526115670152611e786000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c8063aaffe07611610097578063e5a4bed311610066578063e5a4bed314610240578063e88dc5b71461025e578063f2fde38b1461027c578063fe7314a81461029857610100565b8063aaffe076146101b5578063cb629009146101d3578063d5432cd4146101f1578063df1c84951461022257610100565b8063715018a6116100d3578063715018a6146101675780638da5cb5b1461017157806398cfe5871461018f578063a694fc3a1461019957610100565b80633ccfd60b14610105578063597e1fb51461010f5780635b90ac081461012d578063625817331461015d575b600080fd5b61010d6102b6565b005b6101176104fb565b6040516101249190611918565b60405180910390f35b61014760048036038101906101429190611729565b61050e565b604051610154919061189d565b60405180910390f35b61016561054d565b005b61016f61061e565b005b610179610758565b604051610186919061189d565b60405180910390f35b610197610781565b005b6101b360048036038101906101ae9190611729565b610b09565b005b6101bd610ea2565b6040516101ca9190611a13565b60405180910390f35b6101db610ea8565b6040516101e89190611a13565b60405180910390f35b61020b600480360381019061020691906116d7565b610eae565b604051610219929190611a2e565b60405180910390f35b61022a610ed2565b6040516102379190611a13565b60405180910390f35b610248610ed8565b6040516102559190611a13565b60405180910390f35b61026661103c565b6040516102739190611a13565b60405180910390f35b610296600480360381019061029191906116d7565b611042565b005b6102a06111eb565b6040516102ad9190611a13565b60405180910390f35b6000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154141561030657600080fd5b6000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015490506000801515600460009054906101000a900460ff161515141561038a57610372610ed8565b905061038781836111f190919063ffffffff16565b91505b817f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016103e4919061189d565b60206040518083038186803b1580156103fc57600080fd5b505afa158015610410573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104349190611752565b1015610475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161046c906119f3565b60405180910390fd5b6104cc600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015460075461120790919063ffffffff16565b6007819055506104e7816008546111f190919063ffffffff16565b6008819055506104f7338361121d565b5050565b600460009054906101000a900460ff1681565b6005818154811061051e57600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6105556113a0565b73ffffffffffffffffffffffffffffffffffffffff16610573610758565b73ffffffffffffffffffffffffffffffffffffffff16146105c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105c0906119b3565b60405180910390fd5b6000600460006101000a81548160ff0219169083151502179055507fd4765c82056a15f9038e395c948439d3752d217143cac0d10fe5a63c0958a14560006040516106149190611918565b60405180910390a1565b6106266113a0565b73ffffffffffffffffffffffffffffffffffffffff16610644610758565b73ffffffffffffffffffffffffffffffffffffffff161461069a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610691906119b3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6107896113a0565b73ffffffffffffffffffffffffffffffffffffffff166107a7610758565b73ffffffffffffffffffffffffffffffffffffffff16146107fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107f4906119b3565b60405180910390fd5b6001600460006101000a81548160ff0219169083151502179055506000600580549050905060005b81811015610ac5576000600660006005848154811061086d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101541115610ab257610997600660006005848154811061091d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015460075461120790919063ffffffff16565b600781905550610ab1600582815481106109da577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166006600060058581548110610a43577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015461121d565b5b8080610abd90611bc5565b915050610825565b50610ace6113a8565b7fd4765c82056a15f9038e395c948439d3752d217143cac0d10fe5a63c0958a1456001604051610afe9190611918565b60405180910390a150565b600460009054906101000a900460ff1615610b59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5090611973565b60405180910390fd5b6000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015414610bde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd590611993565b60405180910390fd5b600354811015610bed57600080fd5b807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401610c47919061189d565b60206040518083038186803b158015610c5f57600080fd5b505afa158015610c73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c979190611752565b1015610ca257600080fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b8152600401610cff939291906118b8565b602060405180830381600087803b158015610d1957600080fd5b505af1158015610d2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d519190611700565b610d5a57600080fd5b80600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055506005339080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555042600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000181905550610e60816007546111f190919063ffffffff16565b6007819055507f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d3382604051610e979291906118ef565b60405180910390a150565b60085481565b60075481565b60066020528060005260406000206000915090508060000154908060010154905082565b60015481565b600080600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101541415610f2957600080fd5b6000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015490506000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154905060004290506000610fd1838361120790919063ffffffff16565b90506000610ffc600154610fee848861165790919063ffffffff16565b61165790919063ffffffff16565b90506000611016606460025461165790919063ffffffff16565b9050600061102d828461166d90919063ffffffff16565b90508097505050505050505090565b60025481565b61104a6113a0565b73ffffffffffffffffffffffffffffffffffffffff16611068610758565b73ffffffffffffffffffffffffffffffffffffffff16146110be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b5906119b3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561112e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112590611953565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60035481565b600081836111ff9190611a68565b905092915050565b600081836112159190611b49565b905092915050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b81526004016112789291906118ef565b602060405180830381600087803b15801561129257600080fd5b505af11580156112a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ca9190611700565b6112d357600080fd5b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055507f6cca423c6ffc06e62a0acc433965e074b11c28479b0449250ce3ff65ac9e39fe82826040516113949291906118ef565b60405180910390a15050565b600033905090565b6113b06113a0565b73ffffffffffffffffffffffffffffffffffffffff166113ce610758565b73ffffffffffffffffffffffffffffffffffffffff1614611424576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141b906119b3565b60405180910390fd5b600460009054906101000a900460ff16611473576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146a906119d3565b60405180910390fd5b6000600754146114b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114af90611933565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611513919061189d565b60206040518083038186803b15801561152b57600080fd5b505afa15801561153f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115639190611752565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b81526004016115c09291906118ef565b602060405180830381600087803b1580156115da57600080fd5b505af11580156115ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116129190611700565b61161b57600080fd5b7f7b904801917bac05ccd7906734218f181b1e5718efdbf3501d9ce9c193c3cdad338260405161164c9291906118ef565b60405180910390a150565b600081836116659190611aef565b905092915050565b6000818361167b9190611abe565b905092915050565b60008135905061169281611dfd565b92915050565b6000815190506116a781611e14565b92915050565b6000813590506116bc81611e2b565b92915050565b6000815190506116d181611e2b565b92915050565b6000602082840312156116e957600080fd5b60006116f784828501611683565b91505092915050565b60006020828403121561171257600080fd5b600061172084828501611698565b91505092915050565b60006020828403121561173b57600080fd5b6000611749848285016116ad565b91505092915050565b60006020828403121561176457600080fd5b6000611772848285016116c2565b91505092915050565b61178481611b7d565b82525050565b61179381611b8f565b82525050565b60006117a6602483611a57565b91506117b182611c6c565b604082019050919050565b60006117c9602683611a57565b91506117d482611cbb565b604082019050919050565b60006117ec601883611a57565b91506117f782611d0a565b602082019050919050565b600061180f600f83611a57565b915061181a82611d33565b602082019050919050565b6000611832602083611a57565b915061183d82611d5c565b602082019050919050565b6000611855601683611a57565b915061186082611d85565b602082019050919050565b6000611878602183611a57565b915061188382611dae565b604082019050919050565b61189781611bbb565b82525050565b60006020820190506118b2600083018461177b565b92915050565b60006060820190506118cd600083018661177b565b6118da602083018561177b565b6118e7604083018461188e565b949350505050565b6000604082019050611904600083018561177b565b611911602083018461188e565b9392505050565b600060208201905061192d600083018461178a565b92915050565b6000602082019050818103600083015261194c81611799565b9050919050565b6000602082019050818103600083015261196c816117bc565b9050919050565b6000602082019050818103600083015261198c816117df565b9050919050565b600060208201905081810360008301526119ac81611802565b9050919050565b600060208201905081810360008301526119cc81611825565b9050919050565b600060208201905081810360008301526119ec81611848565b9050919050565b60006020820190508181036000830152611a0c8161186b565b9050919050565b6000602082019050611a28600083018461188e565b92915050565b6000604082019050611a43600083018561188e565b611a50602083018461188e565b9392505050565b600082825260208201905092915050565b6000611a7382611bbb565b9150611a7e83611bbb565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115611ab357611ab2611c0e565b5b828201905092915050565b6000611ac982611bbb565b9150611ad483611bbb565b925082611ae457611ae3611c3d565b5b828204905092915050565b6000611afa82611bbb565b9150611b0583611bbb565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611b3e57611b3d611c0e565b5b828202905092915050565b6000611b5482611bbb565b9150611b5f83611bbb565b925082821015611b7257611b71611c0e565b5b828203905092915050565b6000611b8882611b9b565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000611bd082611bbb565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611c0357611c02611c0e565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f536f6d656f6e65207374696c6c206861732068697320746f6b656e20696e207360008201527f74616b6500000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f536f7272792c207374616b696e6720697320636c6f7365640000000000000000600082015250565b7f416c7265616479205374616b696e670000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f436f6e7472616374206973206e6f7420636c6f73656400000000000000000000600082015250565b7f4e6f7420656e6f75676820746f6b656e73206f6e2074686520636f6e7472616360008201527f7400000000000000000000000000000000000000000000000000000000000000602082015250565b611e0681611b7d565b8114611e1157600080fd5b50565b611e1d81611b8f565b8114611e2857600080fd5b50565b611e3481611bbb565b8114611e3f57600080fd5b5056fea2646970667358221220028a23631f45c33db02c649eea652826784eb568a44c028e9836c5ff331279d664736f6c634300080400330000000000000000000000009adc7710e9d1b29d8a78c04d52d32532297c2ef3
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101005760003560e01c8063aaffe07611610097578063e5a4bed311610066578063e5a4bed314610240578063e88dc5b71461025e578063f2fde38b1461027c578063fe7314a81461029857610100565b8063aaffe076146101b5578063cb629009146101d3578063d5432cd4146101f1578063df1c84951461022257610100565b8063715018a6116100d3578063715018a6146101675780638da5cb5b1461017157806398cfe5871461018f578063a694fc3a1461019957610100565b80633ccfd60b14610105578063597e1fb51461010f5780635b90ac081461012d578063625817331461015d575b600080fd5b61010d6102b6565b005b6101176104fb565b6040516101249190611918565b60405180910390f35b61014760048036038101906101429190611729565b61050e565b604051610154919061189d565b60405180910390f35b61016561054d565b005b61016f61061e565b005b610179610758565b604051610186919061189d565b60405180910390f35b610197610781565b005b6101b360048036038101906101ae9190611729565b610b09565b005b6101bd610ea2565b6040516101ca9190611a13565b60405180910390f35b6101db610ea8565b6040516101e89190611a13565b60405180910390f35b61020b600480360381019061020691906116d7565b610eae565b604051610219929190611a2e565b60405180910390f35b61022a610ed2565b6040516102379190611a13565b60405180910390f35b610248610ed8565b6040516102559190611a13565b60405180910390f35b61026661103c565b6040516102739190611a13565b60405180910390f35b610296600480360381019061029191906116d7565b611042565b005b6102a06111eb565b6040516102ad9190611a13565b60405180910390f35b6000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154141561030657600080fd5b6000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015490506000801515600460009054906101000a900460ff161515141561038a57610372610ed8565b905061038781836111f190919063ffffffff16565b91505b817f0000000000000000000000009adc7710e9d1b29d8a78c04d52d32532297c2ef373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016103e4919061189d565b60206040518083038186803b1580156103fc57600080fd5b505afa158015610410573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104349190611752565b1015610475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161046c906119f3565b60405180910390fd5b6104cc600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015460075461120790919063ffffffff16565b6007819055506104e7816008546111f190919063ffffffff16565b6008819055506104f7338361121d565b5050565b600460009054906101000a900460ff1681565b6005818154811061051e57600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6105556113a0565b73ffffffffffffffffffffffffffffffffffffffff16610573610758565b73ffffffffffffffffffffffffffffffffffffffff16146105c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105c0906119b3565b60405180910390fd5b6000600460006101000a81548160ff0219169083151502179055507fd4765c82056a15f9038e395c948439d3752d217143cac0d10fe5a63c0958a14560006040516106149190611918565b60405180910390a1565b6106266113a0565b73ffffffffffffffffffffffffffffffffffffffff16610644610758565b73ffffffffffffffffffffffffffffffffffffffff161461069a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610691906119b3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6107896113a0565b73ffffffffffffffffffffffffffffffffffffffff166107a7610758565b73ffffffffffffffffffffffffffffffffffffffff16146107fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107f4906119b3565b60405180910390fd5b6001600460006101000a81548160ff0219169083151502179055506000600580549050905060005b81811015610ac5576000600660006005848154811061086d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101541115610ab257610997600660006005848154811061091d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015460075461120790919063ffffffff16565b600781905550610ab1600582815481106109da577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166006600060058581548110610a43577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015461121d565b5b8080610abd90611bc5565b915050610825565b50610ace6113a8565b7fd4765c82056a15f9038e395c948439d3752d217143cac0d10fe5a63c0958a1456001604051610afe9190611918565b60405180910390a150565b600460009054906101000a900460ff1615610b59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5090611973565b60405180910390fd5b6000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015414610bde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd590611993565b60405180910390fd5b600354811015610bed57600080fd5b807f0000000000000000000000009adc7710e9d1b29d8a78c04d52d32532297c2ef373ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401610c47919061189d565b60206040518083038186803b158015610c5f57600080fd5b505afa158015610c73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c979190611752565b1015610ca257600080fd5b7f0000000000000000000000009adc7710e9d1b29d8a78c04d52d32532297c2ef373ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b8152600401610cff939291906118b8565b602060405180830381600087803b158015610d1957600080fd5b505af1158015610d2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d519190611700565b610d5a57600080fd5b80600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055506005339080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555042600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000181905550610e60816007546111f190919063ffffffff16565b6007819055507f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d3382604051610e979291906118ef565b60405180910390a150565b60085481565b60075481565b60066020528060005260406000206000915090508060000154908060010154905082565b60015481565b600080600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101541415610f2957600080fd5b6000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015490506000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154905060004290506000610fd1838361120790919063ffffffff16565b90506000610ffc600154610fee848861165790919063ffffffff16565b61165790919063ffffffff16565b90506000611016606460025461165790919063ffffffff16565b9050600061102d828461166d90919063ffffffff16565b90508097505050505050505090565b60025481565b61104a6113a0565b73ffffffffffffffffffffffffffffffffffffffff16611068610758565b73ffffffffffffffffffffffffffffffffffffffff16146110be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b5906119b3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561112e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112590611953565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60035481565b600081836111ff9190611a68565b905092915050565b600081836112159190611b49565b905092915050565b7f0000000000000000000000009adc7710e9d1b29d8a78c04d52d32532297c2ef373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b81526004016112789291906118ef565b602060405180830381600087803b15801561129257600080fd5b505af11580156112a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ca9190611700565b6112d357600080fd5b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055507f6cca423c6ffc06e62a0acc433965e074b11c28479b0449250ce3ff65ac9e39fe82826040516113949291906118ef565b60405180910390a15050565b600033905090565b6113b06113a0565b73ffffffffffffffffffffffffffffffffffffffff166113ce610758565b73ffffffffffffffffffffffffffffffffffffffff1614611424576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141b906119b3565b60405180910390fd5b600460009054906101000a900460ff16611473576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146a906119d3565b60405180910390fd5b6000600754146114b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114af90611933565b60405180910390fd5b60007f0000000000000000000000009adc7710e9d1b29d8a78c04d52d32532297c2ef373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611513919061189d565b60206040518083038186803b15801561152b57600080fd5b505afa15801561153f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115639190611752565b90507f0000000000000000000000009adc7710e9d1b29d8a78c04d52d32532297c2ef373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b81526004016115c09291906118ef565b602060405180830381600087803b1580156115da57600080fd5b505af11580156115ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116129190611700565b61161b57600080fd5b7f7b904801917bac05ccd7906734218f181b1e5718efdbf3501d9ce9c193c3cdad338260405161164c9291906118ef565b60405180910390a150565b600081836116659190611aef565b905092915050565b6000818361167b9190611abe565b905092915050565b60008135905061169281611dfd565b92915050565b6000815190506116a781611e14565b92915050565b6000813590506116bc81611e2b565b92915050565b6000815190506116d181611e2b565b92915050565b6000602082840312156116e957600080fd5b60006116f784828501611683565b91505092915050565b60006020828403121561171257600080fd5b600061172084828501611698565b91505092915050565b60006020828403121561173b57600080fd5b6000611749848285016116ad565b91505092915050565b60006020828403121561176457600080fd5b6000611772848285016116c2565b91505092915050565b61178481611b7d565b82525050565b61179381611b8f565b82525050565b60006117a6602483611a57565b91506117b182611c6c565b604082019050919050565b60006117c9602683611a57565b91506117d482611cbb565b604082019050919050565b60006117ec601883611a57565b91506117f782611d0a565b602082019050919050565b600061180f600f83611a57565b915061181a82611d33565b602082019050919050565b6000611832602083611a57565b915061183d82611d5c565b602082019050919050565b6000611855601683611a57565b915061186082611d85565b602082019050919050565b6000611878602183611a57565b915061188382611dae565b604082019050919050565b61189781611bbb565b82525050565b60006020820190506118b2600083018461177b565b92915050565b60006060820190506118cd600083018661177b565b6118da602083018561177b565b6118e7604083018461188e565b949350505050565b6000604082019050611904600083018561177b565b611911602083018461188e565b9392505050565b600060208201905061192d600083018461178a565b92915050565b6000602082019050818103600083015261194c81611799565b9050919050565b6000602082019050818103600083015261196c816117bc565b9050919050565b6000602082019050818103600083015261198c816117df565b9050919050565b600060208201905081810360008301526119ac81611802565b9050919050565b600060208201905081810360008301526119cc81611825565b9050919050565b600060208201905081810360008301526119ec81611848565b9050919050565b60006020820190508181036000830152611a0c8161186b565b9050919050565b6000602082019050611a28600083018461188e565b92915050565b6000604082019050611a43600083018561188e565b611a50602083018461188e565b9392505050565b600082825260208201905092915050565b6000611a7382611bbb565b9150611a7e83611bbb565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115611ab357611ab2611c0e565b5b828201905092915050565b6000611ac982611bbb565b9150611ad483611bbb565b925082611ae457611ae3611c3d565b5b828204905092915050565b6000611afa82611bbb565b9150611b0583611bbb565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611b3e57611b3d611c0e565b5b828202905092915050565b6000611b5482611bbb565b9150611b5f83611bbb565b925082821015611b7257611b71611c0e565b5b828203905092915050565b6000611b8882611b9b565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000611bd082611bbb565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611c0357611c02611c0e565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f536f6d656f6e65207374696c6c206861732068697320746f6b656e20696e207360008201527f74616b6500000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f536f7272792c207374616b696e6720697320636c6f7365640000000000000000600082015250565b7f416c7265616479205374616b696e670000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f436f6e7472616374206973206e6f7420636c6f73656400000000000000000000600082015250565b7f4e6f7420656e6f75676820746f6b656e73206f6e2074686520636f6e7472616360008201527f7400000000000000000000000000000000000000000000000000000000000000602082015250565b611e0681611b7d565b8114611e1157600080fd5b50565b611e1d81611b8f565b8114611e2857600080fd5b50565b611e3481611bbb565b8114611e3f57600080fd5b5056fea2646970667358221220028a23631f45c33db02c649eea652826784eb568a44c028e9836c5ff331279d664736f6c63430008040033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000009adc7710e9d1b29d8a78c04d52d32532297c2ef3
-----Decoded View---------------
Arg [0] : _tokenAddress (address): 0x9Adc7710E9d1b29d8a78c04d52D32532297C2Ef3
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000009adc7710e9d1b29d8a78c04d52d32532297c2ef3
Deployed Bytecode Sourcemap
24688:7176:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28261:839;;;:::i;:::-;;25250:18;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25330:33;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30347:113;;;:::i;:::-;;24028:148;;;:::i;:::-;;23377:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30468:591;;;:::i;:::-;;27131:896;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25740:26;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25669:24;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25563:52;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;24972:31;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29607:470;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25043:35;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24331:244;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25161:38;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28261:839;26040:1;26006:12;:24;26019:10;26006:24;;;;;;;;;;;;;;;:30;;;:35;;25998:44;;;;;;28469:12:::1;28485;:24;28498:10;28485:24;;;;;;;;;;;;;;;:30;;;28469:46;;28526:14;28569:5:::0;28559:15:::1;;:6;;;;;;;;;;;:15;;;28555:122;;;28603:13;:11;:13::i;:::-;28591:25;;28643:22;28655:9;28643:7;:11;;:22;;;;:::i;:::-;28631:34;;28555:122;28788:7;28753:6;:16;;;28778:4;28753:31;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:42;;28745:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;28898:48;28915:12;:24;28928:10;28915:24;;;;;;;;;;;;;;;:30;;;28898:12;;:16;;:48;;;;:::i;:::-;28883:12;:63;;;;28974:29;28993:9;28974:14;;:18;;:29;;;;:::i;:::-;28957:14;:46;;;;29054:32;29067:10;29078:7;29054:12;:32::i;:::-;26053:1;;28261:839::o:0;25250:18::-;;;;;;;;;;;;;:::o;25330:33::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;30347:113::-;23608:12;:10;:12::i;:::-;23597:23;;:7;:5;:7::i;:::-;:23;;;23589:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30408:5:::1;30399:6;;:14;;;;;;;;;;;;;;;;;;30429:23;30446:5;30429:23;;;;;;:::i;:::-;;;;;;;;30347:113::o:0;24028:148::-;23608:12;:10;:12::i;:::-;23597:23;;:7;:5;:7::i;:::-;:23;;;23589:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24135:1:::1;24098:40;;24119:6;::::0;::::1;;;;;;;;24098:40;;;;;;;;;;;;24166:1;24149:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;24028:148::o:0;23377:87::-;23423:7;23450:6;;;;;;;;;;;23443:13;;23377:87;:::o;30468:591::-;23608:12;:10;:12::i;:::-;23597:23;;:7;:5;:7::i;:::-;:23;;;23589:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30572:4:::1;30563:6;;:13;;;;;;;;;;;;;;;;;;30589:12;30604:16;:23;;;;30589:38;;30643:6;30638:306;30655:7;30653:1;:9;30638:306;;;30730:1;30688:12;:33;30701:16;30718:1;30701:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30688:33;;;;;;;;;;;;;;;:39;;;:43;30684:249;;;30767:57;30784:12;:33;30797:16;30814:1;30797:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30784:33;;;;;;;;;;;;;;;:39;;;30767:12;;:16;;:57;;;;:::i;:::-;30752:12;:72;;;;30843:74;30856:16;30873:1;30856:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30877:12;:33;30890:16;30907:1;30890:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30877:33;;;;;;;;;;;;;;;:39;;;30843:12;:74::i;:::-;30684:249;30664:3;;;;;:::i;:::-;;;;30638:306;;;;30994:19;:17;:19::i;:::-;31029:22;31046:4;31029:22;;;;;;:::i;:::-;;;;;;;;23668:1;30468:591::o:0;27131:896::-;27240:6;;;;;;;;;;;27238:8;27229:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;27372:1;27338:12;:24;27351:10;27338:24;;;;;;;;;;;;;;;:30;;;:35;27330:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;27463:18;;27452:7;:29;;27444:38;;;;;;27533:7;27501:6;:16;;;27518:10;27501:28;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:39;;27493:48;;;;;;27614:6;:19;;;27634:10;27653:4;27659:7;27614:53;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27606:62;;;;;;27751:7;27718:12;:24;27731:10;27718:24;;;;;;;;;;;;;;;:30;;:40;;;;27769:16;27791:10;27769:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27904:15;27868:12;:24;27881:10;27868:24;;;;;;;;;;;;;;;:33;;:51;;;;27945:25;27962:7;27945:12;;:16;;:25;;;;:::i;:::-;27930:12;:40;;;;27986:27;27993:10;28005:7;27986:27;;;;;;;:::i;:::-;;;;;;;;27131:896;:::o;25740:26::-;;;;:::o;25669:24::-;;;;:::o;25563:52::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;24972:31::-;;;;:::o;29607:470::-;29665:4;26040:1;26006:12;:24;26019:10;26006:24;;;;;;;;;;;;;;;:30;;;:35;;25998:44;;;;;;29682:11:::1;29696:12;:24;29709:10;29696:24;;;;;;;;;;;;;;;:30;;;29682:44;;29737:10;29750:12;:24;29763:10;29750:24;;;;;;;;;;;;;;;:33;;;29737:46;;29794:9;29806:15;29794:27;;29832:10;29845:15;29854:5;29845:4;:8;;:15;;;;:::i;:::-;29832:28;;29873:14;29890:37;29912:14;;29890:17;29901:5;29890:6;:10;;:17;;;;:::i;:::-;:21;;:37;;;;:::i;:::-;29873:54;;29938:16;29957:21;29974:3;29957:12;;:16;;:21;;;;:::i;:::-;29938:40;;29999:14;30016:26;30030:11;30016:9;:13;;:26;;;;:::i;:::-;29999:43;;30060:9;30053:16;;;;;;;;;29607:470:::0;:::o;25043:35::-;;;;:::o;24331:244::-;23608:12;:10;:12::i;:::-;23597:23;;:7;:5;:7::i;:::-;:23;;;23589:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24440:1:::1;24420:22;;:8;:22;;;;24412:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24530:8;24501:38;;24522:6;::::0;::::1;;;;;;;;24501:38;;;;;;;;;;;;24559:8;24550:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;24331:244:::0;:::o;25161:38::-;;;;:::o;17176:98::-;17234:7;17265:1;17261;:5;;;;:::i;:::-;17254:12;;17176:98;;;;:::o;17557:::-;17615:7;17646:1;17642;:5;;;;:::i;:::-;17635:12;;17557:98;;;;:::o;29182:331::-;29301:6;:15;;;29317:7;29325;29301:32;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29293:41;;;;;;29412:1;29382:12;:21;29395:7;29382:21;;;;;;;;;;;;;;;:27;;:31;;;;29457:1;29424:12;:21;29437:7;29424:21;;;;;;;;;;;;;;;:30;;:34;;;;29474:28;29485:7;29494;29474:28;;;;;;;:::i;:::-;;;;;;;;29182:331;;:::o;22021:98::-;22074:7;22101:10;22094:17;;22021:98;:::o;31362:499::-;23608:12;:10;:12::i;:::-;23597:23;;:7;:5;:7::i;:::-;:23;;;23589:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31471:6:::1;;;;;;;;;;;31462:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;31580:1;31564:12;;:17;31555:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31695:15;31713:6;:16;;;31738:4;31713:31;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31695:49;;31763:6;:15;;;31779:10;31790;31763:38;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31755:47;;;::::0;::::1;;31820:33;31830:10;31842;31820:33;;;;;;;:::i;:::-;;;;;;;;23668:1;31362:499::o:0;17914:98::-;17972:7;18003:1;17999;:5;;;;:::i;:::-;17992:12;;17914:98;;;;:::o;18313:::-;18371:7;18402:1;18398;:5;;;;:::i;:::-;18391:12;;18313:98;;;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:137::-;206:5;237:6;231:13;222:22;;253:30;277:5;253:30;:::i;:::-;212:77;;;;:::o;295:139::-;341:5;379:6;366:20;357:29;;395:33;422:5;395:33;:::i;:::-;347:87;;;;:::o;440:143::-;497:5;528:6;522:13;513:22;;544:33;571:5;544:33;:::i;:::-;503:80;;;;:::o;589:262::-;648:6;697:2;685:9;676:7;672:23;668:32;665:2;;;713:1;710;703:12;665:2;756:1;781:53;826:7;817:6;806:9;802:22;781:53;:::i;:::-;771:63;;727:117;655:196;;;;:::o;857:278::-;924:6;973:2;961:9;952:7;948:23;944:32;941:2;;;989:1;986;979:12;941:2;1032:1;1057:61;1110:7;1101:6;1090:9;1086:22;1057:61;:::i;:::-;1047:71;;1003:125;931:204;;;;:::o;1141:262::-;1200:6;1249:2;1237:9;1228:7;1224:23;1220:32;1217:2;;;1265:1;1262;1255:12;1217:2;1308:1;1333:53;1378:7;1369:6;1358:9;1354:22;1333:53;:::i;:::-;1323:63;;1279:117;1207:196;;;;:::o;1409:284::-;1479:6;1528:2;1516:9;1507:7;1503:23;1499:32;1496:2;;;1544:1;1541;1534:12;1496:2;1587:1;1612:64;1668:7;1659:6;1648:9;1644:22;1612:64;:::i;:::-;1602:74;;1558:128;1486:207;;;;:::o;1699:118::-;1786:24;1804:5;1786:24;:::i;:::-;1781:3;1774:37;1764:53;;:::o;1823:109::-;1904:21;1919:5;1904:21;:::i;:::-;1899:3;1892:34;1882:50;;:::o;1938:366::-;2080:3;2101:67;2165:2;2160:3;2101:67;:::i;:::-;2094:74;;2177:93;2266:3;2177:93;:::i;:::-;2295:2;2290:3;2286:12;2279:19;;2084:220;;;:::o;2310:366::-;2452:3;2473:67;2537:2;2532:3;2473:67;:::i;:::-;2466:74;;2549:93;2638:3;2549:93;:::i;:::-;2667:2;2662:3;2658:12;2651:19;;2456:220;;;:::o;2682:366::-;2824:3;2845:67;2909:2;2904:3;2845:67;:::i;:::-;2838:74;;2921:93;3010:3;2921:93;:::i;:::-;3039:2;3034:3;3030:12;3023:19;;2828:220;;;:::o;3054:366::-;3196:3;3217:67;3281:2;3276:3;3217:67;:::i;:::-;3210:74;;3293:93;3382:3;3293:93;:::i;:::-;3411:2;3406:3;3402:12;3395:19;;3200:220;;;:::o;3426:366::-;3568:3;3589:67;3653:2;3648:3;3589:67;:::i;:::-;3582:74;;3665:93;3754:3;3665:93;:::i;:::-;3783:2;3778:3;3774:12;3767:19;;3572:220;;;:::o;3798:366::-;3940:3;3961:67;4025:2;4020:3;3961:67;:::i;:::-;3954:74;;4037:93;4126:3;4037:93;:::i;:::-;4155:2;4150:3;4146:12;4139:19;;3944:220;;;:::o;4170:366::-;4312:3;4333:67;4397:2;4392:3;4333:67;:::i;:::-;4326:74;;4409:93;4498:3;4409:93;:::i;:::-;4527:2;4522:3;4518:12;4511:19;;4316:220;;;:::o;4542:118::-;4629:24;4647:5;4629:24;:::i;:::-;4624:3;4617:37;4607:53;;:::o;4666:222::-;4759:4;4797:2;4786:9;4782:18;4774:26;;4810:71;4878:1;4867:9;4863:17;4854:6;4810:71;:::i;:::-;4764:124;;;;:::o;4894:442::-;5043:4;5081:2;5070:9;5066:18;5058:26;;5094:71;5162:1;5151:9;5147:17;5138:6;5094:71;:::i;:::-;5175:72;5243:2;5232:9;5228:18;5219:6;5175:72;:::i;:::-;5257;5325:2;5314:9;5310:18;5301:6;5257:72;:::i;:::-;5048:288;;;;;;:::o;5342:332::-;5463:4;5501:2;5490:9;5486:18;5478:26;;5514:71;5582:1;5571:9;5567:17;5558:6;5514:71;:::i;:::-;5595:72;5663:2;5652:9;5648:18;5639:6;5595:72;:::i;:::-;5468:206;;;;;:::o;5680:210::-;5767:4;5805:2;5794:9;5790:18;5782:26;;5818:65;5880:1;5869:9;5865:17;5856:6;5818:65;:::i;:::-;5772:118;;;;:::o;5896:419::-;6062:4;6100:2;6089:9;6085:18;6077:26;;6149:9;6143:4;6139:20;6135:1;6124:9;6120:17;6113:47;6177:131;6303:4;6177:131;:::i;:::-;6169:139;;6067:248;;;:::o;6321:419::-;6487:4;6525:2;6514:9;6510:18;6502:26;;6574:9;6568:4;6564:20;6560:1;6549:9;6545:17;6538:47;6602:131;6728:4;6602:131;:::i;:::-;6594:139;;6492:248;;;:::o;6746:419::-;6912:4;6950:2;6939:9;6935:18;6927:26;;6999:9;6993:4;6989:20;6985:1;6974:9;6970:17;6963:47;7027:131;7153:4;7027:131;:::i;:::-;7019:139;;6917:248;;;:::o;7171:419::-;7337:4;7375:2;7364:9;7360:18;7352:26;;7424:9;7418:4;7414:20;7410:1;7399:9;7395:17;7388:47;7452:131;7578:4;7452:131;:::i;:::-;7444:139;;7342:248;;;:::o;7596:419::-;7762:4;7800:2;7789:9;7785:18;7777:26;;7849:9;7843:4;7839:20;7835:1;7824:9;7820:17;7813:47;7877:131;8003:4;7877:131;:::i;:::-;7869:139;;7767:248;;;:::o;8021:419::-;8187:4;8225:2;8214:9;8210:18;8202:26;;8274:9;8268:4;8264:20;8260:1;8249:9;8245:17;8238:47;8302:131;8428:4;8302:131;:::i;:::-;8294:139;;8192:248;;;:::o;8446:419::-;8612:4;8650:2;8639:9;8635:18;8627:26;;8699:9;8693:4;8689:20;8685:1;8674:9;8670:17;8663:47;8727:131;8853:4;8727:131;:::i;:::-;8719:139;;8617:248;;;:::o;8871:222::-;8964:4;9002:2;8991:9;8987:18;8979:26;;9015:71;9083:1;9072:9;9068:17;9059:6;9015:71;:::i;:::-;8969:124;;;;:::o;9099:332::-;9220:4;9258:2;9247:9;9243:18;9235:26;;9271:71;9339:1;9328:9;9324:17;9315:6;9271:71;:::i;:::-;9352:72;9420:2;9409:9;9405:18;9396:6;9352:72;:::i;:::-;9225:206;;;;;:::o;9437:169::-;9521:11;9555:6;9550:3;9543:19;9595:4;9590:3;9586:14;9571:29;;9533:73;;;;:::o;9612:305::-;9652:3;9671:20;9689:1;9671:20;:::i;:::-;9666:25;;9705:20;9723:1;9705:20;:::i;:::-;9700:25;;9859:1;9791:66;9787:74;9784:1;9781:81;9778:2;;;9865:18;;:::i;:::-;9778:2;9909:1;9906;9902:9;9895:16;;9656:261;;;;:::o;9923:185::-;9963:1;9980:20;9998:1;9980:20;:::i;:::-;9975:25;;10014:20;10032:1;10014:20;:::i;:::-;10009:25;;10053:1;10043:2;;10058:18;;:::i;:::-;10043:2;10100:1;10097;10093:9;10088:14;;9965:143;;;;:::o;10114:348::-;10154:7;10177:20;10195:1;10177:20;:::i;:::-;10172:25;;10211:20;10229:1;10211:20;:::i;:::-;10206:25;;10399:1;10331:66;10327:74;10324:1;10321:81;10316:1;10309:9;10302:17;10298:105;10295:2;;;10406:18;;:::i;:::-;10295:2;10454:1;10451;10447:9;10436:20;;10162:300;;;;:::o;10468:191::-;10508:4;10528:20;10546:1;10528:20;:::i;:::-;10523:25;;10562:20;10580:1;10562:20;:::i;:::-;10557:25;;10601:1;10598;10595:8;10592:2;;;10606:18;;:::i;:::-;10592:2;10651:1;10648;10644:9;10636:17;;10513:146;;;;:::o;10665:96::-;10702:7;10731:24;10749:5;10731:24;:::i;:::-;10720:35;;10710:51;;;:::o;10767:90::-;10801:7;10844:5;10837:13;10830:21;10819:32;;10809:48;;;:::o;10863:126::-;10900:7;10940:42;10933:5;10929:54;10918:65;;10908:81;;;:::o;10995:77::-;11032:7;11061:5;11050:16;;11040:32;;;:::o;11078:233::-;11117:3;11140:24;11158:5;11140:24;:::i;:::-;11131:33;;11186:66;11179:5;11176:77;11173:2;;;11256:18;;:::i;:::-;11173:2;11303:1;11296:5;11292:13;11285:20;;11121:190;;;:::o;11317:180::-;11365:77;11362:1;11355:88;11462:4;11459:1;11452:15;11486:4;11483:1;11476:15;11503:180;11551:77;11548:1;11541:88;11648:4;11645:1;11638:15;11672:4;11669:1;11662:15;11689:223;11829:34;11825:1;11817:6;11813:14;11806:58;11898:6;11893:2;11885:6;11881:15;11874:31;11795:117;:::o;11918:225::-;12058:34;12054:1;12046:6;12042:14;12035:58;12127:8;12122:2;12114:6;12110:15;12103:33;12024:119;:::o;12149:174::-;12289:26;12285:1;12277:6;12273:14;12266:50;12255:68;:::o;12329:165::-;12469:17;12465:1;12457:6;12453:14;12446:41;12435:59;:::o;12500:182::-;12640:34;12636:1;12628:6;12624:14;12617:58;12606:76;:::o;12688:172::-;12828:24;12824:1;12816:6;12812:14;12805:48;12794:66;:::o;12866:220::-;13006:34;13002:1;12994:6;12990:14;12983:58;13075:3;13070:2;13062:6;13058:15;13051:28;12972:114;:::o;13092:122::-;13165:24;13183:5;13165:24;:::i;:::-;13158:5;13155:35;13145:2;;13204:1;13201;13194:12;13145:2;13135:79;:::o;13220:116::-;13290:21;13305:5;13290:21;:::i;:::-;13283:5;13280:32;13270:2;;13326:1;13323;13316:12;13270:2;13260:76;:::o;13342:122::-;13415:24;13433:5;13415:24;:::i;:::-;13408:5;13405:35;13395:2;;13454:1;13451;13444:12;13395:2;13385:79;:::o
Swarm Source
ipfs://028a23631f45c33db02c649eea652826784eb568a44c028e9836c5ff331279d6
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.