Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 500 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Approve | 24452284 | 20 days ago | IN | 0 ETH | 0.00004964 | ||||
| Approve | 24269225 | 46 days ago | IN | 0 ETH | 0.00000142 | ||||
| Transfer | 24031590 | 79 days ago | IN | 0 ETH | 0.0000249 | ||||
| Transfer | 24009769 | 82 days ago | IN | 0 ETH | 0.00002558 | ||||
| Approve | 23956861 | 90 days ago | IN | 0 ETH | 0.00000419 | ||||
| Transfer | 22809921 | 250 days ago | IN | 0 ETH | 0.00001534 | ||||
| Approve | 20871110 | 521 days ago | IN | 0 ETH | 0.0007244 | ||||
| Approve | 17381579 | 1010 days ago | IN | 0 ETH | 0.00147276 | ||||
| Approve | 17354074 | 1014 days ago | IN | 0 ETH | 0.00110022 | ||||
| Approve | 17210522 | 1034 days ago | IN | 0 ETH | 0.00302551 | ||||
| Approve | 17206983 | 1034 days ago | IN | 0 ETH | 0.00429456 | ||||
| Approve | 16952559 | 1070 days ago | IN | 0 ETH | 0.00061299 | ||||
| Approve | 16487767 | 1136 days ago | IN | 0 ETH | 0.00045523 | ||||
| Approve | 16445282 | 1141 days ago | IN | 0 ETH | 0.00053943 | ||||
| Transfer | 16308548 | 1161 days ago | IN | 0 ETH | 0.00068194 | ||||
| Transfer | 16298248 | 1162 days ago | IN | 0 ETH | 0.0008139 | ||||
| Approve | 15660600 | 1251 days ago | IN | 0 ETH | 0.00013113 | ||||
| Approve | 15660600 | 1251 days ago | IN | 0 ETH | 0.00012117 | ||||
| Approve | 15660597 | 1251 days ago | IN | 0 ETH | 0.00011256 | ||||
| Approve | 15065888 | 1343 days ago | IN | 0 ETH | 0.00023037 | ||||
| Approve | 14996705 | 1355 days ago | IN | 0 ETH | 0.00066584 | ||||
| Approve | 14996705 | 1355 days ago | IN | 0 ETH | 0.00116194 | ||||
| Approve | 14789729 | 1390 days ago | IN | 0 ETH | 0.00065675 | ||||
| Approve | 14708157 | 1403 days ago | IN | 0 ETH | 0.00116079 | ||||
| Approve | 14608428 | 1418 days ago | IN | 0 ETH | 0.00101924 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
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
Contract ABI
API[{"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
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.