Overview
ETH Balance
0 ETH
Eth Value
$0.00Token Holdings
More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 2,316 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Claim Rewards | 21476207 | 13 hrs ago | IN | 0 ETH | 0.00036852 | ||||
Deposit | 21464282 | 2 days ago | IN | 0 ETH | 0.00056186 | ||||
Withdraw | 21463669 | 2 days ago | IN | 0 ETH | 0.00036472 | ||||
Withdraw | 21456057 | 3 days ago | IN | 0 ETH | 0.0005264 | ||||
Claim Rewards | 21453131 | 3 days ago | IN | 0 ETH | 0.00060254 | ||||
Withdraw | 21408444 | 10 days ago | IN | 0 ETH | 0.00069194 | ||||
Claim Rewards | 21408439 | 10 days ago | IN | 0 ETH | 0.00079124 | ||||
Withdraw | 21369181 | 15 days ago | IN | 0 ETH | 0.00153726 | ||||
Withdraw | 21367179 | 15 days ago | IN | 0 ETH | 0.00165637 | ||||
Withdraw | 21349809 | 18 days ago | IN | 0 ETH | 0.00126902 | ||||
Claim Rewards | 21347414 | 18 days ago | IN | 0 ETH | 0.00120134 | ||||
Withdraw | 21320121 | 22 days ago | IN | 0 ETH | 0.00112295 | ||||
Claim Rewards | 21303681 | 24 days ago | IN | 0 ETH | 0.00145812 | ||||
Deposit | 21300204 | 25 days ago | IN | 0 ETH | 0.00052221 | ||||
Claim Rewards | 21300200 | 25 days ago | IN | 0 ETH | 0.00053992 | ||||
Withdraw | 21300192 | 25 days ago | IN | 0 ETH | 0.00068886 | ||||
Claim Rewards | 21253272 | 31 days ago | IN | 0 ETH | 0.0007691 | ||||
Claim Rewards | 21253154 | 31 days ago | IN | 0 ETH | 0.00082825 | ||||
Claim Rewards | 21249721 | 32 days ago | IN | 0 ETH | 0.00088494 | ||||
Withdraw | 21232685 | 34 days ago | IN | 0 ETH | 0.00063368 | ||||
Claim Rewards | 21232683 | 34 days ago | IN | 0 ETH | 0.00079188 | ||||
Claim Rewards | 21167056 | 43 days ago | IN | 0 ETH | 0.00209951 | ||||
Withdraw | 21167053 | 43 days ago | IN | 0 ETH | 0.00342 | ||||
Claim Rewards | 21165497 | 43 days ago | IN | 0 ETH | 0.00307817 | ||||
Claim Rewards | 21130330 | 48 days ago | IN | 0 ETH | 0.00151118 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
OperatingSystemStaking
Compiler Version
v0.8.9+commit.e5eed63a
Contract Source Code (Solidity Standard Json-Input format)
//SPDX-License-Identifier: Unlicense pragma solidity = 0.8.9; import "contracts/access/OracleManaged.sol"; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; /// @title Operating System staking contract OperatingSystemStaking is OracleManaged { using SafeERC20 for IERC20; IERC20 public immutable operatingSystem; IERC20 public immutable usdt; address private constant STAKING_FUND = 0x0a5a1209E93E03a9C341287bf4179944f23C9E5D; address private constant OPERATING_SYSTEM = 0x21FfE03cAA6355CF1ca47B898921d2f70e85e423; address private constant USDT = 0xdAC17F958D2ee523a2206206994597C13D831ec7; // @dev this is used to allow for decimals in the currentRewardValue as well as to convert USDT amount to 18 decimals uint private constant REWARD_FACTOR_ACCURACY = 1_000_000_000_000 ether; uint private constant BASE_DISTRIBUTION_AMOUNT = 10 ** 6; uint private constant MINIMUM_STAKE = 1 ether; uint public minimumDistribution = BASE_DISTRIBUTION_AMOUNT; uint public allTimeStakedAtDistribution; uint public allTimeRewards; uint public allTimeRewardsClaimed; uint public totalStaked; uint public currentRewardFactor; bool public isDepositingEnabled; struct User { uint rewardFactor; uint heldRewards; uint staked; } mapping(address => User) private _users; event DepositingEnabled(); event DepositingDisabled(); event MinimumDistributionUpdated(uint minimumDistribution); event Deposit(address user, uint amount); event Withdraw(address user, uint amount); event Claimed(address user, uint rewards); event Distributed(uint rewards, uint totalStaked); /// @param _oracle Oracle address constructor(address _oracle) { _setOracle(_oracle); operatingSystem = IERC20(OPERATING_SYSTEM); usdt = IERC20(USDT); } /// @notice Enable depositing function enableDepositing() external onlyOwner { require(!isDepositingEnabled, "OperatingSystemStaking: Depositing is already enabled"); isDepositingEnabled = true; emit DepositingEnabled(); } /// @notice Disable depositing function disableDepositing() external onlyOwner { require(isDepositingEnabled, "OperatingSystemStaking: Depositing is already disabled"); isDepositingEnabled = false; emit DepositingDisabled(); } /// @notice Set the minimum distribution amount /// @param _minimumDistribution Minimum distribution amount function setMinimumDistribution(uint _minimumDistribution) external onlyOwner { require(_minimumDistribution >= BASE_DISTRIBUTION_AMOUNT, "OperatingSystemStaking: _minimumDistribution must be greater than the base"); minimumDistribution = _minimumDistribution; emit MinimumDistributionUpdated(_minimumDistribution); } /// @notice Deposit Operating System /// @param _amount OS amount function deposit(uint _amount) external { require(isDepositingEnabled, "OperatingSystemStaking: Depositing is not allowed at this time"); require(_amount >= MINIMUM_STAKE, "OperatingSystemStaking: Amount must be greater than 1 OS"); /// @dev merge rewards prior to updating their staked balance because their rewards are dependant on their stake _mergeRewards(); _users[_msgSender()].staked += _amount; totalStaked += _amount; operatingSystem.safeTransferFrom(_msgSender(), address(this), _amount); emit Deposit(_msgSender(), _amount); } /// @notice Withdraw Operating System /// @param _amount OS amount function withdraw(uint _amount) external { User storage user = _users[_msgSender()]; require(_amount > 0, "OperatingSystemStaking: Amount to withdraw must be greater than zero"); require(_amount <= user.staked, "OperatingSystemStaking: Amount exceeds staked"); /// @dev merge rewards prior to updating their staked balance because their rewards are dependant on their stake _mergeRewards(); _users[_msgSender()].staked -= _amount; totalStaked -= _amount; operatingSystem.safeTransfer(_msgSender(), _amount); emit Withdraw(_msgSender(), _amount); } /// @notice Claim rewards function claimRewards() external { _mergeRewards(); uint heldRewards = _users[_msgSender()].heldRewards; require(heldRewards > 0, "OperatingSystemStaking: No rewards available to claim"); _users[_msgSender()].heldRewards = 0; allTimeRewardsClaimed += heldRewards; usdt.safeTransfer(_msgSender(), heldRewards); emit Claimed(_msgSender(), heldRewards); } /// @notice Distribute USDT (from the fund wallet) to staked users function distribute() external onlyOwnerOrOracle { require(totalStaked >= MINIMUM_STAKE, "OperatingSystemStaking: Total staked must be greater than 1 OS"); uint amount = usdt.balanceOf(STAKING_FUND); require(amount >= minimumDistribution, "OperatingSystemStaking: Insufficient amount"); require(usdt.allowance(STAKING_FUND, address(this)) >= amount, "OperatingSystemStaking: Insufficient allowance"); allTimeStakedAtDistribution += totalStaked; allTimeRewards += amount; currentRewardFactor += REWARD_FACTOR_ACCURACY * amount / totalStaked; usdt.safeTransferFrom(STAKING_FUND, address(this), amount); emit Distributed(amount, totalStaked); } /// @notice Get the staked balance for a user /// @param _user User address /// @return uint Staked balance function getStake(address _user) external view returns (uint) { return _users[_user].staked; } /// @notice Get the current rewards for a user /// @param _user User address /// @return uint Current rewards for _user function getReward(address _user) external view returns (uint) { return _getHeldRewards(_user) + _getCalculatedRewards(_user); } /// @param _user User address /// @return uint Held rewards function _getHeldRewards(address _user) private view returns (uint) { return _users[_user].heldRewards; } /// @param _user User address /// @return uint Calculated rewards function _getCalculatedRewards(address _user) private view returns (uint) { uint balance = _users[_user].staked; return balance * (currentRewardFactor - _users[_user].rewardFactor) / REWARD_FACTOR_ACCURACY; } /// @dev Merge held rewards with calculated rewards function _mergeRewards() private { _holdCalculatedRewards(); _users[_msgSender()].rewardFactor = currentRewardFactor; } /// @dev Convert calculated rewards into held rewards /// @dev Used when the user carries out an action that would cause their calculated rewards to change unexpectedly function _holdCalculatedRewards() private { uint calculatedReward = _getCalculatedRewards(_msgSender()); if (calculatedReward > 0) { _users[_msgSender()].heldRewards += calculatedReward; } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/utils/SafeERC20.sol) pragma solidity ^0.8.0; import "../IERC20.sol"; import "../extensions/draft-IERC20Permit.sol"; import "../../../utils/Address.sol"; /** * @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' 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)); } } 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"); if (returndata.length > 0) { // Return data is optional require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.6.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); }
//SPDX-License-Identifier: Unlicense pragma solidity = 0.8.9; import "@openzeppelin/contracts/access/Ownable.sol"; /// @title OracleManaged contract OracleManaged is Ownable { address private _oracle; event OracleUpdated(address indexed prev, address indexed next); modifier onlyOracle { require(_msgSender() == _oracle, "OracleManaged: caller is not the Oracle"); _; } modifier onlyOwnerOrOracle() { require(_msgSender() == owner() || _msgSender() == _oracle, "OracleManaged: Only the owner or oracle can call this function"); _; } /// @notice Get Oracle address /// @return address Oracle address function oracle() public view returns (address) { return _oracle; } /// @notice Set Oracle address /// @param _newOracle New Oracle address function setOracle(address _newOracle) external onlyOwner { _setOracle(_newOracle); } /// @dev Set Oracle address and emit event with previous and new address /// @param _newOracle New Oracle address function _setOracle(address _newOracle) internal { require(_newOracle != address(0), "OracleManaged: _newOracle cannot be the zero address"); address prev = _oracle; _oracle = _newOracle; emit OracleUpdated(prev, _newOracle); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * 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 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 { _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); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.8.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 * ==== * * [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://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"); (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); } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/draft-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); }
// SPDX-License-Identifier: MIT // 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; } }
{ "optimizer": { "enabled": true, "runs": 1000 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_oracle","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"rewards","type":"uint256"}],"name":"Claimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[],"name":"DepositingDisabled","type":"event"},{"anonymous":false,"inputs":[],"name":"DepositingEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"rewards","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalStaked","type":"uint256"}],"name":"Distributed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minimumDistribution","type":"uint256"}],"name":"MinimumDistributionUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"prev","type":"address"},{"indexed":true,"internalType":"address","name":"next","type":"address"}],"name":"OracleUpdated","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":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[],"name":"allTimeRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"allTimeRewardsClaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"allTimeStakedAtDistribution","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"currentRewardFactor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableDepositing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"distribute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableDepositing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"getReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"getStake","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isDepositingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumDistribution","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operatingSystem","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"oracle","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minimumDistribution","type":"uint256"}],"name":"setMinimumDistribution","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newOracle","type":"address"}],"name":"setOracle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalStaked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"usdt","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60c0604052620f42406002553480156200001857600080fd5b506040516200197b3803806200197b8339810160408190526200003b91620001ab565b620000463362000088565b6200005181620000d8565b507321ffe03caa6355cf1ca47b898921d2f70e85e42360805273dac17f958d2ee523a2206206994597c13d831ec760a052620001dd565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038116620001595760405162461bcd60e51b815260206004820152603460248201527f4f7261636c654d616e616765643a205f6e65774f7261636c652063616e6e6f7460448201527f20626520746865207a65726f2061646472657373000000000000000000000000606482015260840160405180910390fd5b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f078c3b417dadf69374a59793b829c52001247130433427049317bde56607b1b790600090a35050565b600060208284031215620001be57600080fd5b81516001600160a01b0381168114620001d657600080fd5b9392505050565b60805160a05161174e6200022d600039600081816101e2015281816106ad01528181610c1201528181610d580152610ec80152600081816102ee015281816105770152610a21015261174e6000f3fe608060405234801561001057600080fd5b506004361061018d5760003560e01c80637dc0d1d0116100e3578063b6b55f251161008c578063e4fc6b6d11610066578063e4fc6b6d14610310578063ec81532a14610318578063f2fde38b1461033557600080fd5b8063b6b55f25146102c3578063c00007b0146102d6578063d77132cc146102e957600080fd5b8063a14739d6116100bd578063a14739d61461029f578063a5d87d6c146102a8578063ae7c599a146102b057600080fd5b80637dc0d1d014610274578063817b1cd2146102855780638da5cb5b1461028e57600080fd5b80632f48ab7d11610145578063715018a61161011f578063715018a61461022d5780637a766460146102355780637adbf9731461026157600080fd5b80632f48ab7d146101dd578063372500ab1461021c57806361a04abe1461022457600080fd5b806308c111501161017657806308c11150146101b8578063264a2bf5146101c15780632e1a7d4d146101ca57600080fd5b806304d7ba1514610192578063082a27931461019c575b600080fd5b61019a610348565b005b6101a560045481565b6040519081526020015b60405180910390f35b6101a560025481565b6101a560035481565b61019a6101d836600461159a565b610406565b6102047f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101af565b61019a6105ed565b6101a560075481565b61019a610724565b6101a56102433660046115b3565b6001600160a01b031660009081526009602052604090206002015490565b61019a61026f3660046115b3565b610738565b6001546001600160a01b0316610204565b6101a560065481565b6000546001600160a01b0316610204565b6101a560055481565b61019a61074c565b61019a6102be36600461159a565b610801565b61019a6102d136600461159a565b6108dd565b6101a56102e43660046115b3565b610a78565b6102047f000000000000000000000000000000000000000000000000000000000000000081565b61019a610aaf565b6008546103259060ff1681565b60405190151581526020016101af565b61019a6103433660046115b3565b610f3e565b610350610fcb565b60085460ff16156103ce5760405162461bcd60e51b815260206004820152603560248201527f4f7065726174696e6753797374656d5374616b696e673a204465706f7369746960448201527f6e6720697320616c726561647920656e61626c6564000000000000000000000060648201526084015b60405180910390fd5b6008805460ff191660011790556040517f8d8235615e2606a7fbb90e968cf1f1d51deafcb5ec8e6c339883b812cf5e0c0c90600090a1565b336000908152600960205260409020816104af5760405162461bcd60e51b8152602060048201526044602482018190527f4f7065726174696e6753797374656d5374616b696e673a20416d6f756e742074908201527f6f207769746864726177206d7573742062652067726561746572207468616e2060648201527f7a65726f00000000000000000000000000000000000000000000000000000000608482015260a4016103c5565b80600201548211156105295760405162461bcd60e51b815260206004820152602d60248201527f4f7065726174696e6753797374656d5374616b696e673a20416d6f756e74206560448201527f786365656473207374616b65640000000000000000000000000000000000000060648201526084016103c5565b610531611025565b33600090815260096020526040812060020180548492906105539084906115f2565b92505081905550816006600082825461056c91906115f2565b909155506105a690507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163384611042565b7f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a942436433604080516001600160a01b039092168252602082018590520160405180910390a15050565b6105f5611025565b336000908152600960205260409020600101548061067b5760405162461bcd60e51b815260206004820152603560248201527f4f7065726174696e6753797374656d5374616b696e673a204e6f20726577617260448201527f647320617661696c61626c6520746f20636c61696d000000000000000000000060648201526084016103c5565b336000908152600960205260408120600101819055600580548392906106a2908490611609565b909155506106dc90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163383611042565b7fd8138f8a3f377c5259ca548e70e4c2de94f129f5a11036a15b69513cba2b426a335b604080516001600160a01b03909216825260208201849052015b60405180910390a150565b61072c610fcb565b61073660006110f0565b565b610740610fcb565b6107498161114d565b50565b610754610fcb565b60085460ff166107cc5760405162461bcd60e51b815260206004820152603660248201527f4f7065726174696e6753797374656d5374616b696e673a204465706f7369746960448201527f6e6720697320616c72656164792064697361626c65640000000000000000000060648201526084016103c5565b6008805460ff191690556040517f1d2df1f82541c9ce547cfbcb99cb9ea10d959f53ca0c7b47e17640932dadc42090600090a1565b610809610fcb565b620f42408110156108a85760405162461bcd60e51b815260206004820152604a60248201527f4f7065726174696e6753797374656d5374616b696e673a205f6d696e696d756d60448201527f446973747269627574696f6e206d75737420626520677265617465722074686160648201527f6e20746865206261736500000000000000000000000000000000000000000000608482015260a4016103c5565b60028190556040518181527f01b3c869c5ef83f224d8a50e7f4cdb1450d040cedc878c48c028d49b39228d9890602001610719565b60085460ff166109555760405162461bcd60e51b815260206004820152603e60248201527f4f7065726174696e6753797374656d5374616b696e673a204465706f7369746960448201527f6e67206973206e6f7420616c6c6f77656420617420746869732074696d65000060648201526084016103c5565b670de0b6b3a76400008110156109d35760405162461bcd60e51b815260206004820152603860248201527f4f7065726174696e6753797374656d5374616b696e673a20416d6f756e74206d60448201527f7573742062652067726561746572207468616e2031204f53000000000000000060648201526084016103c5565b6109db611025565b33600090815260096020526040812060020180548392906109fd908490611609565b925050819055508060066000828254610a169190611609565b90915550610a5190507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316333084611228565b7fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c336106ff565b6000610a838261127f565b6001600160a01b038316600090815260096020526040902060010154610aa99190611609565b92915050565b6000546001600160a01b0316331480610adb57506001546001600160a01b0316336001600160a01b0316145b610b4d5760405162461bcd60e51b815260206004820152603e60248201527f4f7261636c654d616e616765643a204f6e6c7920746865206f776e6572206f7260448201527f206f7261636c652063616e2063616c6c20746869732066756e6374696f6e000060648201526084016103c5565b670de0b6b3a76400006006541015610bcd5760405162461bcd60e51b815260206004820152603e60248201527f4f7065726174696e6753797374656d5374616b696e673a20546f74616c20737460448201527f616b6564206d7573742062652067726561746572207468616e2031204f53000060648201526084016103c5565b6040517f70a08231000000000000000000000000000000000000000000000000000000008152730a5a1209e93e03a9c341287bf4179944f23c9e5d60048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a082319060240160206040518083038186803b158015610c5c57600080fd5b505afa158015610c70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c949190611621565b9050600254811015610d0e5760405162461bcd60e51b815260206004820152602b60248201527f4f7065726174696e6753797374656d5374616b696e673a20496e73756666696360448201527f69656e7420616d6f756e7400000000000000000000000000000000000000000060648201526084016103c5565b6040517fdd62ed3e000000000000000000000000000000000000000000000000000000008152730a5a1209e93e03a9c341287bf4179944f23c9e5d600482015230602482015281907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063dd62ed3e9060440160206040518083038186803b158015610da257600080fd5b505afa158015610db6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dda9190611621565b1015610e4e5760405162461bcd60e51b815260206004820152602e60248201527f4f7065726174696e6753797374656d5374616b696e673a20496e73756666696360448201527f69656e7420616c6c6f77616e636500000000000000000000000000000000000060648201526084016103c5565b60065460036000828254610e629190611609565b925050819055508060046000828254610e7b9190611609565b9091555050600654610e9a826c0c9f2c9cd04674edea4000000061163a565b610ea49190611659565b60076000828254610eb59190611609565b90915550610f0490506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016730a5a1209e93e03a9c341287bf4179944f23c9e5d3084611228565b6006546040805183815260208101929092527f97791d3ac1343e05805a2f905fa80b249c2ca58cf9fef455d4fa7ec13ce583219101610719565b610f46610fcb565b6001600160a01b038116610fc25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016103c5565b610749816110f0565b6000546001600160a01b031633146107365760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103c5565b61102d6112d4565b60075433600090815260096020526040902055565b6040516001600160a01b0383166024820152604481018290526110eb9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611311565b505050565b600080546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0381166111c95760405162461bcd60e51b815260206004820152603460248201527f4f7261636c654d616e616765643a205f6e65774f7261636c652063616e6e6f7460448201527f20626520746865207a65726f206164647265737300000000000000000000000060648201526084016103c5565b600180546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681179093556040519116919082907f078c3b417dadf69374a59793b829c52001247130433427049317bde56607b1b790600090a35050565b6040516001600160a01b03808516602483015283166044820152606481018290526112799085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611087565b50505050565b6001600160a01b0381166000908152600960205260408120600281015490546007546c0c9f2c9cd04674edea40000000916112b9916115f2565b6112c3908361163a565b6112cd9190611659565b9392505050565b60006112df3361127f565b90508015610749573360009081526009602052604081206001018054839290611309908490611609565b909155505050565b6000611366826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166113f69092919063ffffffff16565b8051909150156110eb5780806020019051810190611384919061167b565b6110eb5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016103c5565b6060611405848460008561140d565b949350505050565b6060824710156114855760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016103c5565b600080866001600160a01b031685876040516114a191906116c9565b60006040518083038185875af1925050503d80600081146114de576040519150601f19603f3d011682016040523d82523d6000602084013e6114e3565b606091505b50915091506114f4878383876114ff565b979650505050505050565b6060831561156b578251611564576001600160a01b0385163b6115645760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016103c5565b5081611405565b61140583838151156115805781518083602001fd5b8060405162461bcd60e51b81526004016103c591906116e5565b6000602082840312156115ac57600080fd5b5035919050565b6000602082840312156115c557600080fd5b81356001600160a01b03811681146112cd57600080fd5b634e487b7160e01b600052601160045260246000fd5b600082821015611604576116046115dc565b500390565b6000821982111561161c5761161c6115dc565b500190565b60006020828403121561163357600080fd5b5051919050565b6000816000190483118215151615611654576116546115dc565b500290565b60008261167657634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561168d57600080fd5b815180151581146112cd57600080fd5b60005b838110156116b85781810151838201526020016116a0565b838111156112795750506000910152565b600082516116db81846020870161169d565b9190910192915050565b602081526000825180602084015261170481604085016020870161169d565b601f01601f1916919091016040019291505056fea26469706673582212208fffdc4764bd95571ed69df8881af9e80608d26266284b81b2195f31861352af64736f6c63430008090033000000000000000000000000e461ca0b4f219b10a6fd1c06a8022e8e986a335f
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061018d5760003560e01c80637dc0d1d0116100e3578063b6b55f251161008c578063e4fc6b6d11610066578063e4fc6b6d14610310578063ec81532a14610318578063f2fde38b1461033557600080fd5b8063b6b55f25146102c3578063c00007b0146102d6578063d77132cc146102e957600080fd5b8063a14739d6116100bd578063a14739d61461029f578063a5d87d6c146102a8578063ae7c599a146102b057600080fd5b80637dc0d1d014610274578063817b1cd2146102855780638da5cb5b1461028e57600080fd5b80632f48ab7d11610145578063715018a61161011f578063715018a61461022d5780637a766460146102355780637adbf9731461026157600080fd5b80632f48ab7d146101dd578063372500ab1461021c57806361a04abe1461022457600080fd5b806308c111501161017657806308c11150146101b8578063264a2bf5146101c15780632e1a7d4d146101ca57600080fd5b806304d7ba1514610192578063082a27931461019c575b600080fd5b61019a610348565b005b6101a560045481565b6040519081526020015b60405180910390f35b6101a560025481565b6101a560035481565b61019a6101d836600461159a565b610406565b6102047f000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec781565b6040516001600160a01b0390911681526020016101af565b61019a6105ed565b6101a560075481565b61019a610724565b6101a56102433660046115b3565b6001600160a01b031660009081526009602052604090206002015490565b61019a61026f3660046115b3565b610738565b6001546001600160a01b0316610204565b6101a560065481565b6000546001600160a01b0316610204565b6101a560055481565b61019a61074c565b61019a6102be36600461159a565b610801565b61019a6102d136600461159a565b6108dd565b6101a56102e43660046115b3565b610a78565b6102047f00000000000000000000000021ffe03caa6355cf1ca47b898921d2f70e85e42381565b61019a610aaf565b6008546103259060ff1681565b60405190151581526020016101af565b61019a6103433660046115b3565b610f3e565b610350610fcb565b60085460ff16156103ce5760405162461bcd60e51b815260206004820152603560248201527f4f7065726174696e6753797374656d5374616b696e673a204465706f7369746960448201527f6e6720697320616c726561647920656e61626c6564000000000000000000000060648201526084015b60405180910390fd5b6008805460ff191660011790556040517f8d8235615e2606a7fbb90e968cf1f1d51deafcb5ec8e6c339883b812cf5e0c0c90600090a1565b336000908152600960205260409020816104af5760405162461bcd60e51b8152602060048201526044602482018190527f4f7065726174696e6753797374656d5374616b696e673a20416d6f756e742074908201527f6f207769746864726177206d7573742062652067726561746572207468616e2060648201527f7a65726f00000000000000000000000000000000000000000000000000000000608482015260a4016103c5565b80600201548211156105295760405162461bcd60e51b815260206004820152602d60248201527f4f7065726174696e6753797374656d5374616b696e673a20416d6f756e74206560448201527f786365656473207374616b65640000000000000000000000000000000000000060648201526084016103c5565b610531611025565b33600090815260096020526040812060020180548492906105539084906115f2565b92505081905550816006600082825461056c91906115f2565b909155506105a690507f00000000000000000000000021ffe03caa6355cf1ca47b898921d2f70e85e4236001600160a01b03163384611042565b7f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a942436433604080516001600160a01b039092168252602082018590520160405180910390a15050565b6105f5611025565b336000908152600960205260409020600101548061067b5760405162461bcd60e51b815260206004820152603560248201527f4f7065726174696e6753797374656d5374616b696e673a204e6f20726577617260448201527f647320617661696c61626c6520746f20636c61696d000000000000000000000060648201526084016103c5565b336000908152600960205260408120600101819055600580548392906106a2908490611609565b909155506106dc90507f000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec76001600160a01b03163383611042565b7fd8138f8a3f377c5259ca548e70e4c2de94f129f5a11036a15b69513cba2b426a335b604080516001600160a01b03909216825260208201849052015b60405180910390a150565b61072c610fcb565b61073660006110f0565b565b610740610fcb565b6107498161114d565b50565b610754610fcb565b60085460ff166107cc5760405162461bcd60e51b815260206004820152603660248201527f4f7065726174696e6753797374656d5374616b696e673a204465706f7369746960448201527f6e6720697320616c72656164792064697361626c65640000000000000000000060648201526084016103c5565b6008805460ff191690556040517f1d2df1f82541c9ce547cfbcb99cb9ea10d959f53ca0c7b47e17640932dadc42090600090a1565b610809610fcb565b620f42408110156108a85760405162461bcd60e51b815260206004820152604a60248201527f4f7065726174696e6753797374656d5374616b696e673a205f6d696e696d756d60448201527f446973747269627574696f6e206d75737420626520677265617465722074686160648201527f6e20746865206261736500000000000000000000000000000000000000000000608482015260a4016103c5565b60028190556040518181527f01b3c869c5ef83f224d8a50e7f4cdb1450d040cedc878c48c028d49b39228d9890602001610719565b60085460ff166109555760405162461bcd60e51b815260206004820152603e60248201527f4f7065726174696e6753797374656d5374616b696e673a204465706f7369746960448201527f6e67206973206e6f7420616c6c6f77656420617420746869732074696d65000060648201526084016103c5565b670de0b6b3a76400008110156109d35760405162461bcd60e51b815260206004820152603860248201527f4f7065726174696e6753797374656d5374616b696e673a20416d6f756e74206d60448201527f7573742062652067726561746572207468616e2031204f53000000000000000060648201526084016103c5565b6109db611025565b33600090815260096020526040812060020180548392906109fd908490611609565b925050819055508060066000828254610a169190611609565b90915550610a5190507f00000000000000000000000021ffe03caa6355cf1ca47b898921d2f70e85e4236001600160a01b0316333084611228565b7fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c336106ff565b6000610a838261127f565b6001600160a01b038316600090815260096020526040902060010154610aa99190611609565b92915050565b6000546001600160a01b0316331480610adb57506001546001600160a01b0316336001600160a01b0316145b610b4d5760405162461bcd60e51b815260206004820152603e60248201527f4f7261636c654d616e616765643a204f6e6c7920746865206f776e6572206f7260448201527f206f7261636c652063616e2063616c6c20746869732066756e6374696f6e000060648201526084016103c5565b670de0b6b3a76400006006541015610bcd5760405162461bcd60e51b815260206004820152603e60248201527f4f7065726174696e6753797374656d5374616b696e673a20546f74616c20737460448201527f616b6564206d7573742062652067726561746572207468616e2031204f53000060648201526084016103c5565b6040517f70a08231000000000000000000000000000000000000000000000000000000008152730a5a1209e93e03a9c341287bf4179944f23c9e5d60048201526000907f000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec76001600160a01b0316906370a082319060240160206040518083038186803b158015610c5c57600080fd5b505afa158015610c70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c949190611621565b9050600254811015610d0e5760405162461bcd60e51b815260206004820152602b60248201527f4f7065726174696e6753797374656d5374616b696e673a20496e73756666696360448201527f69656e7420616d6f756e7400000000000000000000000000000000000000000060648201526084016103c5565b6040517fdd62ed3e000000000000000000000000000000000000000000000000000000008152730a5a1209e93e03a9c341287bf4179944f23c9e5d600482015230602482015281907f000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec76001600160a01b03169063dd62ed3e9060440160206040518083038186803b158015610da257600080fd5b505afa158015610db6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dda9190611621565b1015610e4e5760405162461bcd60e51b815260206004820152602e60248201527f4f7065726174696e6753797374656d5374616b696e673a20496e73756666696360448201527f69656e7420616c6c6f77616e636500000000000000000000000000000000000060648201526084016103c5565b60065460036000828254610e629190611609565b925050819055508060046000828254610e7b9190611609565b9091555050600654610e9a826c0c9f2c9cd04674edea4000000061163a565b610ea49190611659565b60076000828254610eb59190611609565b90915550610f0490506001600160a01b037f000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec716730a5a1209e93e03a9c341287bf4179944f23c9e5d3084611228565b6006546040805183815260208101929092527f97791d3ac1343e05805a2f905fa80b249c2ca58cf9fef455d4fa7ec13ce583219101610719565b610f46610fcb565b6001600160a01b038116610fc25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016103c5565b610749816110f0565b6000546001600160a01b031633146107365760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103c5565b61102d6112d4565b60075433600090815260096020526040902055565b6040516001600160a01b0383166024820152604481018290526110eb9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611311565b505050565b600080546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0381166111c95760405162461bcd60e51b815260206004820152603460248201527f4f7261636c654d616e616765643a205f6e65774f7261636c652063616e6e6f7460448201527f20626520746865207a65726f206164647265737300000000000000000000000060648201526084016103c5565b600180546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681179093556040519116919082907f078c3b417dadf69374a59793b829c52001247130433427049317bde56607b1b790600090a35050565b6040516001600160a01b03808516602483015283166044820152606481018290526112799085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611087565b50505050565b6001600160a01b0381166000908152600960205260408120600281015490546007546c0c9f2c9cd04674edea40000000916112b9916115f2565b6112c3908361163a565b6112cd9190611659565b9392505050565b60006112df3361127f565b90508015610749573360009081526009602052604081206001018054839290611309908490611609565b909155505050565b6000611366826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166113f69092919063ffffffff16565b8051909150156110eb5780806020019051810190611384919061167b565b6110eb5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016103c5565b6060611405848460008561140d565b949350505050565b6060824710156114855760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016103c5565b600080866001600160a01b031685876040516114a191906116c9565b60006040518083038185875af1925050503d80600081146114de576040519150601f19603f3d011682016040523d82523d6000602084013e6114e3565b606091505b50915091506114f4878383876114ff565b979650505050505050565b6060831561156b578251611564576001600160a01b0385163b6115645760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016103c5565b5081611405565b61140583838151156115805781518083602001fd5b8060405162461bcd60e51b81526004016103c591906116e5565b6000602082840312156115ac57600080fd5b5035919050565b6000602082840312156115c557600080fd5b81356001600160a01b03811681146112cd57600080fd5b634e487b7160e01b600052601160045260246000fd5b600082821015611604576116046115dc565b500390565b6000821982111561161c5761161c6115dc565b500190565b60006020828403121561163357600080fd5b5051919050565b6000816000190483118215151615611654576116546115dc565b500290565b60008261167657634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561168d57600080fd5b815180151581146112cd57600080fd5b60005b838110156116b85781810151838201526020016116a0565b838111156112795750506000910152565b600082516116db81846020870161169d565b9190910192915050565b602081526000825180602084015261170481604085016020870161169d565b601f01601f1916919091016040019291505056fea26469706673582212208fffdc4764bd95571ed69df8881af9e80608d26266284b81b2195f31861352af64736f6c63430008090033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000e461ca0b4f219b10a6fd1c06a8022e8e986a335f
-----Decoded View---------------
Arg [0] : _oracle (address): 0xe461Ca0b4F219B10a6fd1C06A8022E8E986a335f
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000e461ca0b4f219b10a6fd1c06a8022e8e986a335f
Deployed Bytecode Sourcemap
268:6922:7:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1983:220;;;:::i;:::-;;1116:26;;;;;;;;;160:25:8;;;148:2;133:18;1116:26:7;;;;;;;;1007:58;;;;;;1071:39;;;;;;3700:623;;;;;;:::i;:::-;;:::i;402:28::-;;;;;;;;-1:-1:-1;;;;;559:55:8;;;541:74;;529:2;514:18;402:28:7;381:240:8;4359:412:7;;;:::i;1216:31::-;;;;;;1831:101:0;;;:::i;5691:106:7:-;;;;;;:::i;:::-;-1:-1:-1;;;;;5770:13:7;5747:4;5770:13;;;:6;:13;;;;;:20;;;;5691:106;839:97:6;;;;;;:::i;:::-;;:::i;674:79::-;739:7;;-1:-1:-1;;;;;739:7:6;674:79;;1187:23:7;;;;;;1201:85:0;1247:7;1273:6;-1:-1:-1;;;;;1273:6:0;1201:85;;1148:33:7;;;;;;2244:223;;;:::i;2589:345::-;;;;;;:::i;:::-;;:::i;3014:605::-;;;;;;:::i;:::-;;:::i;5935:140::-;;;;;;:::i;:::-;;:::i;357:39::-;;;;;4848:717;;;:::i;1253:31::-;;;;;;;;;;;;1336:14:8;;1329:22;1311:41;;1299:2;1284:18;1253:31:7;1171:187:8;2081:198:0;;;;;;:::i;:::-;;:::i;1983:220:7:-;1094:13:0;:11;:13::i;:::-;2049:19:7::1;::::0;::::1;;2048:20;2040:86;;;::::0;-1:-1:-1;;;2040:86:7;;1565:2:8;2040:86:7::1;::::0;::::1;1547:21:8::0;1604:2;1584:18;;;1577:30;1643:34;1623:18;;;1616:62;1714:23;1694:18;;;1687:51;1755:19;;2040:86:7::1;;;;;;;;;2136:19;:26:::0;;-1:-1:-1;;2136:26:7::1;2158:4;2136:26;::::0;;2177:19:::1;::::0;::::1;::::0;2136::::1;::::0;2177::::1;1983:220::o:0;3700:623::-;719:10:5;3751:17:7;3771:20;;;:6;:20;;;;;3809:11;3801:92;;;;-1:-1:-1;;;3801:92:7;;1987:2:8;3801:92:7;;;1969:21:8;2026:2;2006:18;;;1999:30;;;2065:34;2045:18;;;2038:62;2136:34;2116:18;;;2109:62;2208:6;2187:19;;;2180:35;2232:19;;3801:92:7;1785:472:8;3801:92:7;3922:4;:11;;;3911:7;:22;;3903:80;;;;-1:-1:-1;;;3903:80:7;;2464:2:8;3903:80:7;;;2446:21:8;2503:2;2483:18;;;2476:30;2542:34;2522:18;;;2515:62;2613:15;2593:18;;;2586:43;2646:19;;3903:80:7;2262:409:8;3903:80:7;4114:15;:13;:15::i;:::-;719:10:5;4139:20:7;;;;:6;:20;;;;;:27;;:38;;4170:7;;4139:20;:38;;4170:7;;4139:38;:::i;:::-;;;;;;;;4202:7;4187:11;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;4219:51:7;;-1:-1:-1;4219:15:7;-1:-1:-1;;;;;4219:28:7;719:10:5;4262:7:7;4219:28;:51::i;:::-;4285:31;719:10:5;4285:31:7;;;-1:-1:-1;;;;;3187:55:8;;;3169:74;;3274:2;3259:18;;3252:34;;;3142:18;4285:31:7;;;;;;;3741:582;3700:623;:::o;4359:412::-;4402:15;:13;:15::i;:::-;719:10:5;4427:16:7;4446:20;;;:6;:20;;;;;:32;;;4496:15;4488:81;;;;-1:-1:-1;;;4488:81:7;;3499:2:8;4488:81:7;;;3481:21:8;3538:2;3518:18;;;3511:30;3577:34;3557:18;;;3550:62;3648:23;3628:18;;;3621:51;3689:19;;4488:81:7;3297:417:8;4488:81:7;719:10:5;4614:1:7;4579:20;;;:6;:20;;;;;:32;;:36;;;4625:21;:36;;4650:11;;4614:1;4625:36;;4650:11;;4625:36;:::i;:::-;;;;-1:-1:-1;4671:44:7;;-1:-1:-1;4671:4:7;-1:-1:-1;;;;;4671:17:7;719:10:5;4703:11:7;4671:17;:44::i;:::-;4730:34;719:10:5;4738:12:7;4730:34;;;-1:-1:-1;;;;;3187:55:8;;;3169:74;;3274:2;3259:18;;3252:34;;;3142:18;4730:34:7;;;;;;;;4392:379;4359:412::o;1831:101:0:-;1094:13;:11;:13::i;:::-;1895:30:::1;1922:1;1895:18;:30::i;:::-;1831:101::o:0;839:97:6:-;1094:13:0;:11;:13::i;:::-;907:22:6::1;918:10;907;:22::i;:::-;839:97:::0;:::o;2244:223:7:-;1094:13:0;:11;:13::i;:::-;2310:19:7::1;::::0;::::1;;2302:86;;;::::0;-1:-1:-1;;;2302:86:7;;4054:2:8;2302:86:7::1;::::0;::::1;4036:21:8::0;4093:2;4073:18;;;4066:30;4132:34;4112:18;;;4105:62;4203:24;4183:18;;;4176:52;4245:19;;2302:86:7::1;3852:418:8::0;2302:86:7::1;2398:19;:27:::0;;-1:-1:-1;;2398:27:7::1;::::0;;2440:20:::1;::::0;::::1;::::0;2420:5:::1;::::0;2440:20:::1;2244:223::o:0;2589:345::-;1094:13:0;:11;:13::i;:::-;943:7:7::1;2685:20;:48;;2677:135;;;::::0;-1:-1:-1;;;2677:135:7;;4477:2:8;2677:135:7::1;::::0;::::1;4459:21:8::0;4516:2;4496:18;;;4489:30;4555:34;4535:18;;;4528:62;4626:34;4606:18;;;4599:62;4698:12;4677:19;;;4670:41;4728:19;;2677:135:7::1;4275:478:8::0;2677:135:7::1;2822:19;:42:::0;;;2879:48:::1;::::0;160:25:8;;;2879:48:7::1;::::0;148:2:8;133:18;2879:48:7::1;14:177:8::0;3014:605:7;3072:19;;;;3064:94;;;;-1:-1:-1;;;3064:94:7;;4960:2:8;3064:94:7;;;4942:21:8;4999:2;4979:18;;;4972:30;5038:34;5018:18;;;5011:62;5109:32;5089:18;;;5082:60;5159:19;;3064:94:7;4758:426:8;3064:94:7;994:7;3176;:24;;3168:93;;;;-1:-1:-1;;;3168:93:7;;5391:2:8;3168:93:7;;;5373:21:8;5430:2;5410:18;;;5403:30;5469:34;5449:18;;;5442:62;5540:26;5520:18;;;5513:54;5584:19;;3168:93:7;5189:420:8;3168:93:7;3392:15;:13;:15::i;:::-;719:10:5;3417:20:7;;;;:6;:20;;;;;:27;;:38;;3448:7;;3417:20;:38;;3448:7;;3417:38;:::i;:::-;;;;;;;;3480:7;3465:11;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;3497:70:7;;-1:-1:-1;3497:15:7;-1:-1:-1;;;;;3497:32:7;719:10:5;3552:4:7;3559:7;3497:32;:70::i;:::-;3582:30;719:10:5;3590:12:7;640:96:5;5935:140:7;5992:4;6040:28;6062:5;6040:21;:28::i;:::-;-1:-1:-1;;;;;6234:13:7;;6211:4;6234:13;;;:6;:13;;;;;:25;;;6015:53;;;;:::i;:::-;6008:60;5935:140;-1:-1:-1;;5935:140:7:o;4848:717::-;1247:7:0;1273:6;-1:-1:-1;;;;;1273:6:0;719:10:5;459:23:6;;:50;;-1:-1:-1;502:7:6;;-1:-1:-1;;;;;502:7:6;719:10:5;-1:-1:-1;;;;;486:23:6;;459:50;451:125;;;;-1:-1:-1;;;451:125:6;;5816:2:8;451:125:6;;;5798:21:8;5855:2;5835:18;;;5828:30;5894:34;5874:18;;;5867:62;5965:32;5945:18;;;5938:60;6015:19;;451:125:6;5614:426:8;451:125:6;994:7:7::1;4915:11;;:28;;4907:103;;;::::0;-1:-1:-1;;;4907:103:7;;6247:2:8;4907:103:7::1;::::0;::::1;6229:21:8::0;6286:2;6266:18;;;6259:30;6325:34;6305:18;;;6298:62;6396:32;6376:18;;;6369:60;6446:19;;4907:103:7::1;6045:426:8::0;4907:103:7::1;5034:28;::::0;;;;476:42:::1;5034:28;::::0;::::1;541:74:8::0;5020:11:7::1;::::0;5034:4:::1;-1:-1:-1::0;;;;;5034:14:7::1;::::0;::::1;::::0;514:18:8;;5034:28:7::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5020:42;;5090:19;;5080:6;:29;;5072:85;;;::::0;-1:-1:-1;;;5072:85:7;;6867:2:8;5072:85:7::1;::::0;::::1;6849:21:8::0;6906:2;6886:18;;;6879:30;6945:34;6925:18;;;6918:62;7016:13;6996:18;;;6989:41;7047:19;;5072:85:7::1;6665:407:8::0;5072:85:7::1;5175:43;::::0;;;;476:42:::1;5175:43;::::0;::::1;7312:34:8::0;5212:4:7::1;7362:18:8::0;;;7355:43;5222:6:7;;5175:4:::1;-1:-1:-1::0;;;;;5175:14:7::1;::::0;::::1;::::0;7224:18:8;;5175:43:7::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:53;;5167:112;;;::::0;-1:-1:-1;;;5167:112:7;;7611:2:8;5167:112:7::1;::::0;::::1;7593:21:8::0;7650:2;7630:18;;;7623:30;7689:34;7669:18;;;7662:62;7760:16;7740:18;;;7733:44;7794:19;;5167:112:7::1;7409:410:8::0;5167:112:7::1;5320:11;;5289:27;;:42;;;;;;;:::i;:::-;;;;;;;;5359:6;5341:14;;:24;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;5432:11:7::1;::::0;5398:31:::1;5423:6:::0;865:23:::1;5398:31;:::i;:::-;:45;;;;:::i;:::-;5375:19;;:68;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;5453:58:7::1;::::0;-1:-1:-1;;;;;;5453:4:7::1;:21;476:42;5497:4;5504:6:::0;5453:21:::1;:58::i;:::-;5546:11;::::0;5526:32:::1;::::0;;8450:25:8;;;8506:2;8491:18;;8484:34;;;;5526:32:7::1;::::0;8423:18:8;5526:32:7::1;8276:248:8::0;2081:198:0;1094:13;:11;:13::i;:::-;-1:-1:-1;;;;;2169:22:0;::::1;2161:73;;;::::0;-1:-1:-1;;;2161:73:0;;8731:2:8;2161:73:0::1;::::0;::::1;8713:21:8::0;8770:2;8750:18;;;8743:30;8809:34;8789:18;;;8782:62;8880:8;8860:18;;;8853:36;8906:19;;2161:73:0::1;8529:402:8::0;2161:73:0::1;2244:28;2263:8;2244:18;:28::i;1359:130::-:0;1247:7;1273:6;-1:-1:-1;;;;;1273:6:0;719:10:5;1422:23:0;1414:68;;;;-1:-1:-1;;;1414:68:0;;9138:2:8;1414:68:0;;;9120:21:8;;;9157:18;;;9150:30;9216:34;9196:18;;;9189:62;9268:18;;1414:68:0;8936:356:8;6636:139:7;6679:24;:22;:24::i;:::-;6749:19;;719:10:5;6713:20:7;;;;:6;:20;;;;;:55;6636:139::o;763:205:3:-;902:58;;-1:-1:-1;;;;;3187:55:8;;902:58:3;;;3169:74:8;3259:18;;;3252:34;;;875:86:3;;895:5;;925:23;;3142:18:8;;902:58:3;;;;-1:-1:-1;;902:58:3;;;;;;;;;;;;;;;;;;;;;;;;;;;875:19;:86::i;:::-;763:205;;;:::o;2433:187:0:-;2506:16;2525:6;;-1:-1:-1;;;;;2541:17:0;;;-1:-1:-1;;2541:17:0;;;;;;2573:40;;2525:6;;;;;;;2573:40;;2506:16;2573:40;2496:124;2433:187;:::o;1064:263:6:-;-1:-1:-1;;;;;1131:24:6;;1123:89;;;;-1:-1:-1;;;1123:89:6;;9499:2:8;1123:89:6;;;9481:21:8;9538:2;9518:18;;;9511:30;9577:34;9557:18;;;9550:62;9648:22;9628:18;;;9621:50;9688:19;;1123:89:6;9297:416:8;1123:89:6;1237:7;;;-1:-1:-1;;;;;1254:20:6;;;-1:-1:-1;;1254:20:6;;;;;;;1289:31;;1237:7;;;1254:20;1237:7;;1289:31;;1222:12;;1289:31;1113:214;1064:263;:::o;974:241:3:-;1139:68;;-1:-1:-1;;;;;9999:15:8;;;1139:68:3;;;9981:34:8;10051:15;;10031:18;;;10024:43;10083:18;;;10076:34;;;1112:96:3;;1132:5;;1162:27;;9893:18:8;;1139:68:3;9718:398:8;1112:96:3;974:241;;;;:::o;6346:228:7:-;-1:-1:-1;;;;;6445:13:7;;6414:4;6445:13;;;:6;:13;;;;;:20;;;;6515:26;;6493:19;;865:23;;6493:48;;;:::i;:::-;6482:60;;:7;:60;:::i;:::-;:85;;;;:::i;:::-;6475:92;6346:228;-1:-1:-1;;;6346:228:7:o;6958:230::-;7010:21;7034:35;719:10:5;7034:21:7;:35::i;:::-;7010:59;-1:-1:-1;7083:20:7;;7079:103;;719:10:5;7119:20:7;;;;:6;:20;;;;;:32;;:52;;7155:16;;7119:20;:52;;7155:16;;7119:52;:::i;:::-;;;;-1:-1:-1;;7000:188:7;6958:230::o;3747:706:3:-;4166:23;4192:69;4220:4;4192:69;;;;;;;;;;;;;;;;;4200:5;-1:-1:-1;;;;;4192:27:3;;;:69;;;;;:::i;:::-;4275:17;;4166:95;;-1:-1:-1;4275:21:3;4271:176;;4370:10;4359:30;;;;;;;;;;;;:::i;:::-;4351:85;;;;-1:-1:-1;;;4351:85:3;;10605:2:8;4351:85:3;;;10587:21:8;10644:2;10624:18;;;10617:30;10683:34;10663:18;;;10656:62;10754:12;10734:18;;;10727:40;10784:19;;4351:85:3;10403:406:8;3873:223:4;4006:12;4037:52;4059:6;4067:4;4073:1;4076:12;4037:21;:52::i;:::-;4030:59;3873:223;-1:-1:-1;;;;3873:223:4:o;4960:446::-;5125:12;5182:5;5157:21;:30;;5149:81;;;;-1:-1:-1;;;5149:81:4;;11016:2:8;5149:81:4;;;10998:21:8;11055:2;11035:18;;;11028:30;11094:34;11074:18;;;11067:62;11165:8;11145:18;;;11138:36;11191:19;;5149:81:4;10814:402:8;5149:81:4;5241:12;5255:23;5282:6;-1:-1:-1;;;;;5282:11:4;5301:5;5308:4;5282:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5240:73;;;;5330:69;5357:6;5365:7;5374:10;5386:12;5330:26;:69::i;:::-;5323:76;4960:446;-1:-1:-1;;;;;;;4960:446:4:o;7466:628::-;7646:12;7674:7;7670:418;;;7701:17;;7697:286;;-1:-1:-1;;;;;1465:19:4;;;7908:60;;;;-1:-1:-1;;;7908:60:4;;11965:2:8;7908:60:4;;;11947:21:8;12004:2;11984:18;;;11977:30;12043:31;12023:18;;;12016:59;12092:18;;7908:60:4;11763:353:8;7908:60:4;-1:-1:-1;8003:10:4;7996:17;;7670:418;8044:33;8052:10;8064:12;8775:17;;:21;8771:379;;9003:10;8997:17;9059:15;9046:10;9042:2;9038:19;9031:44;8771:379;9126:12;9119:20;;-1:-1:-1;;;9119:20:4;;;;;;;;:::i;196:180:8:-;255:6;308:2;296:9;287:7;283:23;279:32;276:52;;;324:1;321;314:12;276:52;-1:-1:-1;347:23:8;;196:180;-1:-1:-1;196:180:8:o;626:309::-;685:6;738:2;726:9;717:7;713:23;709:32;706:52;;;754:1;751;744:12;706:52;793:9;780:23;-1:-1:-1;;;;;836:5:8;832:54;825:5;822:65;812:93;;901:1;898;891:12;2676:184;-1:-1:-1;;;2725:1:8;2718:88;2825:4;2822:1;2815:15;2849:4;2846:1;2839:15;2865:125;2905:4;2933:1;2930;2927:8;2924:34;;;2938:18;;:::i;:::-;-1:-1:-1;2975:9:8;;2865:125::o;3719:128::-;3759:3;3790:1;3786:6;3783:1;3780:13;3777:39;;;3796:18;;:::i;:::-;-1:-1:-1;3832:9:8;;3719:128::o;6476:184::-;6546:6;6599:2;6587:9;6578:7;6574:23;6570:32;6567:52;;;6615:1;6612;6605:12;6567:52;-1:-1:-1;6638:16:8;;6476:184;-1:-1:-1;6476:184:8:o;7824:168::-;7864:7;7930:1;7926;7922:6;7918:14;7915:1;7912:21;7907:1;7900:9;7893:17;7889:45;7886:71;;;7937:18;;:::i;:::-;-1:-1:-1;7977:9:8;;7824:168::o;7997:274::-;8037:1;8063;8053:189;;-1:-1:-1;;;8095:1:8;8088:88;8199:4;8196:1;8189:15;8227:4;8224:1;8217:15;8053:189;-1:-1:-1;8256:9:8;;7997:274::o;10121:277::-;10188:6;10241:2;10229:9;10220:7;10216:23;10212:32;10209:52;;;10257:1;10254;10247:12;10209:52;10289:9;10283:16;10342:5;10335:13;10328:21;10321:5;10318:32;10308:60;;10364:1;10361;10354:12;11221:258;11293:1;11303:113;11317:6;11314:1;11311:13;11303:113;;;11393:11;;;11387:18;11374:11;;;11367:39;11339:2;11332:10;11303:113;;;11434:6;11431:1;11428:13;11425:48;;;-1:-1:-1;;11469:1:8;11451:16;;11444:27;11221:258::o;11484:274::-;11613:3;11651:6;11645:13;11667:53;11713:6;11708:3;11701:4;11693:6;11689:17;11667:53;:::i;:::-;11736:16;;;;;11484:274;-1:-1:-1;;11484:274:8:o;12121:383::-;12270:2;12259:9;12252:21;12233:4;12302:6;12296:13;12345:6;12340:2;12329:9;12325:18;12318:34;12361:66;12420:6;12415:2;12404:9;12400:18;12395:2;12387:6;12383:15;12361:66;:::i;:::-;12488:2;12467:15;-1:-1:-1;;12463:29:8;12448:45;;;;12495:2;12444:54;;12121:383;-1:-1:-1;;12121:383:8:o
Swarm Source
ipfs://8fffdc4764bd95571ed69df8881af9e80608d26266284b81b2195f31861352af
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | 100.00% | $0.999384 | 12,483.6147 | $12,475.92 |
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.