ERC-20
Overview
Max Total Supply
150,465.49 TUX
Holders
411
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
10 TUXValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
TuxERC20
Compiler Version
v0.8.9+commit.e5eed63a
Optimization Enabled:
Yes with 100 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity 0.8.9; import "./ITuxERC20.sol"; import "./library/RankedSet.sol"; import "./library/AddressSet.sol"; import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol"; /** * @dev {ERC20} token, including: * * - Preminted initial supply * - Ability for holders to burn (destroy) their tokens * - No access control mechanism (for minting/pausing) and hence no governance * * This contract uses {ERC20Burnable} to include burn capabilities - head to * its documentation for details. * * _Available since v3.4._ */ contract TuxERC20 is ITuxERC20, ERC20Burnable { using RankedSet for RankedSet.Set; using AddressSet for AddressSet.Set; // Admin address for managing payout addresses address public owner; // Tux auctions address address public minter; // Currently featured auction uint256 public featured; // Timestamp of next featured auction uint256 public nextFeaturedTime; // Amount of time for featured auctions uint256 constant public featuredDuration = 3600; // 1 hour -> 3600 seconds // Amount of time between payouts uint256 constant public payoutsFrequency = 604800; // 7 days -> 604800 seconds // Timestamp of next payouts uint256 public nextPayoutsTime = block.timestamp + payoutsFrequency; // Payout amount to pinning and API services uint256 public payoutAmount = 100 * 10**18; // AddressSet of payout addresses to pinning and API services AddressSet.Set private _payoutAddresses; // RankedSet for queue of next featured auction RankedSet.Set private _featuredQueue; /** * @dev Mints 100,000 tokens and adds payout addresses. * * See {ERC20-constructor}. */ constructor( string memory name, string memory symbol ) ERC20(name, symbol) { owner = msg.sender; _mint(owner, 100000 * 10**18); _payoutAddresses.add(0x71C7656EC7ab88b098defB751B7401B5f6d8976F); // Etherscan // _payoutAddresses.add(0xInfura); // Infura // _payoutAddresses.add(0xPinata); // Pinata // _payoutAddresses.add(0xAlchemy); // Alchemy // _payoutAddresses.add(0xNFT.Storage); // nft.storage } /** * @dev Sets the minting address. */ function setMinter(address minter_) external { require( msg.sender == owner, "Not owner address"); minter = minter_; } /** * @dev Add a payout address, up to 10. */ function addPayoutAddress(address payoutAddress) external { require( msg.sender == owner, "Not owner address"); require( _payoutAddresses.length() < 10, "Maximum reached"); _payoutAddresses.add(payoutAddress); } /** * @dev Remove a payout address. */ function removePayoutAddress(address payoutAddress) external { require( msg.sender == owner, "Not owner address"); _payoutAddresses.remove(payoutAddress); } /** * @dev Update payout amount up to 1000. */ function updatePayoutAmount(uint256 amount) external { require( msg.sender == owner, "Not owner address"); require( amount < 1000 * 10**18, "Amount too high"); payoutAmount = amount; } /** * @dev Renounce ownership once payout addresses are added and the payout * amount gets settled. */ function renounceOwnership() external { require( msg.sender == owner, "Not owner address"); owner = address(0); } /** * @dev Creates `amount` new tokens for `to`. * * See {ERC20-_mint}. * * Requirements: * * - the caller must be the Tux auctions contract. */ function mint(address to, uint256 amount) external virtual override { require( msg.sender == minter, "Not minter address"); _mint(to, amount); } /** * @dev Destroys `amount` tokens from the caller. * * See {ERC20-_burn}. */ function burn(uint256 amount) public override(ERC20Burnable) { _burn(msg.sender, amount); } /** * Add Tux auction to featured queue */ function feature(uint256 auctionId, uint256 amount, address from) external virtual override { require( msg.sender == minter, "Not minter address"); require( balanceOf(from) >= amount, "Not enough TUX"); require( _featuredQueue.contains(auctionId) == false, "Already queued"); require( amount >= 1 * 10**18, "Price too low"); updateFeatured(); _burn(from, amount); _featuredQueue.add(auctionId); _featuredQueue.rankScore(auctionId, amount); payouts(); } function cancel(uint256 auctionId, address from) external virtual override { require( msg.sender == minter, "Not minter address"); require( _featuredQueue.contains(auctionId) == true, "Not queued"); _mint(from, _featuredQueue.scoreOf(auctionId)); _featuredQueue.remove(auctionId); updateFeatured(); payouts(); } /** * Get featured items */ function getFeatured(uint256 from, uint256 n) view public returns(uint256[] memory) { return _featuredQueue.valuesFromN(from, n); } /** * Get featured queue length */ function getFeaturedLength() view public returns(uint256 length) { return _featuredQueue.length(); } /** * Get if featured queue contains an auction ID */ function getFeaturedContains(uint auctionId) view public returns(bool) { return _featuredQueue.contains(auctionId); } /** * Get next featured timestamp */ function getNextFeaturedTime() view public returns(uint256 timestamp) { return nextFeaturedTime; } /** * Get featured price of queue item */ function getFeaturedPrice(uint256 auctionId) view public returns(uint256 price) { return _featuredQueue.scoreOf(auctionId); } /** * Update featured queue */ function updateFeatured() public override { if (block.timestamp < nextFeaturedTime || _featuredQueue.length() == 0) { return; } nextFeaturedTime = block.timestamp + featuredDuration; uint256 auctionId = _featuredQueue.head(); _featuredQueue.remove(auctionId); featured = auctionId; _mint(msg.sender, 1 * 10**18); } /** * Mint weekly payouts to pinning and API services */ function payouts() public override { if (block.timestamp < nextPayoutsTime) { return; } nextPayoutsTime = block.timestamp + payoutsFrequency; for (uint i = 0; i < _payoutAddresses.length(); i++) { _mint(_payoutAddresses.at(i), payoutAmount); } _mint(msg.sender, 1 * 10**18); } }
// SPDX-License-Identifier: MIT pragma solidity 0.8.9; interface ITuxERC20 { function mint(address to, uint256 amount) external; function feature( uint256 auctionId, uint256 amount, address from ) external; function cancel( uint256 auctionId, address from ) external; function updateFeatured() external; function payouts() external; }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./OrderedSet.sol"; /** * @title RankedSet * @dev Ranked data structure using two ordered sets, a mapping of scores to * boundary values and counter, a mapping of last ranked scores, and a highest * score. */ library RankedSet { using OrderedSet for OrderedSet.Set; struct RankGroup { uint256 count; uint256 start; uint256 end; } struct Set { uint256 highScore; mapping(uint256 => RankGroup) rankgroups; mapping(uint256 => uint256) scores; OrderedSet.Set rankedScores; OrderedSet.Set rankedItems; } /** * @dev Add an item at the end of the set */ function add(Set storage set, uint256 item) internal { set.rankedItems.append(item); set.rankgroups[0].end = item; set.rankgroups[0].count += 1; if (set.rankgroups[0].start == 0) { set.rankgroups[0].start = item; } } /** * @dev Remove an item */ function remove(Set storage set, uint256 item) internal { uint256 score = set.scores[item]; delete set.scores[item]; RankGroup storage rankgroup = set.rankgroups[score]; if (rankgroup.count > 0) { rankgroup.count -= 1; } if (rankgroup.count == 0) { rankgroup.start = 0; rankgroup.end = 0; if (score == set.highScore) { set.highScore = set.rankedScores.next(score); } if (score > 0) { set.rankedScores.remove(score); } } else { if (rankgroup.start == item) { rankgroup.start = set.rankedItems.next(item); } if (rankgroup.end == item) { rankgroup.end = set.rankedItems.prev(item); } } set.rankedItems.remove(item); } /** * @dev Returns the head */ function head(Set storage set) internal view returns (uint256) { return set.rankedItems._next[0]; } /** * @dev Returns the tail */ function tail(Set storage set) internal view returns (uint256) { return set.rankedItems._prev[0]; } /** * @dev Returns the length */ function length(Set storage set) internal view returns (uint256) { return set.rankedItems.count; } /** * @dev Returns the next value */ function next(Set storage set, uint256 _value) internal view returns (uint256) { return set.rankedItems._next[_value]; } /** * @dev Returns the previous value */ function prev(Set storage set, uint256 _value) internal view returns (uint256) { return set.rankedItems._prev[_value]; } /** * @dev Returns true if the value is in the set */ function contains(Set storage set, uint256 value) internal view returns (bool) { return set.rankedItems._next[0] == value || set.rankedItems._next[value] != 0 || set.rankedItems._prev[value] != 0; } /** * @dev Returns a value's score */ function scoreOf(Set storage set, uint256 value) internal view returns (uint256) { return set.scores[value]; } /** * @dev Return the entire set in an array * * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that * this function has an unbounded cost, and using it as part of a state-changing function may render the function * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. */ function values(Set storage set) internal view returns (uint256[] memory) { uint256[] memory _values = new uint256[](set.rankedItems.count); uint256 value = set.rankedItems._next[0]; uint256 i = 0; while (value != 0) { _values[i] = value; value = set.rankedItems._next[value]; i += 1; } return _values; } /** * @dev Return an array with n values in the set, starting after "from" */ function valuesFromN(Set storage set, uint256 from, uint256 n) internal view returns (uint256[] memory) { uint256[] memory _values = new uint256[](n); uint256 value = set.rankedItems._next[from]; uint256 i = 0; while (i < n) { _values[i] = value; value = set.rankedItems._next[value]; i += 1; } return _values; } /** * @dev Rank new score */ function rankScore(Set storage set, uint256 item, uint256 newScore) internal { RankGroup storage rankgroup = set.rankgroups[newScore]; if (newScore > set.highScore) { remove(set, item); rankgroup.start = item; set.highScore = newScore; set.rankedItems.add(item); set.rankedScores.add(newScore); } else { uint256 score = set.scores[item]; uint256 prevScore = set.rankedScores.prev(score); if (set.rankgroups[score].count == 1) { score = set.rankedScores.next(score); } remove(set, item); while (prevScore > 0 && newScore > prevScore) { prevScore = set.rankedScores.prev(prevScore); } set.rankedItems.insert( set.rankgroups[prevScore].end, item, set.rankgroups[set.rankedScores.next(prevScore)].start ); if (rankgroup.count == 0) { set.rankedScores.insert(prevScore, newScore, score); rankgroup.start = item; } } rankgroup.end = item; rankgroup.count += 1; set.scores[item] = newScore; } }
// SPDX-License-Identifier: MIT pragma solidity ^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 `address` (`addressSet`), `address` (`AddressSet`) * and `uint256` (`UintSet`) are supported. */ library AddressSet { // 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 // address 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 address. struct Set { // Storage of set values address[] _values; // Position of the value in the `values` array, plus 1 because index 0 // means a value is not in the set. mapping(address => 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, address value) internal 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, address value) internal 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; if (lastIndex != toDeleteIndex) { address 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] = valueIndex; // Replace lastvalue's index to valueIndex } // 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, address value) internal view returns (bool) { return set._indexes[value] != 0; } /** * @dev Returns the number of values on the set. O(1). */ function length(Set storage set) internal 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) internal view returns (address) { return set._values[index]; } /** * @dev Return the entire set in an array * * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that * this function has an unbounded cost, and using it as part of a state-changing function may render the function * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. */ function values(Set storage set) internal view returns (address[] memory) { return set._values; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "../ERC20.sol"; import "../../../utils/Context.sol"; /** * @dev Extension of {ERC20} that allows token holders to destroy both their own * tokens and those that they have an allowance for, in a way that can be * recognized off-chain (via event analysis). */ abstract contract ERC20Burnable is Context, ERC20 { /** * @dev Destroys `amount` tokens from the caller. * * See {ERC20-_burn}. */ function burn(uint256 amount) public virtual { _burn(_msgSender(), amount); } /** * @dev Destroys `amount` tokens from `account`, deducting from the caller's * allowance. * * See {ERC20-_burn} and {ERC20-allowance}. * * Requirements: * * - the caller must have allowance for ``accounts``'s tokens of at least * `amount`. */ function burnFrom(address account, uint256 amount) public virtual { uint256 currentAllowance = allowance(account, _msgSender()); require(currentAllowance >= amount, "ERC20: burn amount exceeds allowance"); unchecked { _approve(account, _msgSender(), currentAllowance - amount); } _burn(account, amount); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @title OrderedSet * @dev Ordered data structure. It has the properties of a mapping of uint256, but members are ordered * and can be enumerated. Values can be inserted and removed from anywhere. Add, append, remove and * contains are O(1). Enumerate is O(N). */ library OrderedSet { struct Set { uint256 count; mapping (uint256 => uint256) _next; mapping (uint256 => uint256) _prev; } /** * @dev Insert a value between two values */ function insert(Set storage set, uint256 prev_, uint256 value, uint256 next_) internal { set._next[prev_] = value; set._next[value] = next_; set._prev[next_] = value; set._prev[value] = prev_; set.count += 1; } /** * @dev Insert a value as the new head */ function add(Set storage set, uint256 value) internal { insert(set, 0, value, set._next[0]); } /** * @dev Insert a value as the new tail */ function append(Set storage set, uint256 value) internal { insert(set, set._prev[0], value, 0); } /** * @dev Remove a value */ function remove(Set storage set, uint256 value) internal { set._next[set._prev[value]] = set._next[value]; set._prev[set._next[value]] = set._prev[value]; delete set._next[value]; delete set._prev[value]; if (set.count > 0) { set.count -= 1; } } /** * @dev Returns the head */ function head(Set storage set) internal view returns (uint256) { return set._next[0]; } /** * @dev Returns the tail */ function tail(Set storage set) internal view returns (uint256) { return set._prev[0]; } /** * @dev Returns the length */ function length(Set storage set) internal view returns (uint256) { return set.count; } /** * @dev Returns the next value */ function next(Set storage set, uint256 _value) internal view returns (uint256) { return set._next[_value]; } /** * @dev Returns the previous value */ function prev(Set storage set, uint256 _value) internal view returns (uint256) { return set._prev[_value]; } /** * @dev Returns true if the value is in the set */ function contains(Set storage set, uint256 value) internal view returns (bool) { return set._next[0] == value || set._next[value] != 0 || set._prev[value] != 0; } /** * @dev Return the entire set in an array * * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that * this function has an unbounded cost, and using it as part of a state-changing function may render the function * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. */ function values(Set storage set) internal view returns (uint256[] memory) { uint256[] memory _values = new uint256[](set.count); uint256 value = set._next[0]; uint256 i = 0; while (value != 0) { _values[i] = value; value = set._next[value]; i += 1; } return _values; } /** * @dev Return an array with n values in the set, starting after "from" */ function valuesFromN(Set storage set, uint256 from, uint256 n) internal view returns (uint256[] memory) { uint256[] memory _values = new uint256[](n); uint256 value = set._next[from]; uint256 i = 0; while (i < n) { _values[i] = value; value = set._next[value]; i += 1; } return _values; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IERC20.sol"; import "./extensions/IERC20Metadata.sol"; import "../../utils/Context.sol"; /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin Contracts guidelines: functions revert * instead returning `false` on failure. This behavior is nonetheless * conventional and does not conflict with the expectations of ERC20 * applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); uint256 currentAllowance = _allowances[sender][_msgSender()]; require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance"); unchecked { _approve(sender, _msgSender(), currentAllowance - amount); } return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { uint256 currentAllowance = _allowances[_msgSender()][spender]; require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(_msgSender(), spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `sender` to `recipient`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); uint256 senderBalance = _balances[sender]; require(senderBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[sender] = senderBalance - amount; } _balances[recipient] += amount; emit Transfer(sender, recipient, amount); _afterTokenTransfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; } _totalSupply -= amount; emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @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); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "../IERC20.sol"; /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); }
{ "optimizer": { "enabled": true, "runs": 100 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"payoutAddress","type":"address"}],"name":"addPayoutAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"auctionId","type":"uint256"},{"internalType":"address","name":"from","type":"address"}],"name":"cancel","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"auctionId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"from","type":"address"}],"name":"feature","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"featured","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"featuredDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"from","type":"uint256"},{"internalType":"uint256","name":"n","type":"uint256"}],"name":"getFeatured","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"auctionId","type":"uint256"}],"name":"getFeaturedContains","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFeaturedLength","outputs":[{"internalType":"uint256","name":"length","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"auctionId","type":"uint256"}],"name":"getFeaturedPrice","outputs":[{"internalType":"uint256","name":"price","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNextFeaturedTime","outputs":[{"internalType":"uint256","name":"timestamp","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"minter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextFeaturedTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextPayoutsTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"payoutAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"payouts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"payoutsFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"payoutAddress","type":"address"}],"name":"removePayoutAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"minter_","type":"address"}],"name":"setMinter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"updateFeatured","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"updatePayoutAmount","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526200001362093a8042620002ec565b60095568056bc75e2d63100000600a553480156200003057600080fd5b5060405162001fda38038062001fda8339810160408190526200005391620003e0565b8151829082906200006c90600390602085019062000246565b5080516200008290600490602084019062000246565b5050600580546001600160a01b03191633908117909155620000b0915069152d02c7e14af6800000620000e8565b620000df7371c7656ec7ab88b098defb751b7401b5f6d8976f600b620001d060201b62000c581790919060201c565b50505062000487565b6001600160a01b038216620001435760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b8060026000828254620001579190620002ec565b90915550506001600160a01b0382166000908152602081905260408120805483929062000186908490620002ec565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6001600160a01b03811660009081526001830160205260408120546200023c57508154600180820184556000848152602080822090930180546001600160a01b0319166001600160a01b0386169081179091558554908252828601909352604090209190915562000240565b5060005b92915050565b82805462000254906200044a565b90600052602060002090601f016020900481019282620002785760008555620002c3565b82601f106200029357805160ff1916838001178555620002c3565b82800160010185558215620002c3579182015b82811115620002c3578251825591602001919060010190620002a6565b50620002d1929150620002d5565b5090565b5b80821115620002d15760008155600101620002d6565b600082198211156200030e57634e487b7160e01b600052601160045260246000fd5b500190565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200033b57600080fd5b81516001600160401b038082111562000358576200035862000313565b604051601f8301601f19908116603f0116810190828211818310171562000383576200038362000313565b81604052838152602092508683858801011115620003a057600080fd5b600091505b83821015620003c45785820183015181830184015290820190620003a5565b83821115620003d65760008385830101525b9695505050505050565b60008060408385031215620003f457600080fd5b82516001600160401b03808211156200040c57600080fd5b6200041a8683870162000329565b935060208501519150808211156200043157600080fd5b50620004408582860162000329565b9150509250929050565b600181811c908216806200045f57607f821691505b602082108114156200048157634e487b7160e01b600052602260045260246000fd5b50919050565b611b4380620004976000396000f3fe608060405234801561001057600080fd5b50600436106101dc5760003560e01c8063715018a611610105578063a457c2d71161009d578063a457c2d7146103d6578063a9059cbb146103e9578063ac58ca1f146103fc578063c15caf0814610405578063dd62ed3e1461040d578063f08ce46114610446578063fca3b5aa14610459578063fe984df31461046c578063ff8a2ecf1461047f57600080fd5b8063715018a61461035f57806379cc6790146103675780637ad94dca1461037a5780637f561e61146103835780638da5cb5b1461038b57806393308d951461039e578063939ddf59146103be57806395d89b41146103c6578063a247bc32146103ce57600080fd5b806334c77f871161017857806334c77f87146102b257806339509351146102c55780633daf0e03146102d857806340c10f19146102eb57806342966c68146102fe57806357d682c41461031157806358baa76e146103245780636b46c8c31461032d57806370a082311461033657600080fd5b806306fdde03146101e157806307546172146101ff578063095ea7b31461022a5780631789058d1461024d57806318160ddd146102625780631b61f60d1461027457806323b872dd14610287578063313ce5671461029a5780633318da6c146102a9575b600080fd5b6101e9610489565b6040516101f691906117bd565b60405180910390f35b600654610212906001600160a01b031681565b6040516001600160a01b0390911681526020016101f6565b61023d61023836600461182e565b61051b565b60405190151581526020016101f6565b61026061025b366004611858565b610532565b005b6002545b6040519081526020016101f6565b610260610282366004611858565b6105be565b61023d610295366004611873565b6105f3565b604051601281526020016101f6565b61026660075481565b6102606102c03660046118af565b61069d565b61023d6102d336600461182e565b6107ed565b6102666102e63660046118e4565b610829565b6102606102f936600461182e565b61083d565b61026061030c3660046118e4565b610871565b61026061031f3660046118fd565b61087e565b610266610e1081565b610266600a5481565b610266610344366004611858565b6001600160a01b031660009081526020819052604090205490565b610260610926565b61026061037536600461182e565b610962565b61026660085481565b601354610266565b600554610212906001600160a01b031681565b6103b16103ac366004611929565b6109e3565b6040516101f6919061194b565b6102606109f8565b6101e9610a6b565b610260610a7a565b61023d6103e436600461182e565b610ae0565b61023d6103f736600461182e565b610b79565b61026660095481565b600854610266565b61026661041b36600461198f565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6102606104543660046118e4565b610b86565b610260610467366004611858565b610bff565b61023d61047a3660046118e4565b610c4b565b61026662093a8081565b606060038054610498906119b9565b80601f01602080910402602001604051908101604052809291908181526020018280546104c4906119b9565b80156105115780601f106104e657610100808354040283529160200191610511565b820191906000526020600020905b8154815290600101906020018083116104f457829003601f168201915b5050505050905090565b6000610528338484610cca565b5060015b92915050565b6005546001600160a01b031633146105655760405162461bcd60e51b815260040161055c906119f4565b60405180910390fd5b600a610570600b5490565b106105af5760405162461bcd60e51b815260206004820152600f60248201526e13585e1a5b5d5b481c995858da1959608a1b604482015260640161055c565b6105ba600b82610c58565b5050565b6005546001600160a01b031633146105e85760405162461bcd60e51b815260040161055c906119f4565b6105ba600b82610dee565b6000610600848484610f24565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156106855760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b606482015260840161055c565b6106928533858403610cca565b506001949350505050565b6006546001600160a01b031633146106c75760405162461bcd60e51b815260040161055c90611a1f565b816106e7826001600160a01b031660009081526020819052604090205490565b10156107265760405162461bcd60e51b815260206004820152600e60248201526d09cdee840cadcdeeaced040a8aab60931b604482015260640161055c565b610731600d846110e2565b1561076f5760405162461bcd60e51b815260206004820152600e60248201526d105b1c9958591e481c5d595d595960921b604482015260640161055c565b670de0b6b3a76400008210156107b75760405162461bcd60e51b815260206004820152600d60248201526c507269636520746f6f206c6f7760981b604482015260640161055c565b6107bf6109f8565b6107c9818361112e565b6107d4600d8461126a565b6107e0600d84846112d4565b6107e8610a7a565b505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610528918590610824908690611a61565b610cca565b6000818152600f602052604081205461052c565b6006546001600160a01b031633146108675760405162461bcd60e51b815260040161055c90611a1f565b6105ba8282611431565b61087b338261112e565b50565b6006546001600160a01b031633146108a85760405162461bcd60e51b815260040161055c90611a1f565b6108b3600d836110e2565b15156001146108f15760405162461bcd60e51b815260206004820152600a602482015269139bdd081c5d595d595960b21b604482015260640161055c565b6000828152600f602052604090205461090b908290611431565b610916600d836114fe565b61091e6109f8565b6105ba610a7a565b6005546001600160a01b031633146109505760405162461bcd60e51b815260040161055c906119f4565b600580546001600160a01b0319169055565b600061096e833361041b565b9050818110156109cc5760405162461bcd60e51b8152602060048201526024808201527f45524332303a206275726e20616d6f756e74206578636565647320616c6c6f77604482015263616e636560e01b606482015260840161055c565b6109d98333848403610cca565b6107e8838361112e565b60606109f1600d84846115e2565b9392505050565b600854421080610a085750601354155b15610a0f57565b610a1b610e1042611a61565b6008556000805260146020527f4f26c3876aa9f4b92579780beea1161a61f87ebf1ec6ee865b299e447ecba99c54610a54600d826114fe565b600781905561087b33670de0b6b3a7640000611431565b606060048054610498906119b9565b600954421015610a8657565b610a9362093a8042611a61565b60095560005b600b54811015610acb57610ab9610ab1600b83611697565b600a54611431565b80610ac381611a79565b915050610a99565b50610ade33670de0b6b3a7640000611431565b565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015610b625760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161055c565b610b6f3385858403610cca565b5060019392505050565b6000610528338484610f24565b6005546001600160a01b03163314610bb05760405162461bcd60e51b815260040161055c906119f4565b683635c9adc5dea000008110610bfa5760405162461bcd60e51b815260206004820152600f60248201526e082dadeeadce840e8dede40d0d2ced608b1b604482015260640161055c565b600a55565b6005546001600160a01b03163314610c295760405162461bcd60e51b815260040161055c906119f4565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b600061052c600d836110e2565b6001600160a01b0381166000908152600183016020526040812054610cc257508154600180820184556000848152602080822090930180546001600160a01b0319166001600160a01b0386169081179091558554908252828601909352604090209190915561052c565b50600061052c565b6001600160a01b038316610d2c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161055c565b6001600160a01b038216610d8d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161055c565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03811660009081526001830160205260408120548015610f1a576000610e1c600183611a94565b8554909150600090610e3090600190611a94565b9050818114610ebc576000866000018281548110610e5057610e50611aab565b60009182526020909120015487546001600160a01b0390911691508190889085908110610e7f57610e7f611aab565b600091825260208083209190910180546001600160a01b0319166001600160a01b0394851617905592909116815260018801909152604090208390555b8554869080610ecd57610ecd611ac1565b60008281526020808220830160001990810180546001600160a01b03191690559092019092556001600160a01b038716825260018881019091526040822091909155935061052c92505050565b600091505061052c565b6001600160a01b038316610f885760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161055c565b6001600160a01b038216610fea5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161055c565b6001600160a01b038316600090815260208190526040902054818110156110625760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161055c565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290611099908490611a61565b92505081905550826001600160a01b0316846001600160a01b0316600080516020611aee833981519152846040516110d391815260200190565b60405180910390a35b50505050565b600080805260078301602052604081205482148061110f5750600082815260078401602052604090205415155b806109f157505060009081526008919091016020526040902054151590565b6001600160a01b03821661118e5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161055c565b6001600160a01b038216600090815260208190526040902054818110156112025760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b606482015260840161055c565b6001600160a01b0383166000908152602081905260408120838303905560028054849290611231908490611a94565b90915550506040518281526000906001600160a01b03851690600080516020611aee8339815191529060200160405180910390a3505050565b61127760068301826116ca565b6000808052600180840160205260408220600281018490558054919290916112a0908490611a61565b909155505060008080526001808401602052604090912001546105ba57600080805260019283016020526040902090910155565b600081815260018401602052604090208354821115611320576112f784846114fe565b6001810183905581845561130e60068501846116e9565b61131b60038501836116e9565b6113fb565b6000838152600285016020908152604080832054808452600588018352818420546001808a0190945291909320549091141561136a57600082815260048701602052604090205491505b61137486866114fe565b60008111801561138357508084115b1561139e576000908152600586016020526040902054611374565b60008181526001878101602081815260408085206002015460048c0183528186205486529290915290922001546113db9160068901918890611703565b82546113f8576113f060038701828685611703565b600183018590555b50505b6002810183905580546001908290600090611417908490611a61565b909155505050600091825260029092016020526040902055565b6001600160a01b0382166114875760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161055c565b80600260008282546114999190611a61565b90915550506001600160a01b038216600090815260208190526040812080548392906114c6908490611a61565b90915550506040518181526001600160a01b03831690600090600080516020611aee8339815191529060200160405180910390a35050565b60008181526002830160209081526040808320805490849055808452600186019092529091208054156115465760018160000160008282546115409190611a94565b90915550505b805461158f576000600182018190556002820155835482141561157757600082815260048501602052604090205484555b811561158a5761158a6003850183611757565b6115d5565b82816001015414156115b257600083815260078501602052604090205460018201555b82816002015414156115d557600083815260088501602052604090205460028201555b6110dc6006850184611757565b606060008267ffffffffffffffff8111156115ff576115ff611ad7565b604051908082528060200260200182016040528015611628578160200160208202803683370190505b5060008581526007870160205260408120549192505b8481101561168c578183828151811061165957611659611aab565b602090810291909101810191909152600092835260078801905260409091205490611685600182611a61565b905061163e565b509095945050505050565b60008260000182815481106116ae576116ae611aab565b6000918252602090912001546001600160a01b03169392505050565b60008080526002830160205260408120546105ba918491908490611703565b60008080526001830160205260408120546105ba91849184905b600083815260018086016020908152604080842086905585845280842085905584845260028801909152808320859055848352822085905585549091869161174c908490611a61565b909155505050505050565b60008181526001830160208181526040808420805460028801808552838720805488529585528387208290558554918752808552928620558585528490559052558154156105ba5760018260000160008282546117b49190611a94565b90915550505050565b600060208083528351808285015260005b818110156117ea578581018301518582016040015282016117ce565b818111156117fc576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b038116811461182957600080fd5b919050565b6000806040838503121561184157600080fd5b61184a83611812565b946020939093013593505050565b60006020828403121561186a57600080fd5b6109f182611812565b60008060006060848603121561188857600080fd5b61189184611812565b925061189f60208501611812565b9150604084013590509250925092565b6000806000606084860312156118c457600080fd5b83359250602084013591506118db60408501611812565b90509250925092565b6000602082840312156118f657600080fd5b5035919050565b6000806040838503121561191057600080fd5b8235915061192060208401611812565b90509250929050565b6000806040838503121561193c57600080fd5b50508035926020909101359150565b6020808252825182820181905260009190848201906040850190845b8181101561198357835183529284019291840191600101611967565b50909695505050505050565b600080604083850312156119a257600080fd5b6119ab83611812565b915061192060208401611812565b600181811c908216806119cd57607f821691505b602082108114156119ee57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252601190820152704e6f74206f776e6572206164647265737360781b604082015260600190565b6020808252601290820152714e6f74206d696e746572206164647265737360701b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008219821115611a7457611a74611a4b565b500190565b6000600019821415611a8d57611a8d611a4b565b5060010190565b600082821015611aa657611aa6611a4b565b500390565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052604160045260246000fdfeddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220d2338de0ef1881b3ac4123eb4a25632b8535489edb14ebed6cab7a2ac7bc68fa64736f6c63430008090033000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000003547578000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035455580000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101dc5760003560e01c8063715018a611610105578063a457c2d71161009d578063a457c2d7146103d6578063a9059cbb146103e9578063ac58ca1f146103fc578063c15caf0814610405578063dd62ed3e1461040d578063f08ce46114610446578063fca3b5aa14610459578063fe984df31461046c578063ff8a2ecf1461047f57600080fd5b8063715018a61461035f57806379cc6790146103675780637ad94dca1461037a5780637f561e61146103835780638da5cb5b1461038b57806393308d951461039e578063939ddf59146103be57806395d89b41146103c6578063a247bc32146103ce57600080fd5b806334c77f871161017857806334c77f87146102b257806339509351146102c55780633daf0e03146102d857806340c10f19146102eb57806342966c68146102fe57806357d682c41461031157806358baa76e146103245780636b46c8c31461032d57806370a082311461033657600080fd5b806306fdde03146101e157806307546172146101ff578063095ea7b31461022a5780631789058d1461024d57806318160ddd146102625780631b61f60d1461027457806323b872dd14610287578063313ce5671461029a5780633318da6c146102a9575b600080fd5b6101e9610489565b6040516101f691906117bd565b60405180910390f35b600654610212906001600160a01b031681565b6040516001600160a01b0390911681526020016101f6565b61023d61023836600461182e565b61051b565b60405190151581526020016101f6565b61026061025b366004611858565b610532565b005b6002545b6040519081526020016101f6565b610260610282366004611858565b6105be565b61023d610295366004611873565b6105f3565b604051601281526020016101f6565b61026660075481565b6102606102c03660046118af565b61069d565b61023d6102d336600461182e565b6107ed565b6102666102e63660046118e4565b610829565b6102606102f936600461182e565b61083d565b61026061030c3660046118e4565b610871565b61026061031f3660046118fd565b61087e565b610266610e1081565b610266600a5481565b610266610344366004611858565b6001600160a01b031660009081526020819052604090205490565b610260610926565b61026061037536600461182e565b610962565b61026660085481565b601354610266565b600554610212906001600160a01b031681565b6103b16103ac366004611929565b6109e3565b6040516101f6919061194b565b6102606109f8565b6101e9610a6b565b610260610a7a565b61023d6103e436600461182e565b610ae0565b61023d6103f736600461182e565b610b79565b61026660095481565b600854610266565b61026661041b36600461198f565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6102606104543660046118e4565b610b86565b610260610467366004611858565b610bff565b61023d61047a3660046118e4565b610c4b565b61026662093a8081565b606060038054610498906119b9565b80601f01602080910402602001604051908101604052809291908181526020018280546104c4906119b9565b80156105115780601f106104e657610100808354040283529160200191610511565b820191906000526020600020905b8154815290600101906020018083116104f457829003601f168201915b5050505050905090565b6000610528338484610cca565b5060015b92915050565b6005546001600160a01b031633146105655760405162461bcd60e51b815260040161055c906119f4565b60405180910390fd5b600a610570600b5490565b106105af5760405162461bcd60e51b815260206004820152600f60248201526e13585e1a5b5d5b481c995858da1959608a1b604482015260640161055c565b6105ba600b82610c58565b5050565b6005546001600160a01b031633146105e85760405162461bcd60e51b815260040161055c906119f4565b6105ba600b82610dee565b6000610600848484610f24565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156106855760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b606482015260840161055c565b6106928533858403610cca565b506001949350505050565b6006546001600160a01b031633146106c75760405162461bcd60e51b815260040161055c90611a1f565b816106e7826001600160a01b031660009081526020819052604090205490565b10156107265760405162461bcd60e51b815260206004820152600e60248201526d09cdee840cadcdeeaced040a8aab60931b604482015260640161055c565b610731600d846110e2565b1561076f5760405162461bcd60e51b815260206004820152600e60248201526d105b1c9958591e481c5d595d595960921b604482015260640161055c565b670de0b6b3a76400008210156107b75760405162461bcd60e51b815260206004820152600d60248201526c507269636520746f6f206c6f7760981b604482015260640161055c565b6107bf6109f8565b6107c9818361112e565b6107d4600d8461126a565b6107e0600d84846112d4565b6107e8610a7a565b505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610528918590610824908690611a61565b610cca565b6000818152600f602052604081205461052c565b6006546001600160a01b031633146108675760405162461bcd60e51b815260040161055c90611a1f565b6105ba8282611431565b61087b338261112e565b50565b6006546001600160a01b031633146108a85760405162461bcd60e51b815260040161055c90611a1f565b6108b3600d836110e2565b15156001146108f15760405162461bcd60e51b815260206004820152600a602482015269139bdd081c5d595d595960b21b604482015260640161055c565b6000828152600f602052604090205461090b908290611431565b610916600d836114fe565b61091e6109f8565b6105ba610a7a565b6005546001600160a01b031633146109505760405162461bcd60e51b815260040161055c906119f4565b600580546001600160a01b0319169055565b600061096e833361041b565b9050818110156109cc5760405162461bcd60e51b8152602060048201526024808201527f45524332303a206275726e20616d6f756e74206578636565647320616c6c6f77604482015263616e636560e01b606482015260840161055c565b6109d98333848403610cca565b6107e8838361112e565b60606109f1600d84846115e2565b9392505050565b600854421080610a085750601354155b15610a0f57565b610a1b610e1042611a61565b6008556000805260146020527f4f26c3876aa9f4b92579780beea1161a61f87ebf1ec6ee865b299e447ecba99c54610a54600d826114fe565b600781905561087b33670de0b6b3a7640000611431565b606060048054610498906119b9565b600954421015610a8657565b610a9362093a8042611a61565b60095560005b600b54811015610acb57610ab9610ab1600b83611697565b600a54611431565b80610ac381611a79565b915050610a99565b50610ade33670de0b6b3a7640000611431565b565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015610b625760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161055c565b610b6f3385858403610cca565b5060019392505050565b6000610528338484610f24565b6005546001600160a01b03163314610bb05760405162461bcd60e51b815260040161055c906119f4565b683635c9adc5dea000008110610bfa5760405162461bcd60e51b815260206004820152600f60248201526e082dadeeadce840e8dede40d0d2ced608b1b604482015260640161055c565b600a55565b6005546001600160a01b03163314610c295760405162461bcd60e51b815260040161055c906119f4565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b600061052c600d836110e2565b6001600160a01b0381166000908152600183016020526040812054610cc257508154600180820184556000848152602080822090930180546001600160a01b0319166001600160a01b0386169081179091558554908252828601909352604090209190915561052c565b50600061052c565b6001600160a01b038316610d2c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161055c565b6001600160a01b038216610d8d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161055c565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03811660009081526001830160205260408120548015610f1a576000610e1c600183611a94565b8554909150600090610e3090600190611a94565b9050818114610ebc576000866000018281548110610e5057610e50611aab565b60009182526020909120015487546001600160a01b0390911691508190889085908110610e7f57610e7f611aab565b600091825260208083209190910180546001600160a01b0319166001600160a01b0394851617905592909116815260018801909152604090208390555b8554869080610ecd57610ecd611ac1565b60008281526020808220830160001990810180546001600160a01b03191690559092019092556001600160a01b038716825260018881019091526040822091909155935061052c92505050565b600091505061052c565b6001600160a01b038316610f885760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161055c565b6001600160a01b038216610fea5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161055c565b6001600160a01b038316600090815260208190526040902054818110156110625760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161055c565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290611099908490611a61565b92505081905550826001600160a01b0316846001600160a01b0316600080516020611aee833981519152846040516110d391815260200190565b60405180910390a35b50505050565b600080805260078301602052604081205482148061110f5750600082815260078401602052604090205415155b806109f157505060009081526008919091016020526040902054151590565b6001600160a01b03821661118e5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161055c565b6001600160a01b038216600090815260208190526040902054818110156112025760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b606482015260840161055c565b6001600160a01b0383166000908152602081905260408120838303905560028054849290611231908490611a94565b90915550506040518281526000906001600160a01b03851690600080516020611aee8339815191529060200160405180910390a3505050565b61127760068301826116ca565b6000808052600180840160205260408220600281018490558054919290916112a0908490611a61565b909155505060008080526001808401602052604090912001546105ba57600080805260019283016020526040902090910155565b600081815260018401602052604090208354821115611320576112f784846114fe565b6001810183905581845561130e60068501846116e9565b61131b60038501836116e9565b6113fb565b6000838152600285016020908152604080832054808452600588018352818420546001808a0190945291909320549091141561136a57600082815260048701602052604090205491505b61137486866114fe565b60008111801561138357508084115b1561139e576000908152600586016020526040902054611374565b60008181526001878101602081815260408085206002015460048c0183528186205486529290915290922001546113db9160068901918890611703565b82546113f8576113f060038701828685611703565b600183018590555b50505b6002810183905580546001908290600090611417908490611a61565b909155505050600091825260029092016020526040902055565b6001600160a01b0382166114875760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161055c565b80600260008282546114999190611a61565b90915550506001600160a01b038216600090815260208190526040812080548392906114c6908490611a61565b90915550506040518181526001600160a01b03831690600090600080516020611aee8339815191529060200160405180910390a35050565b60008181526002830160209081526040808320805490849055808452600186019092529091208054156115465760018160000160008282546115409190611a94565b90915550505b805461158f576000600182018190556002820155835482141561157757600082815260048501602052604090205484555b811561158a5761158a6003850183611757565b6115d5565b82816001015414156115b257600083815260078501602052604090205460018201555b82816002015414156115d557600083815260088501602052604090205460028201555b6110dc6006850184611757565b606060008267ffffffffffffffff8111156115ff576115ff611ad7565b604051908082528060200260200182016040528015611628578160200160208202803683370190505b5060008581526007870160205260408120549192505b8481101561168c578183828151811061165957611659611aab565b602090810291909101810191909152600092835260078801905260409091205490611685600182611a61565b905061163e565b509095945050505050565b60008260000182815481106116ae576116ae611aab565b6000918252602090912001546001600160a01b03169392505050565b60008080526002830160205260408120546105ba918491908490611703565b60008080526001830160205260408120546105ba91849184905b600083815260018086016020908152604080842086905585845280842085905584845260028801909152808320859055848352822085905585549091869161174c908490611a61565b909155505050505050565b60008181526001830160208181526040808420805460028801808552838720805488529585528387208290558554918752808552928620558585528490559052558154156105ba5760018260000160008282546117b49190611a94565b90915550505050565b600060208083528351808285015260005b818110156117ea578581018301518582016040015282016117ce565b818111156117fc576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b038116811461182957600080fd5b919050565b6000806040838503121561184157600080fd5b61184a83611812565b946020939093013593505050565b60006020828403121561186a57600080fd5b6109f182611812565b60008060006060848603121561188857600080fd5b61189184611812565b925061189f60208501611812565b9150604084013590509250925092565b6000806000606084860312156118c457600080fd5b83359250602084013591506118db60408501611812565b90509250925092565b6000602082840312156118f657600080fd5b5035919050565b6000806040838503121561191057600080fd5b8235915061192060208401611812565b90509250929050565b6000806040838503121561193c57600080fd5b50508035926020909101359150565b6020808252825182820181905260009190848201906040850190845b8181101561198357835183529284019291840191600101611967565b50909695505050505050565b600080604083850312156119a257600080fd5b6119ab83611812565b915061192060208401611812565b600181811c908216806119cd57607f821691505b602082108114156119ee57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252601190820152704e6f74206f776e6572206164647265737360781b604082015260600190565b6020808252601290820152714e6f74206d696e746572206164647265737360701b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008219821115611a7457611a74611a4b565b500190565b6000600019821415611a8d57611a8d611a4b565b5060010190565b600082821015611aa657611aa6611a4b565b500390565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052604160045260246000fdfeddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220d2338de0ef1881b3ac4123eb4a25632b8535489edb14ebed6cab7a2ac7bc68fa64736f6c63430008090033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000003547578000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035455580000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : name (string): Tux
Arg [1] : symbol (string): TUX
-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [3] : 5475780000000000000000000000000000000000000000000000000000000000
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [5] : 5455580000000000000000000000000000000000000000000000000000000000
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.