Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 1 from a total of 1 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
Value | ||||
---|---|---|---|---|---|---|---|---|---|
0x60806040 | 11432315 | 1193 days ago | IN | Create: Reward | 0 ETH | 0.14593962 |
Loading...
Loading
Contract Name:
Reward
Compiler Version
v0.7.5+commit.eb77ed08
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2020-12-11 */ // SPDX-License-Identifier: MIT // File: node_modules\@openzeppelin\contracts\GSN\Context.sol pragma solidity >=0.6.0 <0.8.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with 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; } } // File: @openzeppelin\contracts\access\Ownable.sol pragma solidity >=0.6.0 <0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () 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; } } // File: @openzeppelin\contracts\utils\ReentrancyGuard.sol pragma solidity >=0.6.0 <0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor () internal { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and make it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } // File: @openzeppelin\contracts\utils\EnumerableSet.sol pragma solidity >=0.6.0 <0.8.0; /** * @dev Library for managing * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive * types. * * Sets have the following properties: * * - Elements are added, removed, and checked for existence in constant time * (O(1)). * - Elements are enumerated in O(n). No guarantees are made on the ordering. * * ``` * contract Example { * // Add the library methods * using EnumerableSet for EnumerableSet.AddressSet; * * // Declare a set state variable * EnumerableSet.AddressSet private mySet; * } * ``` * * As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`) * and `uint256` (`UintSet`) are supported. */ library EnumerableSet { // To implement this library for multiple types with as little code // repetition as possible, we write it in terms of a generic Set type with // bytes32 values. // The Set implementation uses private functions, and user-facing // implementations (such as AddressSet) are just wrappers around the // underlying Set. // This means that we can only create new EnumerableSets for types that fit // in bytes32. struct Set { // Storage of set values bytes32[] _values; // Position of the value in the `values` array, plus 1 because index 0 // means a value is not in the set. mapping(bytes32 => uint256) _indexes; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function _add(Set storage set, bytes32 value) private returns (bool) { if (!_contains(set, value)) { set._values.push(value); // The value is stored at length-1, but we add 1 to all indexes // and use 0 as a sentinel value set._indexes[value] = set._values.length; return true; } else { return false; } } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function _remove(Set storage set, bytes32 value) private returns (bool) { // We read and store the value's index to prevent multiple reads from the same storage slot uint256 valueIndex = set._indexes[value]; if (valueIndex != 0) {// Equivalent to contains(set, value) // To delete an element from the _values array in O(1), we swap the element to delete with the last one in // the array, and then remove the last element (sometimes called as 'swap and pop'). // This modifies the order of the array, as noted in {at}. uint256 toDeleteIndex = valueIndex - 1; uint256 lastIndex = set._values.length - 1; // When the value to delete is the last one, the swap operation is unnecessary. However, since this occurs // so rarely, we still do the swap anyway to avoid the gas cost of adding an 'if' statement. bytes32 lastvalue = set._values[lastIndex]; // Move the last value to the index where the value to delete is set._values[toDeleteIndex] = lastvalue; // Update the index for the moved value set._indexes[lastvalue] = toDeleteIndex + 1; // All indexes are 1-based // Delete the slot where the moved value was stored set._values.pop(); // Delete the index for the deleted slot delete set._indexes[value]; return true; } else { return false; } } /** * @dev Returns true if the value is in the set. O(1). */ function _contains(Set storage set, bytes32 value) private view returns (bool) { return set._indexes[value] != 0; } /** * @dev Returns the number of values on the set. O(1). */ function _length(Set storage set) private view returns (uint256) { return set._values.length; } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function _at(Set storage set, uint256 index) private view returns (bytes32) { require(set._values.length > index, "EnumerableSet: index out of bounds"); return set._values[index]; } // Bytes32Set struct Bytes32Set { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _add(set._inner, value); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _remove(set._inner, value); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) { return _contains(set._inner, value); } /** * @dev Returns the number of values in the set. O(1). */ function length(Bytes32Set storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) { return _at(set._inner, index); } // AddressSet struct AddressSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(AddressSet storage set, address value) internal returns (bool) { return _add(set._inner, bytes32(uint256(value))); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(AddressSet storage set, address value) internal returns (bool) { return _remove(set._inner, bytes32(uint256(value))); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(AddressSet storage set, address value) internal view returns (bool) { return _contains(set._inner, bytes32(uint256(value))); } /** * @dev Returns the number of values in the set. O(1). */ function length(AddressSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(AddressSet storage set, uint256 index) internal view returns (address) { return address(uint256(_at(set._inner, index))); } // UintSet struct UintSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(UintSet storage set, uint256 value) internal returns (bool) { return _add(set._inner, bytes32(value)); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(UintSet storage set, uint256 value) internal returns (bool) { return _remove(set._inner, bytes32(value)); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(UintSet storage set, uint256 value) internal view returns (bool) { return _contains(set._inner, bytes32(value)); } /** * @dev Returns the number of values on the set. O(1). */ function length(UintSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(UintSet storage set, uint256 index) internal view returns (uint256) { return uint256(_at(set._inner, index)); } } // File: @openzeppelin\contracts\math\SafeMath.sol pragma solidity >=0.6.0 <0.8.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 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; } } // File: contracts\interfaces\IToken.sol pragma solidity ^0.7.5; interface IToken { function snapshot() external returns (uint); function totalSupplyAt(uint _snapshotId) external view returns (uint); function balanceOfAt(address _account, uint _snapshotId) external view returns (uint); } // File: contracts\Reward.sol pragma solidity ^0.7.5; contract Reward is Ownable, ReentrancyGuard { using SafeMath for uint; using EnumerableSet for EnumerableSet.AddressSet; struct EthReward { uint snapshotId; uint totalSupplyAtSnapshot; uint rewardAmount; uint claimedAmount; uint timestamp; } uint public constant CLAIM_DEADLINE = 182 days; IToken public token; EthReward[] public rewards; // not eligible for rewards EnumerableSet.AddressSet private _blacklist; // user -> reward id -> claimed mapping(address => mapping(uint => bool)) public claimedRewards; // reward id -> drained mapping(uint => bool) private drained; event NewToken(address _token, uint _timestamp); event NewReward(uint _rewardId, uint _snapshotId, uint _amount, uint _timestamp); event Claimed(address indexed _who, uint indexed _rewardId, uint _amount, uint _timestamp); event Drained(uint _rewardId, uint _amount, uint _timestamp); event Blacklisted(address _address, bool _blacklisted); constructor(address _token) { setToken(_token); } function setToken(address _token) public onlyOwner { require(_token != address(0), "Invalid address"); token = IToken(_token); emit NewToken(_token, _getNow()); } receive() external payable { deposit(); } function deposit() public payable onlyOwner { require(msg.value > 0, "Must deposit something"); uint snapshotId = token.snapshot(); uint totalSupplyAtSnapshot = token.totalSupplyAt(snapshotId); uint newId = rewards.length; // remove blacklisted balances from total supply for (uint i = 0; i < blacklistLength(); i++) { address blacklisted = blacklistAt(i); uint balanceAtSnapshot = token.balanceOfAt(blacklisted, snapshotId); totalSupplyAtSnapshot = totalSupplyAtSnapshot.sub(balanceAtSnapshot); claimedRewards[blacklisted][newId] = true; } EthReward memory newReward = EthReward({ snapshotId : snapshotId, totalSupplyAtSnapshot : totalSupplyAtSnapshot, rewardAmount : msg.value, claimedAmount : 0, timestamp : _getNow() }); rewards.push(newReward); emit NewReward(newId, snapshotId, msg.value, _getNow()); } function claim(uint _rewardId) public nonReentrant { require(!claimedRewards[_msgSender()][_rewardId], "Already claimed"); require(beforeDeadline(_rewardId), "Too late"); uint myShare = getMyShare(_rewardId); require(myShare > 0, "Nothing to claim"); EthReward storage reward = rewards[_rewardId]; reward.claimedAmount = reward.claimedAmount.add(myShare); claimedRewards[_msgSender()][_rewardId] = true; // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success,) = _msgSender().call{value : myShare}(""); require(success, "Claim: unable to send value, recipient may have reverted"); emit Claimed(_msgSender(), _rewardId, myShare, _getNow()); } function claimBulk(uint[] calldata _rewardIds) external { for (uint i = 0; i < _rewardIds.length; i++) { claim(_rewardIds[i]); } } function drain(uint _rewardId) public onlyOwner { require(!beforeDeadline(_rewardId), "Too early"); require(!drained[_rewardId], "Already drained"); (,, uint rewardAmount, uint claimedAmount,) = getRewardInfo(_rewardId); uint unclaimedAmount = rewardAmount.sub(claimedAmount); drained[_rewardId] = true; _msgSender().transfer(unclaimedAmount); emit Drained(_rewardId, unclaimedAmount, _getNow()); } function drainBulk(uint[] calldata _rewardIds) external { for (uint i = 0; i < _rewardIds.length; i++) { drain(_rewardIds[i]); } } function addBlacklist(address[] calldata _blacklisted) external onlyOwner { for (uint i = 0; i < _blacklisted.length; i++) { _blacklist.add(_blacklisted[i]); emit Blacklisted(_blacklisted[i], true); } } function removeBlacklist(address[] calldata _blacklisted) external onlyOwner { for (uint i = 0; i < _blacklisted.length; i++) { _blacklist.remove(_blacklisted[i]); emit Blacklisted(_blacklisted[i], false); } } function getNumberOfRewards() public view returns (uint) { return rewards.length; } function getRewardInfo(uint _rewardId) public view returns (uint snapshotId, uint totalSupplyAtSnapshot, uint rewardAmount, uint claimedAmount, uint timestamp) { require(_rewardId >= 0 && _rewardId < getNumberOfRewards(), "Invalid reward id"); EthReward memory reward = rewards[_rewardId]; snapshotId = reward.snapshotId; totalSupplyAtSnapshot = reward.totalSupplyAtSnapshot; rewardAmount = reward.rewardAmount; claimedAmount = reward.claimedAmount; timestamp = reward.timestamp; } function deadline(uint _rewardId) public view returns (uint) { (,,,, uint timestamp) = getRewardInfo(_rewardId); return timestamp + CLAIM_DEADLINE; } function beforeDeadline(uint _rewardId) public view returns (bool) { return _getNow() <= deadline(_rewardId); } function getMyShare(uint _rewardId) public view returns (uint) { return getShare(_msgSender(), _rewardId); } function getShare(address _account, uint _rewardId) public view returns (uint) { if (claimedRewards[_account][_rewardId]) { return 0; } (uint snapshotId, uint totalSupplyAtSnapshot, uint rewardAmount, ,) = getRewardInfo(_rewardId); uint balanceAtSnapshot = token.balanceOfAt(_account, snapshotId); return rewardAmount.mul(balanceAtSnapshot).div(totalSupplyAtSnapshot); } function blacklistContains(address _address) public view returns (bool) { return _blacklist.contains(_address); } function blacklistLength() public view returns (uint) { return _blacklist.length(); } function blacklistAt(uint _index) public view returns (address) { return _blacklist.at(_index); } function _getNow() internal view returns (uint) { return block.timestamp; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"_blacklisted","type":"bool"}],"name":"Blacklisted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_who","type":"address"},{"indexed":true,"internalType":"uint256","name":"_rewardId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_timestamp","type":"uint256"}],"name":"Claimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_rewardId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_timestamp","type":"uint256"}],"name":"Drained","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_rewardId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_snapshotId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_timestamp","type":"uint256"}],"name":"NewReward","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_token","type":"address"},{"indexed":false,"internalType":"uint256","name":"_timestamp","type":"uint256"}],"name":"NewToken","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":"CLAIM_DEADLINE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_blacklisted","type":"address[]"}],"name":"addBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rewardId","type":"uint256"}],"name":"beforeDeadline","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"blacklistAt","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"blacklistContains","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blacklistLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rewardId","type":"uint256"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_rewardIds","type":"uint256[]"}],"name":"claimBulk","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"claimedRewards","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rewardId","type":"uint256"}],"name":"deadline","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deposit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rewardId","type":"uint256"}],"name":"drain","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_rewardIds","type":"uint256[]"}],"name":"drainBulk","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rewardId","type":"uint256"}],"name":"getMyShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNumberOfRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rewardId","type":"uint256"}],"name":"getRewardInfo","outputs":[{"internalType":"uint256","name":"snapshotId","type":"uint256"},{"internalType":"uint256","name":"totalSupplyAtSnapshot","type":"uint256"},{"internalType":"uint256","name":"rewardAmount","type":"uint256"},{"internalType":"uint256","name":"claimedAmount","type":"uint256"},{"internalType":"uint256","name":"timestamp","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_rewardId","type":"uint256"}],"name":"getShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_blacklisted","type":"address[]"}],"name":"removeBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"rewards","outputs":[{"internalType":"uint256","name":"snapshotId","type":"uint256"},{"internalType":"uint256","name":"totalSupplyAtSnapshot","type":"uint256"},{"internalType":"uint256","name":"rewardAmount","type":"uint256"},{"internalType":"uint256","name":"claimedAmount","type":"uint256"},{"internalType":"uint256","name":"timestamp","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"setToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"contract IToken","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040523480156200001157600080fd5b5060405162002d2438038062002d24833981810160405260208110156200003757600080fd5b810190808051906020019092919050505060006200005a6200011760201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506001808190555062000110816200011f60201b60201c565b5062000344565b600033905090565b6200012f6200011760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620001f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141562000294576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f496e76616c69642061646472657373000000000000000000000000000000000081525060200191505060405180910390fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f275a11e033325e9b28a23131fcc7e243a49bb38beb686051976dd8c8899d9a3c81620003076200033c60201b60201c565b604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a150565b600042905090565b6129d080620003546000396000f3fe60806040526004361061014f5760003560e01c80639346afac116100b6578063f2fde38b1161006f578063f2fde38b146106f9578063f301af421461074a578063f6b19c74146107b5578063f73c38e1146107f0578063fb831b9a14610876578063fc0c546a146108e75761015e565b80639346afac1461057e578063a13ce896146105a9578063ad11bf431461060e578063c40dc8ec14610675578063d0e30db0146106c4578063e5437265146106ce5761015e565b80634c78b276116101085780634c78b2761461039157806359363bca146104005780635fe6e4131461044f578063715018a6146104a05780637911ef9d146104b75780638da5cb5b1461053d5761015e565b8063144fa6d714610163578063243d3827146101b4578063379607f51461021f5780633d2cc56c1461025a57806342f81580146102e0578063496ef2171461030b5761015e565b3661015e5761015c610928565b005b600080fd5b34801561016f57600080fd5b506101b26004803603602081101561018657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610e3d565b005b3480156101c057600080fd5b506101ed600480360360208110156101d757600080fd5b8101908080359060200190929190505050611048565b604051808681526020018581526020018481526020018381526020018281526020019550505050505060405180910390f35b34801561022b57600080fd5b506102586004803603602081101561024257600080fd5b8101908080359060200190929190505050611167565b005b34801561026657600080fd5b506102de6004803603602081101561027d57600080fd5b810190808035906020019064010000000081111561029a57600080fd5b8201836020820111156102ac57600080fd5b803590602001918460208302840111640100000000831117156102ce57600080fd5b90919293919293905050506115a4565b005b3480156102ec57600080fd5b506102f5611749565b6040518082815260200191505060405180910390f35b34801561031757600080fd5b5061038f6004803603602081101561032e57600080fd5b810190808035906020019064010000000081111561034b57600080fd5b82018360208201111561035d57600080fd5b8035906020019184602083028401116401000000008311171561037f57600080fd5b9091929391929390505050611750565b005b34801561039d57600080fd5b506103ea600480360360408110156103b457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061178b565b6040518082815260200191505060405180910390f35b34801561040c57600080fd5b506104396004803603602081101561042357600080fd5b8101908080359060200190929190505050611911565b6040518082815260200191505060405180910390f35b34801561045b57600080fd5b506104886004803603602081101561047257600080fd5b810190808035906020019092919050505061192b565b60405180821515815260200191505060405180910390f35b3480156104ac57600080fd5b506104b5611947565b005b3480156104c357600080fd5b5061053b600480360360208110156104da57600080fd5b81019080803590602001906401000000008111156104f757600080fd5b82018360208201111561050957600080fd5b8035906020019184602083028401116401000000008311171561052b57600080fd5b9091929391929390505050611acd565b005b34801561054957600080fd5b50610552611c72565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561058a57600080fd5b50610593611c9b565b6040518082815260200191505060405180910390f35b3480156105b557600080fd5b506105e2600480360360208110156105cc57600080fd5b8101908080359060200190929190505050611cac565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561061a57600080fd5b5061065d6004803603602081101561063157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611cc9565b60405180821515815260200191505060405180910390f35b34801561068157600080fd5b506106ae6004803603602081101561069857600080fd5b8101908080359060200190929190505050611ce6565b6040518082815260200191505060405180910390f35b6106cc610928565b005b3480156106da57600080fd5b506106e3611d06565b6040518082815260200191505060405180910390f35b34801561070557600080fd5b506107486004803603602081101561071c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d13565b005b34801561075657600080fd5b506107836004803603602081101561076d57600080fd5b8101908080359060200190929190505050611f1e565b604051808681526020018581526020018481526020018381526020018281526020019550505050505060405180910390f35b3480156107c157600080fd5b506107ee600480360360208110156107d857600080fd5b8101908080359060200190929190505050611f64565b005b3480156107fc57600080fd5b506108746004803603602081101561081357600080fd5b810190808035906020019064010000000081111561083057600080fd5b82018360208201111561084257600080fd5b8035906020019184602083028401116401000000008311171561086457600080fd5b9091929391929390505050612234565b005b34801561088257600080fd5b506108cf6004803603604081101561089957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061226f565b60405180821515815260200191505060405180910390f35b3480156108f357600080fd5b506108fc61229e565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6109306122c4565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146109f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60003411610a66576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f4d757374206465706f73697420736f6d657468696e670000000000000000000081525060200191505060405180910390fd5b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639711715a6040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610ad257600080fd5b505af1158015610ae6573d6000803e3d6000fd5b505050506040513d6020811015610afc57600080fd5b810190808051906020019092919050505090506000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663981b24d0836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610b8457600080fd5b505afa158015610b98573d6000803e3d6000fd5b505050506040513d6020811015610bae57600080fd5b810190808051906020019092919050505090506000600380549050905060005b610bd6611c9b565b811015610d47576000610be882611cac565b90506000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634ee2cd7e83886040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060206040518083038186803b158015610c7d57600080fd5b505afa158015610c91573d6000803e3d6000fd5b505050506040513d6020811015610ca757600080fd5b81019080805190602001909291905050509050610ccd81866122cc90919063ffffffff16565b94506001600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600086815260200190815260200160002060006101000a81548160ff02191690831515021790555050508080600101915050610bce565b50610d506128ca565b6040518060a0016040528085815260200184815260200134815260200160008152602001610d7c612316565b81525090506003819080600181540180825580915050600190039060005260206000209060050201600090919091909150600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015550507fd5d5398ec29e2d70c90655f3ba036b20257e8a9c4ee4b30feb3372d8c2afae4b828534610e0d612316565b6040518085815260200184815260200183815260200182815260200194505050505060405180910390a150505050565b610e456122c4565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f05576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610fa8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f496e76616c69642061646472657373000000000000000000000000000000000081525060200191505060405180910390fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f275a11e033325e9b28a23131fcc7e243a49bb38beb686051976dd8c8899d9a3c81611013612316565b604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a150565b60008060008060008086101580156110665750611063611d06565b86105b6110d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f496e76616c69642072657761726420696400000000000000000000000000000081525060200191505060405180910390fd5b6110e06128ca565b600387815481106110ed57fe5b90600052602060002090600502016040518060a001604052908160008201548152602001600182015481526020016002820154815260200160038201548152602001600482015481525050905080600001519550806020015194508060400151935080606001519250806080015191505091939590929450565b600260015414156111e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b6002600181905550600660006111f46122c4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082815260200190815260200160002060009054906101000a900460ff16156112c0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f416c726561647920636c61696d6564000000000000000000000000000000000081525060200191505060405180910390fd5b6112c98161192b565b61133b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260088152602001807f546f6f206c61746500000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600061134682611911565b9050600081116113be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f4e6f7468696e6720746f20636c61696d0000000000000000000000000000000081525060200191505060405180910390fd5b6000600383815481106113cd57fe5b906000526020600020906005020190506113f482826003015461231e90919063ffffffff16565b816003018190555060016006600061140a6122c4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600085815260200190815260200160002060006101000a81548160ff02191690831515021790555060006114766122c4565b73ffffffffffffffffffffffffffffffffffffffff168360405180600001905060006040518083038185875af1925050503d80600081146114d3576040519150601f19603f3d011682016040523d82523d6000602084013e6114d8565b606091505b5050905080611532576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260388152602001806129636038913960400191505060405180910390fd5b8361153b6122c4565b73ffffffffffffffffffffffffffffffffffffffff167f9cdcf2f7714cca3508c7f0110b04a90a80a3a8dd0e35de99689db74d28c5383e8561157b612316565b604051808381526020018281526020019250505060405180910390a35050506001808190555050565b6115ac6122c4565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461166c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60005b82829050811015611744576116b683838381811061168957fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1660046123a690919063ffffffff16565b507fcf3473b85df1594d47b6958f29a32bea0abff9dd68296f7bf33443646793cfd88383838181106116e457fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff166001604051808373ffffffffffffffffffffffffffffffffffffffff16815260200182151581526020019250505060405180910390a1808060010191505061166f565b505050565b62eff10081565b60005b828290508110156117865761177983838381811061176d57fe5b90506020020135611167565b8080600101915050611753565b505050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002060009054906101000a900460ff16156117f9576000905061190b565b600080600061180785611048565b50509250925092506000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634ee2cd7e88866040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060206040518083038186803b1580156118a257600080fd5b505afa1580156118b6573d6000803e3d6000fd5b505050506040513d60208110156118cc57600080fd5b81019080805190602001909291905050509050611904836118f683856123d690919063ffffffff16565b61245c90919063ffffffff16565b9450505050505b92915050565b600061192461191e6122c4565b8361178b565b9050919050565b600061193682611ce6565b61193e612316565b11159050919050565b61194f6122c4565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a0f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611ad56122c4565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b95576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60005b82829050811015611c6d57611bdf838383818110611bb257fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1660046124a690919063ffffffff16565b507fcf3473b85df1594d47b6958f29a32bea0abff9dd68296f7bf33443646793cfd8838383818110611c0d57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff166000604051808373ffffffffffffffffffffffffffffffffffffffff16815260200182151581526020019250505060405180910390a18080600101915050611b98565b505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000611ca760046124d6565b905090565b6000611cc28260046124eb90919063ffffffff16565b9050919050565b6000611cdf82600461250590919063ffffffff16565b9050919050565b600080611cf283611048565b94505050505062eff1008101915050919050565b6000600380549050905090565b611d1b6122c4565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ddb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611e61576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061291c6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60038181548110611f2e57600080fd5b90600052602060002090600502016000915090508060000154908060010154908060020154908060030154908060040154905085565b611f6c6122c4565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461202c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6120358161192b565b156120a8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f546f6f206561726c79000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6007600082815260200190815260200160002060009054906101000a900460ff161561213c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f416c726561647920647261696e6564000000000000000000000000000000000081525060200191505060405180910390fd5b60008061214883611048565b50935093505050600061216482846122cc90919063ffffffff16565b905060016007600086815260200190815260200160002060006101000a81548160ff02191690831515021790555061219a6122c4565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156121df573d6000803e3d6000fd5b507f59e8338caf229e1a42e04872a316d44c6cbae9d57dda07745a30f510423f1b5b848261220b612316565b60405180848152602001838152602001828152602001935050505060405180910390a150505050565b60005b8282905081101561226a5761225d83838381811061225157fe5b90506020020135611f64565b8080600101915050612237565b505050565b60066020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600033905090565b600061230e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612535565b905092915050565b600042905090565b60008082840190508381101561239c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60006123ce836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6125f5565b905092915050565b6000808314156123e95760009050612456565b60008284029050828482816123fa57fe5b0414612451576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806129426021913960400191505060405180910390fd5b809150505b92915050565b600061249e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612665565b905092915050565b60006124ce836000018373ffffffffffffffffffffffffffffffffffffffff1660001b61272b565b905092915050565b60006124e482600001612813565b9050919050565b60006124fa8360000183612824565b60001c905092915050565b600061252d836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6128a7565b905092915050565b60008383111582906125e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156125a757808201518184015260208101905061258c565b50505050905090810190601f1680156125d45780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b600061260183836128a7565b61265a57826000018290806001815401808255809150506001900390600052602060002001600090919091909150558260000180549050836001016000848152602001908152602001600020819055506001905061265f565b600090505b92915050565b60008083118290612711576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156126d65780820151818401526020810190506126bb565b50505050905090810190601f1680156127035780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161271d57fe5b049050809150509392505050565b60008083600101600084815260200190815260200160002054905060008114612807576000600182039050600060018660000180549050039050600086600001828154811061277657fe5b906000526020600020015490508087600001848154811061279357fe5b90600052602060002001819055506001830187600101600083815260200190815260200160002081905550866000018054806127cb57fe5b6001900381819060005260206000200160009055905586600101600087815260200190815260200160002060009055600194505050505061280d565b60009150505b92915050565b600081600001805490509050919050565b600081836000018054905011612885576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806128fa6022913960400191505060405180910390fd5b82600001828154811061289457fe5b9060005260206000200154905092915050565b600080836001016000848152602001908152602001600020541415905092915050565b6040518060a001604052806000815260200160008152602001600081526020016000815260200160008152509056fe456e756d657261626c655365743a20696e646578206f7574206f6620626f756e64734f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77436c61696d3a20756e61626c6520746f2073656e642076616c75652c20726563697069656e74206d61792068617665207265766572746564a26469706673582212204b2f64b5b8d7ca0b90e6e3ff7be60ec28381e2cadd00b80cff267a4a530c1d0764736f6c63430007050033000000000000000000000000ac27423fe4394a7196020ef4e9fd0a6a73fa744c
Deployed Bytecode
0x60806040526004361061014f5760003560e01c80639346afac116100b6578063f2fde38b1161006f578063f2fde38b146106f9578063f301af421461074a578063f6b19c74146107b5578063f73c38e1146107f0578063fb831b9a14610876578063fc0c546a146108e75761015e565b80639346afac1461057e578063a13ce896146105a9578063ad11bf431461060e578063c40dc8ec14610675578063d0e30db0146106c4578063e5437265146106ce5761015e565b80634c78b276116101085780634c78b2761461039157806359363bca146104005780635fe6e4131461044f578063715018a6146104a05780637911ef9d146104b75780638da5cb5b1461053d5761015e565b8063144fa6d714610163578063243d3827146101b4578063379607f51461021f5780633d2cc56c1461025a57806342f81580146102e0578063496ef2171461030b5761015e565b3661015e5761015c610928565b005b600080fd5b34801561016f57600080fd5b506101b26004803603602081101561018657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610e3d565b005b3480156101c057600080fd5b506101ed600480360360208110156101d757600080fd5b8101908080359060200190929190505050611048565b604051808681526020018581526020018481526020018381526020018281526020019550505050505060405180910390f35b34801561022b57600080fd5b506102586004803603602081101561024257600080fd5b8101908080359060200190929190505050611167565b005b34801561026657600080fd5b506102de6004803603602081101561027d57600080fd5b810190808035906020019064010000000081111561029a57600080fd5b8201836020820111156102ac57600080fd5b803590602001918460208302840111640100000000831117156102ce57600080fd5b90919293919293905050506115a4565b005b3480156102ec57600080fd5b506102f5611749565b6040518082815260200191505060405180910390f35b34801561031757600080fd5b5061038f6004803603602081101561032e57600080fd5b810190808035906020019064010000000081111561034b57600080fd5b82018360208201111561035d57600080fd5b8035906020019184602083028401116401000000008311171561037f57600080fd5b9091929391929390505050611750565b005b34801561039d57600080fd5b506103ea600480360360408110156103b457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061178b565b6040518082815260200191505060405180910390f35b34801561040c57600080fd5b506104396004803603602081101561042357600080fd5b8101908080359060200190929190505050611911565b6040518082815260200191505060405180910390f35b34801561045b57600080fd5b506104886004803603602081101561047257600080fd5b810190808035906020019092919050505061192b565b60405180821515815260200191505060405180910390f35b3480156104ac57600080fd5b506104b5611947565b005b3480156104c357600080fd5b5061053b600480360360208110156104da57600080fd5b81019080803590602001906401000000008111156104f757600080fd5b82018360208201111561050957600080fd5b8035906020019184602083028401116401000000008311171561052b57600080fd5b9091929391929390505050611acd565b005b34801561054957600080fd5b50610552611c72565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561058a57600080fd5b50610593611c9b565b6040518082815260200191505060405180910390f35b3480156105b557600080fd5b506105e2600480360360208110156105cc57600080fd5b8101908080359060200190929190505050611cac565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561061a57600080fd5b5061065d6004803603602081101561063157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611cc9565b60405180821515815260200191505060405180910390f35b34801561068157600080fd5b506106ae6004803603602081101561069857600080fd5b8101908080359060200190929190505050611ce6565b6040518082815260200191505060405180910390f35b6106cc610928565b005b3480156106da57600080fd5b506106e3611d06565b6040518082815260200191505060405180910390f35b34801561070557600080fd5b506107486004803603602081101561071c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d13565b005b34801561075657600080fd5b506107836004803603602081101561076d57600080fd5b8101908080359060200190929190505050611f1e565b604051808681526020018581526020018481526020018381526020018281526020019550505050505060405180910390f35b3480156107c157600080fd5b506107ee600480360360208110156107d857600080fd5b8101908080359060200190929190505050611f64565b005b3480156107fc57600080fd5b506108746004803603602081101561081357600080fd5b810190808035906020019064010000000081111561083057600080fd5b82018360208201111561084257600080fd5b8035906020019184602083028401116401000000008311171561086457600080fd5b9091929391929390505050612234565b005b34801561088257600080fd5b506108cf6004803603604081101561089957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061226f565b60405180821515815260200191505060405180910390f35b3480156108f357600080fd5b506108fc61229e565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6109306122c4565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146109f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60003411610a66576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f4d757374206465706f73697420736f6d657468696e670000000000000000000081525060200191505060405180910390fd5b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639711715a6040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610ad257600080fd5b505af1158015610ae6573d6000803e3d6000fd5b505050506040513d6020811015610afc57600080fd5b810190808051906020019092919050505090506000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663981b24d0836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610b8457600080fd5b505afa158015610b98573d6000803e3d6000fd5b505050506040513d6020811015610bae57600080fd5b810190808051906020019092919050505090506000600380549050905060005b610bd6611c9b565b811015610d47576000610be882611cac565b90506000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634ee2cd7e83886040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060206040518083038186803b158015610c7d57600080fd5b505afa158015610c91573d6000803e3d6000fd5b505050506040513d6020811015610ca757600080fd5b81019080805190602001909291905050509050610ccd81866122cc90919063ffffffff16565b94506001600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600086815260200190815260200160002060006101000a81548160ff02191690831515021790555050508080600101915050610bce565b50610d506128ca565b6040518060a0016040528085815260200184815260200134815260200160008152602001610d7c612316565b81525090506003819080600181540180825580915050600190039060005260206000209060050201600090919091909150600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015550507fd5d5398ec29e2d70c90655f3ba036b20257e8a9c4ee4b30feb3372d8c2afae4b828534610e0d612316565b6040518085815260200184815260200183815260200182815260200194505050505060405180910390a150505050565b610e456122c4565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f05576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610fa8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f496e76616c69642061646472657373000000000000000000000000000000000081525060200191505060405180910390fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f275a11e033325e9b28a23131fcc7e243a49bb38beb686051976dd8c8899d9a3c81611013612316565b604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a150565b60008060008060008086101580156110665750611063611d06565b86105b6110d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f496e76616c69642072657761726420696400000000000000000000000000000081525060200191505060405180910390fd5b6110e06128ca565b600387815481106110ed57fe5b90600052602060002090600502016040518060a001604052908160008201548152602001600182015481526020016002820154815260200160038201548152602001600482015481525050905080600001519550806020015194508060400151935080606001519250806080015191505091939590929450565b600260015414156111e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b6002600181905550600660006111f46122c4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082815260200190815260200160002060009054906101000a900460ff16156112c0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f416c726561647920636c61696d6564000000000000000000000000000000000081525060200191505060405180910390fd5b6112c98161192b565b61133b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260088152602001807f546f6f206c61746500000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600061134682611911565b9050600081116113be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f4e6f7468696e6720746f20636c61696d0000000000000000000000000000000081525060200191505060405180910390fd5b6000600383815481106113cd57fe5b906000526020600020906005020190506113f482826003015461231e90919063ffffffff16565b816003018190555060016006600061140a6122c4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600085815260200190815260200160002060006101000a81548160ff02191690831515021790555060006114766122c4565b73ffffffffffffffffffffffffffffffffffffffff168360405180600001905060006040518083038185875af1925050503d80600081146114d3576040519150601f19603f3d011682016040523d82523d6000602084013e6114d8565b606091505b5050905080611532576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260388152602001806129636038913960400191505060405180910390fd5b8361153b6122c4565b73ffffffffffffffffffffffffffffffffffffffff167f9cdcf2f7714cca3508c7f0110b04a90a80a3a8dd0e35de99689db74d28c5383e8561157b612316565b604051808381526020018281526020019250505060405180910390a35050506001808190555050565b6115ac6122c4565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461166c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60005b82829050811015611744576116b683838381811061168957fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1660046123a690919063ffffffff16565b507fcf3473b85df1594d47b6958f29a32bea0abff9dd68296f7bf33443646793cfd88383838181106116e457fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff166001604051808373ffffffffffffffffffffffffffffffffffffffff16815260200182151581526020019250505060405180910390a1808060010191505061166f565b505050565b62eff10081565b60005b828290508110156117865761177983838381811061176d57fe5b90506020020135611167565b8080600101915050611753565b505050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002060009054906101000a900460ff16156117f9576000905061190b565b600080600061180785611048565b50509250925092506000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634ee2cd7e88866040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060206040518083038186803b1580156118a257600080fd5b505afa1580156118b6573d6000803e3d6000fd5b505050506040513d60208110156118cc57600080fd5b81019080805190602001909291905050509050611904836118f683856123d690919063ffffffff16565b61245c90919063ffffffff16565b9450505050505b92915050565b600061192461191e6122c4565b8361178b565b9050919050565b600061193682611ce6565b61193e612316565b11159050919050565b61194f6122c4565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a0f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611ad56122c4565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b95576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60005b82829050811015611c6d57611bdf838383818110611bb257fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1660046124a690919063ffffffff16565b507fcf3473b85df1594d47b6958f29a32bea0abff9dd68296f7bf33443646793cfd8838383818110611c0d57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff166000604051808373ffffffffffffffffffffffffffffffffffffffff16815260200182151581526020019250505060405180910390a18080600101915050611b98565b505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000611ca760046124d6565b905090565b6000611cc28260046124eb90919063ffffffff16565b9050919050565b6000611cdf82600461250590919063ffffffff16565b9050919050565b600080611cf283611048565b94505050505062eff1008101915050919050565b6000600380549050905090565b611d1b6122c4565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ddb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611e61576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061291c6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60038181548110611f2e57600080fd5b90600052602060002090600502016000915090508060000154908060010154908060020154908060030154908060040154905085565b611f6c6122c4565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461202c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6120358161192b565b156120a8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f546f6f206561726c79000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6007600082815260200190815260200160002060009054906101000a900460ff161561213c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f416c726561647920647261696e6564000000000000000000000000000000000081525060200191505060405180910390fd5b60008061214883611048565b50935093505050600061216482846122cc90919063ffffffff16565b905060016007600086815260200190815260200160002060006101000a81548160ff02191690831515021790555061219a6122c4565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156121df573d6000803e3d6000fd5b507f59e8338caf229e1a42e04872a316d44c6cbae9d57dda07745a30f510423f1b5b848261220b612316565b60405180848152602001838152602001828152602001935050505060405180910390a150505050565b60005b8282905081101561226a5761225d83838381811061225157fe5b90506020020135611f64565b8080600101915050612237565b505050565b60066020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600033905090565b600061230e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612535565b905092915050565b600042905090565b60008082840190508381101561239c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60006123ce836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6125f5565b905092915050565b6000808314156123e95760009050612456565b60008284029050828482816123fa57fe5b0414612451576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806129426021913960400191505060405180910390fd5b809150505b92915050565b600061249e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612665565b905092915050565b60006124ce836000018373ffffffffffffffffffffffffffffffffffffffff1660001b61272b565b905092915050565b60006124e482600001612813565b9050919050565b60006124fa8360000183612824565b60001c905092915050565b600061252d836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6128a7565b905092915050565b60008383111582906125e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156125a757808201518184015260208101905061258c565b50505050905090810190601f1680156125d45780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b600061260183836128a7565b61265a57826000018290806001815401808255809150506001900390600052602060002001600090919091909150558260000180549050836001016000848152602001908152602001600020819055506001905061265f565b600090505b92915050565b60008083118290612711576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156126d65780820151818401526020810190506126bb565b50505050905090810190601f1680156127035780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161271d57fe5b049050809150509392505050565b60008083600101600084815260200190815260200160002054905060008114612807576000600182039050600060018660000180549050039050600086600001828154811061277657fe5b906000526020600020015490508087600001848154811061279357fe5b90600052602060002001819055506001830187600101600083815260200190815260200160002081905550866000018054806127cb57fe5b6001900381819060005260206000200160009055905586600101600087815260200190815260200160002060009055600194505050505061280d565b60009150505b92915050565b600081600001805490509050919050565b600081836000018054905011612885576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806128fa6022913960400191505060405180910390fd5b82600001828154811061289457fe5b9060005260206000200154905092915050565b600080836001016000848152602001908152602001600020541415905092915050565b6040518060a001604052806000815260200160008152602001600081526020016000815260200160008152509056fe456e756d657261626c655365743a20696e646578206f7574206f6620626f756e64734f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77436c61696d3a20756e61626c6520746f2073656e642076616c75652c20726563697069656e74206d61792068617665207265766572746564a26469706673582212204b2f64b5b8d7ca0b90e6e3ff7be60ec28381e2cadd00b80cff267a4a530c1d0764736f6c63430007050033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000ac27423fe4394a7196020ef4e9fd0a6a73fa744c
-----Decoded View---------------
Arg [0] : _token (address): 0xac27423fE4394a7196020EF4e9fD0A6A73fA744c
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000ac27423fe4394a7196020ef4e9fd0a6a73fa744c
Deployed Bytecode Sourcemap
21545:6898:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22968:9;:7;:9::i;:::-;21545:6898;;;;;22696:211;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;26387:571;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24040:798;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25707:266;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21865:46;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;24846:176;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27469:453;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27319:142;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27166:145;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;2790:148;;;;;;;;;;;;;:::i;:::-;;25981:273;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;2148:79;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;28085:119;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;28212:131;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;27930:147;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;26966:192;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;22993:1039;;;:::i;:::-;;26262:117;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;3093:244;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21948:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25030:485;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25523:176;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;22105:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;21920:19;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;22993:1039;2370:12;:10;:12::i;:::-;2360:22;;:6;;;;;;;;;;:22;;;2352:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23088:1:::1;23076:9;:13;23068:48;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;23129:15;23147:5;;;;;;;;;;;:14;;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;23129:34;;23174:26;23203:5;;;;;;;;;;;:19;;;23223:10;23203:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;23174:60;;23247:10;23260:7;:14;;;;23247:27;;23350:6;23345:329;23366:17;:15;:17::i;:::-;23362:1;:21;23345:329;;;23405:19;23427:14;23439:1;23427:11;:14::i;:::-;23405:36;;23456:22;23481:5;;;;;;;;;;;:17;;;23499:11;23512:10;23481:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;23456:67;;23562:44;23588:17;23562:21;:25;;:44;;;;:::i;:::-;23538:68;;23658:4;23621:14;:27;23636:11;23621:27;;;;;;;;;;;;;;;:34;23649:5;23621:34;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;23345:329;;23385:3;;;;;;;23345:329;;;;23686:26;;:::i;:::-;23715:207;;;;;;;;23749:10;23715:207;;;;23794:21;23715:207;;;;23841:9;23715:207;;;;23877:1;23715:207;;;;23901:9;:7;:9::i;:::-;23715:207;;::::0;23686:236:::1;;23935:7;23948:9;23935:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23974:50;23984:5;23991:10;24003:9;24014;:7;:9::i;:::-;23974:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2430:1;;;;22993:1039::o:0;22696:211::-;2370:12;:10;:12::i;:::-;2360:22;;:6;;;;;;;;;;:22;;;2352:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22799:1:::1;22781:20;;:6;:20;;;;22773:48;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;22849:6;22834:5;;:22;;;;;;;;;;;;;;;;;;22872:27;22881:6;22889:9;:7;:9::i;:::-;22872:27;;;;;;;;;;;;;;;;;;;;;;;;;;22696:211:::0;:::o;26387:571::-;26462:15;26479:26;26507:17;26526:18;26546:14;26599:1;26586:9;:14;;:50;;;;;26616:20;:18;:20::i;:::-;26604:9;:32;26586:50;26578:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26671:23;;:::i;:::-;26697:7;26705:9;26697:18;;;;;;;;;;;;;;;;;;26671:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26739:6;:17;;;26726:30;;26791:6;:28;;;26767:52;;26845:6;:19;;;26830:34;;26891:6;:20;;;26875:36;;26934:6;:16;;;26922:28;;26387:571;;;;;;;;:::o;24040:798::-;5092:1;5698:7;;:19;;5690:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5092:1;5831:7;:18;;;;24126:14:::1;:28;24141:12;:10;:12::i;:::-;24126:28;;;;;;;;;;;;;;;:39;24155:9;24126:39;;;;;;;;;;;;;;;;;;;;;24125:40;24117:68;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;24204:25;24219:9;24204:14;:25::i;:::-;24196:46;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;24255:12;24270:21;24281:9;24270:10;:21::i;:::-;24255:36;;24320:1;24310:7;:11;24302:40;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;24355:24;24382:7;24390:9;24382:18;;;;;;;;;;;;;;;;;;24355:45;;24434:33;24459:7;24434:6;:20;;;:24;;:33;;;;:::i;:::-;24411:6;:20;;:56;;;;24522:4;24480:14;:28;24495:12;:10;:12::i;:::-;24480:28;;;;;;;;;;;;;;;:39;24509:9;24480:39;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;24618:12;24635;:10;:12::i;:::-;:17;;24661:7;24635:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24617:56;;;24692:7;24684:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24800:9;24786:12;:10;:12::i;:::-;24778:52;;;24811:7;24820:9;:7;:9::i;:::-;24778:52;;;;;;;;;;;;;;;;;;;;;;;;5862:1;;;5048::::0;6010:7;:22;;;;24040:798;:::o;25707:266::-;2370:12;:10;:12::i;:::-;2360:22;;:6;;;;;;;;;;:22;;;2352:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25812:6:::1;25807:159;25828:12;;:19;;25824:1;:23;25807:159;;;25869:31;25884:12;;25897:1;25884:15;;;;;;;;;;;;;;;25869:10;:14;;:31;;;;:::i;:::-;;25920:34;25932:12;;25945:1;25932:15;;;;;;;;;;;;;;;25949:4;25920:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;25849:3;;;;;;;25807:159;;;;25707:266:::0;;:::o;21865:46::-;21903:8;21865:46;:::o;24846:176::-;24928:6;24923:92;24944:10;;:17;;24940:1;:21;24923:92;;;24983:20;24989:10;;25000:1;24989:13;;;;;;;;;;;;;24983:5;:20::i;:::-;24963:3;;;;;;;24923:92;;;;24846:176;;:::o;27469:453::-;27557:4;27583:14;:24;27598:8;27583:24;;;;;;;;;;;;;;;:35;27608:9;27583:35;;;;;;;;;;;;;;;;;;;;;27579:76;;;27642:1;27635:8;;;;27579:76;27666:15;27683:26;27711:17;27735:24;27749:9;27735:13;:24::i;:::-;27665:94;;;;;;;;27770:22;27795:5;;;;;;;;;;;:17;;;27813:8;27823:10;27795:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27770:64;;27852:62;27892:21;27852:35;27869:17;27852:12;:16;;:35;;;;:::i;:::-;:39;;:62;;;;:::i;:::-;27845:69;;;;;;27469:453;;;;;:::o;27319:142::-;27391:4;27420:33;27429:12;:10;:12::i;:::-;27443:9;27420:8;:33::i;:::-;27413:40;;27319:142;;;:::o;27166:145::-;27242:4;27284:19;27293:9;27284:8;:19::i;:::-;27271:9;:7;:9::i;:::-;:32;;27264:39;;27166:145;;;:::o;2790:148::-;2370:12;:10;:12::i;:::-;2360:22;;:6;;;;;;;;;;:22;;;2352:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2897:1:::1;2860:40;;2881:6;::::0;::::1;;;;;;;;2860:40;;;;;;;;;;;;2928:1;2911:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;2790:148::o:0;25981:273::-;2370:12;:10;:12::i;:::-;2360:22;;:6;;;;;;;;;;:22;;;2352:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26089:6:::1;26084:163;26105:12;;:19;;26101:1;:23;26084:163;;;26146:34;26164:12;;26177:1;26164:15;;;;;;;;;;;;;;;26146:10;:17;;:34;;;;:::i;:::-;;26200:35;26212:12;;26225:1;26212:15;;;;;;;;;;;;;;;26229:5;26200:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;26126:3;;;;;;;26084:163;;;;25981:273:::0;;:::o;2148:79::-;2186:7;2213:6;;;;;;;;;;;2206:13;;2148:79;:::o;28085:119::-;28148:4;28177:19;:10;:17;:19::i;:::-;28170:26;;28085:119;:::o;28212:131::-;28282:7;28314:21;28328:6;28314:10;:13;;:21;;;;:::i;:::-;28307:28;;28212:131;;;:::o;27930:147::-;28011:4;28040:29;28060:8;28040:10;:19;;:29;;;;:::i;:::-;28033:36;;27930:147;;;:::o;26966:192::-;27036:4;27064:14;27082:24;27096:9;27082:13;:24::i;:::-;27058:48;;;;;;21903:8;27124:9;:26;27117:33;;;26966:192;;;:::o;26262:117::-;26328:4;26357:7;:14;;;;26350:21;;26262:117;:::o;3093:244::-;2370:12;:10;:12::i;:::-;2360:22;;:6;;;;;;;;;;:22;;;2352:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3202:1:::1;3182:22;;:8;:22;;;;3174:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3292:8;3263:38;;3284:6;::::0;::::1;;;;;;;;3263:38;;;;;;;;;;;;3321:8;3312:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;3093:244:::0;:::o;21948:26::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;25030:485::-;2370:12;:10;:12::i;:::-;2360:22;;:6;;;;;;;;;;:22;;;2352:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25113:25:::1;25128:9;25113:14;:25::i;:::-;25112:26;25104:48;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;25172:7;:18;25180:9;25172:18;;;;;;;;;;;;;;;;;;;;;25171:19;25163:47;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;25227:17;25246:18:::0;25269:24:::1;25283:9;25269:13;:24::i;:::-;25223:70;;;;;;;25304:20;25327:31;25344:13;25327:12;:16;;:31;;;;:::i;:::-;25304:54;;25390:4;25369:7;:18;25377:9;25369:18;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;25407:12;:10;:12::i;:::-;:21;;:38;25429:15;25407:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;25461:46;25469:9;25480:15;25497:9;:7;:9::i;:::-;25461:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2430:1;;;25030:485:::0;:::o;25523:176::-;25605:6;25600:92;25621:10;;:17;;25617:1;:21;25600:92;;;25660:20;25666:10;;25677:1;25666:13;;;;;;;;;;;;;25660:5;:20::i;:::-;25640:3;;;;;;;25600:92;;;;25523:176;;:::o;22105:63::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;21920:19::-;;;;;;;;;;;;;:::o;678:106::-;731:15;766:10;759:17;;678:106;:::o;17167:136::-;17225:7;17252:43;17256:1;17259;17252:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;17245:50;;17167:136;;;;:::o;28351:89::-;28393:4;28417:15;28410:22;;28351:89;:::o;16703:181::-;16761:7;16781:9;16797:1;16793;:5;16781:17;;16822:1;16817;:6;;16809:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16875:1;16868:8;;;16703:181;;;;:::o;12732:143::-;12802:4;12826:41;12831:3;:10;;12859:5;12851:14;;12843:23;;12826:4;:41::i;:::-;12819:48;;12732:143;;;;:::o;18057:471::-;18115:7;18365:1;18360;:6;18356:47;;;18390:1;18383:8;;;;18356:47;18415:9;18431:1;18427;:5;18415:17;;18460:1;18455;18451;:5;;;;;;:10;18443:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18519:1;18512:8;;;18057:471;;;;;:::o;19004:132::-;19062:7;19089:39;19093:1;19096;19089:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;19082:46;;19004:132;;;;:::o;13051:149::-;13124:4;13148:44;13156:3;:10;;13184:5;13176:14;;13168:23;;13148:7;:44::i;:::-;13141:51;;13051:149;;;;:::o;13530:117::-;13593:7;13620:19;13628:3;:10;;13620:7;:19::i;:::-;13613:26;;13530:117;;;:::o;14001:149::-;14075:7;14118:22;14122:3;:10;;14134:5;14118:3;:22::i;:::-;14110:31;;14095:47;;14001:149;;;;:::o;13286:158::-;13366:4;13390:46;13400:3;:10;;13428:5;13420:14;;13412:23;;13390:9;:46::i;:::-;13383:53;;13286:158;;;;:::o;17606:192::-;17692:7;17725:1;17720;:6;;17728:12;17712:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17752:9;17768:1;17764;:5;17752:17;;17789:1;17782:8;;;17606:192;;;;;:::o;7764:414::-;7827:4;7849:21;7859:3;7864:5;7849:9;:21::i;:::-;7844:327;;7887:3;:11;;7904:5;7887:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8070:3;:11;;:18;;;;8048:3;:12;;:19;8061:5;8048:19;;;;;;;;;;;:40;;;;8110:4;8103:11;;;;7844:327;8154:5;8147:12;;7764:414;;;;;:::o;19632:278::-;19718:7;19750:1;19746;:5;19753:12;19738:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19777:9;19793:1;19789;:5;;;;;;19777:17;;19901:1;19894:8;;;19632:278;;;;;:::o;8354:1556::-;8420:4;8538:18;8559:3;:12;;:19;8572:5;8559:19;;;;;;;;;;;;8538:40;;8609:1;8595:10;:15;8591:1312;;8956:21;8993:1;8980:10;:14;8956:38;;9009:17;9050:1;9029:3;:11;;:18;;;;:22;9009:42;;9296:17;9316:3;:11;;9328:9;9316:22;;;;;;;;;;;;;;;;9296:42;;9462:9;9433:3;:11;;9445:13;9433:26;;;;;;;;;;;;;;;:38;;;;9581:1;9565:13;:17;9539:3;:12;;:23;9552:9;9539:23;;;;;;;;;;;:43;;;;9704:3;:11;;:17;;;;;;;;;;;;;;;;;;;;;;;;9799:3;:12;;:19;9812:5;9799:19;;;;;;;;;;;9792:26;;;9842:4;9835:11;;;;;;;;8591:1312;9886:5;9879:12;;;8354:1556;;;;;:::o;10211:109::-;10267:7;10294:3;:11;;:18;;;;10287:25;;10211:109;;;:::o;10674:204::-;10741:7;10790:5;10769:3;:11;;:18;;;;:26;10761:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10852:3;:11;;10864:5;10852:18;;;;;;;;;;;;;;;;10845:25;;10674:204;;;;:::o;9996:129::-;10069:4;10116:1;10093:3;:12;;:19;10106:5;10093:19;;;;;;;;;;;;:24;;10086:31;;9996:129;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o
Swarm Source
ipfs://4b2f64b5b8d7ca0b90e6e3ff7be60ec28381e2cadd00b80cff267a4a530c1d07
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 23 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ 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.