Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 445 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Claim Rewards | 18009012 | 461 days ago | IN | 0 ETH | 0.00078421 | ||||
Claim Rewards | 17996831 | 462 days ago | IN | 0 ETH | 0.00087717 | ||||
Claim Rewards | 17946523 | 469 days ago | IN | 0 ETH | 0.00099606 | ||||
Claim Rewards | 17946513 | 469 days ago | IN | 0 ETH | 0.00105316 | ||||
Claim Rewards | 17941039 | 470 days ago | IN | 0 ETH | 0.00154215 | ||||
Claim Rewards | 17941031 | 470 days ago | IN | 0 ETH | 0.00138264 | ||||
Claim Rewards | 17941028 | 470 days ago | IN | 0 ETH | 0.00126835 | ||||
Claim Rewards | 17940626 | 470 days ago | IN | 0 ETH | 0.00151161 | ||||
Claim Rewards | 17939637 | 470 days ago | IN | 0 ETH | 0.00113133 | ||||
Claim Rewards | 17939534 | 470 days ago | IN | 0 ETH | 0.00116906 | ||||
Claim Rewards | 17939472 | 470 days ago | IN | 0 ETH | 0.001358 | ||||
Claim Rewards | 17939267 | 470 days ago | IN | 0 ETH | 0.00129699 | ||||
Claim Rewards | 17939039 | 470 days ago | IN | 0 ETH | 0.00153286 | ||||
Claim Rewards | 17937533 | 471 days ago | IN | 0 ETH | 0.00912115 | ||||
Claim Rewards | 17935034 | 471 days ago | IN | 0 ETH | 0.00317734 | ||||
Claim Rewards | 17933999 | 471 days ago | IN | 0 ETH | 0.00117813 | ||||
Claim Rewards | 17933934 | 471 days ago | IN | 0 ETH | 0.00125904 | ||||
Claim Rewards | 17933693 | 471 days ago | IN | 0 ETH | 0.00126626 | ||||
Claim Rewards | 17933608 | 471 days ago | IN | 0 ETH | 0.00118776 | ||||
Claim Rewards | 17933073 | 471 days ago | IN | 0 ETH | 0.00131143 | ||||
Claim Rewards | 17933003 | 471 days ago | IN | 0 ETH | 0.00123225 | ||||
Claim Rewards | 17932988 | 471 days ago | IN | 0 ETH | 0.0012702 | ||||
Claim Rewards | 17932962 | 471 days ago | IN | 0 ETH | 0.00124937 | ||||
Claim Rewards | 17932920 | 471 days ago | IN | 0 ETH | 0.00140769 | ||||
Recover Tokens | 17932906 | 471 days ago | IN | 0 ETH | 0.00042058 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
StakingPlatform
Compiler Version
v0.8.10+commit.fc410830
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-07-22 */ // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.9.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * * Furthermore, `isContract` will also return true if the target contract within * the same transaction is already scheduled for destruction by `SELFDESTRUCT`, * which only has an effect at the end of a transaction. * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.8.0/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract. * * _Available since v4.8._ */ function verifyCallResultFromTarget( address target, bool success, bytes memory returndata, string memory errorMessage ) internal view returns (bytes memory) { if (success) { if (returndata.length == 0) { // only check isContract if the call was successful and the return data is empty // otherwise we already know that it was a contract require(isContract(target), "Address: call to non-contract"); } return returndata; } else { _revert(returndata, errorMessage); } } /** * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason or using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { _revert(returndata, errorMessage); } } function _revert(bytes memory returndata, string memory errorMessage) private pure { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } // File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol // OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/extensions/IERC20Permit.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612]. * * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't * need to send a transaction, and thus is not required to hold Ether at all. */ interface IERC20Permit { /** * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens, * given ``owner``'s signed approval. * * IMPORTANT: The same issues {IERC20-approve} has related to transaction * ordering also apply here. * * Emits an {Approval} event. * * Requirements: * * - `spender` cannot be the zero address. * - `deadline` must be a timestamp in the future. * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner` * over the EIP712-formatted function arguments. * - the signature must use ``owner``'s current nonce (see {nonces}). * * For more information on the signature format, see the * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP * section]. */ function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; /** * @dev Returns the current nonce for `owner`. This value must be * included whenever a signature is generated for {permit}. * * Every successful call to {permit} increases ``owner``'s nonce by one. This * prevents a signature from being used multiple times. */ function nonces(address owner) external view returns (uint256); /** * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}. */ // solhint-disable-next-line func-name-mixedcase function DOMAIN_SEPARATOR() external view returns (bytes32); } // File: @openzeppelin/contracts/token/ERC20/IERC20.sol // OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 amount) external returns (bool); } // File: @openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol // OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/utils/SafeERC20.sol) pragma solidity ^0.8.0; /** * @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; /** * @dev Transfer `value` amount of `token` from the calling contract to `to`. If `token` returns no value, * non-reverting calls are assumed to be successful. */ function safeTransfer(IERC20 token, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } /** * @dev Transfer `value` amount of `token` from `from` to `to`, spending the approval given by `from` to the * calling contract. If `token` returns no value, non-reverting calls are assumed to be successful. */ 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' 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)); } /** * @dev Increase the calling contract's allowance toward `spender` by `value`. If `token` returns no value, * non-reverting calls are assumed to be successful. */ function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 oldAllowance = token.allowance(address(this), spender); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, oldAllowance + value)); } /** * @dev Decrease the calling contract's allowance toward `spender` by `value`. If `token` returns no value, * non-reverting calls are assumed to be successful. */ 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"); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, oldAllowance - value)); } } /** * @dev Set the calling contract's allowance toward `spender` to `value`. If `token` returns no value, * non-reverting calls are assumed to be successful. Compatible with tokens that require the approval to be set to * 0 before setting it to a non-zero value. */ function forceApprove(IERC20 token, address spender, uint256 value) internal { bytes memory approvalCall = abi.encodeWithSelector(token.approve.selector, spender, value); if (!_callOptionalReturnBool(token, approvalCall)) { _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, 0)); _callOptionalReturn(token, approvalCall); } } /** * @dev Use a ERC-2612 signature to set the `owner` approval toward `spender` on `token`. * Revert on invalid signature. */ function safePermit( IERC20Permit token, address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) internal { uint256 nonceBefore = token.nonces(owner); token.permit(owner, spender, value, deadline, v, r, s); uint256 nonceAfter = token.nonces(owner); require(nonceAfter == nonceBefore + 1, "SafeERC20: permit did not succeed"); } /** * @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"); require(returndata.length == 0 || abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } /** * @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). * * This is a variant of {_callOptionalReturn} that silents catches all reverts and returns a bool instead. */ function _callOptionalReturnBool(IERC20 token, bytes memory data) private returns (bool) { // 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 cannot use {Address-functionCall} here since this should return false // and not revert is the subcall reverts. (bool success, bytes memory returndata) = address(token).call(data); return success && (returndata.length == 0 || abi.decode(returndata, (bool))) && Address.isContract(address(token)); } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: IStakingPlatform.sol pragma solidity =0.8.10; /// @author RetreebInc /// @title Interface Staking Platform with fixed APY and lockup interface IStakingPlatform { /** * @notice function that start the staking * @dev set `startPeriod` to the current current `block.timestamp` * set `lockupPeriod` which is `block.timestamp` + `lockupDuration` * and `endPeriod` which is `startPeriod` + `stakingDuration` */ function startStaking() external; /** * @notice function that allows a user to deposit tokens * @dev user must first approve the amount to deposit before calling this function, * cannot exceed the `maxAmountStaked` * @param amount, the amount to be deposited * @dev `endPeriod` to equal 0 (Staking didn't started yet), * or `endPeriod` more than current `block.timestamp` (staking not finished yet) * @dev `totalStaked + amount` must be less than `stakingMax` * @dev that the amount deposited should greater than 0 */ function deposit(uint amount) external; /** * @notice function that allows a user to withdraw its initial deposit * @dev must be called only when `block.timestamp` >= `endPeriod` * @dev `block.timestamp` higher than `lockupPeriod` (lockupPeriod finished) * withdraw reset all states variable for the `msg.sender` to 0, and claim rewards * if rewards to claim */ function withdrawAll() external; /** * @notice function that allows a user to withdraw its initial deposit * @param amount, amount to withdraw * @dev `block.timestamp` must be higher than `lockupPeriod` (lockupPeriod finished) * @dev `amount` must be higher than `0` * @dev `amount` must be lower or equal to the amount staked * withdraw reset all states variable for the `msg.sender` to 0, and claim rewards * if rewards to claim */ function withdraw(uint amount) external; /** * @notice function that returns the amount of total Staked tokens * for a specific user * @param stakeHolder, address of the user to check * @return uint amount of the total deposited Tokens by the caller */ function amountStaked(address stakeHolder) external view returns (uint); /** * @notice function that returns the amount of total Staked tokens * on the smart contract * @return uint amount of the total deposited Tokens */ function totalDeposited() external view returns (uint); /** * @notice function that returns the amount of pending rewards * that can be claimed by the user * @param stakeHolder, address of the user to be checked * @return uint amount of claimable rewards */ function rewardOf(address stakeHolder) external view returns (uint); /** * @notice function that claims pending rewards * @dev transfer the pending rewards to the `msg.sender` */ function claimRewards() external; /** * @dev Emitted when `amount` tokens are deposited into * staking platform */ event Deposit(address indexed owner, uint amount); /** * @dev Emitted when user withdraw deposited `amount` */ event Withdraw(address indexed owner, uint amount); /** * @dev Emitted when `stakeHolder` claim rewards */ event Claim(address indexed stakeHolder, uint amount); /** * @dev Emitted when staking has started */ event StartStaking(uint startPeriod, uint lockupPeriod, uint endingPeriod); } // File: DummyStaking_rewards.sol pragma solidity =0.8.10; /// @author www.github.com/jscrui /// @title Staking Platform with fixed APY and lockup contract StakingPlatform is IStakingPlatform, Ownable { using SafeERC20 for IERC20; IERC20 public immutable token; IStakingPlatform public immutable oldStaking; bool isStarted; uint private _totalStaked; uint internal _precision = 1E6; mapping(address => bool) alreadyMigrated; mapping(address => uint) claimedRewards; /** * @notice constructor contains all the parameters of the staking platform * @dev all parameters are immutable */ constructor(address _token, address _oldStaking) { token = IERC20(_token); oldStaking = IStakingPlatform(_oldStaking); } function startStaking() external override onlyOwner { isStarted = true; } function totalDeposited() external view returns (uint) { return oldStaking.totalDeposited(); } function withdraw(uint amount) public pure { require(1 == 2+amount, "This function is not available in this contract"); } function deposit(uint amount) public pure { require(1 == 2+amount, "This function is not available in this contract"); } function claimRewards() external { require(!alreadyMigrated[_msgSender()], "User migrated."); uint _claimedRewards = claimedRewards[_msgSender()]; uint256 amountRewards = oldStaking.rewardOf(_msgSender()); require(amountRewards > 0, "No rewards to claim."); claimedRewards[_msgSender()] = amountRewards; token.safeTransfer(_msgSender(), decimalsFixer(amountRewards-_claimedRewards)); } function withdrawAll() external { require(!isStarted, "Migration has not started."); require(!alreadyMigrated[_msgSender()], "User migrated."); uint256 amount = oldStaking.amountStaked(_msgSender()); uint256 totalAmount = amount; require(totalAmount > 0, "Nothing to withdraw"); alreadyMigrated[_msgSender()] = true; token.safeTransfer(_msgSender(), decimalsFixer(totalAmount)); } function amountStaked(address stakeHolder) external view returns (uint){ return oldStaking.amountStaked(stakeHolder); } function rewardOf(address stakeHolder) external view returns (uint){ return oldStaking.rewardOf(stakeHolder); } /** This function will receive a 18 decimals _amount and should return the same number but with 9 decimals */ function decimalsFixer(uint256 _amount) internal pure returns (uint){ return _amount/1E9; } /** this function is to recover tokens once migration is already completed */ function recoverTokens() external onlyOwner { uint256 amount = token.balanceOf(address(this)); token.safeTransfer(_msgSender(), amount); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_oldStaking","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"stakeHolder","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Claim","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","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":false,"internalType":"uint256","name":"startPeriod","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lockupPeriod","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"endingPeriod","type":"uint256"}],"name":"StartStaking","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[{"internalType":"address","name":"stakeHolder","type":"address"}],"name":"amountStaked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"oldStaking","outputs":[{"internalType":"contract IStakingPlatform","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"recoverTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"stakeHolder","type":"address"}],"name":"rewardOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startStaking","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalDeposited","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60c0604052620f42406002553480156200001857600080fd5b5060405162001d3338038062001d3383398181016040528101906200003e919062000204565b6200005e62000052620000ce60201b60201c565b620000d660201b60201c565b8173ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff168152505050506200024b565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620001cc826200019f565b9050919050565b620001de81620001bf565b8114620001ea57600080fd5b50565b600081519050620001fe81620001d3565b92915050565b600080604083850312156200021e576200021d6200019a565b5b60006200022e85828601620001ed565b92505060206200024185828601620001ed565b9150509250929050565b60805160a051611a83620002b06000396000818161025101528181610425015281816105bf0152818161070201528181610a220152610b6d015260008181610575015281816108600152818161092f015281816109d70152610b470152611a836000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c80638da5cb5b1161008c578063ef40a67011610066578063ef40a670146101c5578063f2fde38b146101f5578063fc0c546a14610211578063ff50abdc1461022f576100ea565b80638da5cb5b14610181578063b6b55f251461019f578063b77f39fe146101bb576100ea565b80634edf8980116100c85780634edf898014610145578063715018a61461016357806371b0cbfa1461016d578063853828b614610177576100ea565b80631d62ebd9146100ef5780632e1a7d4d1461011f578063372500ab1461013b575b600080fd5b610109600480360381019061010491906110e1565b61024d565b6040516101169190611127565b60405180910390f35b6101396004803603810190610134919061116e565b6102f0565b005b610143610342565b005b61014d6105bd565b60405161015a91906111fa565b60405180910390f35b61016b6105e1565b005b6101756105f5565b005b61017f61061a565b005b6101896108a8565b6040516101969190611224565b60405180910390f35b6101b960048036038101906101b4919061116e565b6108d1565b005b6101c3610923565b005b6101df60048036038101906101da91906110e1565b610a1e565b6040516101ec9190611127565b60405180910390f35b61020f600480360381019061020a91906110e1565b610ac1565b005b610219610b45565b6040516102269190611260565b60405180910390f35b610237610b69565b6040516102449190611127565b60405180910390f35b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16631d62ebd9836040518263ffffffff1660e01b81526004016102a89190611224565b602060405180830381865afa1580156102c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102e99190611290565b9050919050565b8060026102fd91906112ec565b60011461033f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610336906113c5565b60405180910390fd5b50565b6003600061034e610bff565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156103d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103cd90611431565b60405180910390fd5b6000600460006103e4610bff565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16631d62ebd9610467610bff565b6040518263ffffffff1660e01b81526004016104839190611224565b602060405180830381865afa1580156104a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104c49190611290565b905060008111610509576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105009061149d565b60405180910390fd5b8060046000610516610bff565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506105b961055f610bff565b610573848461056e91906114bd565b610c07565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610c209092919063ffffffff16565b5050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6105e9610ca6565b6105f36000610d24565b565b6105fd610ca6565b6001600060146101000a81548160ff021916908315150217905550565b600060149054906101000a900460ff161561066a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106619061153d565b60405180910390fd5b60036000610676610bff565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156106fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106f590611431565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ef40a670610744610bff565b6040518263ffffffff1660e01b81526004016107609190611224565b602060405180830381865afa15801561077d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107a19190611290565b90506000819050600081116107eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e2906115a9565b60405180910390fd5b6001600360006107f9610bff565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506108a4610855610bff565b61085e83610c07565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610c209092919063ffffffff16565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8060026108de91906112ec565b600114610920576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610917906113c5565b60405180910390fd5b50565b61092b610ca6565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016109869190611224565b602060405180830381865afa1580156109a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109c79190611290565b9050610a1b6109d4610bff565b827f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610c209092919063ffffffff16565b50565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ef40a670836040518263ffffffff1660e01b8152600401610a799190611224565b602060405180830381865afa158015610a96573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aba9190611290565b9050919050565b610ac9610ca6565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610b39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b309061163b565b60405180910390fd5b610b4281610d24565b50565b7f000000000000000000000000000000000000000000000000000000000000000081565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ff50abdc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bd6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bfa9190611290565b905090565b600033905090565b6000633b9aca0082610c19919061168a565b9050919050565b610ca18363a9059cbb60e01b8484604051602401610c3f9291906116bb565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050610de8565b505050565b610cae610bff565b73ffffffffffffffffffffffffffffffffffffffff16610ccc6108a8565b73ffffffffffffffffffffffffffffffffffffffff1614610d22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1990611730565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000610e4a826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16610eb09092919063ffffffff16565b9050600081511480610e6c575080806020019051810190610e6b9190611788565b5b610eab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea290611827565b60405180910390fd5b505050565b6060610ebf8484600085610ec8565b90509392505050565b606082471015610f0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f04906118b9565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051610f369190611953565b60006040518083038185875af1925050503d8060008114610f73576040519150601f19603f3d011682016040523d82523d6000602084013e610f78565b606091505b5091509150610f8987838387610f95565b92505050949350505050565b60608315610ff857600083511415610ff057610fb08561100b565b610fef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe6906119b6565b60405180910390fd5b5b829050611003565b611002838361102e565b5b949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000825111156110415781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110759190611a2b565b60405180910390fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006110ae82611083565b9050919050565b6110be816110a3565b81146110c957600080fd5b50565b6000813590506110db816110b5565b92915050565b6000602082840312156110f7576110f661107e565b5b6000611105848285016110cc565b91505092915050565b6000819050919050565b6111218161110e565b82525050565b600060208201905061113c6000830184611118565b92915050565b61114b8161110e565b811461115657600080fd5b50565b60008135905061116881611142565b92915050565b6000602082840312156111845761118361107e565b5b600061119284828501611159565b91505092915050565b6000819050919050565b60006111c06111bb6111b684611083565b61119b565b611083565b9050919050565b60006111d2826111a5565b9050919050565b60006111e4826111c7565b9050919050565b6111f4816111d9565b82525050565b600060208201905061120f60008301846111eb565b92915050565b61121e816110a3565b82525050565b60006020820190506112396000830184611215565b92915050565b600061124a826111c7565b9050919050565b61125a8161123f565b82525050565b60006020820190506112756000830184611251565b92915050565b60008151905061128a81611142565b92915050565b6000602082840312156112a6576112a561107e565b5b60006112b48482850161127b565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006112f78261110e565b91506113028361110e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115611337576113366112bd565b5b828201905092915050565b600082825260208201905092915050565b7f546869732066756e6374696f6e206973206e6f7420617661696c61626c65206960008201527f6e207468697320636f6e74726163740000000000000000000000000000000000602082015250565b60006113af602f83611342565b91506113ba82611353565b604082019050919050565b600060208201905081810360008301526113de816113a2565b9050919050565b7f55736572206d696772617465642e000000000000000000000000000000000000600082015250565b600061141b600e83611342565b9150611426826113e5565b602082019050919050565b6000602082019050818103600083015261144a8161140e565b9050919050565b7f4e6f207265776172647320746f20636c61696d2e000000000000000000000000600082015250565b6000611487601483611342565b915061149282611451565b602082019050919050565b600060208201905081810360008301526114b68161147a565b9050919050565b60006114c88261110e565b91506114d38361110e565b9250828210156114e6576114e56112bd565b5b828203905092915050565b7f4d6967726174696f6e20686173206e6f7420737461727465642e000000000000600082015250565b6000611527601a83611342565b9150611532826114f1565b602082019050919050565b600060208201905081810360008301526115568161151a565b9050919050565b7f4e6f7468696e6720746f20776974686472617700000000000000000000000000600082015250565b6000611593601383611342565b915061159e8261155d565b602082019050919050565b600060208201905081810360008301526115c281611586565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000611625602683611342565b9150611630826115c9565b604082019050919050565b6000602082019050818103600083015261165481611618565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006116958261110e565b91506116a08361110e565b9250826116b0576116af61165b565b5b828204905092915050565b60006040820190506116d06000830185611215565b6116dd6020830184611118565b9392505050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061171a602083611342565b9150611725826116e4565b602082019050919050565b600060208201905081810360008301526117498161170d565b9050919050565b60008115159050919050565b61176581611750565b811461177057600080fd5b50565b6000815190506117828161175c565b92915050565b60006020828403121561179e5761179d61107e565b5b60006117ac84828501611773565b91505092915050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b6000611811602a83611342565b915061181c826117b5565b604082019050919050565b6000602082019050818103600083015261184081611804565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b60006118a3602683611342565b91506118ae82611847565b604082019050919050565b600060208201905081810360008301526118d281611896565b9050919050565b600081519050919050565b600081905092915050565b60005b8381101561190d5780820151818401526020810190506118f2565b8381111561191c576000848401525b50505050565b600061192d826118d9565b61193781856118e4565b93506119478185602086016118ef565b80840191505092915050565b600061195f8284611922565b915081905092915050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b60006119a0601d83611342565b91506119ab8261196a565b602082019050919050565b600060208201905081810360008301526119cf81611993565b9050919050565b600081519050919050565b6000601f19601f8301169050919050565b60006119fd826119d6565b611a078185611342565b9350611a178185602086016118ef565b611a20816119e1565b840191505092915050565b60006020820190508181036000830152611a4581846119f2565b90509291505056fea26469706673582212204157dfca985c37f857fb3f9eb773a70ea7bc8d5401e1df2e58f4ea3c0159921064736f6c634300080a003300000000000000000000000014fee680690900ba0cccfc76ad70fd1b95d10e160000000000000000000000004ccfa4fc627115adb56eded7e855b24696294361
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100ea5760003560e01c80638da5cb5b1161008c578063ef40a67011610066578063ef40a670146101c5578063f2fde38b146101f5578063fc0c546a14610211578063ff50abdc1461022f576100ea565b80638da5cb5b14610181578063b6b55f251461019f578063b77f39fe146101bb576100ea565b80634edf8980116100c85780634edf898014610145578063715018a61461016357806371b0cbfa1461016d578063853828b614610177576100ea565b80631d62ebd9146100ef5780632e1a7d4d1461011f578063372500ab1461013b575b600080fd5b610109600480360381019061010491906110e1565b61024d565b6040516101169190611127565b60405180910390f35b6101396004803603810190610134919061116e565b6102f0565b005b610143610342565b005b61014d6105bd565b60405161015a91906111fa565b60405180910390f35b61016b6105e1565b005b6101756105f5565b005b61017f61061a565b005b6101896108a8565b6040516101969190611224565b60405180910390f35b6101b960048036038101906101b4919061116e565b6108d1565b005b6101c3610923565b005b6101df60048036038101906101da91906110e1565b610a1e565b6040516101ec9190611127565b60405180910390f35b61020f600480360381019061020a91906110e1565b610ac1565b005b610219610b45565b6040516102269190611260565b60405180910390f35b610237610b69565b6040516102449190611127565b60405180910390f35b60007f0000000000000000000000004ccfa4fc627115adb56eded7e855b2469629436173ffffffffffffffffffffffffffffffffffffffff16631d62ebd9836040518263ffffffff1660e01b81526004016102a89190611224565b602060405180830381865afa1580156102c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102e99190611290565b9050919050565b8060026102fd91906112ec565b60011461033f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610336906113c5565b60405180910390fd5b50565b6003600061034e610bff565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156103d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103cd90611431565b60405180910390fd5b6000600460006103e4610bff565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060007f0000000000000000000000004ccfa4fc627115adb56eded7e855b2469629436173ffffffffffffffffffffffffffffffffffffffff16631d62ebd9610467610bff565b6040518263ffffffff1660e01b81526004016104839190611224565b602060405180830381865afa1580156104a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104c49190611290565b905060008111610509576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105009061149d565b60405180910390fd5b8060046000610516610bff565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506105b961055f610bff565b610573848461056e91906114bd565b610c07565b7f00000000000000000000000014fee680690900ba0cccfc76ad70fd1b95d10e1673ffffffffffffffffffffffffffffffffffffffff16610c209092919063ffffffff16565b5050565b7f0000000000000000000000004ccfa4fc627115adb56eded7e855b2469629436181565b6105e9610ca6565b6105f36000610d24565b565b6105fd610ca6565b6001600060146101000a81548160ff021916908315150217905550565b600060149054906101000a900460ff161561066a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106619061153d565b60405180910390fd5b60036000610676610bff565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156106fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106f590611431565b60405180910390fd5b60007f0000000000000000000000004ccfa4fc627115adb56eded7e855b2469629436173ffffffffffffffffffffffffffffffffffffffff1663ef40a670610744610bff565b6040518263ffffffff1660e01b81526004016107609190611224565b602060405180830381865afa15801561077d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107a19190611290565b90506000819050600081116107eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e2906115a9565b60405180910390fd5b6001600360006107f9610bff565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506108a4610855610bff565b61085e83610c07565b7f00000000000000000000000014fee680690900ba0cccfc76ad70fd1b95d10e1673ffffffffffffffffffffffffffffffffffffffff16610c209092919063ffffffff16565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8060026108de91906112ec565b600114610920576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610917906113c5565b60405180910390fd5b50565b61092b610ca6565b60007f00000000000000000000000014fee680690900ba0cccfc76ad70fd1b95d10e1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016109869190611224565b602060405180830381865afa1580156109a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109c79190611290565b9050610a1b6109d4610bff565b827f00000000000000000000000014fee680690900ba0cccfc76ad70fd1b95d10e1673ffffffffffffffffffffffffffffffffffffffff16610c209092919063ffffffff16565b50565b60007f0000000000000000000000004ccfa4fc627115adb56eded7e855b2469629436173ffffffffffffffffffffffffffffffffffffffff1663ef40a670836040518263ffffffff1660e01b8152600401610a799190611224565b602060405180830381865afa158015610a96573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aba9190611290565b9050919050565b610ac9610ca6565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610b39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b309061163b565b60405180910390fd5b610b4281610d24565b50565b7f00000000000000000000000014fee680690900ba0cccfc76ad70fd1b95d10e1681565b60007f0000000000000000000000004ccfa4fc627115adb56eded7e855b2469629436173ffffffffffffffffffffffffffffffffffffffff1663ff50abdc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bd6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bfa9190611290565b905090565b600033905090565b6000633b9aca0082610c19919061168a565b9050919050565b610ca18363a9059cbb60e01b8484604051602401610c3f9291906116bb565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050610de8565b505050565b610cae610bff565b73ffffffffffffffffffffffffffffffffffffffff16610ccc6108a8565b73ffffffffffffffffffffffffffffffffffffffff1614610d22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1990611730565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000610e4a826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16610eb09092919063ffffffff16565b9050600081511480610e6c575080806020019051810190610e6b9190611788565b5b610eab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea290611827565b60405180910390fd5b505050565b6060610ebf8484600085610ec8565b90509392505050565b606082471015610f0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f04906118b9565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051610f369190611953565b60006040518083038185875af1925050503d8060008114610f73576040519150601f19603f3d011682016040523d82523d6000602084013e610f78565b606091505b5091509150610f8987838387610f95565b92505050949350505050565b60608315610ff857600083511415610ff057610fb08561100b565b610fef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe6906119b6565b60405180910390fd5b5b829050611003565b611002838361102e565b5b949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000825111156110415781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110759190611a2b565b60405180910390fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006110ae82611083565b9050919050565b6110be816110a3565b81146110c957600080fd5b50565b6000813590506110db816110b5565b92915050565b6000602082840312156110f7576110f661107e565b5b6000611105848285016110cc565b91505092915050565b6000819050919050565b6111218161110e565b82525050565b600060208201905061113c6000830184611118565b92915050565b61114b8161110e565b811461115657600080fd5b50565b60008135905061116881611142565b92915050565b6000602082840312156111845761118361107e565b5b600061119284828501611159565b91505092915050565b6000819050919050565b60006111c06111bb6111b684611083565b61119b565b611083565b9050919050565b60006111d2826111a5565b9050919050565b60006111e4826111c7565b9050919050565b6111f4816111d9565b82525050565b600060208201905061120f60008301846111eb565b92915050565b61121e816110a3565b82525050565b60006020820190506112396000830184611215565b92915050565b600061124a826111c7565b9050919050565b61125a8161123f565b82525050565b60006020820190506112756000830184611251565b92915050565b60008151905061128a81611142565b92915050565b6000602082840312156112a6576112a561107e565b5b60006112b48482850161127b565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006112f78261110e565b91506113028361110e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115611337576113366112bd565b5b828201905092915050565b600082825260208201905092915050565b7f546869732066756e6374696f6e206973206e6f7420617661696c61626c65206960008201527f6e207468697320636f6e74726163740000000000000000000000000000000000602082015250565b60006113af602f83611342565b91506113ba82611353565b604082019050919050565b600060208201905081810360008301526113de816113a2565b9050919050565b7f55736572206d696772617465642e000000000000000000000000000000000000600082015250565b600061141b600e83611342565b9150611426826113e5565b602082019050919050565b6000602082019050818103600083015261144a8161140e565b9050919050565b7f4e6f207265776172647320746f20636c61696d2e000000000000000000000000600082015250565b6000611487601483611342565b915061149282611451565b602082019050919050565b600060208201905081810360008301526114b68161147a565b9050919050565b60006114c88261110e565b91506114d38361110e565b9250828210156114e6576114e56112bd565b5b828203905092915050565b7f4d6967726174696f6e20686173206e6f7420737461727465642e000000000000600082015250565b6000611527601a83611342565b9150611532826114f1565b602082019050919050565b600060208201905081810360008301526115568161151a565b9050919050565b7f4e6f7468696e6720746f20776974686472617700000000000000000000000000600082015250565b6000611593601383611342565b915061159e8261155d565b602082019050919050565b600060208201905081810360008301526115c281611586565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000611625602683611342565b9150611630826115c9565b604082019050919050565b6000602082019050818103600083015261165481611618565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006116958261110e565b91506116a08361110e565b9250826116b0576116af61165b565b5b828204905092915050565b60006040820190506116d06000830185611215565b6116dd6020830184611118565b9392505050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061171a602083611342565b9150611725826116e4565b602082019050919050565b600060208201905081810360008301526117498161170d565b9050919050565b60008115159050919050565b61176581611750565b811461177057600080fd5b50565b6000815190506117828161175c565b92915050565b60006020828403121561179e5761179d61107e565b5b60006117ac84828501611773565b91505092915050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b6000611811602a83611342565b915061181c826117b5565b604082019050919050565b6000602082019050818103600083015261184081611804565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b60006118a3602683611342565b91506118ae82611847565b604082019050919050565b600060208201905081810360008301526118d281611896565b9050919050565b600081519050919050565b600081905092915050565b60005b8381101561190d5780820151818401526020810190506118f2565b8381111561191c576000848401525b50505050565b600061192d826118d9565b61193781856118e4565b93506119478185602086016118ef565b80840191505092915050565b600061195f8284611922565b915081905092915050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b60006119a0601d83611342565b91506119ab8261196a565b602082019050919050565b600060208201905081810360008301526119cf81611993565b9050919050565b600081519050919050565b6000601f19601f8301169050919050565b60006119fd826119d6565b611a078185611342565b9350611a178185602086016118ef565b611a20816119e1565b840191505092915050565b60006020820190508181036000830152611a4581846119f2565b90509291505056fea26469706673582212204157dfca985c37f857fb3f9eb773a70ea7bc8d5401e1df2e58f4ea3c0159921064736f6c634300080a0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000014fee680690900ba0cccfc76ad70fd1b95d10e160000000000000000000000004ccfa4fc627115adb56eded7e855b24696294361
-----Decoded View---------------
Arg [0] : _token (address): 0x14feE680690900BA0ccCfC76AD70Fd1b95D10e16
Arg [1] : _oldStaking (address): 0x4Ccfa4FC627115aDB56edED7e855b24696294361
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 00000000000000000000000014fee680690900ba0cccfc76ad70fd1b95d10e16
Arg [1] : 0000000000000000000000004ccfa4fc627115adb56eded7e855b24696294361
Deployed Bytecode Sourcemap
29222:2894:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31501:125;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30100:135;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30385:468;;;:::i;:::-;;29354:44;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24609:103;;;:::i;:::-;;29889:87;;;:::i;:::-;;30869:480;;;:::i;:::-;;23968:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30243:134;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31949:161;;;:::i;:::-;;31357:133;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24867:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29318:29;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29984:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31501:125;31563:4;31586:10;:19;;;31606:11;31586:32;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31579:39;;31501:125;;;:::o;30100:135::-;30169:6;30167:1;:8;;;;:::i;:::-;30162:1;:13;30154:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;30100:135;:::o;30385:468::-;30446:15;:29;30462:12;:10;:12::i;:::-;30446:29;;;;;;;;;;;;;;;;;;;;;;;;;30445:30;30437:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;30507:20;30530:14;:28;30545:12;:10;:12::i;:::-;30530:28;;;;;;;;;;;;;;;;30507:51;;30572:21;30596:10;:19;;;30616:12;:10;:12::i;:::-;30596:33;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30572:57;;30666:1;30650:13;:17;30642:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;30737:13;30706:14;:28;30721:12;:10;:12::i;:::-;30706:28;;;;;;;;;;;;;;;:44;;;;30764:78;30783:12;:10;:12::i;:::-;30797:44;30825:15;30811:13;:29;;;;:::i;:::-;30797:13;:44::i;:::-;30764:5;:18;;;;:78;;;;;:::i;:::-;30418:435;;30385:468::o;29354:44::-;;;:::o;24609:103::-;23854:13;:11;:13::i;:::-;24674:30:::1;24701:1;24674:18;:30::i;:::-;24609:103::o:0;29889:87::-;23854:13;:11;:13::i;:::-;29964:4:::1;29952:9;;:16;;;;;;;;;;;;;;;;;;29889:87::o:0;30869:480::-;30921:9;;;;;;;;;;;30920:10;30912:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;30981:15;:29;30997:12;:10;:12::i;:::-;30981:29;;;;;;;;;;;;;;;;;;;;;;;;;30980:30;30972:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;31042:14;31059:10;:23;;;31083:12;:10;:12::i;:::-;31059:37;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31042:54;;31117:19;31139:6;31117:28;;31182:1;31168:11;:15;31160:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;31252:4;31220:15;:29;31236:12;:10;:12::i;:::-;31220:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;31281:60;31300:12;:10;:12::i;:::-;31314:26;31328:11;31314:13;:26::i;:::-;31281:5;:18;;;;:60;;;;;:::i;:::-;30901:448;;30869:480::o;23968:87::-;24014:7;24041:6;;;;;;;;;;;24034:13;;23968:87;:::o;30243:134::-;30311:6;30309:1;:8;;;;:::i;:::-;30304:1;:13;30296:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;30243:134;:::o;31949:161::-;23854:13;:11;:13::i;:::-;32004:14:::1;32021:5;:15;;;32045:4;32021:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32004:47;;32062:40;32081:12;:10;:12::i;:::-;32095:6;32062:5;:18;;;;:40;;;;;:::i;:::-;31993:117;31949:161::o:0;31357:133::-;31423:4;31446:10;:23;;;31470:11;31446:36;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31439:43;;31357:133;;;:::o;24867:201::-;23854:13;:11;:13::i;:::-;24976:1:::1;24956:22;;:8;:22;;;;24948:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;25032:28;25051:8;25032:18;:28::i;:::-;24867:201:::0;:::o;29318:29::-;;;:::o;29984:108::-;30033:4;30057:10;:25;;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30050:34;;29984:108;:::o;22519:98::-;22572:7;22599:10;22592:17;;22519:98;:::o;31749:105::-;31812:4;31843:3;31835:7;:11;;;;:::i;:::-;31828:18;;31749:105;;;:::o;15748:177::-;15831:86;15851:5;15881:23;;;15906:2;15910:5;15858:58;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15831:19;:86::i;:::-;15748:177;;;:::o;24133:132::-;24208:12;:10;:12::i;:::-;24197:23;;:7;:5;:7::i;:::-;:23;;;24189:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24133:132::o;25228:191::-;25302:16;25321:6;;;;;;;;;;;25302:25;;25347:8;25338:6;;:17;;;;;;;;;;;;;;;;;;25402:8;25371:40;;25392:8;25371:40;;;;;;;;;;;;25291:128;25228:191;:::o;20071:649::-;20495:23;20521:69;20549:4;20521:69;;;;;;;;;;;;;;;;;20529:5;20521:27;;;;:69;;;;;:::i;:::-;20495:95;;20630:1;20609:10;:17;:22;:56;;;;20646:10;20635:30;;;;;;;;;;;;:::i;:::-;20609:56;20601:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;20141:579;20071:649;;:::o;4229:229::-;4366:12;4398:52;4420:6;4428:4;4434:1;4437:12;4398:21;:52::i;:::-;4391:59;;4229:229;;;;;:::o;5315:455::-;5485:12;5543:5;5518:21;:30;;5510:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;5603:12;5617:23;5644:6;:11;;5663:5;5670:4;5644:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5602:73;;;;5693:69;5720:6;5728:7;5737:10;5749:12;5693:26;:69::i;:::-;5686:76;;;;5315:455;;;;;;:::o;7888:644::-;8073:12;8102:7;8098:427;;;8151:1;8130:10;:17;:22;8126:290;;;8348:18;8359:6;8348:10;:18::i;:::-;8340:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;8126:290;8437:10;8430:17;;;;8098:427;8480:33;8488:10;8500:12;8480:7;:33::i;:::-;7888:644;;;;;;;:::o;1474:326::-;1534:4;1791:1;1769:7;:19;;;:23;1762:30;;1474:326;;;:::o;9074:552::-;9255:1;9235:10;:17;:21;9231:388;;;9467:10;9461:17;9524:15;9511:10;9507:2;9503:19;9496:44;9231:388;9594:12;9587:20;;;;;;;;;;;:::i;:::-;;;;;;;;88:117:1;197:1;194;187:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:329::-;900:6;949:2;937:9;928:7;924:23;920:32;917:119;;;955:79;;:::i;:::-;917:119;1075:1;1100:53;1145:7;1136:6;1125:9;1121:22;1100:53;:::i;:::-;1090:63;;1046:117;841:329;;;;:::o;1176:77::-;1213:7;1242:5;1231:16;;1176:77;;;:::o;1259:118::-;1346:24;1364:5;1346:24;:::i;:::-;1341:3;1334:37;1259:118;;:::o;1383:222::-;1476:4;1514:2;1503:9;1499:18;1491:26;;1527:71;1595:1;1584:9;1580:17;1571:6;1527:71;:::i;:::-;1383:222;;;;:::o;1611:122::-;1684:24;1702:5;1684:24;:::i;:::-;1677:5;1674:35;1664:63;;1723:1;1720;1713:12;1664:63;1611:122;:::o;1739:139::-;1785:5;1823:6;1810:20;1801:29;;1839:33;1866:5;1839:33;:::i;:::-;1739:139;;;;:::o;1884:329::-;1943:6;1992:2;1980:9;1971:7;1967:23;1963:32;1960:119;;;1998:79;;:::i;:::-;1960:119;2118:1;2143:53;2188:7;2179:6;2168:9;2164:22;2143:53;:::i;:::-;2133:63;;2089:117;1884:329;;;;:::o;2219:60::-;2247:3;2268:5;2261:12;;2219:60;;;:::o;2285:142::-;2335:9;2368:53;2386:34;2395:24;2413:5;2395:24;:::i;:::-;2386:34;:::i;:::-;2368:53;:::i;:::-;2355:66;;2285:142;;;:::o;2433:126::-;2483:9;2516:37;2547:5;2516:37;:::i;:::-;2503:50;;2433:126;;;:::o;2565:151::-;2640:9;2673:37;2704:5;2673:37;:::i;:::-;2660:50;;2565:151;;;:::o;2722:181::-;2834:62;2890:5;2834:62;:::i;:::-;2829:3;2822:75;2722:181;;:::o;2909:272::-;3027:4;3065:2;3054:9;3050:18;3042:26;;3078:96;3171:1;3160:9;3156:17;3147:6;3078:96;:::i;:::-;2909:272;;;;:::o;3187:118::-;3274:24;3292:5;3274:24;:::i;:::-;3269:3;3262:37;3187:118;;:::o;3311:222::-;3404:4;3442:2;3431:9;3427:18;3419:26;;3455:71;3523:1;3512:9;3508:17;3499:6;3455:71;:::i;:::-;3311:222;;;;:::o;3539:140::-;3603:9;3636:37;3667:5;3636:37;:::i;:::-;3623:50;;3539:140;;;:::o;3685:159::-;3786:51;3831:5;3786:51;:::i;:::-;3781:3;3774:64;3685:159;;:::o;3850:250::-;3957:4;3995:2;3984:9;3980:18;3972:26;;4008:85;4090:1;4079:9;4075:17;4066:6;4008:85;:::i;:::-;3850:250;;;;:::o;4106:143::-;4163:5;4194:6;4188:13;4179:22;;4210:33;4237:5;4210:33;:::i;:::-;4106:143;;;;:::o;4255:351::-;4325:6;4374:2;4362:9;4353:7;4349:23;4345:32;4342:119;;;4380:79;;:::i;:::-;4342:119;4500:1;4525:64;4581:7;4572:6;4561:9;4557:22;4525:64;:::i;:::-;4515:74;;4471:128;4255:351;;;;:::o;4612:180::-;4660:77;4657:1;4650:88;4757:4;4754:1;4747:15;4781:4;4778:1;4771:15;4798:305;4838:3;4857:20;4875:1;4857:20;:::i;:::-;4852:25;;4891:20;4909:1;4891:20;:::i;:::-;4886:25;;5045:1;4977:66;4973:74;4970:1;4967:81;4964:107;;;5051:18;;:::i;:::-;4964:107;5095:1;5092;5088:9;5081:16;;4798:305;;;;:::o;5109:169::-;5193:11;5227:6;5222:3;5215:19;5267:4;5262:3;5258:14;5243:29;;5109:169;;;;:::o;5284:234::-;5424:34;5420:1;5412:6;5408:14;5401:58;5493:17;5488:2;5480:6;5476:15;5469:42;5284:234;:::o;5524:366::-;5666:3;5687:67;5751:2;5746:3;5687:67;:::i;:::-;5680:74;;5763:93;5852:3;5763:93;:::i;:::-;5881:2;5876:3;5872:12;5865:19;;5524:366;;;:::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;;5896:419;;;:::o;6321:164::-;6461:16;6457:1;6449:6;6445:14;6438:40;6321:164;:::o;6491:366::-;6633:3;6654:67;6718:2;6713:3;6654:67;:::i;:::-;6647:74;;6730:93;6819:3;6730:93;:::i;:::-;6848:2;6843:3;6839:12;6832:19;;6491:366;;;:::o;6863:419::-;7029:4;7067:2;7056:9;7052:18;7044:26;;7116:9;7110:4;7106:20;7102:1;7091:9;7087:17;7080:47;7144:131;7270:4;7144:131;:::i;:::-;7136:139;;6863:419;;;:::o;7288:170::-;7428:22;7424:1;7416:6;7412:14;7405:46;7288:170;:::o;7464:366::-;7606:3;7627:67;7691:2;7686:3;7627:67;:::i;:::-;7620:74;;7703:93;7792:3;7703:93;:::i;:::-;7821:2;7816:3;7812:12;7805:19;;7464:366;;;:::o;7836:419::-;8002:4;8040:2;8029:9;8025:18;8017:26;;8089:9;8083:4;8079:20;8075:1;8064:9;8060:17;8053:47;8117:131;8243:4;8117:131;:::i;:::-;8109:139;;7836:419;;;:::o;8261:191::-;8301:4;8321:20;8339:1;8321:20;:::i;:::-;8316:25;;8355:20;8373:1;8355:20;:::i;:::-;8350:25;;8394:1;8391;8388:8;8385:34;;;8399:18;;:::i;:::-;8385:34;8444:1;8441;8437:9;8429:17;;8261:191;;;;:::o;8458:176::-;8598:28;8594:1;8586:6;8582:14;8575:52;8458:176;:::o;8640:366::-;8782:3;8803:67;8867:2;8862:3;8803:67;:::i;:::-;8796:74;;8879:93;8968:3;8879:93;:::i;:::-;8997:2;8992:3;8988:12;8981:19;;8640:366;;;:::o;9012:419::-;9178:4;9216:2;9205:9;9201:18;9193:26;;9265:9;9259:4;9255:20;9251:1;9240:9;9236:17;9229:47;9293:131;9419:4;9293:131;:::i;:::-;9285:139;;9012:419;;;:::o;9437:169::-;9577:21;9573:1;9565:6;9561:14;9554:45;9437:169;:::o;9612:366::-;9754:3;9775:67;9839:2;9834:3;9775:67;:::i;:::-;9768:74;;9851:93;9940:3;9851:93;:::i;:::-;9969:2;9964:3;9960:12;9953:19;;9612:366;;;:::o;9984:419::-;10150:4;10188:2;10177:9;10173:18;10165:26;;10237:9;10231:4;10227:20;10223:1;10212:9;10208:17;10201:47;10265:131;10391:4;10265:131;:::i;:::-;10257:139;;9984:419;;;:::o;10409:225::-;10549:34;10545:1;10537:6;10533:14;10526:58;10618:8;10613:2;10605:6;10601:15;10594:33;10409:225;:::o;10640:366::-;10782:3;10803:67;10867:2;10862:3;10803:67;:::i;:::-;10796:74;;10879:93;10968:3;10879:93;:::i;:::-;10997:2;10992:3;10988:12;10981:19;;10640:366;;;:::o;11012:419::-;11178:4;11216:2;11205:9;11201:18;11193:26;;11265:9;11259:4;11255:20;11251:1;11240:9;11236:17;11229:47;11293:131;11419:4;11293:131;:::i;:::-;11285:139;;11012:419;;;:::o;11437:180::-;11485:77;11482:1;11475:88;11582:4;11579:1;11572:15;11606:4;11603:1;11596:15;11623:185;11663:1;11680:20;11698:1;11680:20;:::i;:::-;11675:25;;11714:20;11732:1;11714:20;:::i;:::-;11709:25;;11753:1;11743:35;;11758:18;;:::i;:::-;11743:35;11800:1;11797;11793:9;11788:14;;11623:185;;;;:::o;11814:332::-;11935:4;11973:2;11962:9;11958:18;11950:26;;11986:71;12054:1;12043:9;12039:17;12030:6;11986:71;:::i;:::-;12067:72;12135:2;12124:9;12120:18;12111:6;12067:72;:::i;:::-;11814:332;;;;;:::o;12152:182::-;12292:34;12288:1;12280:6;12276:14;12269:58;12152:182;:::o;12340:366::-;12482:3;12503:67;12567:2;12562:3;12503:67;:::i;:::-;12496:74;;12579:93;12668:3;12579:93;:::i;:::-;12697:2;12692:3;12688:12;12681:19;;12340:366;;;:::o;12712:419::-;12878:4;12916:2;12905:9;12901:18;12893:26;;12965:9;12959:4;12955:20;12951:1;12940:9;12936:17;12929:47;12993:131;13119:4;12993:131;:::i;:::-;12985:139;;12712:419;;;:::o;13137:90::-;13171:7;13214:5;13207:13;13200:21;13189:32;;13137:90;;;:::o;13233:116::-;13303:21;13318:5;13303:21;:::i;:::-;13296:5;13293:32;13283:60;;13339:1;13336;13329:12;13283:60;13233:116;:::o;13355:137::-;13409:5;13440:6;13434:13;13425:22;;13456:30;13480:5;13456:30;:::i;:::-;13355:137;;;;:::o;13498:345::-;13565:6;13614:2;13602:9;13593:7;13589:23;13585:32;13582:119;;;13620:79;;:::i;:::-;13582:119;13740:1;13765:61;13818:7;13809:6;13798:9;13794:22;13765:61;:::i;:::-;13755:71;;13711:125;13498:345;;;;:::o;13849:229::-;13989:34;13985:1;13977:6;13973:14;13966:58;14058:12;14053:2;14045:6;14041:15;14034:37;13849:229;:::o;14084:366::-;14226:3;14247:67;14311:2;14306:3;14247:67;:::i;:::-;14240:74;;14323:93;14412:3;14323:93;:::i;:::-;14441:2;14436:3;14432:12;14425:19;;14084:366;;;:::o;14456:419::-;14622:4;14660:2;14649:9;14645:18;14637:26;;14709:9;14703:4;14699:20;14695:1;14684:9;14680:17;14673:47;14737:131;14863:4;14737:131;:::i;:::-;14729:139;;14456:419;;;:::o;14881:225::-;15021:34;15017:1;15009:6;15005:14;14998:58;15090:8;15085:2;15077:6;15073:15;15066:33;14881:225;:::o;15112:366::-;15254:3;15275:67;15339:2;15334:3;15275:67;:::i;:::-;15268:74;;15351:93;15440:3;15351:93;:::i;:::-;15469:2;15464:3;15460:12;15453:19;;15112:366;;;:::o;15484:419::-;15650:4;15688:2;15677:9;15673:18;15665:26;;15737:9;15731:4;15727:20;15723:1;15712:9;15708:17;15701:47;15765:131;15891:4;15765:131;:::i;:::-;15757:139;;15484:419;;;:::o;15909:98::-;15960:6;15994:5;15988:12;15978:22;;15909:98;;;:::o;16013:147::-;16114:11;16151:3;16136:18;;16013:147;;;;:::o;16166:307::-;16234:1;16244:113;16258:6;16255:1;16252:13;16244:113;;;16343:1;16338:3;16334:11;16328:18;16324:1;16319:3;16315:11;16308:39;16280:2;16277:1;16273:10;16268:15;;16244:113;;;16375:6;16372:1;16369:13;16366:101;;;16455:1;16446:6;16441:3;16437:16;16430:27;16366:101;16215:258;16166:307;;;:::o;16479:373::-;16583:3;16611:38;16643:5;16611:38;:::i;:::-;16665:88;16746:6;16741:3;16665:88;:::i;:::-;16658:95;;16762:52;16807:6;16802:3;16795:4;16788:5;16784:16;16762:52;:::i;:::-;16839:6;16834:3;16830:16;16823:23;;16587:265;16479:373;;;;:::o;16858:271::-;16988:3;17010:93;17099:3;17090:6;17010:93;:::i;:::-;17003:100;;17120:3;17113:10;;16858:271;;;;:::o;17135:179::-;17275:31;17271:1;17263:6;17259:14;17252:55;17135:179;:::o;17320:366::-;17462:3;17483:67;17547:2;17542:3;17483:67;:::i;:::-;17476:74;;17559:93;17648:3;17559:93;:::i;:::-;17677:2;17672:3;17668:12;17661:19;;17320:366;;;:::o;17692:419::-;17858:4;17896:2;17885:9;17881:18;17873:26;;17945:9;17939:4;17935:20;17931:1;17920:9;17916:17;17909:47;17973:131;18099:4;17973:131;:::i;:::-;17965:139;;17692:419;;;:::o;18117:99::-;18169:6;18203:5;18197:12;18187:22;;18117:99;;;:::o;18222:102::-;18263:6;18314:2;18310:7;18305:2;18298:5;18294:14;18290:28;18280:38;;18222:102;;;:::o;18330:364::-;18418:3;18446:39;18479:5;18446:39;:::i;:::-;18501:71;18565:6;18560:3;18501:71;:::i;:::-;18494:78;;18581:52;18626:6;18621:3;18614:4;18607:5;18603:16;18581:52;:::i;:::-;18658:29;18680:6;18658:29;:::i;:::-;18653:3;18649:39;18642:46;;18422:272;18330:364;;;;:::o;18700:313::-;18813:4;18851:2;18840:9;18836:18;18828:26;;18900:9;18894:4;18890:20;18886:1;18875:9;18871:17;18864:47;18928:78;19001:4;18992:6;18928:78;:::i;:::-;18920:86;;18700:313;;;;:::o
Swarm Source
ipfs://4157dfca985c37f857fb3f9eb773a70ea7bc8d5401e1df2e58f4ea3c01599210
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.