Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
BadgerHunt
Compiler Version
v0.6.12+commit.27d51765
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: UNLICENSED pragma solidity ^0.6.11; import "deps/@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; import "deps/@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol"; import "deps/@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol"; import "deps/@openzeppelin/contracts-upgradeable/cryptography/MerkleProofUpgradeable.sol"; import "../interfaces/IMerkleDistributor.sol"; import "./MerkleDistributor.sol"; contract BadgerHunt is MerkleDistributor, OwnableUpgradeable { using SafeMathUpgradeable for uint256; uint256 public constant MAX_BPS = 10000; uint256 public claimsStart; uint256 public gracePeriod; uint256 public epochDuration; uint256 public rewardReductionPerEpoch; uint256 public currentRewardRate; uint256 public finalEpoch; address public rewardsEscrow; event Hunt(uint256 index, address indexed account, uint256 amount, uint256 userClaim, uint256 rewardsEscrowClaim); function initialize( address token_, bytes32 merkleRoot_, uint256 epochDuration_, uint256 rewardReductionPerEpoch_, uint256 claimsStart_, uint256 gracePeriod_, address rewardsEscrow_, address owner_ ) public initializer { __MerkleDistributor_init(token_, merkleRoot_); __Ownable_init(); transferOwnership(owner_); epochDuration = epochDuration_; rewardReductionPerEpoch = rewardReductionPerEpoch_; claimsStart = claimsStart_; gracePeriod = gracePeriod_; rewardsEscrow = rewardsEscrow_; currentRewardRate = 10000; finalEpoch = (currentRewardRate / rewardReductionPerEpoch_) - 1; } /// ===== View Functions ===== /// @dev Get grace period end timestamp function getGracePeriodEnd() public view returns (uint256) { return claimsStart.add(gracePeriod); } /// @dev Get claims start timestamp function getClaimsStartTime() public view returns (uint256) { return claimsStart; } /// @dev Get the next epoch start function getNextEpochStart() public view returns (uint256) { uint256 epoch = getCurrentEpoch(); if (epoch == 0) { return getGracePeriodEnd(); } else { return getGracePeriodEnd().add(epochDuration.mul(epoch)); } } function getTimeUntilNextEpoch() public view returns (uint256) { uint256 epoch = getCurrentEpoch(); if (epoch == 0) { return getGracePeriodEnd().sub(now); } else { return (getGracePeriodEnd().add(epochDuration.mul(epoch))).sub(now); } } /// @dev Get the current epoch number function getCurrentEpoch() public view returns (uint256) { uint256 gracePeriodEnd = claimsStart.add(gracePeriod); if (now < gracePeriodEnd) { return 0; } uint256 secondsPastGracePeriod = now.sub(gracePeriodEnd); return (secondsPastGracePeriod / epochDuration).add(1); } /// @dev Get the rewards % of current epoch function getCurrentRewardsRate() public view returns (uint256) { uint256 epoch = getCurrentEpoch(); if (epoch == 0) return MAX_BPS; if (epoch > finalEpoch) return 0; else return MAX_BPS.sub(epoch.mul(rewardReductionPerEpoch)); } /// @dev Get the rewards % of following epoch function getNextEpochRewardsRate() public view returns (uint256) { uint256 epoch = getCurrentEpoch().add(1); if (epoch == 0) return MAX_BPS; if (epoch > finalEpoch) return 0; else return MAX_BPS.sub(epoch.mul(rewardReductionPerEpoch)); } /// ===== Public Actions ===== function claim( uint256 index, address account, uint256 amount, bytes32[] calldata merkleProof ) external virtual override { require(now >= claimsStart, "BadgerDistributor: Before claim start."); require(account == msg.sender, "BadgerDistributor: Can only claim for own account."); require(getCurrentRewardsRate() > 0, "BadgerDistributor: Past rewards claim period."); require(!isClaimed(index), "BadgerDistributor: Drop already claimed."); // Verify the merkle proof. bytes32 node = keccak256(abi.encodePacked(index, account, amount)); require(MerkleProofUpgradeable.verify(merkleProof, merkleRoot, node), "BadgerDistributor: Invalid proof."); // Mark it claimed and send the token. _setClaimed(index); require(getCurrentRewardsRate() <= MAX_BPS, "Excessive Rewards Rate"); uint256 claimable = amount.mul(getCurrentRewardsRate()).div(MAX_BPS); require(IERC20Upgradeable(token).transfer(account, claimable), "Transfer to user failed."); emit Hunt(index, account, amount, claimable, amount.sub(claimable)); } /// ===== Gated Actions: Owner ===== /// @notice After hunt is complete, transfer excess funds to rewardsEscrow function recycleExcess() external onlyOwner { require(getCurrentRewardsRate() == 0 && getCurrentEpoch() > finalEpoch, "Hunt period not finished"); uint256 remainingBalance = IERC20Upgradeable(token).balanceOf(address(this)); IERC20Upgradeable(token).transfer(rewardsEscrow, remainingBalance); } function setGracePeriod(uint256 duration) external onlyOwner { gracePeriod = duration; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.6.0; import "../GSN/ContextUpgradeable.sol"; import "../proxy/Initializable.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ contract OwnableUpgradeable is Initializable, ContextUpgradeable { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ function __Ownable_init() internal initializer { __Context_init_unchained(); __Ownable_init_unchained(); } function __Ownable_init_unchained() internal initializer { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } uint256[49] private __gap; }
// SPDX-License-Identifier: MIT pragma solidity ^0.6.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20Upgradeable { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); }
// SPDX-License-Identifier: MIT pragma solidity ^0.6.0; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMathUpgradeable { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.6.0; /** * @dev These functions deal with verification of Merkle trees (hash trees), */ library MerkleProofUpgradeable { /** * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree * defined by `root`. For this, a `proof` must be provided, containing * sibling hashes on the branch from the leaf to the root of the tree. Each * pair of leaves and each pair of pre-images are assumed to be sorted. */ function verify(bytes32[] memory proof, bytes32 root, bytes32 leaf) internal pure returns (bool) { bytes32 computedHash = leaf; for (uint256 i = 0; i < proof.length; i++) { bytes32 proofElement = proof[i]; if (computedHash <= proofElement) { // Hash(current computed hash + current element of the proof) computedHash = keccak256(abi.encodePacked(computedHash, proofElement)); } else { // Hash(current element of the proof + current computed hash) computedHash = keccak256(abi.encodePacked(proofElement, computedHash)); } } // Check if the computed hash (root) is equal to the provided root return computedHash == root; } }
// SPDX-License-Identifier: UNLICENSED pragma solidity >=0.5.0; // Allows anyone to claim a token if they exist in a merkle root. interface IMerkleDistributor { // Returns true if the index has been marked claimed. function isClaimed(uint256 index) external view returns (bool); // Claim the given amount of the token to the given address. Reverts if the inputs are invalid. function claim(uint256 index, address account, uint256 amount, bytes32[] calldata merkleProof) external; // This event is triggered whenever a call to #claim succeeds. event Claimed(uint256 index, address account, uint256 amount); }
// SP-License-upgradeable-Identifier: UNLICENSED pragma solidity ^0.6.11; import "deps/@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol"; import "deps/@openzeppelin/contracts-upgradeable/cryptography/MerkleProofUpgradeable.sol"; import "deps/@openzeppelin/contracts-upgradeable/proxy/Initializable.sol"; import "../interfaces/IMerkleDistributor.sol"; contract MerkleDistributor is Initializable, IMerkleDistributor { address public token; bytes32 public merkleRoot; // This is a packed array of booleans. mapping(uint256 => uint256) internal claimedBitMap; function __MerkleDistributor_init(address token_, bytes32 merkleRoot_) public initializer { token = token_; merkleRoot = merkleRoot_; } function isClaimed(uint256 index) public override view returns (bool) { uint256 claimedWordIndex = index / 256; uint256 claimedBitIndex = index % 256; uint256 claimedWord = claimedBitMap[claimedWordIndex]; uint256 mask = (1 << claimedBitIndex); return claimedWord & mask == mask; } function _setClaimed(uint256 index) internal { uint256 claimedWordIndex = index / 256; uint256 claimedBitIndex = index % 256; claimedBitMap[claimedWordIndex] = claimedBitMap[claimedWordIndex] | (1 << claimedBitIndex); } function claim( uint256 index, address account, uint256 amount, bytes32[] calldata merkleProof ) external virtual override { require(!isClaimed(index), "MerkleDistributor: Drop already claimed."); // Verify the merkle proof. bytes32 node = keccak256(abi.encodePacked(index, account, amount)); require(MerkleProofUpgradeable.verify(merkleProof, merkleRoot, node), "MerkleDistributor: Invalid proof."); // Mark it claimed and send the token. _setClaimed(index); require(IERC20Upgradeable(token).transfer(account, amount), "MerkleDistributor: Transfer failed."); emit Claimed(index, account, amount); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.6.0; import "../proxy/Initializable.sol"; /* * @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 GSN 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 ContextUpgradeable is Initializable { function __Context_init() internal initializer { __Context_init_unchained(); } function __Context_init_unchained() internal initializer { } function _msgSender() internal view virtual returns (address payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } uint256[50] private __gap; }
// SPDX-License-Identifier: MIT pragma solidity >=0.4.24 <0.7.0; /** * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect. * * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as * possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}. * * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity. */ abstract contract Initializable { /** * @dev Indicates that the contract has been initialized. */ bool private _initialized; /** * @dev Indicates that the contract is in the process of being initialized. */ bool private _initializing; /** * @dev Modifier to protect an initializer function from being invoked twice. */ modifier initializer() { require(_initializing || _isConstructor() || !_initialized, "Initializable: contract is already initialized"); bool isTopLevelCall = !_initializing; if (isTopLevelCall) { _initializing = true; _initialized = true; } _; if (isTopLevelCall) { _initializing = false; } } /// @dev Returns true if and only if the function is running in the constructor function _isConstructor() private view returns (bool) { // extcodesize checks the size of the code stored in an address, and // address returns the current address. Since the code is still not // deployed when running a constructor, any checks on its code size will // yield zero, making it an effective way to detect if a contract is // under construction or not. address self = address(this); uint256 cs; // solhint-disable-next-line no-inline-assembly assembly { cs := extcodesize(self) } return cs == 0; } }
{ "optimizer": { "enabled": false, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } }, "metadata": { "useLiteralContent": true }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"},{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Claimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"userClaim","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"rewardsEscrowClaim","type":"uint256"}],"name":"Hunt","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"},{"inputs":[],"name":"MAX_BPS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token_","type":"address"},{"internalType":"bytes32","name":"merkleRoot_","type":"bytes32"}],"name":"__MerkleDistributor_init","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes32[]","name":"merkleProof","type":"bytes32[]"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimsStart","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentRewardRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"epochDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"finalEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getClaimsStartTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentRewardsRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getGracePeriodEnd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNextEpochRewardsRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNextEpochStart","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTimeUntilNextEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gracePeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token_","type":"address"},{"internalType":"bytes32","name":"merkleRoot_","type":"bytes32"},{"internalType":"uint256","name":"epochDuration_","type":"uint256"},{"internalType":"uint256","name":"rewardReductionPerEpoch_","type":"uint256"},{"internalType":"uint256","name":"claimsStart_","type":"uint256"},{"internalType":"uint256","name":"gracePeriod_","type":"uint256"},{"internalType":"address","name":"rewardsEscrow_","type":"address"},{"internalType":"address","name":"owner_","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"isClaimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"merkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"recycleExcess","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardReductionPerEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardsEscrow","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"duration","type":"uint256"}],"name":"setGracePeriod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b506122a7806100206000396000f3fe608060405234801561001057600080fd5b506004361061018e5760003560e01c80639e34070f116100de578063f215793211610097578063f51ace7011610071578063f51ace70146105f3578063f9f1f30214610611578063fc0c546a1461061b578063fd967f471461064f5761018e565b8063f21579321461054d578063f2f6596014610581578063f2fde38b146105af5761018e565b80639e34070f146104735780639f2e7b19146104b7578063a06db7dc146104d5578063b97dd9e2146104f3578063be084c7714610511578063e58e230a1461052f5761018e565b8063601839ae1161014b578063829eb92c11610125578063829eb92c146103e55780638d0f7e11146104035780638da5cb5b1461042157806396d857c5146104555761018e565b8063601839ae1461036f57806365c5f94a146103bd578063715018a6146103db5761018e565b806306f46166146101935780632e7ba6ef146101b15780632eb4a7ab1461025e5780633a98d88e1461027c5780634ff0876a1461029a5780635a857e58146102b8575b600080fd5b61019b61066d565b6040518082815260200191505060405180910390f35b61025c600480360360808110156101c757600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561021857600080fd5b82018360208201111561022a57600080fd5b8035906020019184602083028401116401000000008311171561024c57600080fd5b90919293919293905050506106ec565b005b610266610bfc565b6040518082815260200191505060405180910390f35b610284610c02565b6040518082815260200191505060405180910390f35b6102a2610c08565b6040518082815260200191505060405180910390f35b61036d60048036036101008110156102cf57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610c0e565b005b6103bb6004803603604081101561038557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610daa565b005b6103c5610ef2565b6040518082815260200191505060405180910390f35b6103e3610f4d565b005b6103ed6110d8565b6040518082815260200191505060405180910390f35b61040b6110de565b6040518082815260200191505060405180910390f35b610429611156565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61045d611180565b6040518082815260200191505060405180910390f35b61049f6004803603602081101561048957600080fd5b810190808035906020019092919050505061118a565b60405180821515815260200191505060405180910390f35b6104bf6111dc565b6040518082815260200191505060405180910390f35b6104dd6111e2565b6040518082815260200191505060405180910390f35b6104fb6111e8565b6040518082815260200191505060405180910390f35b610519611254565b6040518082815260200191505060405180910390f35b6105376112b9565b6040518082815260200191505060405180910390f35b6105556112d7565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105ad6004803603602081101561059757600080fd5b81019080803590602001909291905050506112fd565b005b6105f1600480360360208110156105c557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506113d1565b005b6105fb6115e1565b6040518082815260200191505060405180910390f35b6106196115e7565b005b6106236118fd565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610657611923565b6040518082815260200191505060405180910390f35b6000806106786111e8565b905060008114156106a55761069d4261068f6112b9565b61192990919063ffffffff16565b9150506106e9565b6106e5426106d76106c18460695461197390919063ffffffff16565b6106c96112b9565b6119f990919063ffffffff16565b61192990919063ffffffff16565b9150505b90565b606754421015610747576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061224c6026913960400191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146107cb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603281526020018061212f6032913960400191505060405180910390fd5b60006107d5611254565b1161082b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d8152602001806121d0602d913960400191505060405180910390fd5b6108348561118a565b1561088a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806121a86028913960400191505060405180910390fd5b6000858585604051602001808481526020018373ffffffffffffffffffffffffffffffffffffffff1660601b8152601401828152602001935050505060405160208183030381529060405280519060200120905061092c838380806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505060015483611a81565b610981576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806121876021913960400191505060405180910390fd5b61098a86611b36565b612710610995611254565b1115610a09576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f457863657373697665205265776172647320526174650000000000000000000081525060200191505060405180910390fd5b6000610a39612710610a2b610a1c611254565b8861197390919063ffffffff16565b611b8c90919063ffffffff16565b9050600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb87836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610ace57600080fd5b505af1158015610ae2573d6000803e3d6000fd5b505050506040513d6020811015610af857600080fd5b8101908080519060200190929190505050610b7b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f5472616e7366657220746f2075736572206661696c65642e000000000000000081525060200191505060405180910390fd5b8573ffffffffffffffffffffffffffffffffffffffff167f8eaf15614908a4e9022141fe4a596b1ab0cb72ab32b25023e3da2a459c9a335c888784610bc9868b61192990919063ffffffff16565b6040518085815260200184815260200183815260200182815260200194505050505060405180910390a250505050505050565b60015481565b606c5481565b60695481565b600060019054906101000a900460ff1680610c2d5750610c2c611bd6565b5b80610c43575060008054906101000a900460ff16155b610c98576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806121fd602e913960400191505060405180910390fd5b60008060019054906101000a900460ff161590508015610ce8576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b610cf28989610daa565b610cfa611bed565b610d03826113d1565b8660698190555085606a81905550846067819055508360688190555082606d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550612710606b81905550600186606b5481610d7657fe5b0403606c819055508015610d9f5760008060016101000a81548160ff0219169083151502179055505b505050505050505050565b600060019054906101000a900460ff1680610dc95750610dc8611bd6565b5b80610ddf575060008054906101000a900460ff16155b610e34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806121fd602e913960400191505060405180910390fd5b60008060019054906101000a900460ff161590508015610e84576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b82600060026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550816001819055508015610eed5760008060016101000a81548160ff0219169083151502179055505b505050565b600080610efd6111e8565b90506000811415610f1857610f106112b9565b915050610f4a565b610f46610f308260695461197390919063ffffffff16565b610f386112b9565b6119f990919063ffffffff16565b9150505b90565b610f55611cfb565b73ffffffffffffffffffffffffffffffffffffffff16603560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611017576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16603560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000603560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60675481565b6000806110fc60016110ee6111e8565b6119f990919063ffffffff16565b9050600081141561111257612710915050611153565b606c54811115611126576000915050611153565b61114f61113e606a548361197390919063ffffffff16565b61271061192990919063ffffffff16565b9150505b90565b6000603560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000606754905090565b600080610100838161119857fe5b049050600061010084816111a857fe5b0690506000600260008481526020019081526020016000205490506000826001901b90508081831614945050505050919050565b606a5481565b60685481565b6000806112026068546067546119f990919063ffffffff16565b905080421015611216576000915050611251565b600061122b824261192990919063ffffffff16565b905061124c6001606954838161123d57fe5b046119f990919063ffffffff16565b925050505b90565b60008061125f6111e8565b90506000811415611275576127109150506112b6565b606c548111156112895760009150506112b6565b6112b26112a1606a548361197390919063ffffffff16565b61271061192990919063ffffffff16565b9150505b90565b60006112d26068546067546119f990919063ffffffff16565b905090565b606d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611305611cfb565b73ffffffffffffffffffffffffffffffffffffffff16603560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060688190555050565b6113d9611cfb565b73ffffffffffffffffffffffffffffffffffffffff16603560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461149b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611521576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806121616026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16603560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380603560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b606b5481565b6115ef611cfb565b73ffffffffffffffffffffffffffffffffffffffff16603560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60006116bb611254565b1480156116d05750606c546116ce6111e8565b115b611742576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f48756e7420706572696f64206e6f742066696e6973686564000000000000000081525060200191505060405180910390fd5b60008060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156117cc57600080fd5b505afa1580156117e0573d6000803e3d6000fd5b505050506040513d60208110156117f657600080fd5b81019080805190602001909291905050509050600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb606d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156118be57600080fd5b505af11580156118d2573d6000803e3d6000fd5b505050506040513d60208110156118e857600080fd5b81019080805190602001909291905050505050565b600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61271081565b600061196b83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611d03565b905092915050565b60008083141561198657600090506119f3565b600082840290508284828161199757fe5b04146119ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061222b6021913960400191505060405180910390fd5b809150505b92915050565b600080828401905083811015611a77576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60008082905060005b8551811015611b28576000868281518110611aa157fe5b60200260200101519050808311611ae85782816040516020018083815260200182815260200192505050604051602081830303815290604052805190602001209250611b1a565b808360405160200180838152602001828152602001925050506040516020818303038152906040528051906020012092505b508080600101915050611a8a565b508381149150509392505050565b60006101008281611b4357fe5b04905060006101008381611b5357fe5b069050806001901b6002600084815260200190815260200160002054176002600084815260200190815260200160002081905550505050565b6000611bce83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611dc3565b905092915050565b6000803090506000813b9050600081149250505090565b600060019054906101000a900460ff1680611c0c5750611c0b611bd6565b5b80611c22575060008054906101000a900460ff16155b611c77576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806121fd602e913960400191505060405180910390fd5b60008060019054906101000a900460ff161590508015611cc7576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b611ccf611e89565b611cd7611f87565b8015611cf85760008060016101000a81548160ff0219169083151502179055505b50565b600033905090565b6000838311158290611db0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611d75578082015181840152602081019050611d5a565b50505050905090810190601f168015611da25780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b60008083118290611e6f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611e34578082015181840152602081019050611e19565b50505050905090810190601f168015611e615780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581611e7b57fe5b049050809150509392505050565b600060019054906101000a900460ff1680611ea85750611ea7611bd6565b5b80611ebe575060008054906101000a900460ff16155b611f13576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806121fd602e913960400191505060405180910390fd5b60008060019054906101000a900460ff161590508015611f63576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b8015611f845760008060016101000a81548160ff0219169083151502179055505b50565b600060019054906101000a900460ff1680611fa65750611fa5611bd6565b5b80611fbc575060008054906101000a900460ff16155b612011576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806121fd602e913960400191505060405180910390fd5b60008060019054906101000a900460ff161590508015612061576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b600061206b611cfb565b905080603560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350801561212b5760008060016101000a81548160ff0219169083151502179055505b5056fe4261646765724469737472696275746f723a2043616e206f6e6c7920636c61696d20666f72206f776e206163636f756e742e4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734261646765724469737472696275746f723a20496e76616c69642070726f6f662e4261646765724469737472696275746f723a2044726f7020616c726561647920636c61696d65642e4261646765724469737472696275746f723a2050617374207265776172647320636c61696d20706572696f642e496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774261646765724469737472696275746f723a204265666f726520636c61696d2073746172742ea26469706673582212201fbc2486add629454d92da1c12a7f005d6923851f57cbf519f4efe5afd08256364736f6c634300060c0033
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061018e5760003560e01c80639e34070f116100de578063f215793211610097578063f51ace7011610071578063f51ace70146105f3578063f9f1f30214610611578063fc0c546a1461061b578063fd967f471461064f5761018e565b8063f21579321461054d578063f2f6596014610581578063f2fde38b146105af5761018e565b80639e34070f146104735780639f2e7b19146104b7578063a06db7dc146104d5578063b97dd9e2146104f3578063be084c7714610511578063e58e230a1461052f5761018e565b8063601839ae1161014b578063829eb92c11610125578063829eb92c146103e55780638d0f7e11146104035780638da5cb5b1461042157806396d857c5146104555761018e565b8063601839ae1461036f57806365c5f94a146103bd578063715018a6146103db5761018e565b806306f46166146101935780632e7ba6ef146101b15780632eb4a7ab1461025e5780633a98d88e1461027c5780634ff0876a1461029a5780635a857e58146102b8575b600080fd5b61019b61066d565b6040518082815260200191505060405180910390f35b61025c600480360360808110156101c757600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561021857600080fd5b82018360208201111561022a57600080fd5b8035906020019184602083028401116401000000008311171561024c57600080fd5b90919293919293905050506106ec565b005b610266610bfc565b6040518082815260200191505060405180910390f35b610284610c02565b6040518082815260200191505060405180910390f35b6102a2610c08565b6040518082815260200191505060405180910390f35b61036d60048036036101008110156102cf57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610c0e565b005b6103bb6004803603604081101561038557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610daa565b005b6103c5610ef2565b6040518082815260200191505060405180910390f35b6103e3610f4d565b005b6103ed6110d8565b6040518082815260200191505060405180910390f35b61040b6110de565b6040518082815260200191505060405180910390f35b610429611156565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61045d611180565b6040518082815260200191505060405180910390f35b61049f6004803603602081101561048957600080fd5b810190808035906020019092919050505061118a565b60405180821515815260200191505060405180910390f35b6104bf6111dc565b6040518082815260200191505060405180910390f35b6104dd6111e2565b6040518082815260200191505060405180910390f35b6104fb6111e8565b6040518082815260200191505060405180910390f35b610519611254565b6040518082815260200191505060405180910390f35b6105376112b9565b6040518082815260200191505060405180910390f35b6105556112d7565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105ad6004803603602081101561059757600080fd5b81019080803590602001909291905050506112fd565b005b6105f1600480360360208110156105c557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506113d1565b005b6105fb6115e1565b6040518082815260200191505060405180910390f35b6106196115e7565b005b6106236118fd565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610657611923565b6040518082815260200191505060405180910390f35b6000806106786111e8565b905060008114156106a55761069d4261068f6112b9565b61192990919063ffffffff16565b9150506106e9565b6106e5426106d76106c18460695461197390919063ffffffff16565b6106c96112b9565b6119f990919063ffffffff16565b61192990919063ffffffff16565b9150505b90565b606754421015610747576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061224c6026913960400191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146107cb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603281526020018061212f6032913960400191505060405180910390fd5b60006107d5611254565b1161082b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d8152602001806121d0602d913960400191505060405180910390fd5b6108348561118a565b1561088a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806121a86028913960400191505060405180910390fd5b6000858585604051602001808481526020018373ffffffffffffffffffffffffffffffffffffffff1660601b8152601401828152602001935050505060405160208183030381529060405280519060200120905061092c838380806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505060015483611a81565b610981576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806121876021913960400191505060405180910390fd5b61098a86611b36565b612710610995611254565b1115610a09576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f457863657373697665205265776172647320526174650000000000000000000081525060200191505060405180910390fd5b6000610a39612710610a2b610a1c611254565b8861197390919063ffffffff16565b611b8c90919063ffffffff16565b9050600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb87836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610ace57600080fd5b505af1158015610ae2573d6000803e3d6000fd5b505050506040513d6020811015610af857600080fd5b8101908080519060200190929190505050610b7b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f5472616e7366657220746f2075736572206661696c65642e000000000000000081525060200191505060405180910390fd5b8573ffffffffffffffffffffffffffffffffffffffff167f8eaf15614908a4e9022141fe4a596b1ab0cb72ab32b25023e3da2a459c9a335c888784610bc9868b61192990919063ffffffff16565b6040518085815260200184815260200183815260200182815260200194505050505060405180910390a250505050505050565b60015481565b606c5481565b60695481565b600060019054906101000a900460ff1680610c2d5750610c2c611bd6565b5b80610c43575060008054906101000a900460ff16155b610c98576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806121fd602e913960400191505060405180910390fd5b60008060019054906101000a900460ff161590508015610ce8576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b610cf28989610daa565b610cfa611bed565b610d03826113d1565b8660698190555085606a81905550846067819055508360688190555082606d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550612710606b81905550600186606b5481610d7657fe5b0403606c819055508015610d9f5760008060016101000a81548160ff0219169083151502179055505b505050505050505050565b600060019054906101000a900460ff1680610dc95750610dc8611bd6565b5b80610ddf575060008054906101000a900460ff16155b610e34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806121fd602e913960400191505060405180910390fd5b60008060019054906101000a900460ff161590508015610e84576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b82600060026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550816001819055508015610eed5760008060016101000a81548160ff0219169083151502179055505b505050565b600080610efd6111e8565b90506000811415610f1857610f106112b9565b915050610f4a565b610f46610f308260695461197390919063ffffffff16565b610f386112b9565b6119f990919063ffffffff16565b9150505b90565b610f55611cfb565b73ffffffffffffffffffffffffffffffffffffffff16603560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611017576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16603560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000603560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60675481565b6000806110fc60016110ee6111e8565b6119f990919063ffffffff16565b9050600081141561111257612710915050611153565b606c54811115611126576000915050611153565b61114f61113e606a548361197390919063ffffffff16565b61271061192990919063ffffffff16565b9150505b90565b6000603560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000606754905090565b600080610100838161119857fe5b049050600061010084816111a857fe5b0690506000600260008481526020019081526020016000205490506000826001901b90508081831614945050505050919050565b606a5481565b60685481565b6000806112026068546067546119f990919063ffffffff16565b905080421015611216576000915050611251565b600061122b824261192990919063ffffffff16565b905061124c6001606954838161123d57fe5b046119f990919063ffffffff16565b925050505b90565b60008061125f6111e8565b90506000811415611275576127109150506112b6565b606c548111156112895760009150506112b6565b6112b26112a1606a548361197390919063ffffffff16565b61271061192990919063ffffffff16565b9150505b90565b60006112d26068546067546119f990919063ffffffff16565b905090565b606d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611305611cfb565b73ffffffffffffffffffffffffffffffffffffffff16603560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060688190555050565b6113d9611cfb565b73ffffffffffffffffffffffffffffffffffffffff16603560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461149b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611521576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806121616026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16603560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380603560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b606b5481565b6115ef611cfb565b73ffffffffffffffffffffffffffffffffffffffff16603560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60006116bb611254565b1480156116d05750606c546116ce6111e8565b115b611742576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f48756e7420706572696f64206e6f742066696e6973686564000000000000000081525060200191505060405180910390fd5b60008060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156117cc57600080fd5b505afa1580156117e0573d6000803e3d6000fd5b505050506040513d60208110156117f657600080fd5b81019080805190602001909291905050509050600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb606d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156118be57600080fd5b505af11580156118d2573d6000803e3d6000fd5b505050506040513d60208110156118e857600080fd5b81019080805190602001909291905050505050565b600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61271081565b600061196b83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611d03565b905092915050565b60008083141561198657600090506119f3565b600082840290508284828161199757fe5b04146119ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061222b6021913960400191505060405180910390fd5b809150505b92915050565b600080828401905083811015611a77576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60008082905060005b8551811015611b28576000868281518110611aa157fe5b60200260200101519050808311611ae85782816040516020018083815260200182815260200192505050604051602081830303815290604052805190602001209250611b1a565b808360405160200180838152602001828152602001925050506040516020818303038152906040528051906020012092505b508080600101915050611a8a565b508381149150509392505050565b60006101008281611b4357fe5b04905060006101008381611b5357fe5b069050806001901b6002600084815260200190815260200160002054176002600084815260200190815260200160002081905550505050565b6000611bce83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611dc3565b905092915050565b6000803090506000813b9050600081149250505090565b600060019054906101000a900460ff1680611c0c5750611c0b611bd6565b5b80611c22575060008054906101000a900460ff16155b611c77576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806121fd602e913960400191505060405180910390fd5b60008060019054906101000a900460ff161590508015611cc7576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b611ccf611e89565b611cd7611f87565b8015611cf85760008060016101000a81548160ff0219169083151502179055505b50565b600033905090565b6000838311158290611db0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611d75578082015181840152602081019050611d5a565b50505050905090810190601f168015611da25780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b60008083118290611e6f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611e34578082015181840152602081019050611e19565b50505050905090810190601f168015611e615780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581611e7b57fe5b049050809150509392505050565b600060019054906101000a900460ff1680611ea85750611ea7611bd6565b5b80611ebe575060008054906101000a900460ff16155b611f13576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806121fd602e913960400191505060405180910390fd5b60008060019054906101000a900460ff161590508015611f63576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b8015611f845760008060016101000a81548160ff0219169083151502179055505b50565b600060019054906101000a900460ff1680611fa65750611fa5611bd6565b5b80611fbc575060008054906101000a900460ff16155b612011576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806121fd602e913960400191505060405180910390fd5b60008060019054906101000a900460ff161590508015612061576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b600061206b611cfb565b905080603560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350801561212b5760008060016101000a81548160ff0219169083151502179055505b5056fe4261646765724469737472696275746f723a2043616e206f6e6c7920636c61696d20666f72206f776e206163636f756e742e4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734261646765724469737472696275746f723a20496e76616c69642070726f6f662e4261646765724469737472696275746f723a2044726f7020616c726561647920636c61696d65642e4261646765724469737472696275746f723a2050617374207265776172647320636c61696d20706572696f642e496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774261646765724469737472696275746f723a204265666f726520636c61696d2073746172742ea26469706673582212201fbc2486add629454d92da1c12a7f005d6923851f57cbf519f4efe5afd08256364736f6c634300060c0033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
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.