Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 7 from a total of 7 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Set Token Min Ho... | 11608786 | 1460 days ago | IN | 0 ETH | 0.00385028 | ||||
Set Nft | 11557639 | 1468 days ago | IN | 0 ETH | 0.002856 | ||||
Set Nft Params R... | 11557629 | 1468 days ago | IN | 0 ETH | 0.02137239 | ||||
Set Nft | 11557616 | 1468 days ago | IN | 0 ETH | 0.0026136 | ||||
Set Token Reward... | 11557462 | 1468 days ago | IN | 0 ETH | 0.00339728 | ||||
Set Token Adapte... | 11556989 | 1468 days ago | IN | 0 ETH | 0.00606461 | ||||
Set Token Adapte... | 11556988 | 1468 days ago | IN | 0 ETH | 0.01028983 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
GrimProtocolAdapter
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2020-12-30 */ // SPDX-License-Identifier: MIT pragma solidity =0.6.12; // /* * @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 Context { 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; } } // /** * @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 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 () internal { 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; } } // /** * @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 SafeMath { /** * @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; } } // /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @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); } // /** * @title Roles * @dev Library for managing addresses assigned to a Role. */ library Roles { struct Role { mapping (address => bool) bearer; } /** * @dev Give an account access to this role. */ function add(Role storage role, address account) internal { require(!has(role, account), "Roles: account already has role"); role.bearer[account] = true; } /** * @dev Remove an account's access to this role. */ function remove(Role storage role, address account) internal { require(has(role, account), "Roles: account does not have role"); role.bearer[account] = false; } /** * @dev Check if an account has this role. * @return bool */ function has(Role storage role, address account) internal view returns (bool) { require(account != address(0), "Roles: account is the zero address"); return role.bearer[account]; } } // contract ManagerRole is Context { using Roles for Roles.Role; event ManagerAdded(address indexed account); event ManagerRemoved(address indexed account); Roles.Role private _managers; constructor () internal { _addManager(_msgSender()); } modifier onlyManager() { require(isManager(_msgSender()), "ManagerRole: caller does not have the Manager role"); _; } function isManager(address account) public view returns (bool) { return _managers.has(account); } function addManager(address account) public onlyManager { _addManager(account); } function renounceManager() public { _removeManager(_msgSender()); } function _addManager(address account) internal { _managers.add(account); emit ManagerAdded(account); } function _removeManager(address account) internal { _managers.remove(account); emit ManagerRemoved(account); } } // interface IProtocolAdapter { // Gets adapted burn divisor function getBurnDivisor(address _user, uint256 _currentBurnDivisor) external view returns (uint256); // Gets adapted farm rewards multiplier function getRewardsMultiplier(address _user, uint256 _currentRewardsMultiplier) external view returns (uint256); } // /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom(address from, address to, uint256 tokenId) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 tokenId) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external; } // /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); function tokensOfOwner(address owner) external view returns (uint256[] memory); } // contract GrimProtocolAdapter is IProtocolAdapter, ManagerRole, Ownable { using SafeMath for uint256; // nft id => burn mapping(uint256 => uint256) public burnDivisor; // nft id => multiplier mapping(uint256 => uint256) public rewardsMultiplier; // NFT contract address IERC721Enumerable public nftAddress; // Token contract address - holding X of token grants a reduction of Y IERC20 public tokenAddress; // Token 2 contract address - holding X of token grants a reduction of Y IERC20 public tokenAddress2; // Must own minTokenHold quantity to receive minTokenHoldBurnDivisor or minTokenHoldRewardsMultiplierDivisor uint256 public minTokenHold; // Must own minTokenHold quantity to receive minTokenHoldBurnDivisor or minTokenHoldRewardsMultiplierDivisor uint256 public minTokenHold2; // Burn reduction for holding minTokenHold of tokenAddress uint256 public minTokenHoldBurnDivisor; // Farming rewards increase for holding minTokenHold of tokenAddress uint256 public minTokenHoldRewardsMultiplier; // Farming rewards increase for holding minTokenHold of tokenAddress uint256 public minTokenHoldRewardsMultiplier2; // Users can opt out mapping(address => bool) public userOptOut; constructor() public {} // Gets adapted burn divisor function getBurnDivisor(address _user, uint256 _currentBurnDivisor) external view override returns (uint256) { if (userOptOut[_user] || address(nftAddress) == address(0)) return _currentBurnDivisor; uint256[] memory _tokenIds = nftAddress.tokensOfOwner(_user); if (_tokenIds.length != 0) { // pick last purchased nft _currentBurnDivisor = _currentBurnDivisor.add(burnDivisor[_tokenIds[_tokenIds.length - 1]]); } if (address(tokenAddress) != address(0) && tokenAddress.balanceOf(_user) >= minTokenHold) { // calculate burn reduction for holding token X _currentBurnDivisor = _currentBurnDivisor.add(minTokenHoldBurnDivisor); } return _currentBurnDivisor; } // Gets adapted farm rewards multiplier function getRewardsMultiplier(address _user, uint256 _currentRewardsMultiplier) external view override returns (uint256) { if (userOptOut[_user] || address(nftAddress) == address(0)) return _currentRewardsMultiplier; uint256[] memory _tokenIds = nftAddress.tokensOfOwner(_user); if (_tokenIds.length != 0) { // pick last purchased nft _currentRewardsMultiplier = _currentRewardsMultiplier.add(rewardsMultiplier[_tokenIds[_tokenIds.length - 1]]); } if (address(tokenAddress) != address(0) && tokenAddress.balanceOf(_user) >= minTokenHold) { // calculate burn reduction for holding token X _currentRewardsMultiplier = _currentRewardsMultiplier.add(minTokenHoldRewardsMultiplier); } if (address(tokenAddress2) != address(0) && tokenAddress2.balanceOf(_user) >= minTokenHold2) { // calculate burn reduction for holding token X _currentRewardsMultiplier = _currentRewardsMultiplier.add(minTokenHoldRewardsMultiplier2); } return _currentRewardsMultiplier; } // User can opt out of using nft adapters to save gas if they can't afford nfts function setUserOptOut(bool _opt) public { // set to true to Opt Out userOptOut[msg.sender] = _opt; } function setNft(IERC721Enumerable _nft) public onlyManager { // setting NFT address to 0x0 disables checks nftAddress = _nft; } function setBurnDivisor(uint256 _tokenId, uint256 _burnDivisor) public onlyManager { burnDivisor[_tokenId] = _burnDivisor; } function setRewardsMultiplier(uint256 _tokenId, uint256 _rewardsMultiplier) public onlyManager { rewardsMultiplier[_tokenId] = _rewardsMultiplier; } function setNftParams(uint256 _tokenId, uint256 _burnDivisor, uint256 _rewardsMultiplier) public onlyManager { burnDivisor[_tokenId] = _burnDivisor; rewardsMultiplier[_tokenId] = _rewardsMultiplier; } function setNftParamsRange(uint256 _startTokenId, uint256 _endTokenId, uint256 _burnDivisor, uint256 _rewardsMultiplier) public onlyManager { require( _endTokenId > _startTokenId, "endTokenId must be greater than startTokenId" ); for(uint256 i = _startTokenId; i <= _endTokenId; i++) { burnDivisor[i] = _burnDivisor; rewardsMultiplier[i] = _rewardsMultiplier; } } function setTokenAdapterAddress(IERC20 _token) public onlyManager { // setting _token to address(0) disables the modifiers tokenAddress = _token; } function setTokenAdapterAddress2(IERC20 _token, uint256 _minHold) public onlyManager { // setting _token to address(0) disables the modifiers tokenAddress2 = _token; minTokenHold2 = _minHold; } function setTokenAdapter(IERC20 _token, uint256 _minHold, uint256 _burnDivisor, uint256 _rewardsMultiplier) public onlyManager { setTokenAdapterAddress(_token); setTokenMinHold(_minHold); setTokenBurnDivisor(_burnDivisor); setTokenRewardsMultiplier(_rewardsMultiplier); } function setTokenMinHold(uint256 _minHold) public onlyManager { minTokenHold = _minHold; } function setTokenBurnDivisor(uint256 _burnDivisor) public onlyManager { minTokenHoldBurnDivisor = _burnDivisor; } function setTokenRewardsMultiplier(uint256 _rewardsMultiplier) public onlyManager { minTokenHoldRewardsMultiplier = _rewardsMultiplier; } function setTokenRewardsMultiplier2(uint256 _rewardsMultiplier) public onlyManager { minTokenHoldRewardsMultiplier2 = _rewardsMultiplier; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"ManagerAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"ManagerRemoved","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":[{"internalType":"address","name":"account","type":"address"}],"name":"addManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"burnDivisor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"uint256","name":"_currentBurnDivisor","type":"uint256"}],"name":"getBurnDivisor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"uint256","name":"_currentRewardsMultiplier","type":"uint256"}],"name":"getRewardsMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isManager","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minTokenHold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minTokenHold2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minTokenHoldBurnDivisor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minTokenHoldRewardsMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minTokenHoldRewardsMultiplier2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftAddress","outputs":[{"internalType":"contract IERC721Enumerable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"rewardsMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_burnDivisor","type":"uint256"}],"name":"setBurnDivisor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC721Enumerable","name":"_nft","type":"address"}],"name":"setNft","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_burnDivisor","type":"uint256"},{"internalType":"uint256","name":"_rewardsMultiplier","type":"uint256"}],"name":"setNftParams","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_startTokenId","type":"uint256"},{"internalType":"uint256","name":"_endTokenId","type":"uint256"},{"internalType":"uint256","name":"_burnDivisor","type":"uint256"},{"internalType":"uint256","name":"_rewardsMultiplier","type":"uint256"}],"name":"setNftParamsRange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_rewardsMultiplier","type":"uint256"}],"name":"setRewardsMultiplier","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"_token","type":"address"},{"internalType":"uint256","name":"_minHold","type":"uint256"},{"internalType":"uint256","name":"_burnDivisor","type":"uint256"},{"internalType":"uint256","name":"_rewardsMultiplier","type":"uint256"}],"name":"setTokenAdapter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"_token","type":"address"}],"name":"setTokenAdapterAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"_token","type":"address"},{"internalType":"uint256","name":"_minHold","type":"uint256"}],"name":"setTokenAdapterAddress2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_burnDivisor","type":"uint256"}],"name":"setTokenBurnDivisor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minHold","type":"uint256"}],"name":"setTokenMinHold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rewardsMultiplier","type":"uint256"}],"name":"setTokenRewardsMultiplier","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rewardsMultiplier","type":"uint256"}],"name":"setTokenRewardsMultiplier2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_opt","type":"bool"}],"name":"setUserOptOut","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"tokenAddress","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenAddress2","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userOptOut","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b50620000266200002062000086565b6200008a565b60006200003262000086565b600180546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350620001c9565b3390565b620000a5816000620000dc60201b620017501790919060201c565b6040516001600160a01b038216907f3b4a40cccf2058c593542587329dd385be4f0b588db5471fbd9598e56dd7093a90600090a250565b620000e8828262000160565b156200013b576040805162461bcd60e51b815260206004820152601f60248201527f526f6c65733a206163636f756e7420616c72656164792068617320726f6c6500604482015290519081900360640190fd5b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b60006001600160a01b038216620001a95760405162461bcd60e51b815260040180806020018281038252602281526020018062001d506022913960400191505060405180910390fd5b506001600160a01b03166000908152602091909152604090205460ff1690565b611b7780620001d96000396000f3fe608060405234801561001057600080fd5b50600436106101f05760003560e01c80637ab449f11161010f578063c03bdce4116100a2578063f3ae241511610071578063f3ae2415146105a0578063f3c13387146105d3578063f87ddd5914610606578063f8b91abe14610623576101f0565b8063c03bdce4146104e6578063d0b0051a14610503578063e2d349f11461054a578063f2fde38b1461056d576101f0565b80639ff2b3ea116100de5780639ff2b3ea14610487578063aa3a4dcd146104a4578063afecc630146104ac578063b04ed8a4146104c9576101f0565b80637ab449f1146104505780638da5cb5b1461046f5780638da720ff146104775780639d76ea581461047f576101f0565b80634608de42116101875780635f7e28f2116101565780635f7e28f2146103de578063715018a6146103e657806371a6cf8a146103ee57806374db775714610417576101f0565b80634608de421461032757806352ff02a11461036c57806354f8e615146103a55780635bf8633a146103d6576101f0565b80633424f530116101c35780633424f530146102b057806337d3a047146102cd5780634286cc2d146102f057806343a28ece146102f8576101f0565b80630cbf5954146101f55780630dcfd2fe1461020f578063222ddaeb146102485780632d06177a1461027d575b600080fd5b6101fd61062b565b60408051918252519081900360200190f35b6101fd6004803603604081101561022557600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610631565b61027b6004803603602081101561025e57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610a09565b005b61027b6004803603602081101561029357600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610ab5565b61027b600480360360208110156102c657600080fd5b5035610b21565b61027b600480360360408110156102e357600080fd5b5080359060200135610b86565b6101fd610bf8565b61027b6004803603608081101561030e57600080fd5b5080359060208101359060408101359060600135610bfe565b61027b6004803603608081101561033d57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060208101359060408101359060600135610cec565b6101fd6004803603604081101561038257600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610d76565b6103ad61103d565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6103ad611059565b6101fd611075565b61027b61107b565b61027b6004803603606081101561040457600080fd5b508035906020810135906040013561117b565b61027b6004803603604081101561042d57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356111f9565b61027b6004803603602081101561046657600080fd5b503515156112a4565b6103ad6112e2565b6101fd6112fe565b6103ad611304565b61027b6004803603602081101561049d57600080fd5b5035611320565b6101fd611385565b6101fd600480360360208110156104c257600080fd5b503561138b565b6101fd600480360360208110156104df57600080fd5b503561139d565b61027b600480360360208110156104fc57600080fd5b50356113af565b6105366004803603602081101561051957600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611414565b604080519115158252519081900360200190f35b61027b6004803603604081101561056057600080fd5b5080359060200135611429565b61027b6004803603602081101561058357600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661149b565b610536600480360360208110156105b657600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611626565b61027b600480360360208110156105e957600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611632565b61027b6004803603602081101561061c57600080fd5b50356116d9565b61027b61173e565b600b5481565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600c602052604081205460ff168061067b575060045473ffffffffffffffffffffffffffffffffffffffff16155b15610687575080610a03565b6060600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638462151c856040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060006040518083038186803b15801561071257600080fd5b505afa158015610726573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052602081101561076d57600080fd5b810190808051604051939291908464010000000082111561078d57600080fd5b9083019060208201858111156107a257600080fd5b82518660208202830111640100000000821117156107bf57600080fd5b82525081516020918201928201910280838360005b838110156107ec5781810151838201526020016107d4565b505050509050016040525050509050805160001461084457610841600360008360018551038151811061081b57fe5b60200260200101518152602001908152602001600020548461181690919063ffffffff16565b92505b60055473ffffffffffffffffffffffffffffffffffffffff161580159061090b5750600754600554604080517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8881166004830152915191909216916370a08231916024808301926020929190829003018186803b1580156108dc57600080fd5b505afa1580156108f0573d6000803e3d6000fd5b505050506040513d602081101561090657600080fd5b505110155b1561092157600a5461091e908490611816565b92505b60065473ffffffffffffffffffffffffffffffffffffffff16158015906109e85750600854600654604080517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8881166004830152915191909216916370a08231916024808301926020929190829003018186803b1580156109b957600080fd5b505afa1580156109cd573d6000803e3d6000fd5b505050506040513d60208110156109e357600080fd5b505110155b156109fe57600b546109fb908490611816565b92505b829150505b92915050565b610a19610a14611891565b611626565b610a6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180611aee6032913960400191505060405180910390fd5b600580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b610ac0610a14611891565b610b15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180611aee6032913960400191505060405180910390fd5b610b1e81611895565b50565b610b2c610a14611891565b610b81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180611aee6032913960400191505060405180910390fd5b600955565b610b91610a14611891565b610be6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180611aee6032913960400191505060405180910390fd5b60009182526003602052604090912055565b60075481565b610c09610a14611891565b610c5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180611aee6032913960400191505060405180910390fd5b838311610cb6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180611aa1602c913960400191505060405180910390fd5b835b838111610ce557600081815260026020908152604080832086905560039091529020829055600101610cb8565b5050505050565b610cf7610a14611891565b610d4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180611aee6032913960400191505060405180910390fd5b610d5584610a09565b610d5e836113af565b610d6782610b21565b610d70816116d9565b50505050565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600c602052604081205460ff1680610dc0575060045473ffffffffffffffffffffffffffffffffffffffff16155b15610dcc575080610a03565b6060600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638462151c856040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060006040518083038186803b158015610e5757600080fd5b505afa158015610e6b573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526020811015610eb257600080fd5b8101908080516040519392919084640100000000821115610ed257600080fd5b908301906020820185811115610ee757600080fd5b8251866020820283011164010000000082111715610f0457600080fd5b82525081516020918201928201910280838360005b83811015610f31578181015183820152602001610f19565b5050505090500160405250505090508051600014610f6357610f60600260008360018551038151811061081b57fe5b92505b60055473ffffffffffffffffffffffffffffffffffffffff161580159061102a5750600754600554604080517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8881166004830152915191909216916370a08231916024808301926020929190829003018186803b158015610ffb57600080fd5b505afa15801561100f573d6000803e3d6000fd5b505050506040513d602081101561102557600080fd5b505110155b156109fe576009546109fb908490611816565b60065473ffffffffffffffffffffffffffffffffffffffff1681565b60045473ffffffffffffffffffffffffffffffffffffffff1681565b60085481565b611083611891565b60015473ffffffffffffffffffffffffffffffffffffffff90811691161461110c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b60015460405160009173ffffffffffffffffffffffffffffffffffffffff16907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b611186610a14611891565b6111db576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180611aee6032913960400191505060405180910390fd5b60009283526002602090815260408085209390935560039052912055565b611204610a14611891565b611259576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180611aee6032913960400191505060405180910390fd5b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9390931692909217909155600855565b336000908152600c6020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b60015473ffffffffffffffffffffffffffffffffffffffff1690565b60095481565b60055473ffffffffffffffffffffffffffffffffffffffff1681565b61132b610a14611891565b611380576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180611aee6032913960400191505060405180910390fd5b600b55565b600a5481565b60036020526000908152604090205481565b60026020526000908152604090205481565b6113ba610a14611891565b61140f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180611aee6032913960400191505060405180910390fd5b600755565b600c6020526000908152604090205460ff1681565b611434610a14611891565b611489576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180611aee6032913960400191505060405180910390fd5b60009182526002602052604090912055565b6114a3611891565b60015473ffffffffffffffffffffffffffffffffffffffff90811691161461152c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116611598576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180611a7b6026913960400191505060405180910390fd5b60015460405173ffffffffffffffffffffffffffffffffffffffff8084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6000610a0381836118e4565b61163d610a14611891565b611692576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180611aee6032913960400191505060405180910390fd5b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6116e4610a14611891565b611739576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180611aee6032913960400191505060405180910390fd5b600a55565b61174e611749611891565b61197f565b565b61175a82826118e4565b156117c657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f526f6c65733a206163636f756e7420616c72656164792068617320726f6c6500604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff1660009081526020919091526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b60008282018381101561188a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b3390565b6118a0600082611750565b60405173ffffffffffffffffffffffffffffffffffffffff8216907f3b4a40cccf2058c593542587329dd385be4f0b588db5471fbd9598e56dd7093a90600090a250565b600073ffffffffffffffffffffffffffffffffffffffff8216611952576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180611b206022913960400191505060405180910390fd5b5073ffffffffffffffffffffffffffffffffffffffff166000908152602091909152604090205460ff1690565b61198a6000826119ce565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fef69f7d97228658c92417be1b16b19058315de71fecb435d07b7d23728b6bd3190600090a250565b6119d882826118e4565b611a2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180611acd6021913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff1660009081526020919091526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905556fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373656e64546f6b656e4964206d7573742062652067726561746572207468616e207374617274546f6b656e4964526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c654d616e61676572526f6c653a2063616c6c657220646f6573206e6f74206861766520746865204d616e6167657220726f6c65526f6c65733a206163636f756e7420697320746865207a65726f2061646472657373a264697066735822122030239994dcf7222da280aa615032559d06ea055e3e1beb9224393187ca42c1f964736f6c634300060c0033526f6c65733a206163636f756e7420697320746865207a65726f2061646472657373
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101f05760003560e01c80637ab449f11161010f578063c03bdce4116100a2578063f3ae241511610071578063f3ae2415146105a0578063f3c13387146105d3578063f87ddd5914610606578063f8b91abe14610623576101f0565b8063c03bdce4146104e6578063d0b0051a14610503578063e2d349f11461054a578063f2fde38b1461056d576101f0565b80639ff2b3ea116100de5780639ff2b3ea14610487578063aa3a4dcd146104a4578063afecc630146104ac578063b04ed8a4146104c9576101f0565b80637ab449f1146104505780638da5cb5b1461046f5780638da720ff146104775780639d76ea581461047f576101f0565b80634608de42116101875780635f7e28f2116101565780635f7e28f2146103de578063715018a6146103e657806371a6cf8a146103ee57806374db775714610417576101f0565b80634608de421461032757806352ff02a11461036c57806354f8e615146103a55780635bf8633a146103d6576101f0565b80633424f530116101c35780633424f530146102b057806337d3a047146102cd5780634286cc2d146102f057806343a28ece146102f8576101f0565b80630cbf5954146101f55780630dcfd2fe1461020f578063222ddaeb146102485780632d06177a1461027d575b600080fd5b6101fd61062b565b60408051918252519081900360200190f35b6101fd6004803603604081101561022557600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610631565b61027b6004803603602081101561025e57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610a09565b005b61027b6004803603602081101561029357600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610ab5565b61027b600480360360208110156102c657600080fd5b5035610b21565b61027b600480360360408110156102e357600080fd5b5080359060200135610b86565b6101fd610bf8565b61027b6004803603608081101561030e57600080fd5b5080359060208101359060408101359060600135610bfe565b61027b6004803603608081101561033d57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060208101359060408101359060600135610cec565b6101fd6004803603604081101561038257600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610d76565b6103ad61103d565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6103ad611059565b6101fd611075565b61027b61107b565b61027b6004803603606081101561040457600080fd5b508035906020810135906040013561117b565b61027b6004803603604081101561042d57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356111f9565b61027b6004803603602081101561046657600080fd5b503515156112a4565b6103ad6112e2565b6101fd6112fe565b6103ad611304565b61027b6004803603602081101561049d57600080fd5b5035611320565b6101fd611385565b6101fd600480360360208110156104c257600080fd5b503561138b565b6101fd600480360360208110156104df57600080fd5b503561139d565b61027b600480360360208110156104fc57600080fd5b50356113af565b6105366004803603602081101561051957600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611414565b604080519115158252519081900360200190f35b61027b6004803603604081101561056057600080fd5b5080359060200135611429565b61027b6004803603602081101561058357600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661149b565b610536600480360360208110156105b657600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611626565b61027b600480360360208110156105e957600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611632565b61027b6004803603602081101561061c57600080fd5b50356116d9565b61027b61173e565b600b5481565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600c602052604081205460ff168061067b575060045473ffffffffffffffffffffffffffffffffffffffff16155b15610687575080610a03565b6060600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638462151c856040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060006040518083038186803b15801561071257600080fd5b505afa158015610726573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052602081101561076d57600080fd5b810190808051604051939291908464010000000082111561078d57600080fd5b9083019060208201858111156107a257600080fd5b82518660208202830111640100000000821117156107bf57600080fd5b82525081516020918201928201910280838360005b838110156107ec5781810151838201526020016107d4565b505050509050016040525050509050805160001461084457610841600360008360018551038151811061081b57fe5b60200260200101518152602001908152602001600020548461181690919063ffffffff16565b92505b60055473ffffffffffffffffffffffffffffffffffffffff161580159061090b5750600754600554604080517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8881166004830152915191909216916370a08231916024808301926020929190829003018186803b1580156108dc57600080fd5b505afa1580156108f0573d6000803e3d6000fd5b505050506040513d602081101561090657600080fd5b505110155b1561092157600a5461091e908490611816565b92505b60065473ffffffffffffffffffffffffffffffffffffffff16158015906109e85750600854600654604080517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8881166004830152915191909216916370a08231916024808301926020929190829003018186803b1580156109b957600080fd5b505afa1580156109cd573d6000803e3d6000fd5b505050506040513d60208110156109e357600080fd5b505110155b156109fe57600b546109fb908490611816565b92505b829150505b92915050565b610a19610a14611891565b611626565b610a6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180611aee6032913960400191505060405180910390fd5b600580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b610ac0610a14611891565b610b15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180611aee6032913960400191505060405180910390fd5b610b1e81611895565b50565b610b2c610a14611891565b610b81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180611aee6032913960400191505060405180910390fd5b600955565b610b91610a14611891565b610be6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180611aee6032913960400191505060405180910390fd5b60009182526003602052604090912055565b60075481565b610c09610a14611891565b610c5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180611aee6032913960400191505060405180910390fd5b838311610cb6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180611aa1602c913960400191505060405180910390fd5b835b838111610ce557600081815260026020908152604080832086905560039091529020829055600101610cb8565b5050505050565b610cf7610a14611891565b610d4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180611aee6032913960400191505060405180910390fd5b610d5584610a09565b610d5e836113af565b610d6782610b21565b610d70816116d9565b50505050565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600c602052604081205460ff1680610dc0575060045473ffffffffffffffffffffffffffffffffffffffff16155b15610dcc575080610a03565b6060600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638462151c856040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060006040518083038186803b158015610e5757600080fd5b505afa158015610e6b573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526020811015610eb257600080fd5b8101908080516040519392919084640100000000821115610ed257600080fd5b908301906020820185811115610ee757600080fd5b8251866020820283011164010000000082111715610f0457600080fd5b82525081516020918201928201910280838360005b83811015610f31578181015183820152602001610f19565b5050505090500160405250505090508051600014610f6357610f60600260008360018551038151811061081b57fe5b92505b60055473ffffffffffffffffffffffffffffffffffffffff161580159061102a5750600754600554604080517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8881166004830152915191909216916370a08231916024808301926020929190829003018186803b158015610ffb57600080fd5b505afa15801561100f573d6000803e3d6000fd5b505050506040513d602081101561102557600080fd5b505110155b156109fe576009546109fb908490611816565b60065473ffffffffffffffffffffffffffffffffffffffff1681565b60045473ffffffffffffffffffffffffffffffffffffffff1681565b60085481565b611083611891565b60015473ffffffffffffffffffffffffffffffffffffffff90811691161461110c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b60015460405160009173ffffffffffffffffffffffffffffffffffffffff16907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b611186610a14611891565b6111db576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180611aee6032913960400191505060405180910390fd5b60009283526002602090815260408085209390935560039052912055565b611204610a14611891565b611259576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180611aee6032913960400191505060405180910390fd5b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9390931692909217909155600855565b336000908152600c6020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b60015473ffffffffffffffffffffffffffffffffffffffff1690565b60095481565b60055473ffffffffffffffffffffffffffffffffffffffff1681565b61132b610a14611891565b611380576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180611aee6032913960400191505060405180910390fd5b600b55565b600a5481565b60036020526000908152604090205481565b60026020526000908152604090205481565b6113ba610a14611891565b61140f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180611aee6032913960400191505060405180910390fd5b600755565b600c6020526000908152604090205460ff1681565b611434610a14611891565b611489576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180611aee6032913960400191505060405180910390fd5b60009182526002602052604090912055565b6114a3611891565b60015473ffffffffffffffffffffffffffffffffffffffff90811691161461152c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116611598576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180611a7b6026913960400191505060405180910390fd5b60015460405173ffffffffffffffffffffffffffffffffffffffff8084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6000610a0381836118e4565b61163d610a14611891565b611692576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180611aee6032913960400191505060405180910390fd5b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6116e4610a14611891565b611739576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180611aee6032913960400191505060405180910390fd5b600a55565b61174e611749611891565b61197f565b565b61175a82826118e4565b156117c657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f526f6c65733a206163636f756e7420616c72656164792068617320726f6c6500604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff1660009081526020919091526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b60008282018381101561188a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b3390565b6118a0600082611750565b60405173ffffffffffffffffffffffffffffffffffffffff8216907f3b4a40cccf2058c593542587329dd385be4f0b588db5471fbd9598e56dd7093a90600090a250565b600073ffffffffffffffffffffffffffffffffffffffff8216611952576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180611b206022913960400191505060405180910390fd5b5073ffffffffffffffffffffffffffffffffffffffff166000908152602091909152604090205460ff1690565b61198a6000826119ce565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fef69f7d97228658c92417be1b16b19058315de71fecb435d07b7d23728b6bd3190600090a250565b6119d882826118e4565b611a2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180611acd6021913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff1660009081526020919091526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905556fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373656e64546f6b656e4964206d7573742062652067726561746572207468616e207374617274546f6b656e4964526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c654d616e61676572526f6c653a2063616c6c657220646f6573206e6f74206861766520746865204d616e6167657220726f6c65526f6c65733a206163636f756e7420697320746865207a65726f2061646472657373a264697066735822122030239994dcf7222da280aa615032559d06ea055e3e1beb9224393187ca42c1f964736f6c634300060c0033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.