More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 1,077 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Emergency Withdr... | 21508892 | 21 days ago | IN | 0 ETH | 0.0001717 | ||||
Withdraw | 19858736 | 252 days ago | IN | 0 ETH | 0.0005178 | ||||
Withdraw | 19154386 | 351 days ago | IN | 0 ETH | 0.00192473 | ||||
Withdraw | 19079125 | 361 days ago | IN | 0 ETH | 0.00305694 | ||||
Withdraw | 18945629 | 380 days ago | IN | 0 ETH | 0.00155222 | ||||
Withdraw | 18941322 | 380 days ago | IN | 0 ETH | 0.00275738 | ||||
Withdraw | 18939530 | 381 days ago | IN | 0 ETH | 0.00201856 | ||||
Withdraw | 18936864 | 381 days ago | IN | 0 ETH | 0.00288257 | ||||
Withdraw | 18922412 | 383 days ago | IN | 0 ETH | 0.00345613 | ||||
Claim Rewards | 18888894 | 388 days ago | IN | 0 ETH | 0.00232784 | ||||
Withdraw | 18806198 | 399 days ago | IN | 0 ETH | 0.00448028 | ||||
Withdraw | 18806195 | 399 days ago | IN | 0 ETH | 0.00454447 | ||||
Claim Rewards | 18806192 | 399 days ago | IN | 0 ETH | 0.00512452 | ||||
Withdraw | 18803412 | 400 days ago | IN | 0 ETH | 0.00433519 | ||||
Withdraw | 18787740 | 402 days ago | IN | 0 ETH | 0.00406456 | ||||
Withdraw | 18787596 | 402 days ago | IN | 0 ETH | 0.00435317 | ||||
Withdraw | 18787594 | 402 days ago | IN | 0 ETH | 0.00429697 | ||||
Claim Rewards | 18787592 | 402 days ago | IN | 0 ETH | 0.00503322 | ||||
Withdraw | 18756519 | 406 days ago | IN | 0 ETH | 0.0029607 | ||||
Claim Rewards | 18756490 | 406 days ago | IN | 0 ETH | 0.00317533 | ||||
Withdraw | 18741692 | 408 days ago | IN | 0 ETH | 0.00598857 | ||||
Withdraw | 18688448 | 416 days ago | IN | 0 ETH | 0.00383702 | ||||
Withdraw | 18688419 | 416 days ago | IN | 0 ETH | 0.00389935 | ||||
Withdraw | 18688417 | 416 days ago | IN | 0 ETH | 0.00404106 | ||||
Claim Rewards | 18688415 | 416 days ago | IN | 0 ETH | 0.00538465 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
Staking
Compiler Version
v0.8.18+commit.87f61d96
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-05-14 */ 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); } 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; } } 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 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); } } 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); } 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 functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason 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 { // 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); } } } } 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; 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"); } } } pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } contract Staking is Ownable, ReentrancyGuard { using SafeERC20 for IERC20; // Info of each user. struct UserInfo { uint256 amount; // How many tokens the user has provided. uint256 rewardDebt; // Reward debt. See explanation below. uint256 rewardCredit; // Amount of rewards the user has not yet claimed uint256 lastDepositTime; // latest timestamp of the user's deposit } // Info of each pool. struct PoolInfo { IERC20 lpToken; uint256 allocPoint; uint256 lastRewardBlock; uint256 accRewardsPerShare; } IERC20 public rewardToken; uint256 public rewardsPerBlock; // Info of each pool. PoolInfo public poolInfo; // Info of each user that stakes LP tokens. mapping(address => UserInfo) public userInfo; // Total allocation points. Must be the sum of all allocation points in all pools. uint256 public totalAllocPoint = 0; uint256 public startBlock; uint256 public endBlock; uint256 public constant blockPerSecond = 12; uint256 public minimumStakeDuration = 1 days; uint256 public maxStakeAmount = 0; uint256 public maxTotalStaked = 1e9 ether; address public rewardDistributor; address public tokensReceiver = 0x000000000000000000000000000000000000dEaD; bool public isPoolOpen = true; event Deposit(address indexed user, uint256 amount); event Withdraw(address indexed user, uint256 amount); event EmergencyWithdraw(address indexed user, uint256 amount); constructor( IERC20 _rewardToken, IERC20 depositToken, uint256 _rewardsPerBlock, uint256 _startBlock, uint256 _poolDuration, address _rewardDistributor ) public { rewardToken = _rewardToken; rewardsPerBlock = _rewardsPerBlock; startBlock = _startBlock; endBlock = startBlock + _poolDuration / blockPerSecond; rewardDistributor = _rewardDistributor; // staking pool poolInfo = PoolInfo({ lpToken : depositToken, allocPoint : 1000, lastRewardBlock : startBlock, accRewardsPerShare : 0 }); totalAllocPoint = 1000; } function updateRewardPerBlock(uint256 _rewardPerBlock) external onlyOwner { updatePool(); rewardsPerBlock = _rewardPerBlock; } function getMultiplier(uint256 _from, uint256 _to) public view returns (uint256) { if (_to > endBlock) { _to = endBlock; } if (_from > endBlock) { _from = endBlock; } return _to - (_from); } function pendingRewards(address _user) external view returns (uint256) { PoolInfo storage pool = poolInfo; UserInfo storage user = userInfo[_user]; uint256 accRewardsPerShare = pool.accRewardsPerShare; uint256 lpSupply = pool.lpToken.balanceOf(address(this)); if (block.number > pool.lastRewardBlock && lpSupply != 0) { uint256 multiplier = getMultiplier(pool.lastRewardBlock, block.number); uint256 rewards = multiplier * (rewardsPerBlock) * (pool.allocPoint) / (totalAllocPoint); accRewardsPerShare += (rewards * (1e12) / (lpSupply)); } return (user.amount * (accRewardsPerShare) / (1e12)) - (user.rewardDebt) + user.rewardCredit; } function updatePool() public { PoolInfo storage pool = poolInfo; if (block.number <= pool.lastRewardBlock) { return; } uint256 lpSupply = pool.lpToken.balanceOf(address(this)); if (lpSupply == 0) { pool.lastRewardBlock = block.number; return; } uint256 multiplier = getMultiplier(pool.lastRewardBlock, block.number); uint256 rewards = multiplier * (rewardsPerBlock) * (pool.allocPoint) / (totalAllocPoint); pool.accRewardsPerShare = pool.accRewardsPerShare + (rewards * 1e12 / lpSupply); pool.lastRewardBlock = block.number; } function deposit(uint256 _amount) public nonReentrant isStakingOpen(_amount) { require(block.number > startBlock && block.number < endBlock, "Pool time: out of range"); PoolInfo storage pool = poolInfo; UserInfo storage user = userInfo[msg.sender]; updatePool(); require(maxStakeAmount == 0 || user.amount + _amount <= maxStakeAmount, "can't stake more than maximum amount"); if (user.amount > 0) { uint256 pending = user.amount * (pool.accRewardsPerShare) / (1e12) - (user.rewardDebt); if (pending > 0) { user.rewardCredit += pending; } } if (_amount > 0) { uint256 tokenBalanceBefore = pool.lpToken.balanceOf(address(this)); pool.lpToken.safeTransferFrom(address(msg.sender), address(this), _amount); uint256 tokenBalanceAfter = pool.lpToken.balanceOf(address(this)); require(tokenBalanceAfter - tokenBalanceBefore == _amount, "Staking: need to exclude from fees"); user.amount = user.amount + (_amount); } user.rewardDebt = user.amount * (pool.accRewardsPerShare) / (1e12); user.lastDepositTime = block.timestamp; emit Deposit(msg.sender, _amount); } function claimRewards() public nonReentrant { PoolInfo storage pool = poolInfo; UserInfo storage user = userInfo[msg.sender]; require(user.amount > 0, "claim rewards: user is not staking"); updatePool(); uint256 pending = user.amount * (pool.accRewardsPerShare) / (1e12) - (user.rewardDebt) + user.rewardCredit; require(pending > 0, "claim rewards: no rewards to claim"); user.rewardDebt = user.amount * (pool.accRewardsPerShare) / (1e12); user.rewardCredit = 0; _claimRewards(pool, user, pending); } function withdraw(uint256 _amount) public nonReentrant { PoolInfo storage pool = poolInfo; UserInfo storage user = userInfo[msg.sender]; require(user.amount >= _amount, "withdraw: invalid amount"); updatePool(); uint256 pending = user.amount * (pool.accRewardsPerShare) / (1e12) - (user.rewardDebt) + user.rewardCredit; if (_amount > 0) { user.amount = user.amount - (_amount); pool.lpToken.safeTransfer(address(msg.sender), _amount); } user.rewardDebt = user.amount * (pool.accRewardsPerShare) / (1e12); user.rewardCredit = 0; _claimRewards(pool, user, pending); emit Withdraw(msg.sender, _amount); } function emergencyWithdraw() public nonReentrant { PoolInfo storage pool = poolInfo; UserInfo storage user = userInfo[msg.sender]; uint256 amount = user.amount; require(amount > 0, "no tokens to withdraw"); user.amount = 0; user.rewardDebt = 0; user.rewardCredit = 0; pool.lpToken.safeTransfer(address(msg.sender), amount); emit EmergencyWithdraw(msg.sender, amount); } function _sendRewards(address to, uint256 amount) internal { rewardToken.safeTransferFrom(rewardDistributor, to, amount); } function _claimRewards(PoolInfo memory pool, UserInfo memory user, uint256 pending) internal { if (pending > 0) { address to = msg.sender; if (block.timestamp < user.lastDepositTime + minimumStakeDuration) { // burn tokens if user didn't stake for min time to = tokensReceiver; } _sendRewards(to, pending); } } function setMinimumStakeDuration(uint256 _seconds) external onlyOwner { require(_seconds < 30 days, "minimum too long"); minimumStakeDuration = _seconds; } function setStartBlock(uint256 _blockNumber) external onlyOwner { require(startBlock > block.number, "pool has already started"); require(_blockNumber > block.number, "pool should start in the future"); startBlock = _blockNumber; PoolInfo storage pool = poolInfo; pool.lastRewardBlock = startBlock; } function setEndBlock(uint256 _blockNumber) external onlyOwner { require(endBlock > block.number, "pool is already over"); require(_blockNumber > block.number, "pool should end in the future"); endBlock = _blockNumber; } function setRewardDistributor(address a) external onlyOwner { rewardDistributor = a; } function setMaxStakeAmount(uint256 amount) external onlyOwner { maxStakeAmount = amount; } function setMaxTotalStaked(uint256 amount) external onlyOwner { maxTotalStaked = amount; } function setTokensReceiver(address to) external onlyOwner { tokensReceiver = to; } function setPoolStatus(bool status) external onlyOwner { isPoolOpen = status; } function isPoolOpened_() external view returns (bool) { PoolInfo storage pool = poolInfo; uint256 supply = pool.lpToken.balanceOf(address(this)); return supply <= maxTotalStaked && isPoolOpen && (block.number > startBlock && block.number < endBlock); } modifier isStakingOpen(uint256 depositAmount) { PoolInfo storage pool = poolInfo; uint256 supply = pool.lpToken.balanceOf(address(this)) + depositAmount; require(isPoolOpen, 'Pool is closed'); require(supply <= maxTotalStaked, "Pool is currently full"); _; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"contract IERC20","name":"_rewardToken","type":"address"},{"internalType":"contract IERC20","name":"depositToken","type":"address"},{"internalType":"uint256","name":"_rewardsPerBlock","type":"uint256"},{"internalType":"uint256","name":"_startBlock","type":"uint256"},{"internalType":"uint256","name":"_poolDuration","type":"uint256"},{"internalType":"address","name":"_rewardDistributor","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"EmergencyWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[],"name":"blockPerSecond","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"endBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_from","type":"uint256"},{"internalType":"uint256","name":"_to","type":"uint256"}],"name":"getMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPoolOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPoolOpened_","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxStakeAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTotalStaked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumStakeDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"pendingRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolInfo","outputs":[{"internalType":"contract IERC20","name":"lpToken","type":"address"},{"internalType":"uint256","name":"allocPoint","type":"uint256"},{"internalType":"uint256","name":"lastRewardBlock","type":"uint256"},{"internalType":"uint256","name":"accRewardsPerShare","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardDistributor","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardsPerBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_blockNumber","type":"uint256"}],"name":"setEndBlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxStakeAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxTotalStaked","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_seconds","type":"uint256"}],"name":"setMinimumStakeDuration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"status","type":"bool"}],"name":"setPoolStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"a","type":"address"}],"name":"setRewardDistributor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_blockNumber","type":"uint256"}],"name":"setStartBlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"setTokensReceiver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalAllocPoint","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":"updatePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rewardPerBlock","type":"uint256"}],"name":"updateRewardPerBlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userInfo","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"rewardDebt","type":"uint256"},{"internalType":"uint256","name":"rewardCredit","type":"uint256"},{"internalType":"uint256","name":"lastDepositTime","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526000600981905562015180600c55600d556b033b2e3c9fd0803ce8000000600e55601080546001600160a81b0319167401000000000000000000000000000000000000dead1790553480156200005957600080fd5b5060405162001c8938038062001c898339810160408190526200007c91620001b0565b620000873362000147565b60018055600280546001600160a01b0319166001600160a01b0388161790556003849055600a839055620000bd600c8362000221565b600a54620000cc919062000244565b600b55600f80546001600160a01b039283166001600160a01b03199182161790915560408051608081018252969092168087526103e860208801819052600a5493880184905260006060909801889052600480549093169091179091556005819055600691909155600794909455505050600955506200026c565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0381168114620001ad57600080fd5b50565b60008060008060008060c08789031215620001ca57600080fd5b8651620001d78162000197565b6020880151909650620001ea8162000197565b8095505060408701519350606087015192506080870151915060a0870151620002138162000197565b809150509295509295509295565b6000826200023f57634e487b7160e01b600052601260045260246000fd5b500490565b808201808211156200026657634e487b7160e01b600052601160045260246000fd5b92915050565b611a0d806200027c6000396000f3fe608060405234801561001057600080fd5b50600436106102065760003560e01c80635eeb67101161011a578063b6b55f25116100ad578063dcc2a55e1161007c578063dcc2a55e14610469578063e3161ddd1461047c578063f2fde38b14610484578063f35e4a6e14610497578063f7c618c1146104aa57600080fd5b8063b6b55f2514610433578063c713aa9414610446578063d9c40d9114610459578063db2e21bc1461046157600080fd5b8063a1809b95116100e9578063a1809b95146103e0578063a8bd7300146103f3578063acc2166a146103fc578063ad1907341461040f57600080fd5b80635eeb6710146103ab578063715018a6146103b45780638da5cb5b146103bc5780638dbb1e3a146103cd57600080fd5b8063372500ab1161019d5780634b37f0061161016c5780634b37f0061461033557806357c26ba41461033d5780635a2f3d09146103505780635a68c154146103995780635d80ca32146103a257600080fd5b8063372500ab146102fe578063392cb1c214610306578063476abc761461031957806348cd4cb11461032c57600080fd5b80631959a002116101d95780631959a002146102585780631fa1e8d4146102ad5780632e1a7d4d146102d857806331d7a262146102eb57600080fd5b806301f8a9761461020b57806305217c1514610220578063083c63231461023357806317caf6f11461024f575b600080fd5b61021e6102193660046117f3565b6104bd565b005b61021e61022e36600461181a565b6104d2565b61023c600b5481565b6040519081526020015b60405180910390f35b61023c60095481565b61028d610266366004611837565b60086020526000908152604090208054600182015460028301546003909301549192909184565b604080519485526020850193909352918301526060820152608001610246565b6010546102c0906001600160a01b031681565b6040516001600160a01b039091168152602001610246565b61021e6102e63660046117f3565b6104f8565b61023c6102f9366004611837565b6106e2565b61021e610834565b61021e6103143660046117f3565b610a17565b61021e610327366004611837565b610a69565b61023c600a5481565b61023c600c81565b61021e61034b3660046117f3565b610a93565b60045460055460065460075461036f936001600160a01b031692919084565b604080516001600160a01b0390951685526020850193909352918301526060820152608001610246565b61023c600e5481565b61023c600d5481565b61023c60035481565b61021e610aa0565b6000546001600160a01b03166102c0565b61023c6103db366004611860565b610ab4565b61021e6103ee366004611837565b610ae9565b61023c600c5481565b600f546102c0906001600160a01b031681565b60105461042390600160a01b900460ff1681565b6040519015158152602001610246565b61021e6104413660046117f3565b610b13565b61021e6104543660046117f3565b610f77565b61042361101b565b61021e6110ca565b61021e6104773660046117f3565b6111b0565b61021e6111bd565b61021e610492366004611837565b6112c9565b61021e6104a53660046117f3565b611342565b6002546102c0906001600160a01b031681565b6104c56113f4565b6104cd6111bd565b600355565b6104da6113f4565b60108054911515600160a01b0260ff60a01b19909216919091179055565b6002600154036105235760405162461bcd60e51b815260040161051a90611882565b60405180910390fd5b600260015533600090815260086020526040902080546004919083111561058c5760405162461bcd60e51b815260206004820152601860248201527f77697468647261773a20696e76616c696420616d6f756e740000000000000000604482015260640161051a565b6105946111bd565b60008160020154826001015464e8d4a51000856003015485600001546105ba91906118cf565b6105c491906118e6565b6105ce9190611908565b6105d8919061191b565b905083156106055781546105ed908590611908565b82558254610605906001600160a01b0316338661144e565b6003830154825464e8d4a510009161061c916118cf565b61062691906118e6565b600180840182905560006002808601829055604080516080808201835289546001600160a01b031682529489015460208083019190915292890154818301526003808a01546060808401919091528351968701845289548752938601969096529084019290925292850154928201929092526106a39190836114b6565b60405184815233907f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243649060200160405180910390a25050600180555050565b6001600160a01b038181166000908152600860205260408082206007546004805493516370a0823160e01b8152308183015294959094929391928692909116906370a0823190602401602060405180830381865afa158015610748573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061076c919061192e565b905083600201544311801561078057508015155b156107ee576000610795856002015443610ab4565b905060006009548660010154600354846107af91906118cf565b6107b991906118cf565b6107c391906118e6565b9050826107d58264e8d4a510006118cf565b6107df91906118e6565b6107e9908561191b565b935050505b60028301546001840154845464e8d4a510009061080c9086906118cf565b61081691906118e6565b6108209190611908565b61082a919061191b565b9695505050505050565b6002600154036108565760405162461bcd60e51b815260040161051a90611882565b60026001553360009081526008602052604090208054600491906108c75760405162461bcd60e51b815260206004820152602260248201527f636c61696d20726577617264733a2075736572206973206e6f74207374616b696044820152616e6760f01b606482015260840161051a565b6108cf6111bd565b60008160020154826001015464e8d4a51000856003015485600001546108f591906118cf565b6108ff91906118e6565b6109099190611908565b610913919061191b565b9050600081116109705760405162461bcd60e51b815260206004820152602260248201527f636c61696d20726577617264733a206e6f207265776172647320746f20636c61604482015261696d60f01b606482015260840161051a565b6003830154825464e8d4a5100091610987916118cf565b61099191906118e6565b600180840182905560006002808601829055604080516080808201835289546001600160a01b031682529489015460208083019190915292890154818301526003808a0154606080840191909152835196870184528954875293860196909652908401929092529285015492820192909252610a0e9190836114b6565b50506001805550565b610a1f6113f4565b62278d008110610a645760405162461bcd60e51b815260206004820152601060248201526f6d696e696d756d20746f6f206c6f6e6760801b604482015260640161051a565b600c55565b610a716113f4565b601080546001600160a01b0319166001600160a01b0392909216919091179055565b610a9b6113f4565b600e55565b610aa86113f4565b610ab260006114f4565b565b6000600b54821115610ac657600b5491505b600b54831115610ad657600b5492505b610ae08383611908565b90505b92915050565b610af16113f4565b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b600260015403610b355760405162461bcd60e51b815260040161051a90611882565b6002600155600480546040516370a0823160e01b8152308184015283929160009184916001600160a01b0316906370a0823190602401602060405180830381865afa158015610b88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bac919061192e565b610bb6919061191b565b601054909150600160a01b900460ff16610c035760405162461bcd60e51b815260206004820152600e60248201526d141bdbdb081a5cc818db1bdcd95960921b604482015260640161051a565b600e54811115610c4e5760405162461bcd60e51b8152602060048201526016602482015275141bdbdb081a5cc818dd5c9c995b9d1b1e48199d5b1b60521b604482015260640161051a565b600a5443118015610c605750600b5443105b610cac5760405162461bcd60e51b815260206004820152601760248201527f506f6f6c2074696d653a206f7574206f662072616e6765000000000000000000604482015260640161051a565b336000908152600860205260409020600490610cc66111bd565b600d541580610ce35750600d548154610ce090889061191b565b11155b610d3b5760405162461bcd60e51b8152602060048201526024808201527f63616e2774207374616b65206d6f7265207468616e206d6178696d756d20616d6044820152631bdd5b9d60e21b606482015260840161051a565b805415610d9b576000816001015464e8d4a5100084600301548460000154610d6391906118cf565b610d6d91906118e6565b610d779190611908565b90508015610d995780826002016000828254610d93919061191b565b90915550505b505b8515610f0a5781546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015610de9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e0d919061192e565b8354909150610e27906001600160a01b031633308a611544565b82546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015610e6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e93919061192e565b905087610ea08383611908565b14610ef85760405162461bcd60e51b815260206004820152602260248201527f5374616b696e673a206e65656420746f206578636c7564652066726f6d206665604482015261657360f01b606482015260840161051a565b8254610f0590899061191b565b835550505b6003820154815464e8d4a5100091610f21916118cf565b610f2b91906118e6565b600182015542600382015560405186815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a250506001805550505050565b610f7f6113f4565b43600b5411610fc75760405162461bcd60e51b81526020600482015260146024820152733837b7b61034b99030b63932b0b23c9037bb32b960611b604482015260640161051a565b4381116110165760405162461bcd60e51b815260206004820152601d60248201527f706f6f6c2073686f756c6420656e6420696e2074686520667574757265000000604482015260640161051a565b600b55565b600480546040516370a0823160e01b815230818401526000929183916001600160a01b03909116906370a0823190602401602060405180830381865afa158015611069573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061108d919061192e565b9050600e5481111580156110aa5750601054600160a01b900460ff165b80156110c35750600a54431180156110c35750600b5443105b9250505090565b6002600154036110ec5760405162461bcd60e51b815260040161051a90611882565b60026001553360009081526008602052604090208054600491908061114b5760405162461bcd60e51b81526020600482015260156024820152746e6f20746f6b656e7320746f20776974686472617760581b604482015260640161051a565b60008083556001830181905560028301558254611172906001600160a01b0316338361144e565b60405181815233907f5fafa99d0643513820be26656b45130b01e1c03062e1266bf36f88cbd3bd96959060200160405180910390a250506001805550565b6111b86113f4565b600d55565b60065460049043116111cc5750565b80546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015611214573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611238919061192e565b90508060000361124c575043600290910155565b600061125c836002015443610ab4565b9050600060095484600101546003548461127691906118cf565b61128091906118cf565b61128a91906118e6565b90508261129c8264e8d4a510006118cf565b6112a691906118e6565b84600301546112b5919061191b565b600385015550504360029092019190915550565b6112d16113f4565b6001600160a01b0381166113365760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161051a565b61133f816114f4565b50565b61134a6113f4565b43600a541161139b5760405162461bcd60e51b815260206004820152601860248201527f706f6f6c2068617320616c726561647920737461727465640000000000000000604482015260640161051a565b4381116113ea5760405162461bcd60e51b815260206004820152601f60248201527f706f6f6c2073686f756c6420737461727420696e207468652066757475726500604482015260640161051a565b600a819055600655565b6000546001600160a01b03163314610ab25760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161051a565b6040516001600160a01b0383166024820152604481018290526114b190849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261157c565b505050565b80156114b157600c54606083015133916114cf9161191b565b4210156114e457506010546001600160a01b03165b6114ee818361164e565b50505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6040516001600160a01b03808516602483015283166044820152606481018290526114ee9085906323b872dd60e01b9060840161147a565b60006115d1826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166116709092919063ffffffff16565b8051909150156114b157808060200190518101906115ef9190611947565b6114b15760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161051a565b600f5460025461166c916001600160a01b0391821691168484611544565b5050565b606061167f8484600085611689565b90505b9392505050565b6060824710156116ea5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161051a565b6001600160a01b0385163b6117415760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161051a565b600080866001600160a01b0316858760405161175d9190611988565b60006040518083038185875af1925050503d806000811461179a576040519150601f19603f3d011682016040523d82523d6000602084013e61179f565b606091505b50915091506117af8282866117ba565b979650505050505050565b606083156117c9575081611682565b8251156117d95782518084602001fd5b8160405162461bcd60e51b815260040161051a91906119a4565b60006020828403121561180557600080fd5b5035919050565b801515811461133f57600080fd5b60006020828403121561182c57600080fd5b81356116828161180c565b60006020828403121561184957600080fd5b81356001600160a01b038116811461168257600080fd5b6000806040838503121561187357600080fd5b50508035926020909101359150565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610ae357610ae36118b9565b60008261190357634e487b7160e01b600052601260045260246000fd5b500490565b81810381811115610ae357610ae36118b9565b80820180821115610ae357610ae36118b9565b60006020828403121561194057600080fd5b5051919050565b60006020828403121561195957600080fd5b81516116828161180c565b60005b8381101561197f578181015183820152602001611967565b50506000910152565b6000825161199a818460208701611964565b9190910192915050565b60208152600082518060208401526119c3816040850160208701611964565b601f01601f1916919091016040019291505056fea2646970667358221220a936c221364ce66d7646e8a6796b7c2fb3adc5c64617e97d3d0d81eb04ca4c3364736f6c63430008120033000000000000000000000000235c8ee913d93c68d2902a8e0b5a643755705726000000000000000000000000235c8ee913d93c68d2902a8e0b5a6437557057260000000000000000000000000000000000000000000000001bc16d674ec8000000000000000000000000000000000000000000000000000000000000010590420000000000000000000000000000000000000000000000000000000000f0a1900000000000000000000000006064633e8a38a88dabbc311bcd5923ce1f93ff0b
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102065760003560e01c80635eeb67101161011a578063b6b55f25116100ad578063dcc2a55e1161007c578063dcc2a55e14610469578063e3161ddd1461047c578063f2fde38b14610484578063f35e4a6e14610497578063f7c618c1146104aa57600080fd5b8063b6b55f2514610433578063c713aa9414610446578063d9c40d9114610459578063db2e21bc1461046157600080fd5b8063a1809b95116100e9578063a1809b95146103e0578063a8bd7300146103f3578063acc2166a146103fc578063ad1907341461040f57600080fd5b80635eeb6710146103ab578063715018a6146103b45780638da5cb5b146103bc5780638dbb1e3a146103cd57600080fd5b8063372500ab1161019d5780634b37f0061161016c5780634b37f0061461033557806357c26ba41461033d5780635a2f3d09146103505780635a68c154146103995780635d80ca32146103a257600080fd5b8063372500ab146102fe578063392cb1c214610306578063476abc761461031957806348cd4cb11461032c57600080fd5b80631959a002116101d95780631959a002146102585780631fa1e8d4146102ad5780632e1a7d4d146102d857806331d7a262146102eb57600080fd5b806301f8a9761461020b57806305217c1514610220578063083c63231461023357806317caf6f11461024f575b600080fd5b61021e6102193660046117f3565b6104bd565b005b61021e61022e36600461181a565b6104d2565b61023c600b5481565b6040519081526020015b60405180910390f35b61023c60095481565b61028d610266366004611837565b60086020526000908152604090208054600182015460028301546003909301549192909184565b604080519485526020850193909352918301526060820152608001610246565b6010546102c0906001600160a01b031681565b6040516001600160a01b039091168152602001610246565b61021e6102e63660046117f3565b6104f8565b61023c6102f9366004611837565b6106e2565b61021e610834565b61021e6103143660046117f3565b610a17565b61021e610327366004611837565b610a69565b61023c600a5481565b61023c600c81565b61021e61034b3660046117f3565b610a93565b60045460055460065460075461036f936001600160a01b031692919084565b604080516001600160a01b0390951685526020850193909352918301526060820152608001610246565b61023c600e5481565b61023c600d5481565b61023c60035481565b61021e610aa0565b6000546001600160a01b03166102c0565b61023c6103db366004611860565b610ab4565b61021e6103ee366004611837565b610ae9565b61023c600c5481565b600f546102c0906001600160a01b031681565b60105461042390600160a01b900460ff1681565b6040519015158152602001610246565b61021e6104413660046117f3565b610b13565b61021e6104543660046117f3565b610f77565b61042361101b565b61021e6110ca565b61021e6104773660046117f3565b6111b0565b61021e6111bd565b61021e610492366004611837565b6112c9565b61021e6104a53660046117f3565b611342565b6002546102c0906001600160a01b031681565b6104c56113f4565b6104cd6111bd565b600355565b6104da6113f4565b60108054911515600160a01b0260ff60a01b19909216919091179055565b6002600154036105235760405162461bcd60e51b815260040161051a90611882565b60405180910390fd5b600260015533600090815260086020526040902080546004919083111561058c5760405162461bcd60e51b815260206004820152601860248201527f77697468647261773a20696e76616c696420616d6f756e740000000000000000604482015260640161051a565b6105946111bd565b60008160020154826001015464e8d4a51000856003015485600001546105ba91906118cf565b6105c491906118e6565b6105ce9190611908565b6105d8919061191b565b905083156106055781546105ed908590611908565b82558254610605906001600160a01b0316338661144e565b6003830154825464e8d4a510009161061c916118cf565b61062691906118e6565b600180840182905560006002808601829055604080516080808201835289546001600160a01b031682529489015460208083019190915292890154818301526003808a01546060808401919091528351968701845289548752938601969096529084019290925292850154928201929092526106a39190836114b6565b60405184815233907f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243649060200160405180910390a25050600180555050565b6001600160a01b038181166000908152600860205260408082206007546004805493516370a0823160e01b8152308183015294959094929391928692909116906370a0823190602401602060405180830381865afa158015610748573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061076c919061192e565b905083600201544311801561078057508015155b156107ee576000610795856002015443610ab4565b905060006009548660010154600354846107af91906118cf565b6107b991906118cf565b6107c391906118e6565b9050826107d58264e8d4a510006118cf565b6107df91906118e6565b6107e9908561191b565b935050505b60028301546001840154845464e8d4a510009061080c9086906118cf565b61081691906118e6565b6108209190611908565b61082a919061191b565b9695505050505050565b6002600154036108565760405162461bcd60e51b815260040161051a90611882565b60026001553360009081526008602052604090208054600491906108c75760405162461bcd60e51b815260206004820152602260248201527f636c61696d20726577617264733a2075736572206973206e6f74207374616b696044820152616e6760f01b606482015260840161051a565b6108cf6111bd565b60008160020154826001015464e8d4a51000856003015485600001546108f591906118cf565b6108ff91906118e6565b6109099190611908565b610913919061191b565b9050600081116109705760405162461bcd60e51b815260206004820152602260248201527f636c61696d20726577617264733a206e6f207265776172647320746f20636c61604482015261696d60f01b606482015260840161051a565b6003830154825464e8d4a5100091610987916118cf565b61099191906118e6565b600180840182905560006002808601829055604080516080808201835289546001600160a01b031682529489015460208083019190915292890154818301526003808a0154606080840191909152835196870184528954875293860196909652908401929092529285015492820192909252610a0e9190836114b6565b50506001805550565b610a1f6113f4565b62278d008110610a645760405162461bcd60e51b815260206004820152601060248201526f6d696e696d756d20746f6f206c6f6e6760801b604482015260640161051a565b600c55565b610a716113f4565b601080546001600160a01b0319166001600160a01b0392909216919091179055565b610a9b6113f4565b600e55565b610aa86113f4565b610ab260006114f4565b565b6000600b54821115610ac657600b5491505b600b54831115610ad657600b5492505b610ae08383611908565b90505b92915050565b610af16113f4565b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b600260015403610b355760405162461bcd60e51b815260040161051a90611882565b6002600155600480546040516370a0823160e01b8152308184015283929160009184916001600160a01b0316906370a0823190602401602060405180830381865afa158015610b88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bac919061192e565b610bb6919061191b565b601054909150600160a01b900460ff16610c035760405162461bcd60e51b815260206004820152600e60248201526d141bdbdb081a5cc818db1bdcd95960921b604482015260640161051a565b600e54811115610c4e5760405162461bcd60e51b8152602060048201526016602482015275141bdbdb081a5cc818dd5c9c995b9d1b1e48199d5b1b60521b604482015260640161051a565b600a5443118015610c605750600b5443105b610cac5760405162461bcd60e51b815260206004820152601760248201527f506f6f6c2074696d653a206f7574206f662072616e6765000000000000000000604482015260640161051a565b336000908152600860205260409020600490610cc66111bd565b600d541580610ce35750600d548154610ce090889061191b565b11155b610d3b5760405162461bcd60e51b8152602060048201526024808201527f63616e2774207374616b65206d6f7265207468616e206d6178696d756d20616d6044820152631bdd5b9d60e21b606482015260840161051a565b805415610d9b576000816001015464e8d4a5100084600301548460000154610d6391906118cf565b610d6d91906118e6565b610d779190611908565b90508015610d995780826002016000828254610d93919061191b565b90915550505b505b8515610f0a5781546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015610de9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e0d919061192e565b8354909150610e27906001600160a01b031633308a611544565b82546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015610e6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e93919061192e565b905087610ea08383611908565b14610ef85760405162461bcd60e51b815260206004820152602260248201527f5374616b696e673a206e65656420746f206578636c7564652066726f6d206665604482015261657360f01b606482015260840161051a565b8254610f0590899061191b565b835550505b6003820154815464e8d4a5100091610f21916118cf565b610f2b91906118e6565b600182015542600382015560405186815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a250506001805550505050565b610f7f6113f4565b43600b5411610fc75760405162461bcd60e51b81526020600482015260146024820152733837b7b61034b99030b63932b0b23c9037bb32b960611b604482015260640161051a565b4381116110165760405162461bcd60e51b815260206004820152601d60248201527f706f6f6c2073686f756c6420656e6420696e2074686520667574757265000000604482015260640161051a565b600b55565b600480546040516370a0823160e01b815230818401526000929183916001600160a01b03909116906370a0823190602401602060405180830381865afa158015611069573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061108d919061192e565b9050600e5481111580156110aa5750601054600160a01b900460ff165b80156110c35750600a54431180156110c35750600b5443105b9250505090565b6002600154036110ec5760405162461bcd60e51b815260040161051a90611882565b60026001553360009081526008602052604090208054600491908061114b5760405162461bcd60e51b81526020600482015260156024820152746e6f20746f6b656e7320746f20776974686472617760581b604482015260640161051a565b60008083556001830181905560028301558254611172906001600160a01b0316338361144e565b60405181815233907f5fafa99d0643513820be26656b45130b01e1c03062e1266bf36f88cbd3bd96959060200160405180910390a250506001805550565b6111b86113f4565b600d55565b60065460049043116111cc5750565b80546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015611214573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611238919061192e565b90508060000361124c575043600290910155565b600061125c836002015443610ab4565b9050600060095484600101546003548461127691906118cf565b61128091906118cf565b61128a91906118e6565b90508261129c8264e8d4a510006118cf565b6112a691906118e6565b84600301546112b5919061191b565b600385015550504360029092019190915550565b6112d16113f4565b6001600160a01b0381166113365760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161051a565b61133f816114f4565b50565b61134a6113f4565b43600a541161139b5760405162461bcd60e51b815260206004820152601860248201527f706f6f6c2068617320616c726561647920737461727465640000000000000000604482015260640161051a565b4381116113ea5760405162461bcd60e51b815260206004820152601f60248201527f706f6f6c2073686f756c6420737461727420696e207468652066757475726500604482015260640161051a565b600a819055600655565b6000546001600160a01b03163314610ab25760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161051a565b6040516001600160a01b0383166024820152604481018290526114b190849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261157c565b505050565b80156114b157600c54606083015133916114cf9161191b565b4210156114e457506010546001600160a01b03165b6114ee818361164e565b50505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6040516001600160a01b03808516602483015283166044820152606481018290526114ee9085906323b872dd60e01b9060840161147a565b60006115d1826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166116709092919063ffffffff16565b8051909150156114b157808060200190518101906115ef9190611947565b6114b15760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161051a565b600f5460025461166c916001600160a01b0391821691168484611544565b5050565b606061167f8484600085611689565b90505b9392505050565b6060824710156116ea5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161051a565b6001600160a01b0385163b6117415760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161051a565b600080866001600160a01b0316858760405161175d9190611988565b60006040518083038185875af1925050503d806000811461179a576040519150601f19603f3d011682016040523d82523d6000602084013e61179f565b606091505b50915091506117af8282866117ba565b979650505050505050565b606083156117c9575081611682565b8251156117d95782518084602001fd5b8160405162461bcd60e51b815260040161051a91906119a4565b60006020828403121561180557600080fd5b5035919050565b801515811461133f57600080fd5b60006020828403121561182c57600080fd5b81356116828161180c565b60006020828403121561184957600080fd5b81356001600160a01b038116811461168257600080fd5b6000806040838503121561187357600080fd5b50508035926020909101359150565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610ae357610ae36118b9565b60008261190357634e487b7160e01b600052601260045260246000fd5b500490565b81810381811115610ae357610ae36118b9565b80820180821115610ae357610ae36118b9565b60006020828403121561194057600080fd5b5051919050565b60006020828403121561195957600080fd5b81516116828161180c565b60005b8381101561197f578181015183820152602001611967565b50506000910152565b6000825161199a818460208701611964565b9190910192915050565b60208152600082518060208401526119c3816040850160208701611964565b601f01601f1916919091016040019291505056fea2646970667358221220a936c221364ce66d7646e8a6796b7c2fb3adc5c64617e97d3d0d81eb04ca4c3364736f6c63430008120033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000235c8ee913d93c68d2902a8e0b5a643755705726000000000000000000000000235c8ee913d93c68d2902a8e0b5a6437557057260000000000000000000000000000000000000000000000001bc16d674ec8000000000000000000000000000000000000000000000000000000000000010590420000000000000000000000000000000000000000000000000000000000f0a1900000000000000000000000006064633e8a38a88dabbc311bcd5923ce1f93ff0b
-----Decoded View---------------
Arg [0] : _rewardToken (address): 0x235C8EE913d93c68D2902a8e0b5a643755705726
Arg [1] : depositToken (address): 0x235C8EE913d93c68D2902a8e0b5a643755705726
Arg [2] : _rewardsPerBlock (uint256): 2000000000000000000
Arg [3] : _startBlock (uint256): 17141826
Arg [4] : _poolDuration (uint256): 15770000
Arg [5] : _rewardDistributor (address): 0x6064633e8A38A88daBbC311BcD5923CE1F93fF0b
-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 000000000000000000000000235c8ee913d93c68d2902a8e0b5a643755705726
Arg [1] : 000000000000000000000000235c8ee913d93c68d2902a8e0b5a643755705726
Arg [2] : 0000000000000000000000000000000000000000000000001bc16d674ec80000
Arg [3] : 0000000000000000000000000000000000000000000000000000000001059042
Arg [4] : 0000000000000000000000000000000000000000000000000000000000f0a190
Arg [5] : 0000000000000000000000006064633e8a38a88dabbc311bcd5923ce1f93ff0b
Deployed Bytecode Sourcemap
23753:9763:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26042:149;;;;;;:::i;:::-;;:::i;:::-;;32810:93;;;;;;:::i;:::-;;:::i;24773:23::-;;;;;;;;;714:25:1;;;702:2;687:18;24773:23:0;;;;;;;;24698:34;;;;;;24559:44;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1272:25:1;;;1328:2;1313:18;;1306:34;;;;1356:18;;;1349:34;1414:2;1399:18;;1392:34;1259:3;1244:19;24559:44:0;1041:391:1;25031:74:0;;;;;-1:-1:-1;;;;;25031:74:0;;;;;;-1:-1:-1;;;;;1601:32:1;;;1583:51;;1571:2;1556:18;25031:74:0;1437:203:1;29785:735:0;;;;;;:::i;:::-;;:::i;26473:743::-;;;;;;:::i;:::-;;:::i;29191:586::-;;;:::i;31567:178::-;;;;;;:::i;:::-;;:::i;32706:96::-;;;;;;:::i;:::-;;:::i;24739:25::-;;;;;;24803:43;;24844:2;24803:43;;32594:104;;;;;;:::i;:::-;;:::i;24479:24::-;;;;;;;;;;;-1:-1:-1;;;;;24479:24:0;;;;;;;;;;-1:-1:-1;;;;;1907:32:1;;;1889:51;;1971:2;1956:18;;1949:34;;;;1999:18;;;1992:34;2057:2;2042:18;;2035:34;1876:3;1861:19;24479:24:0;1645:430:1;24944:41:0;;;;;;24904:33;;;;;;24413:30;;;;;;5295:103;;;:::i;4647:87::-;4693:7;4720:6;-1:-1:-1;;;;;4720:6:0;4647:87;;26199:266;;;;;;:::i;:::-;;:::i;32374:100::-;;;;;;:::i;:::-;;:::i;24853:44::-;;;;;;24992:32;;;;;-1:-1:-1;;;;;24992:32:0;;;25112:29;;;;;-1:-1:-1;;;25112:29:0;;;;;;;;;2498:14:1;;2491:22;2473:41;;2461:2;2446:18;25112:29:0;2333:187:1;27892:1291:0;;;;;;:::i;:::-;;:::i;32113:253::-;;;;;;:::i;:::-;;:::i;32911:284::-;;;:::i;30528:459::-;;;:::i;32482:104::-;;;;;;:::i;:::-;;:::i;27224:660::-;;;:::i;5553:201::-;;;;;;:::i;:::-;;:::i;31753:352::-;;;;;;:::i;:::-;;:::i;24379:25::-;;;;;-1:-1:-1;;;;;24379:25:0;;;26042:149;4533:13;:11;:13::i;:::-;26127:12:::1;:10;:12::i;:::-;26150:15;:33:::0;26042:149::o;32810:93::-;4533:13;:11;:13::i;:::-;32876:10:::1;:19:::0;;;::::1;;-1:-1:-1::0;;;32876:19:0::1;-1:-1:-1::0;;;;32876:19:0;;::::1;::::0;;;::::1;::::0;;32810:93::o;29785:735::-;22800:1;23398:7;;:19;23390:63;;;;-1:-1:-1;;;23390:63:0;;;;;;;:::i;:::-;;;;;;;;;22800:1;23531:7;:18;29927:10:::1;29851:21;29918:20:::0;;;:8:::1;:20;::::0;;;;29957:11;;29875:8:::1;::::0;29918:20;29957:22;-1:-1:-1;29957:22:0::1;29949:59;;;::::0;-1:-1:-1;;;29949:59:0;;3308:2:1;29949:59:0::1;::::0;::::1;3290:21:1::0;3347:2;3327:18;;;3320:30;3386:26;3366:18;;;3359:54;3430:18;;29949:59:0::1;3106:348:1::0;29949:59:0::1;30019:12;:10;:12::i;:::-;30042:15;30131:4;:17;;;30112:4;:15;;;30103:4;30075;:23;;;30060:4;:11;;;:39;;;;:::i;:::-;:48;;;;:::i;:::-;:68;;;;:::i;:::-;:88;;;;:::i;:::-;30042:106:::0;-1:-1:-1;30165:11:0;;30161:151:::1;;30207:11:::0;;:23:::1;::::0;30222:7;;30207:23:::1;:::i;:::-;30193:37:::0;;30245:12;;:55:::1;::::0;-1:-1:-1;;;;;30245:12:0::1;30279:10;30292:7:::0;30245:25:::1;:55::i;:::-;30357:23;::::0;::::1;::::0;30342:11;;30385:4:::1;::::0;30342:39:::1;::::0;::::1;:::i;:::-;:48;;;;:::i;:::-;30324:15;::::0;;::::1;:66:::0;;;30421:1:::1;30401:17;::::0;;::::1;:21:::0;;;30433:34:::1;::::0;;::::1;::::0;;::::1;::::0;;;;-1:-1:-1;;;;;30433:34:0::1;::::0;;;;::::1;::::0;::::1;::::0;;::::1;::::0;;;;;;::::1;::::0;;;;;::::1;::::0;;::::1;::::0;;;;;;;;;;;;;::::1;::::0;;;;;;;;::::1;::::0;;;;;;;;;;;;;::::1;::::0;;;;;;;;::::1;::::0;;30459:7;30433:13:::1;:34::i;:::-;30483:29;::::0;714:25:1;;;30492:10:0::1;::::0;30483:29:::1;::::0;702:2:1;687:18;30483:29:0::1;;;;;;;-1:-1:-1::0;;22756:1:0;23710:22;;-1:-1:-1;;29785:735:0:o;26473:743::-;-1:-1:-1;;;;;26622:15:0;;;26535:7;26622:15;;;:8;:15;;;;;;26677:23;;26579:8;26730:12;;:37;;-1:-1:-1;;;26730:37:0;;26761:4;26730:37;;;1583:51:1;26535:7:0;;26579:8;;26622:15;;26677:23;;26535:7;;26730:12;;;;:22;;1556:18:1;;26730:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26711:56;;26799:4;:20;;;26784:12;:35;:52;;;;-1:-1:-1;26823:13:0;;;26784:52;26780:326;;;26853:18;26874:49;26888:4;:20;;;26910:12;26874:13;:49::i;:::-;26853:70;;26938:15;27010;;26990:4;:15;;;26970;;26956:10;:30;;;;:::i;:::-;:50;;;;:::i;:::-;:70;;;;:::i;:::-;26938:88;-1:-1:-1;27084:8:0;27064:16;26938:88;27075:4;27064:16;:::i;:::-;:29;;;;:::i;:::-;27041:53;;;;:::i;:::-;;;26838:268;;26780:326;27191:17;;;;27172:15;;;;27124:11;;27162:4;;27124:34;;27139:18;;27124:34;:::i;:::-;:43;;;;:::i;:::-;27123:65;;;;:::i;:::-;:85;;;;:::i;:::-;27116:92;26473:743;-1:-1:-1;;;;;;26473:743:0:o;29191:586::-;22800:1;23398:7;;:19;23390:63;;;;-1:-1:-1;;;23390:63:0;;;;;;;:::i;:::-;22800:1;23531:7;:18;29322:10:::1;29246:21;29313:20:::0;;;:8:::1;:20;::::0;;;;29352:11;;29270:8:::1;::::0;29313:20;29344:62:::1;;;::::0;-1:-1:-1;;;29344:62:0;;4640:2:1;29344:62:0::1;::::0;::::1;4622:21:1::0;4679:2;4659:18;;;4652:30;4718:34;4698:18;;;4691:62;-1:-1:-1;;;4769:18:1;;;4762:32;4811:19;;29344:62:0::1;4438:398:1::0;29344:62:0::1;29417:12;:10;:12::i;:::-;29440:15;29529:4;:17;;;29510:4;:15;;;29501:4;29473;:23;;;29458:4;:11;;;:39;;;;:::i;:::-;:48;;;;:::i;:::-;:68;;;;:::i;:::-;:88;;;;:::i;:::-;29440:106;;29575:1;29565:7;:11;29557:58;;;::::0;-1:-1:-1;;;29557:58:0;;5043:2:1;29557:58:0::1;::::0;::::1;5025:21:1::0;5082:2;5062:18;;;5055:30;5121:34;5101:18;;;5094:62;-1:-1:-1;;;5172:18:1;;;5165:32;5214:19;;29557:58:0::1;4841:398:1::0;29557:58:0::1;29659:23;::::0;::::1;::::0;29644:11;;29687:4:::1;::::0;29644:39:::1;::::0;::::1;:::i;:::-;:48;;;;:::i;:::-;29626:15;::::0;;::::1;:66:::0;;;29723:1:::1;29703:17;::::0;;::::1;:21:::0;;;29735:34:::1;::::0;;::::1;::::0;;::::1;::::0;;;;-1:-1:-1;;;;;29735:34:0::1;::::0;;;;::::1;::::0;::::1;::::0;;::::1;::::0;;;;;;::::1;::::0;;;;;::::1;::::0;;::::1;::::0;;;;;;;;;;;;;::::1;::::0;;;;;;;;::::1;::::0;;;;;;;;;;;;;::::1;::::0;;;;;;;;::::1;::::0;;29761:7;29735:13:::1;:34::i;:::-;-1:-1:-1::0;;22756:1:0;23710:22;;-1:-1:-1;29191:586:0:o;31567:178::-;4533:13;:11;:13::i;:::-;31667:7:::1;31656:8;:18;31648:47;;;::::0;-1:-1:-1;;;31648:47:0;;5446:2:1;31648:47:0::1;::::0;::::1;5428:21:1::0;5485:2;5465:18;;;5458:30;-1:-1:-1;;;5504:18:1;;;5497:46;5560:18;;31648:47:0::1;5244:340:1::0;31648:47:0::1;31706:20;:31:::0;31567:178::o;32706:96::-;4533:13;:11;:13::i;:::-;32775:14:::1;:19:::0;;-1:-1:-1;;;;;;32775:19:0::1;-1:-1:-1::0;;;;;32775:19:0;;;::::1;::::0;;;::::1;::::0;;32706:96::o;32594:104::-;4533:13;:11;:13::i;:::-;32667:14:::1;:23:::0;32594:104::o;5295:103::-;4533:13;:11;:13::i;:::-;5360:30:::1;5387:1;5360:18;:30::i;:::-;5295:103::o:0;26199:266::-;26271:7;26301:8;;26295:3;:14;26291:61;;;26332:8;;26326:14;;26291:61;26374:8;;26366:5;:16;26362:65;;;26407:8;;26399:16;;26362:65;26444:13;26451:5;26444:3;:13;:::i;:::-;26437:20;;26199:266;;;;;:::o;32374:100::-;4533:13;:11;:13::i;:::-;32445:17:::1;:21:::0;;-1:-1:-1;;;;;;32445:21:0::1;-1:-1:-1::0;;;;;32445:21:0;;;::::1;::::0;;;::::1;::::0;;32374:100::o;27892:1291::-;22800:1;23398:7;;:19;23390:63;;;;-1:-1:-1;;;23390:63:0;;;;;;;:::i;:::-;22800:1;23531:7;:18;33284:8:::1;33320:12:::0;;:37:::1;::::0;-1:-1:-1;;;33320:37:0;;33351:4:::1;33320:37:::0;;::::1;1583:51:1::0;27960:7:0;;33284:8;33260:21:::1;::::0;27960:7;;-1:-1:-1;;;;;33320:12:0::1;::::0;:22:::1;::::0;1556:18:1;;33320:37:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:53;;;;:::i;:::-;33392:10;::::0;33303:70;;-1:-1:-1;;;;33392:10:0;::::1;;;33384:37;;;::::0;-1:-1:-1;;;33384:37:0;;5791:2:1;33384:37:0::1;::::0;::::1;5773:21:1::0;5830:2;5810:18;;;5803:30;-1:-1:-1;;;5849:18:1;;;5842:44;5903:18;;33384:37:0::1;5589:338:1::0;33384:37:0::1;33450:14;;33440:6;:24;;33432:59;;;::::0;-1:-1:-1;;;33432:59:0;;6134:2:1;33432:59:0::1;::::0;::::1;6116:21:1::0;6173:2;6153:18;;;6146:30;-1:-1:-1;;;6192:18:1;;;6185:52;6254:18;;33432:59:0::1;5932:346:1::0;33432:59:0::1;28003:10:::2;;27988:12;:25;:52;;;;;28032:8;;28017:12;:23;27988:52;27980:88;;;::::0;-1:-1:-1;;;27980:88:0;;6485:2:1;27980:88:0::2;::::0;::::2;6467:21:1::0;6524:2;6504:18;;;6497:30;6563:25;6543:18;;;6536:53;6606:18;;27980:88:0::2;6283:347:1::0;27980:88:0::2;28157:10;28081:21;28148:20:::0;;;:8:::2;:20;::::0;;;;28105:8:::2;::::0;28179:12:::2;:10;:12::i;:::-;28210:14;::::0;:19;;:62:::2;;-1:-1:-1::0;28258:14:0::2;::::0;28233:11;;:21:::2;::::0;28247:7;;28233:21:::2;:::i;:::-;:39;;28210:62;28202:111;;;::::0;-1:-1:-1;;;28202:111:0;;6837:2:1;28202:111:0::2;::::0;::::2;6819:21:1::0;6876:2;6856:18;;;6849:30;6915:34;6895:18;;;6888:62;-1:-1:-1;;;6966:18:1;;;6959:34;7010:19;;28202:111:0::2;6635:400:1::0;28202:111:0::2;28328:11:::0;;:15;28324:228:::2;;28360:15;28430:4;:15;;;28421:4;28393;:23;;;28378:4;:11;;;:39;;;;:::i;:::-;:48;;;;:::i;:::-;:68;;;;:::i;:::-;28360:86:::0;-1:-1:-1;28465:11:0;;28461:80:::2;;28518:7;28497:4;:17;;;:28;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;28461:80:0::2;28345:207;28324:228;28566:11:::0;;28562:444:::2;;28623:12:::0;;:37:::2;::::0;-1:-1:-1;;;28623:37:0;;28654:4:::2;28623:37;::::0;::::2;1583:51:1::0;28594:26:0::2;::::0;-1:-1:-1;;;;;28623:12:0::2;::::0;:22:::2;::::0;1556:18:1;;28623:37:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28675:12:::0;;28594:66;;-1:-1:-1;28675:74:0::2;::::0;-1:-1:-1;;;;;28675:12:0::2;28713:10;28734:4;28741:7:::0;28675:29:::2;:74::i;:::-;28792:12:::0;;:37:::2;::::0;-1:-1:-1;;;28792:37:0;;28823:4:::2;28792:37;::::0;::::2;1583:51:1::0;28764:25:0::2;::::0;-1:-1:-1;;;;;28792:12:0::2;::::0;:22:::2;::::0;1556:18:1;;28792:37:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28764:65:::0;-1:-1:-1;28894:7:0;28852:38:::2;28872:18:::0;28764:65;28852:38:::2;:::i;:::-;:49;28844:96;;;::::0;-1:-1:-1;;;28844:96:0;;7242:2:1;28844:96:0::2;::::0;::::2;7224:21:1::0;7281:2;7261:18;;;7254:30;7320:34;7300:18;;;7293:62;-1:-1:-1;;;7371:18:1;;;7364:32;7413:19;;28844:96:0::2;7040:398:1::0;28844:96:0::2;28971:11:::0;;:23:::2;::::0;28986:7;;28971:23:::2;:::i;:::-;28957:37:::0;;-1:-1:-1;;28562:444:0::2;29049:23;::::0;::::2;::::0;29034:11;;29077:4:::2;::::0;29034:39:::2;::::0;::::2;:::i;:::-;:48;;;;:::i;:::-;29016:15;::::0;::::2;:66:::0;29116:15:::2;29093:20;::::0;::::2;:38:::0;29147:28:::2;::::0;714:25:1;;;29155:10:0::2;::::0;29147:28:::2;::::0;702:2:1;687:18;29147:28:0::2;;;;;;;-1:-1:-1::0;;22756:1:0;23710:22;;-1:-1:-1;;;;27892:1291:0:o;32113:253::-;4533:13;:11;:13::i;:::-;32205:12:::1;32194:8;;:23;32186:56;;;::::0;-1:-1:-1;;;32186:56:0;;7645:2:1;32186:56:0::1;::::0;::::1;7627:21:1::0;7684:2;7664:18;;;7657:30;-1:-1:-1;;;7703:18:1;;;7696:50;7763:18;;32186:56:0::1;7443:344:1::0;32186:56:0::1;32276:12;32261;:27;32253:69;;;::::0;-1:-1:-1;;;32253:69:0;;7994:2:1;32253:69:0::1;::::0;::::1;7976:21:1::0;8033:2;8013:18;;;8006:30;8072:31;8052:18;;;8045:59;8121:18;;32253:69:0::1;7792:353:1::0;32253:69:0::1;32335:8;:23:::0;32113:253::o;32911:284::-;33000:8;33036:12;;:37;;-1:-1:-1;;;33036:37:0;;33067:4;33036:37;;;1583:51:1;32959:4:0;;33000:8;32959:4;;-1:-1:-1;;;;;33036:12:0;;;;:22;;1556:18:1;;33036:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33019:54;;33101:14;;33091:6;:24;;:38;;;;-1:-1:-1;33119:10:0;;-1:-1:-1;;;33119:10:0;;;;33091:38;:96;;;;;33149:10;;33134:12;:25;:52;;;;;33178:8;;33163:12;:23;33134:52;33084:103;;;;32911:284;:::o;30528:459::-;22800:1;23398:7;;:19;23390:63;;;;-1:-1:-1;;;23390:63:0;;;;;;;:::i;:::-;22800:1;23531:7;:18;30664:10:::1;30588:21;30655:20:::0;;;:8:::1;:20;::::0;;;;30703:11;;30612:8:::1;::::0;30655:20;30733:10;30725:44:::1;;;::::0;-1:-1:-1;;;30725:44:0;;8352:2:1;30725:44:0::1;::::0;::::1;8334:21:1::0;8391:2;8371:18;;;8364:30;-1:-1:-1;;;8410:18:1;;;8403:51;8471:18;;30725:44:0::1;8150:345:1::0;30725:44:0::1;30796:1;30782:15:::0;;;30808::::1;::::0;::::1;:19:::0;;;30838:17:::1;::::0;::::1;:21:::0;30872:12;;:54:::1;::::0;-1:-1:-1;;;;;30872:12:0::1;30906:10;30919:6:::0;30872:25:::1;:54::i;:::-;30942:37;::::0;714:25:1;;;30960:10:0::1;::::0;30942:37:::1;::::0;702:2:1;687:18;30942:37:0::1;;;;;;;-1:-1:-1::0;;22756:1:0;23710:22;;-1:-1:-1;30528:459:0:o;32482:104::-;4533:13;:11;:13::i;:::-;32555:14:::1;:23:::0;32482:104::o;27224:660::-;27327:20;;27288:8;;27311:12;:36;27307:75;;27364:7;27224:660::o;27307:75::-;27411:12;;:37;;-1:-1:-1;;;27411:37:0;;27442:4;27411:37;;;1583:51:1;27392:16:0;;-1:-1:-1;;;;;27411:12:0;;:22;;1556:18:1;;27411:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27392:56;;27463:8;27475:1;27463:13;27459:102;;-1:-1:-1;27516:12:0;27493:20;;;;:35;27224:660::o;27459:102::-;27571:18;27592:49;27606:4;:20;;;27628:12;27592:13;:49::i;:::-;27571:70;;27652:15;27724;;27704:4;:15;;;27684;;27670:10;:30;;;;:::i;:::-;:50;;;;:::i;:::-;:70;;;;:::i;:::-;27652:88;-1:-1:-1;27821:8:0;27804:14;27652:88;27814:4;27804:14;:::i;:::-;:25;;;;:::i;:::-;27777:4;:23;;;:53;;;;:::i;:::-;27751:23;;;:79;-1:-1:-1;;27864:12:0;27841:20;;;;:35;;;;-1:-1:-1;27224:660:0:o;5553:201::-;4533:13;:11;:13::i;:::-;-1:-1:-1;;;;;5642:22:0;::::1;5634:73;;;::::0;-1:-1:-1;;;5634:73:0;;8702:2:1;5634:73:0::1;::::0;::::1;8684:21:1::0;8741:2;8721:18;;;8714:30;8780:34;8760:18;;;8753:62;-1:-1:-1;;;8831:18:1;;;8824:36;8877:19;;5634:73:0::1;8500:402:1::0;5634:73:0::1;5718:28;5737:8;5718:18;:28::i;:::-;5553:201:::0;:::o;31753:352::-;4533:13;:11;:13::i;:::-;31849:12:::1;31836:10;;:25;31828:62;;;::::0;-1:-1:-1;;;31828:62:0;;9109:2:1;31828:62:0::1;::::0;::::1;9091:21:1::0;9148:2;9128:18;;;9121:30;9187:26;9167:18;;;9160:54;9231:18;;31828:62:0::1;8907:348:1::0;31828:62:0::1;31924:12;31909;:27;31901:71;;;::::0;-1:-1:-1;;;31901:71:0;;9462:2:1;31901:71:0::1;::::0;::::1;9444:21:1::0;9501:2;9481:18;;;9474:30;9540:33;9520:18;;;9513:61;9591:18;;31901:71:0::1;9260:355:1::0;31901:71:0::1;31985:10;:25:::0;;;32064:20;:33;31753:352::o;4812:132::-;4693:7;4720:6;-1:-1:-1;;;;;4720:6:0;3399:10;4876:23;4868:68;;;;-1:-1:-1;;;4868:68:0;;9822:2:1;4868:68:0;;;9804:21:1;;;9841:18;;;9834:30;9900:34;9880:18;;;9873:62;9952:18;;4868:68:0;9620:356:1;17322:211:0;17466:58;;-1:-1:-1;;;;;10173:32:1;;17466:58:0;;;10155:51:1;10222:18;;;10215:34;;;17439:86:0;;17459:5;;-1:-1:-1;;;17489:23:0;10128:18:1;;17466:58:0;;;;-1:-1:-1;;17466:58:0;;;;;;;;;;;;;;-1:-1:-1;;;;;17466:58:0;-1:-1:-1;;;;;;17466:58:0;;;;;;;;;;17439:19;:86::i;:::-;17322:211;;;:::o;31140:419::-;31248:11;;31244:308;;31359:20;;31336;;;;31289:10;;31336:43;;;:::i;:::-;31318:15;:61;31314:187;;;-1:-1:-1;31471:14:0;;-1:-1:-1;;;;;31471:14:0;31314:187;31515:25;31528:2;31532:7;31515:12;:25::i;:::-;31261:291;31140:419;;;:::o;5914:191::-;5988:16;6007:6;;-1:-1:-1;;;;;6024:17:0;;;-1:-1:-1;;;;;;6024:17:0;;;;;;6057:40;;6007:6;;;;;;;6057:40;;5988:16;6057:40;5977:128;5914:191;:::o;17541:248::-;17712:68;;-1:-1:-1;;;;;10518:15:1;;;17712:68:0;;;10500:34:1;10570:15;;10550:18;;;10543:43;10602:18;;;10595:34;;;17685:96:0;;17705:5;;-1:-1:-1;;;17735:27:0;10435:18:1;;17712:68:0;10260:375:1;20389:716:0;20813:23;20839:69;20867:4;20839:69;;;;;;;;;;;;;;;;;20847:5;-1:-1:-1;;;;;20839:27:0;;;:69;;;;;:::i;:::-;20923:17;;20813:95;;-1:-1:-1;20923:21:0;20919:179;;21020:10;21009:30;;;;;;;;;;;;:::i;:::-;21001:85;;;;-1:-1:-1;;;21001:85:0;;11092:2:1;21001:85:0;;;11074:21:1;11131:2;11111:18;;;11104:30;11170:34;11150:18;;;11143:62;-1:-1:-1;;;11221:18:1;;;11214:40;11271:19;;21001:85:0;10890:406:1;30995:137:0;31094:17;;31065:11;;:59;;-1:-1:-1;;;;;31065:11:0;;;;31094:17;31113:2;31117:6;31065:28;:59::i;:::-;30995:137;;:::o;12180:229::-;12317:12;12349:52;12371:6;12379:4;12385:1;12388:12;12349:21;:52::i;:::-;12342:59;;12180:229;;;;;;:::o;13300:510::-;13470:12;13528:5;13503:21;:30;;13495:81;;;;-1:-1:-1;;;13495:81:0;;11503:2:1;13495:81:0;;;11485:21:1;11542:2;11522:18;;;11515:30;11581:34;11561:18;;;11554:62;-1:-1:-1;;;11632:18:1;;;11625:36;11678:19;;13495:81:0;11301:402:1;13495:81:0;-1:-1:-1;;;;;9730:19:0;;;13587:60;;;;-1:-1:-1;;;13587:60:0;;11910:2:1;13587:60:0;;;11892:21:1;11949:2;11929:18;;;11922:30;11988:31;11968:18;;;11961:59;12037:18;;13587:60:0;11708:353:1;13587:60:0;13661:12;13675:23;13702:6;-1:-1:-1;;;;;13702:11:0;13721:5;13728:4;13702:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13660:73;;;;13751:51;13768:7;13777:10;13789:12;13751:16;:51::i;:::-;13744:58;13300:510;-1:-1:-1;;;;;;;13300:510:0:o;15986:762::-;16136:12;16165:7;16161:580;;;-1:-1:-1;16196:10:0;16189:17;;16161:580;16310:17;;:21;16306:424;;16558:10;16552:17;16619:15;16606:10;16602:2;16598:19;16591:44;16306:424;16701:12;16694:20;;-1:-1:-1;;;16694:20:0;;;;;;;;:::i;14:180:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;-1:-1:-1;165:23:1;;14:180;-1:-1:-1;14:180:1:o;199:118::-;285:5;278:13;271:21;264:5;261:32;251:60;;307:1;304;297:12;322:241;378:6;431:2;419:9;410:7;406:23;402:32;399:52;;;447:1;444;437:12;399:52;486:9;473:23;505:28;527:5;505:28;:::i;750:286::-;809:6;862:2;850:9;841:7;837:23;833:32;830:52;;;878:1;875;868:12;830:52;904:23;;-1:-1:-1;;;;;956:31:1;;946:42;;936:70;;1002:1;999;992:12;2080:248;2148:6;2156;2209:2;2197:9;2188:7;2184:23;2180:32;2177:52;;;2225:1;2222;2215:12;2177:52;-1:-1:-1;;2248:23:1;;;2318:2;2303:18;;;2290:32;;-1:-1:-1;2080:248:1:o;2746:355::-;2948:2;2930:21;;;2987:2;2967:18;;;2960:30;3026:33;3021:2;3006:18;;2999:61;3092:2;3077:18;;2746:355::o;3459:127::-;3520:10;3515:3;3511:20;3508:1;3501:31;3551:4;3548:1;3541:15;3575:4;3572:1;3565:15;3591:168;3664:9;;;3695;;3712:15;;;3706:22;;3692:37;3682:71;;3733:18;;:::i;3764:217::-;3804:1;3830;3820:132;;3874:10;3869:3;3865:20;3862:1;3855:31;3909:4;3906:1;3899:15;3937:4;3934:1;3927:15;3820:132;-1:-1:-1;3966:9:1;;3764:217::o;3986:128::-;4053:9;;;4074:11;;;4071:37;;;4088:18;;:::i;4119:125::-;4184:9;;;4205:10;;;4202:36;;;4218:18;;:::i;4249:184::-;4319:6;4372:2;4360:9;4351:7;4347:23;4343:32;4340:52;;;4388:1;4385;4378:12;4340:52;-1:-1:-1;4411:16:1;;4249:184;-1:-1:-1;4249:184:1:o;10640:245::-;10707:6;10760:2;10748:9;10739:7;10735:23;10731:32;10728:52;;;10776:1;10773;10766:12;10728:52;10808:9;10802:16;10827:28;10849:5;10827:28;:::i;12066:250::-;12151:1;12161:113;12175:6;12172:1;12169:13;12161:113;;;12251:11;;;12245:18;12232:11;;;12225:39;12197:2;12190:10;12161:113;;;-1:-1:-1;;12308:1:1;12290:16;;12283:27;12066:250::o;12321:287::-;12450:3;12488:6;12482:13;12504:66;12563:6;12558:3;12551:4;12543:6;12539:17;12504:66;:::i;:::-;12586:16;;;;;12321:287;-1:-1:-1;;12321:287:1:o;12613:396::-;12762:2;12751:9;12744:21;12725:4;12794:6;12788:13;12837:6;12832:2;12821:9;12817:18;12810:34;12853:79;12925:6;12920:2;12909:9;12905:18;12900:2;12892:6;12888:15;12853:79;:::i;:::-;12993:2;12972:15;-1:-1:-1;;12968:29:1;12953:45;;;;13000:2;12949:54;;12613:396;-1:-1:-1;;12613:396:1:o
Swarm Source
ipfs://a936c221364ce66d7646e8a6796b7c2fb3adc5c64617e97d3d0d81eb04ca4c33
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | 100.00% | $0.000236 | 3,293,579.3287 | $777.38 |
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.