More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 213 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Withdraw | 20896470 | 87 days ago | IN | 0 ETH | 0.00017688 | ||||
Withdraw | 20896443 | 87 days ago | IN | 0 ETH | 0.00016145 | ||||
Withdraw | 19642590 | 263 days ago | IN | 0 ETH | 0.00078524 | ||||
Withdraw | 19382037 | 299 days ago | IN | 0 ETH | 0.00264469 | ||||
Withdraw | 19382001 | 299 days ago | IN | 0 ETH | 0.00268251 | ||||
Withdraw | 19381992 | 299 days ago | IN | 0 ETH | 0.00263749 | ||||
Withdraw | 19334290 | 306 days ago | IN | 0 ETH | 0.00347842 | ||||
Withdraw | 19334277 | 306 days ago | IN | 0 ETH | 0.00361143 | ||||
Withdraw | 19321850 | 308 days ago | IN | 0 ETH | 0.00291988 | ||||
Withdraw | 19294476 | 311 days ago | IN | 0 ETH | 0.0016492 | ||||
Withdraw | 19112150 | 337 days ago | IN | 0 ETH | 0.00094331 | ||||
Withdraw | 19086626 | 341 days ago | IN | 0 ETH | 0.00096985 | ||||
Withdraw | 19086626 | 341 days ago | IN | 0 ETH | 0.00133152 | ||||
Withdraw | 19019788 | 350 days ago | IN | 0 ETH | 0.00239595 | ||||
Withdraw | 18926082 | 363 days ago | IN | 0 ETH | 0.00124545 | ||||
Withdraw | 18870579 | 371 days ago | IN | 0 ETH | 0.00102826 | ||||
Withdraw | 18848669 | 374 days ago | IN | 0 ETH | 0.00097633 | ||||
Withdraw | 18831099 | 376 days ago | IN | 0 ETH | 0.00163257 | ||||
Withdraw | 18805884 | 380 days ago | IN | 0 ETH | 0.00286595 | ||||
Withdraw | 18792136 | 382 days ago | IN | 0 ETH | 0.00269621 | ||||
Withdraw | 18777160 | 384 days ago | IN | 0 ETH | 0.0016392 | ||||
Withdraw | 18762645 | 386 days ago | IN | 0 ETH | 0.00120832 | ||||
Withdraw | 18747279 | 388 days ago | IN | 0 ETH | 0.00123622 | ||||
Withdraw | 18745281 | 388 days ago | IN | 0 ETH | 0.00185357 | ||||
Withdraw | 18724244 | 391 days ago | IN | 0 ETH | 0.00341801 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
CoinbackStaking
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-08-14 */ // 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.3) (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. Meant to be used with tokens that require the approval * to be set to zero before setting it to a non-zero value, such as USDT. */ 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: contracts/CoinbackStaking.sol pragma solidity 0.8.17; contract CoinbackStaking is Ownable { using SafeERC20 for IERC20; IERC20 public immutable stakingToken; uint constant SECONDS_IN_DAY = 24 * 60 * 60; uint constant HUNDRED = 100; uint public maxRewards = 30_000 * 10**18; uint public minRewards = 500 * 10**18; uint public periodStart; mapping(address=>uint) public stakedAmount; mapping(address=>uint) public stakeTimestamp; mapping(address=>uint) public debt; mapping(address=>uint) public debtTimestamp; event NewPeriodStarted(uint periodStart); event NewStakedAmount(address user, uint amount); event StakeWithdraw(address user, uint amount); event NewMaxRewards(uint newMaxRewards); event NewMinRewards(uint newMinRewards); error NotEnoughRewardsToStake(uint256 _balance, uint256 _reward); constructor(address _stakingToken) { stakingToken = IERC20(_stakingToken); periodStart = block.timestamp; } function stake(uint _amount) external { address user = msg.sender; uint balance = stakingToken.balanceOf(user); if (balance < _amount) { revert NotEnoughRewardsToStake(balance, _amount); } stakingToken.safeTransferFrom(user, address(this), _amount); debt[user] = debtTimestamp[user] > periodStart ? debt[user] + _getRewardsWithoutDebt(user) : _getRewardsWithoutDebt(user); debtTimestamp[user] = block.timestamp; stakedAmount[user] += _amount; stakeTimestamp[user] = block.timestamp; emit NewStakedAmount(user, _amount); } function withdraw() external { address user = msg.sender; uint toWithdraw = stakedAmount[user]; debt[user] = 0; stakeTimestamp[user] = 0; stakedAmount[user] = 0; stakingToken.safeTransfer(user, toWithdraw); emit StakeWithdraw(user, toWithdraw); } function getRewardsCountForCurrentPeriod(address _address) public view returns(uint) { return _getRewardsWithoutDebt(_address) + (debtTimestamp[_address] > periodStart ? debt[_address] : 0); } function getManyRewardsCountForCurrentPeriod(address[] memory _addresses) external view returns(uint[] memory) { uint[] memory txCounts = new uint[](_addresses.length); for (uint i = 0; i < _addresses.length; ) { txCounts[i] = getRewardsCountForCurrentPeriod(_addresses[i]); unchecked { ++i; } } return txCounts; } function _getRewardsWithoutDebt(address _address) private view returns(uint) { uint coefficient = _getCoefficient(_address); return (((block.timestamp - max(stakeTimestamp[_address], periodStart)) / SECONDS_IN_DAY) * coefficient); } function _getCoefficient(address _address) private view returns(uint) { uint currentAmount = stakedAmount[_address] > maxRewards ? maxRewards : stakedAmount[_address]; if (currentAmount < minRewards) { return 0; } return (currentAmount * HUNDRED) / maxRewards; } // Owner functions function newPeriod() public onlyOwner { periodStart = block.timestamp; emit NewPeriodStarted(periodStart); } function setMaxRewards(uint _amount) public onlyOwner { maxRewards = _amount; emit NewMaxRewards(maxRewards); } function setMinRewards(uint _amount) public onlyOwner { minRewards = _amount; emit NewMinRewards(minRewards); } // Util functions function max(uint a, uint b) private pure returns (uint) { return a > b ? a : b; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_stakingToken","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint256","name":"_balance","type":"uint256"},{"internalType":"uint256","name":"_reward","type":"uint256"}],"name":"NotEnoughRewardsToStake","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newMaxRewards","type":"uint256"}],"name":"NewMaxRewards","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newMinRewards","type":"uint256"}],"name":"NewMinRewards","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"periodStart","type":"uint256"}],"name":"NewPeriodStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"NewStakedAmount","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":"StakeWithdraw","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"debt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"debtTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"}],"name":"getManyRewardsCountForCurrentPeriod","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"getRewardsCountForCurrentPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"newPeriod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"periodStart","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setMaxRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setMinRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"stakeTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"stakedAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakingToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60a060405269065a4da25d3016c00000600155681b1ae4d6e2ef5000006002553480156200002c57600080fd5b5060405162001f2738038062001f278339818101604052810190620000529190620001ea565b6200007262000066620000b460201b60201c565b620000bc60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505042600381905550506200021c565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620001b28262000185565b9050919050565b620001c481620001a5565b8114620001d057600080fd5b50565b600081519050620001e481620001b9565b92915050565b60006020828403121562000203576200020262000180565b5b60006200021384828501620001d3565b91505092915050565b608051611cda6200024d600039600081816105820152818161067b015281816107de01526108c70152611cda6000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c80638da5cb5b116100a2578063d619658b11610071578063d619658b146102a7578063ddaf924b146102c5578063eda4e6d6146102f5578063f2fde38b14610313578063f99318551461032f57610116565b80638da5cb5b14610221578063902020661461023f5780639b6c56ec1461025b578063a694fc3a1461028b57610116565b80635e11544b116100e95780635e11544b1461018f5780637025907714610199578063715018a6146101c957806372f702f3146101d357806385d906cc146101f157610116565b806317fe6e091461011b57806320f897f61461013757806334535ee1146101675780633ccfd60b14610185575b600080fd5b61013560048036038101906101309190611277565b61035f565b005b610151600480360381019061014c919061145b565b6103aa565b60405161015e9190611562565b60405180910390f35b61016f61045d565b60405161017c9190611593565b60405180910390f35b61018d610463565b005b610197610603565b005b6101b360048036038101906101ae91906115ae565b61064d565b6040516101c09190611593565b60405180910390f35b6101d1610665565b005b6101db610679565b6040516101e8919061163a565b60405180910390f35b61020b600480360381019061020691906115ae565b61069d565b6040516102189190611593565b60405180910390f35b610229610749565b6040516102369190611664565b60405180910390f35b61025960048036038101906102549190611277565b610772565b005b610275600480360381019061027091906115ae565b6107bd565b6040516102829190611593565b60405180910390f35b6102a560048036038101906102a09190611277565b6107d5565b005b6102af610b15565b6040516102bc9190611593565b60405180910390f35b6102df60048036038101906102da91906115ae565b610b1b565b6040516102ec9190611593565b60405180910390f35b6102fd610b33565b60405161030a9190611593565b60405180910390f35b61032d600480360381019061032891906115ae565b610b39565b005b610349600480360381019061034491906115ae565b610bbc565b6040516103569190611593565b60405180910390f35b610367610bd4565b806002819055507f90d98840c6a94991564882c5e2dc4eeadb7010129d2a4815c2a6c3275928c4e560025460405161039f9190611593565b60405180910390a150565b60606000825167ffffffffffffffff8111156103c9576103c86112ba565b5b6040519080825280602002602001820160405280156103f75781602001602082028036833780820191505090505b50905060005b83518110156104535761042984828151811061041c5761041b61167f565b5b602002602001015161069d565b82828151811061043c5761043b61167f565b5b6020026020010181815250508060010190506103fd565b5080915050919050565b60025481565b60003390506000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506105c682827f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610c529092919063ffffffff16565b7f1248d48e2de900a1010c7fce73506969ecec243600bfc08b641b158f26d857cd82826040516105f79291906116ae565b60405180910390a15050565b61060b610bd4565b426003819055507f4368a9298adc0e57eceb11d0ef07022051a2feb5985d832be0764cde9a2307326003546040516106439190611593565b60405180910390a1565b60056020528060005260406000206000915090505481565b61066d610bd4565b6106776000610cd8565b565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600354600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054116106ee57600061072f565b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020545b61073883610d9c565b6107429190611706565b9050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61077a610bd4565b806001819055507f81decae4e1226f74df105ea09ad87330892bee4109b214ff66065fd2120b5bcd6001546040516107b29190611593565b60405180910390a150565b60066020528060005260406000206000915090505481565b600033905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b81526004016108359190611664565b602060405180830381865afa158015610852573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610876919061174f565b9050828110156108bf5780836040517f7a2e1b620000000000000000000000000000000000000000000000000000000081526004016108b692919061177c565b60405180910390fd5b61090c8230857f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610e21909392919063ffffffff16565b600354600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054116109625761095d82610d9c565b6109b6565b61096b82610d9c565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546109b59190611706565b5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555042600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555082600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610a8c9190611706565b9250508190555042600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507f039b3889a1291ff583085278002137b3576655b3e97287bfd5671a863de4e30c8284604051610b089291906116ae565b60405180910390a1505050565b60015481565b60076020528060005260406000206000915090505481565b60035481565b610b41610bd4565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610bb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba790611828565b60405180910390fd5b610bb981610cd8565b50565b60046020528060005260406000206000915090505481565b610bdc610eaa565b73ffffffffffffffffffffffffffffffffffffffff16610bfa610749565b73ffffffffffffffffffffffffffffffffffffffff1614610c50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4790611894565b60405180910390fd5b565b610cd38363a9059cbb60e01b8484604051602401610c719291906116ae565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050610eb2565b505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080610da883610f7a565b90508062015180610dfa600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600354611047565b42610e0591906118b4565b610e0f9190611917565b610e199190611948565b915050919050565b610ea4846323b872dd60e01b858585604051602401610e429392919061198a565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050610eb2565b50505050565b600033905090565b6000610f14826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166110609092919063ffffffff16565b9050600081511480610f36575080806020019051810190610f3591906119f9565b5b610f75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6c90611a98565b60405180910390fd5b505050565b600080600154600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541161100a57600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461100e565b6001545b9050600254811015611024576000915050611042565b6001546064826110349190611948565b61103e9190611917565b9150505b919050565b60008183116110565781611058565b825b905092915050565b606061106f8484600085611078565b90509392505050565b6060824710156110bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b490611b2a565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516110e69190611bbb565b60006040518083038185875af1925050503d8060008114611123576040519150601f19603f3d011682016040523d82523d6000602084013e611128565b606091505b509150915061113987838387611145565b92505050949350505050565b606083156111a757600083510361119f5761115f856111ba565b61119e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119590611c1e565b60405180910390fd5b5b8290506111b2565b6111b183836111dd565b5b949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000825111156111f05781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112249190611c82565b60405180910390fd5b6000604051905090565b600080fd5b600080fd5b6000819050919050565b61125481611241565b811461125f57600080fd5b50565b6000813590506112718161124b565b92915050565b60006020828403121561128d5761128c611237565b5b600061129b84828501611262565b91505092915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6112f2826112a9565b810181811067ffffffffffffffff82111715611311576113106112ba565b5b80604052505050565b600061132461122d565b905061133082826112e9565b919050565b600067ffffffffffffffff8211156113505761134f6112ba565b5b602082029050602081019050919050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061139182611366565b9050919050565b6113a181611386565b81146113ac57600080fd5b50565b6000813590506113be81611398565b92915050565b60006113d76113d284611335565b61131a565b905080838252602082019050602084028301858111156113fa576113f9611361565b5b835b81811015611423578061140f88826113af565b8452602084019350506020810190506113fc565b5050509392505050565b600082601f830112611442576114416112a4565b5b81356114528482602086016113c4565b91505092915050565b60006020828403121561147157611470611237565b5b600082013567ffffffffffffffff81111561148f5761148e61123c565b5b61149b8482850161142d565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6114d981611241565b82525050565b60006114eb83836114d0565b60208301905092915050565b6000602082019050919050565b600061150f826114a4565b61151981856114af565b9350611524836114c0565b8060005b8381101561155557815161153c88826114df565b9750611547836114f7565b925050600181019050611528565b5085935050505092915050565b6000602082019050818103600083015261157c8184611504565b905092915050565b61158d81611241565b82525050565b60006020820190506115a86000830184611584565b92915050565b6000602082840312156115c4576115c3611237565b5b60006115d2848285016113af565b91505092915050565b6000819050919050565b60006116006115fb6115f684611366565b6115db565b611366565b9050919050565b6000611612826115e5565b9050919050565b600061162482611607565b9050919050565b61163481611619565b82525050565b600060208201905061164f600083018461162b565b92915050565b61165e81611386565b82525050565b60006020820190506116796000830184611655565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006040820190506116c36000830185611655565b6116d06020830184611584565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061171182611241565b915061171c83611241565b9250828201905080821115611734576117336116d7565b5b92915050565b6000815190506117498161124b565b92915050565b60006020828403121561176557611764611237565b5b60006117738482850161173a565b91505092915050565b60006040820190506117916000830185611584565b61179e6020830184611584565b9392505050565b600082825260208201905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006118126026836117a5565b915061181d826117b6565b604082019050919050565b6000602082019050818103600083015261184181611805565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061187e6020836117a5565b915061188982611848565b602082019050919050565b600060208201905081810360008301526118ad81611871565b9050919050565b60006118bf82611241565b91506118ca83611241565b92508282039050818111156118e2576118e16116d7565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061192282611241565b915061192d83611241565b92508261193d5761193c6118e8565b5b828204905092915050565b600061195382611241565b915061195e83611241565b925082820261196c81611241565b91508282048414831517611983576119826116d7565b5b5092915050565b600060608201905061199f6000830186611655565b6119ac6020830185611655565b6119b96040830184611584565b949350505050565b60008115159050919050565b6119d6816119c1565b81146119e157600080fd5b50565b6000815190506119f3816119cd565b92915050565b600060208284031215611a0f57611a0e611237565b5b6000611a1d848285016119e4565b91505092915050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b6000611a82602a836117a5565b9150611a8d82611a26565b604082019050919050565b60006020820190508181036000830152611ab181611a75565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b6000611b146026836117a5565b9150611b1f82611ab8565b604082019050919050565b60006020820190508181036000830152611b4381611b07565b9050919050565b600081519050919050565b600081905092915050565b60005b83811015611b7e578082015181840152602081019050611b63565b60008484015250505050565b6000611b9582611b4a565b611b9f8185611b55565b9350611baf818560208601611b60565b80840191505092915050565b6000611bc78284611b8a565b915081905092915050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000611c08601d836117a5565b9150611c1382611bd2565b602082019050919050565b60006020820190508181036000830152611c3781611bfb565b9050919050565b600081519050919050565b6000611c5482611c3e565b611c5e81856117a5565b9350611c6e818560208601611b60565b611c77816112a9565b840191505092915050565b60006020820190508181036000830152611c9c8184611c49565b90509291505056fea264697066735822122049ac958042a40988eaba3d43817b3ae8d82ab9dd9ba5cfa1829f3bd0ffa3a5d364736f6c634300081100330000000000000000000000002e19067cbeb38d6554d31a1a83aefc4018a1688a
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101165760003560e01c80638da5cb5b116100a2578063d619658b11610071578063d619658b146102a7578063ddaf924b146102c5578063eda4e6d6146102f5578063f2fde38b14610313578063f99318551461032f57610116565b80638da5cb5b14610221578063902020661461023f5780639b6c56ec1461025b578063a694fc3a1461028b57610116565b80635e11544b116100e95780635e11544b1461018f5780637025907714610199578063715018a6146101c957806372f702f3146101d357806385d906cc146101f157610116565b806317fe6e091461011b57806320f897f61461013757806334535ee1146101675780633ccfd60b14610185575b600080fd5b61013560048036038101906101309190611277565b61035f565b005b610151600480360381019061014c919061145b565b6103aa565b60405161015e9190611562565b60405180910390f35b61016f61045d565b60405161017c9190611593565b60405180910390f35b61018d610463565b005b610197610603565b005b6101b360048036038101906101ae91906115ae565b61064d565b6040516101c09190611593565b60405180910390f35b6101d1610665565b005b6101db610679565b6040516101e8919061163a565b60405180910390f35b61020b600480360381019061020691906115ae565b61069d565b6040516102189190611593565b60405180910390f35b610229610749565b6040516102369190611664565b60405180910390f35b61025960048036038101906102549190611277565b610772565b005b610275600480360381019061027091906115ae565b6107bd565b6040516102829190611593565b60405180910390f35b6102a560048036038101906102a09190611277565b6107d5565b005b6102af610b15565b6040516102bc9190611593565b60405180910390f35b6102df60048036038101906102da91906115ae565b610b1b565b6040516102ec9190611593565b60405180910390f35b6102fd610b33565b60405161030a9190611593565b60405180910390f35b61032d600480360381019061032891906115ae565b610b39565b005b610349600480360381019061034491906115ae565b610bbc565b6040516103569190611593565b60405180910390f35b610367610bd4565b806002819055507f90d98840c6a94991564882c5e2dc4eeadb7010129d2a4815c2a6c3275928c4e560025460405161039f9190611593565b60405180910390a150565b60606000825167ffffffffffffffff8111156103c9576103c86112ba565b5b6040519080825280602002602001820160405280156103f75781602001602082028036833780820191505090505b50905060005b83518110156104535761042984828151811061041c5761041b61167f565b5b602002602001015161069d565b82828151811061043c5761043b61167f565b5b6020026020010181815250508060010190506103fd565b5080915050919050565b60025481565b60003390506000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506105c682827f0000000000000000000000002e19067cbeb38d6554d31a1a83aefc4018a1688a73ffffffffffffffffffffffffffffffffffffffff16610c529092919063ffffffff16565b7f1248d48e2de900a1010c7fce73506969ecec243600bfc08b641b158f26d857cd82826040516105f79291906116ae565b60405180910390a15050565b61060b610bd4565b426003819055507f4368a9298adc0e57eceb11d0ef07022051a2feb5985d832be0764cde9a2307326003546040516106439190611593565b60405180910390a1565b60056020528060005260406000206000915090505481565b61066d610bd4565b6106776000610cd8565b565b7f0000000000000000000000002e19067cbeb38d6554d31a1a83aefc4018a1688a81565b6000600354600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054116106ee57600061072f565b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020545b61073883610d9c565b6107429190611706565b9050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61077a610bd4565b806001819055507f81decae4e1226f74df105ea09ad87330892bee4109b214ff66065fd2120b5bcd6001546040516107b29190611593565b60405180910390a150565b60066020528060005260406000206000915090505481565b600033905060007f0000000000000000000000002e19067cbeb38d6554d31a1a83aefc4018a1688a73ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b81526004016108359190611664565b602060405180830381865afa158015610852573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610876919061174f565b9050828110156108bf5780836040517f7a2e1b620000000000000000000000000000000000000000000000000000000081526004016108b692919061177c565b60405180910390fd5b61090c8230857f0000000000000000000000002e19067cbeb38d6554d31a1a83aefc4018a1688a73ffffffffffffffffffffffffffffffffffffffff16610e21909392919063ffffffff16565b600354600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054116109625761095d82610d9c565b6109b6565b61096b82610d9c565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546109b59190611706565b5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555042600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555082600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610a8c9190611706565b9250508190555042600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507f039b3889a1291ff583085278002137b3576655b3e97287bfd5671a863de4e30c8284604051610b089291906116ae565b60405180910390a1505050565b60015481565b60076020528060005260406000206000915090505481565b60035481565b610b41610bd4565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610bb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba790611828565b60405180910390fd5b610bb981610cd8565b50565b60046020528060005260406000206000915090505481565b610bdc610eaa565b73ffffffffffffffffffffffffffffffffffffffff16610bfa610749565b73ffffffffffffffffffffffffffffffffffffffff1614610c50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4790611894565b60405180910390fd5b565b610cd38363a9059cbb60e01b8484604051602401610c719291906116ae565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050610eb2565b505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080610da883610f7a565b90508062015180610dfa600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600354611047565b42610e0591906118b4565b610e0f9190611917565b610e199190611948565b915050919050565b610ea4846323b872dd60e01b858585604051602401610e429392919061198a565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050610eb2565b50505050565b600033905090565b6000610f14826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166110609092919063ffffffff16565b9050600081511480610f36575080806020019051810190610f3591906119f9565b5b610f75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6c90611a98565b60405180910390fd5b505050565b600080600154600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541161100a57600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461100e565b6001545b9050600254811015611024576000915050611042565b6001546064826110349190611948565b61103e9190611917565b9150505b919050565b60008183116110565781611058565b825b905092915050565b606061106f8484600085611078565b90509392505050565b6060824710156110bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b490611b2a565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516110e69190611bbb565b60006040518083038185875af1925050503d8060008114611123576040519150601f19603f3d011682016040523d82523d6000602084013e611128565b606091505b509150915061113987838387611145565b92505050949350505050565b606083156111a757600083510361119f5761115f856111ba565b61119e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119590611c1e565b60405180910390fd5b5b8290506111b2565b6111b183836111dd565b5b949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000825111156111f05781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112249190611c82565b60405180910390fd5b6000604051905090565b600080fd5b600080fd5b6000819050919050565b61125481611241565b811461125f57600080fd5b50565b6000813590506112718161124b565b92915050565b60006020828403121561128d5761128c611237565b5b600061129b84828501611262565b91505092915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6112f2826112a9565b810181811067ffffffffffffffff82111715611311576113106112ba565b5b80604052505050565b600061132461122d565b905061133082826112e9565b919050565b600067ffffffffffffffff8211156113505761134f6112ba565b5b602082029050602081019050919050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061139182611366565b9050919050565b6113a181611386565b81146113ac57600080fd5b50565b6000813590506113be81611398565b92915050565b60006113d76113d284611335565b61131a565b905080838252602082019050602084028301858111156113fa576113f9611361565b5b835b81811015611423578061140f88826113af565b8452602084019350506020810190506113fc565b5050509392505050565b600082601f830112611442576114416112a4565b5b81356114528482602086016113c4565b91505092915050565b60006020828403121561147157611470611237565b5b600082013567ffffffffffffffff81111561148f5761148e61123c565b5b61149b8482850161142d565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6114d981611241565b82525050565b60006114eb83836114d0565b60208301905092915050565b6000602082019050919050565b600061150f826114a4565b61151981856114af565b9350611524836114c0565b8060005b8381101561155557815161153c88826114df565b9750611547836114f7565b925050600181019050611528565b5085935050505092915050565b6000602082019050818103600083015261157c8184611504565b905092915050565b61158d81611241565b82525050565b60006020820190506115a86000830184611584565b92915050565b6000602082840312156115c4576115c3611237565b5b60006115d2848285016113af565b91505092915050565b6000819050919050565b60006116006115fb6115f684611366565b6115db565b611366565b9050919050565b6000611612826115e5565b9050919050565b600061162482611607565b9050919050565b61163481611619565b82525050565b600060208201905061164f600083018461162b565b92915050565b61165e81611386565b82525050565b60006020820190506116796000830184611655565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006040820190506116c36000830185611655565b6116d06020830184611584565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061171182611241565b915061171c83611241565b9250828201905080821115611734576117336116d7565b5b92915050565b6000815190506117498161124b565b92915050565b60006020828403121561176557611764611237565b5b60006117738482850161173a565b91505092915050565b60006040820190506117916000830185611584565b61179e6020830184611584565b9392505050565b600082825260208201905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006118126026836117a5565b915061181d826117b6565b604082019050919050565b6000602082019050818103600083015261184181611805565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061187e6020836117a5565b915061188982611848565b602082019050919050565b600060208201905081810360008301526118ad81611871565b9050919050565b60006118bf82611241565b91506118ca83611241565b92508282039050818111156118e2576118e16116d7565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061192282611241565b915061192d83611241565b92508261193d5761193c6118e8565b5b828204905092915050565b600061195382611241565b915061195e83611241565b925082820261196c81611241565b91508282048414831517611983576119826116d7565b5b5092915050565b600060608201905061199f6000830186611655565b6119ac6020830185611655565b6119b96040830184611584565b949350505050565b60008115159050919050565b6119d6816119c1565b81146119e157600080fd5b50565b6000815190506119f3816119cd565b92915050565b600060208284031215611a0f57611a0e611237565b5b6000611a1d848285016119e4565b91505092915050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b6000611a82602a836117a5565b9150611a8d82611a26565b604082019050919050565b60006020820190508181036000830152611ab181611a75565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b6000611b146026836117a5565b9150611b1f82611ab8565b604082019050919050565b60006020820190508181036000830152611b4381611b07565b9050919050565b600081519050919050565b600081905092915050565b60005b83811015611b7e578082015181840152602081019050611b63565b60008484015250505050565b6000611b9582611b4a565b611b9f8185611b55565b9350611baf818560208601611b60565b80840191505092915050565b6000611bc78284611b8a565b915081905092915050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000611c08601d836117a5565b9150611c1382611bd2565b602082019050919050565b60006020820190508181036000830152611c3781611bfb565b9050919050565b600081519050919050565b6000611c5482611c3e565b611c5e81856117a5565b9350611c6e818560208601611b60565b611c77816112a9565b840191505092915050565b60006020820190508181036000830152611c9c8184611c49565b90509291505056fea264697066735822122049ac958042a40988eaba3d43817b3ae8d82ab9dd9ba5cfa1829f3bd0ffa3a5d364736f6c63430008110033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000002e19067cbeb38d6554d31a1a83aefc4018a1688a
-----Decoded View---------------
Arg [0] : _stakingToken (address): 0x2e19067Cbeb38d6554d31a1a83aefc4018A1688a
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000002e19067cbeb38d6554d31a1a83aefc4018a1688a
Deployed Bytecode Sourcemap
25528:3793:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29049:136;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27718:415;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25782:37;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27174:322;;;:::i;:::-;;28756:141;;;:::i;:::-;;25907:44;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24632:103;;;:::i;:::-;;25606:36;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27504:206;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23991:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28905:136;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25958:34;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26511:655;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25735:40;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25999:43;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25826:23;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24890:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25858:42;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29049:136;23877:13;:11;:13::i;:::-;29127:7:::1;29114:10;:20;;;;29152:25;29166:10;;29152:25;;;;;;:::i;:::-;;;;;;;;29049:136:::0;:::o;27718:415::-;27814:13;27840:22;27876:10;:17;27865:29;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27840:54;;27912:6;27907:191;27928:10;:17;27924:1;:21;27907:191;;;27978:46;28010:10;28021:1;28010:13;;;;;;;;:::i;:::-;;;;;;;;27978:31;:46::i;:::-;27964:8;27973:1;27964:11;;;;;;;;:::i;:::-;;;;;;;:60;;;;;28068:3;;;;;27907:191;;;;28117:8;28110:15;;;27718:415;;;:::o;25782:37::-;;;;:::o;27174:322::-;27214:12;27229:10;27214:25;;27252:15;27270:12;:18;27283:4;27270:18;;;;;;;;;;;;;;;;27252:36;;27314:1;27301:4;:10;27306:4;27301:10;;;;;;;;;;;;;;;:14;;;;27349:1;27326:14;:20;27341:4;27326:20;;;;;;;;;;;;;;;:24;;;;27382:1;27361:12;:18;27374:4;27361:18;;;;;;;;;;;;;;;:22;;;;27396:43;27422:4;27428:10;27396:12;:25;;;;:43;;;;;:::i;:::-;27457:31;27471:4;27477:10;27457:31;;;;;;;:::i;:::-;;;;;;;;27203:293;;27174:322::o;28756:141::-;23877:13;:11;:13::i;:::-;28819:15:::1;28805:11;:29;;;;28860;28877:11;;28860:29;;;;;;:::i;:::-;;;;;;;;28756:141::o:0;25907:44::-;;;;;;;;;;;;;;;;;:::o;24632:103::-;23877:13;:11;:13::i;:::-;24697:30:::1;24724:1;24697:18;:30::i;:::-;24632:103::o:0;25606:36::-;;;:::o;27504:206::-;27583:4;27669:11;;27643:13;:23;27657:8;27643:23;;;;;;;;;;;;;;;;:37;:58;;27700:1;27643:58;;;27683:4;:14;27688:8;27683:14;;;;;;;;;;;;;;;;27643:58;27607:32;27630:8;27607:22;:32::i;:::-;:95;;;;:::i;:::-;27600:102;;27504:206;;;:::o;23991:87::-;24037:7;24064:6;;;;;;;;;;;24057:13;;23991:87;:::o;28905:136::-;23877:13;:11;:13::i;:::-;28983:7:::1;28970:10;:20;;;;29008:25;29022:10;;29008:25;;;;;;:::i;:::-;;;;;;;;28905:136:::0;:::o;25958:34::-;;;;;;;;;;;;;;;;;:::o;26511:655::-;26560:12;26575:10;26560:25;;26598:12;26613;:22;;;26636:4;26613:28;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26598:43;;26666:7;26656;:17;26652:98;;;26721:7;26730;26697:41;;;;;;;;;;;;:::i;:::-;;;;;;;;26652:98;26762:59;26792:4;26806;26813:7;26762:12;:29;;;;:59;;;;;;:::i;:::-;26877:11;;26855:13;:19;26869:4;26855:19;;;;;;;;;;;;;;;;:33;:108;;26935:28;26958:4;26935:22;:28::i;:::-;26855:108;;;26904:28;26927:4;26904:22;:28::i;:::-;26891:4;:10;26896:4;26891:10;;;;;;;;;;;;;;;;:41;;;;:::i;:::-;26855:108;26842:4;:10;26847:4;26842:10;;;;;;;;;;;;;;;:121;;;;26996:15;26974:13;:19;26988:4;26974:19;;;;;;;;;;;;;;;:37;;;;27054:7;27032:12;:18;27045:4;27032:18;;;;;;;;;;;;;;;;:29;;;;;;;:::i;:::-;;;;;;;;27095:15;27072:14;:20;27087:4;27072:20;;;;;;;;;;;;;;;:38;;;;27128:30;27144:4;27150:7;27128:30;;;;;;;:::i;:::-;;;;;;;;26549:617;;26511:655;:::o;25735:40::-;;;;:::o;25999:43::-;;;;;;;;;;;;;;;;;:::o;25826:23::-;;;;:::o;24890:201::-;23877:13;:11;:13::i;:::-;24999:1:::1;24979:22;;:8;:22;;::::0;24971:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;25055:28;25074:8;25055:18;:28::i;:::-;24890:201:::0;:::o;25858:42::-;;;;;;;;;;;;;;;;;:::o;24156:132::-;24231:12;:10;:12::i;:::-;24220:23;;:7;:5;:7::i;:::-;:23;;;24212:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24156:132::o;15748:177::-;15831:86;15851:5;15881:23;;;15906:2;15910:5;15858:58;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15831:19;:86::i;:::-;15748:177;;;:::o;25251:191::-;25325:16;25344:6;;;;;;;;;;;25325:25;;25370:8;25361:6;;:17;;;;;;;;;;;;;;;;;;25425:8;25394:40;;25415:8;25394:40;;;;;;;;;;;;25314:128;25251:191;:::o;28141:255::-;28212:4;28229:16;28248:25;28264:8;28248:15;:25::i;:::-;28229:44;;28376:11;25682:12;28312:42;28316:14;:24;28331:8;28316:24;;;;;;;;;;;;;;;;28342:11;;28312:3;:42::i;:::-;28294:15;:60;;;;:::i;:::-;28293:79;;;;:::i;:::-;28292:95;;;;:::i;:::-;28284:104;;;28141:255;;;:::o;16170:205::-;16271:96;16291:5;16321:27;;;16350:4;16356:2;16360:5;16298:68;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16271:19;:96::i;:::-;16170:205;;;;:::o;22542:98::-;22595:7;22622:10;22615:17;;22542:98;:::o;20094:649::-;20518:23;20544:69;20572:4;20544:69;;;;;;;;;;;;;;;;;20552:5;20544:27;;;;:69;;;;;:::i;:::-;20518:95;;20653:1;20632:10;:17;:22;:56;;;;20669:10;20658:30;;;;;;;;;;;;:::i;:::-;20632:56;20624:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;20164:579;20094:649;;:::o;28404:320::-;28468:4;28485:18;28531:10;;28506:12;:22;28519:8;28506:22;;;;;;;;;;;;;;;;:35;:73;;28557:12;:22;28570:8;28557:22;;;;;;;;;;;;;;;;28506:73;;;28544:10;;28506:73;28485:94;;28612:10;;28596:13;:26;28592:67;;;28646:1;28639:8;;;;;28592:67;28706:10;;25725:3;28679:13;:23;;;;:::i;:::-;28678:38;;;;:::i;:::-;28671:45;;;28404:320;;;;:::o;29216:96::-;29267:4;29295:1;29291;:5;:13;;29303:1;29291:13;;;29299:1;29291:13;29284:20;;29216:96;;;;:::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;:::-;;;;;;;;7:75:1;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:329::-;749:6;798:2;786:9;777:7;773:23;769:32;766:119;;;804:79;;:::i;:::-;766:119;924:1;949:53;994:7;985:6;974:9;970:22;949:53;:::i;:::-;939:63;;895:117;690:329;;;;:::o;1025:117::-;1134:1;1131;1124:12;1148:102;1189:6;1240:2;1236:7;1231:2;1224:5;1220:14;1216:28;1206:38;;1148:102;;;:::o;1256:180::-;1304:77;1301:1;1294:88;1401:4;1398:1;1391:15;1425:4;1422:1;1415:15;1442:281;1525:27;1547:4;1525:27;:::i;:::-;1517:6;1513:40;1655:6;1643:10;1640:22;1619:18;1607:10;1604:34;1601:62;1598:88;;;1666:18;;:::i;:::-;1598:88;1706:10;1702:2;1695:22;1485:238;1442:281;;:::o;1729:129::-;1763:6;1790:20;;:::i;:::-;1780:30;;1819:33;1847:4;1839:6;1819:33;:::i;:::-;1729:129;;;:::o;1864:311::-;1941:4;2031:18;2023:6;2020:30;2017:56;;;2053:18;;:::i;:::-;2017:56;2103:4;2095:6;2091:17;2083:25;;2163:4;2157;2153:15;2145:23;;1864:311;;;:::o;2181:117::-;2290:1;2287;2280:12;2304:126;2341:7;2381:42;2374:5;2370:54;2359:65;;2304:126;;;:::o;2436:96::-;2473:7;2502:24;2520:5;2502:24;:::i;:::-;2491:35;;2436:96;;;:::o;2538:122::-;2611:24;2629:5;2611:24;:::i;:::-;2604:5;2601:35;2591:63;;2650:1;2647;2640:12;2591:63;2538:122;:::o;2666:139::-;2712:5;2750:6;2737:20;2728:29;;2766:33;2793:5;2766:33;:::i;:::-;2666:139;;;;:::o;2828:710::-;2924:5;2949:81;2965:64;3022:6;2965:64;:::i;:::-;2949:81;:::i;:::-;2940:90;;3050:5;3079:6;3072:5;3065:21;3113:4;3106:5;3102:16;3095:23;;3166:4;3158:6;3154:17;3146:6;3142:30;3195:3;3187:6;3184:15;3181:122;;;3214:79;;:::i;:::-;3181:122;3329:6;3312:220;3346:6;3341:3;3338:15;3312:220;;;3421:3;3450:37;3483:3;3471:10;3450:37;:::i;:::-;3445:3;3438:50;3517:4;3512:3;3508:14;3501:21;;3388:144;3372:4;3367:3;3363:14;3356:21;;3312:220;;;3316:21;2930:608;;2828:710;;;;;:::o;3561:370::-;3632:5;3681:3;3674:4;3666:6;3662:17;3658:27;3648:122;;3689:79;;:::i;:::-;3648:122;3806:6;3793:20;3831:94;3921:3;3913:6;3906:4;3898:6;3894:17;3831:94;:::i;:::-;3822:103;;3638:293;3561:370;;;;:::o;3937:539::-;4021:6;4070:2;4058:9;4049:7;4045:23;4041:32;4038:119;;;4076:79;;:::i;:::-;4038:119;4224:1;4213:9;4209:17;4196:31;4254:18;4246:6;4243:30;4240:117;;;4276:79;;:::i;:::-;4240:117;4381:78;4451:7;4442:6;4431:9;4427:22;4381:78;:::i;:::-;4371:88;;4167:302;3937:539;;;;:::o;4482:114::-;4549:6;4583:5;4577:12;4567:22;;4482:114;;;:::o;4602:184::-;4701:11;4735:6;4730:3;4723:19;4775:4;4770:3;4766:14;4751:29;;4602:184;;;;:::o;4792:132::-;4859:4;4882:3;4874:11;;4912:4;4907:3;4903:14;4895:22;;4792:132;;;:::o;4930:108::-;5007:24;5025:5;5007:24;:::i;:::-;5002:3;4995:37;4930:108;;:::o;5044:179::-;5113:10;5134:46;5176:3;5168:6;5134:46;:::i;:::-;5212:4;5207:3;5203:14;5189:28;;5044:179;;;;:::o;5229:113::-;5299:4;5331;5326:3;5322:14;5314:22;;5229:113;;;:::o;5378:732::-;5497:3;5526:54;5574:5;5526:54;:::i;:::-;5596:86;5675:6;5670:3;5596:86;:::i;:::-;5589:93;;5706:56;5756:5;5706:56;:::i;:::-;5785:7;5816:1;5801:284;5826:6;5823:1;5820:13;5801:284;;;5902:6;5896:13;5929:63;5988:3;5973:13;5929:63;:::i;:::-;5922:70;;6015:60;6068:6;6015:60;:::i;:::-;6005:70;;5861:224;5848:1;5845;5841:9;5836:14;;5801:284;;;5805:14;6101:3;6094:10;;5502:608;;;5378:732;;;;:::o;6116:373::-;6259:4;6297:2;6286:9;6282:18;6274:26;;6346:9;6340:4;6336:20;6332:1;6321:9;6317:17;6310:47;6374:108;6477:4;6468:6;6374:108;:::i;:::-;6366:116;;6116:373;;;;:::o;6495:118::-;6582:24;6600:5;6582:24;:::i;:::-;6577:3;6570:37;6495:118;;:::o;6619:222::-;6712:4;6750:2;6739:9;6735:18;6727:26;;6763:71;6831:1;6820:9;6816:17;6807:6;6763:71;:::i;:::-;6619:222;;;;:::o;6847:329::-;6906:6;6955:2;6943:9;6934:7;6930:23;6926:32;6923:119;;;6961:79;;:::i;:::-;6923:119;7081:1;7106:53;7151:7;7142:6;7131:9;7127:22;7106:53;:::i;:::-;7096:63;;7052:117;6847:329;;;;:::o;7182:60::-;7210:3;7231:5;7224:12;;7182:60;;;:::o;7248:142::-;7298:9;7331:53;7349:34;7358:24;7376:5;7358:24;:::i;:::-;7349:34;:::i;:::-;7331:53;:::i;:::-;7318:66;;7248:142;;;:::o;7396:126::-;7446:9;7479:37;7510:5;7479:37;:::i;:::-;7466:50;;7396:126;;;:::o;7528:140::-;7592:9;7625:37;7656:5;7625:37;:::i;:::-;7612:50;;7528:140;;;:::o;7674:159::-;7775:51;7820:5;7775:51;:::i;:::-;7770:3;7763:64;7674:159;;:::o;7839:250::-;7946:4;7984:2;7973:9;7969:18;7961:26;;7997:85;8079:1;8068:9;8064:17;8055:6;7997:85;:::i;:::-;7839:250;;;;:::o;8095:118::-;8182:24;8200:5;8182:24;:::i;:::-;8177:3;8170:37;8095:118;;:::o;8219:222::-;8312:4;8350:2;8339:9;8335:18;8327:26;;8363:71;8431:1;8420:9;8416:17;8407:6;8363:71;:::i;:::-;8219:222;;;;:::o;8447:180::-;8495:77;8492:1;8485:88;8592:4;8589:1;8582:15;8616:4;8613:1;8606:15;8633:332;8754:4;8792:2;8781:9;8777:18;8769:26;;8805:71;8873:1;8862:9;8858:17;8849:6;8805:71;:::i;:::-;8886:72;8954:2;8943:9;8939:18;8930:6;8886:72;:::i;:::-;8633:332;;;;;:::o;8971:180::-;9019:77;9016:1;9009:88;9116:4;9113:1;9106:15;9140:4;9137:1;9130:15;9157:191;9197:3;9216:20;9234:1;9216:20;:::i;:::-;9211:25;;9250:20;9268:1;9250:20;:::i;:::-;9245:25;;9293:1;9290;9286:9;9279:16;;9314:3;9311:1;9308:10;9305:36;;;9321:18;;:::i;:::-;9305:36;9157:191;;;;:::o;9354:143::-;9411:5;9442:6;9436:13;9427:22;;9458:33;9485:5;9458:33;:::i;:::-;9354:143;;;;:::o;9503:351::-;9573:6;9622:2;9610:9;9601:7;9597:23;9593:32;9590:119;;;9628:79;;:::i;:::-;9590:119;9748:1;9773:64;9829:7;9820:6;9809:9;9805:22;9773:64;:::i;:::-;9763:74;;9719:128;9503:351;;;;:::o;9860:332::-;9981:4;10019:2;10008:9;10004:18;9996:26;;10032:71;10100:1;10089:9;10085:17;10076:6;10032:71;:::i;:::-;10113:72;10181:2;10170:9;10166:18;10157:6;10113:72;:::i;:::-;9860:332;;;;;:::o;10198:169::-;10282:11;10316:6;10311:3;10304:19;10356:4;10351:3;10347:14;10332:29;;10198:169;;;;:::o;10373:225::-;10513:34;10509:1;10501:6;10497:14;10490:58;10582:8;10577:2;10569:6;10565:15;10558:33;10373:225;:::o;10604:366::-;10746:3;10767:67;10831:2;10826:3;10767:67;:::i;:::-;10760:74;;10843:93;10932:3;10843:93;:::i;:::-;10961:2;10956:3;10952:12;10945:19;;10604:366;;;:::o;10976:419::-;11142:4;11180:2;11169:9;11165:18;11157:26;;11229:9;11223:4;11219:20;11215:1;11204:9;11200:17;11193:47;11257:131;11383:4;11257:131;:::i;:::-;11249:139;;10976:419;;;:::o;11401:182::-;11541:34;11537:1;11529:6;11525:14;11518:58;11401:182;:::o;11589:366::-;11731:3;11752:67;11816:2;11811:3;11752:67;:::i;:::-;11745:74;;11828:93;11917:3;11828:93;:::i;:::-;11946:2;11941:3;11937:12;11930:19;;11589:366;;;:::o;11961:419::-;12127:4;12165:2;12154:9;12150:18;12142:26;;12214:9;12208:4;12204:20;12200:1;12189:9;12185:17;12178:47;12242:131;12368:4;12242:131;:::i;:::-;12234:139;;11961:419;;;:::o;12386:194::-;12426:4;12446:20;12464:1;12446:20;:::i;:::-;12441:25;;12480:20;12498:1;12480:20;:::i;:::-;12475:25;;12524:1;12521;12517:9;12509:17;;12548:1;12542:4;12539:11;12536:37;;;12553:18;;:::i;:::-;12536:37;12386:194;;;;:::o;12586:180::-;12634:77;12631:1;12624:88;12731:4;12728:1;12721:15;12755:4;12752:1;12745:15;12772:185;12812:1;12829:20;12847:1;12829:20;:::i;:::-;12824:25;;12863:20;12881:1;12863:20;:::i;:::-;12858:25;;12902:1;12892:35;;12907:18;;:::i;:::-;12892:35;12949:1;12946;12942:9;12937:14;;12772:185;;;;:::o;12963:410::-;13003:7;13026:20;13044:1;13026:20;:::i;:::-;13021:25;;13060:20;13078:1;13060:20;:::i;:::-;13055:25;;13115:1;13112;13108:9;13137:30;13155:11;13137:30;:::i;:::-;13126:41;;13316:1;13307:7;13303:15;13300:1;13297:22;13277:1;13270:9;13250:83;13227:139;;13346:18;;:::i;:::-;13227:139;13011:362;12963:410;;;;:::o;13379:442::-;13528:4;13566:2;13555:9;13551:18;13543:26;;13579:71;13647:1;13636:9;13632:17;13623:6;13579:71;:::i;:::-;13660:72;13728:2;13717:9;13713:18;13704:6;13660:72;:::i;:::-;13742;13810:2;13799:9;13795:18;13786:6;13742:72;:::i;:::-;13379:442;;;;;;:::o;13827:90::-;13861:7;13904:5;13897:13;13890:21;13879:32;;13827:90;;;:::o;13923:116::-;13993:21;14008:5;13993:21;:::i;:::-;13986:5;13983:32;13973:60;;14029:1;14026;14019:12;13973:60;13923:116;:::o;14045:137::-;14099:5;14130:6;14124:13;14115:22;;14146:30;14170:5;14146:30;:::i;:::-;14045:137;;;;:::o;14188:345::-;14255:6;14304:2;14292:9;14283:7;14279:23;14275:32;14272:119;;;14310:79;;:::i;:::-;14272:119;14430:1;14455:61;14508:7;14499:6;14488:9;14484:22;14455:61;:::i;:::-;14445:71;;14401:125;14188:345;;;;:::o;14539:229::-;14679:34;14675:1;14667:6;14663:14;14656:58;14748:12;14743:2;14735:6;14731:15;14724:37;14539:229;:::o;14774:366::-;14916:3;14937:67;15001:2;14996:3;14937:67;:::i;:::-;14930:74;;15013:93;15102:3;15013:93;:::i;:::-;15131:2;15126:3;15122:12;15115:19;;14774:366;;;:::o;15146:419::-;15312:4;15350:2;15339:9;15335:18;15327:26;;15399:9;15393:4;15389:20;15385:1;15374:9;15370:17;15363:47;15427:131;15553:4;15427:131;:::i;:::-;15419:139;;15146:419;;;:::o;15571:225::-;15711:34;15707:1;15699:6;15695:14;15688:58;15780:8;15775:2;15767:6;15763:15;15756:33;15571:225;:::o;15802:366::-;15944:3;15965:67;16029:2;16024:3;15965:67;:::i;:::-;15958:74;;16041:93;16130:3;16041:93;:::i;:::-;16159:2;16154:3;16150:12;16143:19;;15802:366;;;:::o;16174:419::-;16340:4;16378:2;16367:9;16363:18;16355:26;;16427:9;16421:4;16417:20;16413:1;16402:9;16398:17;16391:47;16455:131;16581:4;16455:131;:::i;:::-;16447:139;;16174:419;;;:::o;16599:98::-;16650:6;16684:5;16678:12;16668:22;;16599:98;;;:::o;16703:147::-;16804:11;16841:3;16826:18;;16703:147;;;;:::o;16856:246::-;16937:1;16947:113;16961:6;16958:1;16955:13;16947:113;;;17046:1;17041:3;17037:11;17031:18;17027:1;17022:3;17018:11;17011:39;16983:2;16980:1;16976:10;16971:15;;16947:113;;;17094:1;17085:6;17080:3;17076:16;17069:27;16918:184;16856:246;;;:::o;17108:386::-;17212:3;17240:38;17272:5;17240:38;:::i;:::-;17294:88;17375:6;17370:3;17294:88;:::i;:::-;17287:95;;17391:65;17449:6;17444:3;17437:4;17430:5;17426:16;17391:65;:::i;:::-;17481:6;17476:3;17472:16;17465:23;;17216:278;17108:386;;;;:::o;17500:271::-;17630:3;17652:93;17741:3;17732:6;17652:93;:::i;:::-;17645:100;;17762:3;17755:10;;17500:271;;;;:::o;17777:179::-;17917:31;17913:1;17905:6;17901:14;17894:55;17777:179;:::o;17962:366::-;18104:3;18125:67;18189:2;18184:3;18125:67;:::i;:::-;18118:74;;18201:93;18290:3;18201:93;:::i;:::-;18319:2;18314:3;18310:12;18303:19;;17962:366;;;:::o;18334:419::-;18500:4;18538:2;18527:9;18523:18;18515:26;;18587:9;18581:4;18577:20;18573:1;18562:9;18558:17;18551:47;18615:131;18741:4;18615:131;:::i;:::-;18607:139;;18334:419;;;:::o;18759:99::-;18811:6;18845:5;18839:12;18829:22;;18759:99;;;:::o;18864:377::-;18952:3;18980:39;19013:5;18980:39;:::i;:::-;19035:71;19099:6;19094:3;19035:71;:::i;:::-;19028:78;;19115:65;19173:6;19168:3;19161:4;19154:5;19150:16;19115:65;:::i;:::-;19205:29;19227:6;19205:29;:::i;:::-;19200:3;19196:39;19189:46;;18956:285;18864:377;;;;:::o;19247:313::-;19360:4;19398:2;19387:9;19383:18;19375:26;;19447:9;19441:4;19437:20;19433:1;19422:9;19418:17;19411:47;19475:78;19548:4;19539:6;19475:78;:::i;:::-;19467:86;;19247:313;;;;:::o
Swarm Source
ipfs://49ac958042a40988eaba3d43817b3ae8d82ab9dd9ba5cfa1829f3bd0ffa3a5d3
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | 100.00% | $0.023433 | 8,710.3447 | $204.11 |
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.