Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Finance
Overview
Max Total Supply
100,000,000 TRADE
Holders
3,670 ( -0.082%)
Market
Price
$0.50 @ 0.000212 ETH (-0.82%)
Onchain Market Cap
$50,184,800.00
Circulating Supply Market Cap
$18,830,078.00
Other Info
Token Contract (WITH 18 Decimals)
Balance
500.000000000000000001 TRADEValue
$250.92 ( ~0.105960282046398 Eth) [0.0005%]Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
PolyTradeToken
Compiler Version
v0.8.4+commit.c7e474f2
Optimization Enabled:
Yes with 1000000 runs
Other Settings:
default evmVersion, GNU GPLv3 license, Audited
Contract Source Code (Solidity)Audit Report
/** *Submitted for verification at Etherscan.io on 2021-05-20 */ // File @openzeppelin/contracts/token/ERC20/extensions/[email protected] // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612]. * * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't * need to send a transaction, and thus is not required to hold Ether at all. */ interface IERC20Permit { /** * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens, * given ``owner``'s signed approval. * * IMPORTANT: The same issues {IERC20-approve} has related to transaction * ordering also apply here. * * Emits an {Approval} event. * * Requirements: * * - `spender` cannot be the zero address. * - `deadline` must be a timestamp in the future. * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner` * over the EIP712-formatted function arguments. * - the signature must use ``owner``'s current nonce (see {nonces}). * * For more information on the signature format, see the * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP * section]. */ function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external; /** * @dev Returns the current nonce for `owner`. This value must be * included whenever a signature is generated for {permit}. * * Every successful call to {permit} increases ``owner``'s nonce by one. This * prevents a signature from being used multiple times. */ function nonces(address owner) external view returns (uint256); /** * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}. */ // solhint-disable-next-line func-name-mixedcase function DOMAIN_SEPARATOR() external view returns (bytes32); } // File @openzeppelin/contracts/token/ERC20/[email protected] 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); } // File @openzeppelin/contracts/token/ERC20/extensions/[email protected] pragma solidity ^0.8.0; /** * @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); } // File @openzeppelin/contracts/utils/[email protected] 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) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } // File @openzeppelin/contracts/token/ERC20/[email protected] pragma solidity ^0.8.0; /** * @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 guidelines: functions revert instead * of 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 defaut 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"); _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"); _approve(_msgSender(), spender, currentAllowance - subtractedValue); return true; } /** * @dev Moves tokens `amount` from `sender` to `recipient`. * * This is 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"); _balances[sender] = senderBalance - amount; _balances[recipient] += amount; emit Transfer(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: * * - `to` 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); } /** * @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"); _balances[account] = accountBalance - amount; _totalSupply -= amount; emit Transfer(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 to 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 { } } // File @openzeppelin/contracts/utils/cryptography/[email protected] pragma solidity ^0.8.0; /** * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations. * * These functions can be used to verify that a message was signed by the holder * of the private keys of a given address. */ library ECDSA { /** * @dev Returns the address that signed a hashed message (`hash`) with * `signature`. This address can then be used for verification purposes. * * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures: * this function rejects them by requiring the `s` value to be in the lower * half order, and the `v` value to be either 27 or 28. * * IMPORTANT: `hash` _must_ be the result of a hash operation for the * verification to be secure: it is possible to craft signatures that * recover to arbitrary addresses for non-hashed data. A safe way to ensure * this is by receiving a hash of the original message (which may otherwise * be too long), and then calling {toEthSignedMessageHash} on it. */ function recover(bytes32 hash, bytes memory signature) internal pure returns (address) { // Divide the signature in r, s and v variables bytes32 r; bytes32 s; uint8 v; // Check the signature length // - case 65: r,s,v signature (standard) // - case 64: r,vs signature (cf https://eips.ethereum.org/EIPS/eip-2098) _Available since v4.1._ if (signature.length == 65) { // ecrecover takes the signature parameters, and the only way to get them // currently is to use assembly. // solhint-disable-next-line no-inline-assembly assembly { r := mload(add(signature, 0x20)) s := mload(add(signature, 0x40)) v := byte(0, mload(add(signature, 0x60))) } } else if (signature.length == 64) { // ecrecover takes the signature parameters, and the only way to get them // currently is to use assembly. // solhint-disable-next-line no-inline-assembly assembly { let vs := mload(add(signature, 0x40)) r := mload(add(signature, 0x20)) s := and(vs, 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) v := add(shr(255, vs), 27) } } else { revert("ECDSA: invalid signature length"); } return recover(hash, v, r, s); } /** * @dev Overload of {ECDSA-recover} that receives the `v`, * `r` and `s` signature fields separately. */ function recover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address) { // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines // the valid range for s in (281): 0 < s < secp256k1n ÷ 2 + 1, and for v in (282): v ∈ {27, 28}. Most // signatures from current libraries generate a unique signature with an s-value in the lower half order. // // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept // these malleable signatures as well. require(uint256(s) <= 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0, "ECDSA: invalid signature 's' value"); require(v == 27 || v == 28, "ECDSA: invalid signature 'v' value"); // If the signature is valid (and not malleable), return the signer address address signer = ecrecover(hash, v, r, s); require(signer != address(0), "ECDSA: invalid signature"); return signer; } /** * @dev Returns an Ethereum Signed Message, created from a `hash`. This * produces hash corresponding to the one signed with the * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] * JSON-RPC method as part of EIP-191. * * See {recover}. */ function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) { // 32 is the length in bytes of hash, // enforced by the type signature above return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash)); } /** * @dev Returns an Ethereum Signed Typed Data, created from a * `domainSeparator` and a `structHash`. This produces hash corresponding * to the one signed with the * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`] * JSON-RPC method as part of EIP-712. * * See {recover}. */ function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) { return keccak256(abi.encodePacked("\x19\x01", domainSeparator, structHash)); } } // File @openzeppelin/contracts/utils/cryptography/[email protected] pragma solidity ^0.8.0; /** * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data. * * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible, * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding * they need in their contracts using a combination of `abi.encode` and `keccak256`. * * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA * ({_hashTypedDataV4}). * * The implementation of the domain separator was designed to be as efficient as possible while still properly updating * the chain id to protect against replay attacks on an eventual fork of the chain. * * NOTE: This contract implements the version of the encoding known as "v4", as implemented by the JSON RPC method * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask]. * * _Available since v3.4._ */ abstract contract EIP712 { /* solhint-disable var-name-mixedcase */ // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to // invalidate the cached domain separator if the chain id changes. bytes32 private immutable _CACHED_DOMAIN_SEPARATOR; uint256 private immutable _CACHED_CHAIN_ID; bytes32 private immutable _HASHED_NAME; bytes32 private immutable _HASHED_VERSION; bytes32 private immutable _TYPE_HASH; /* solhint-enable var-name-mixedcase */ /** * @dev Initializes the domain separator and parameter caches. * * The meaning of `name` and `version` is specified in * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]: * * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol. * - `version`: the current major version of the signing domain. * * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart * contract upgrade]. */ constructor(string memory name, string memory version) { bytes32 hashedName = keccak256(bytes(name)); bytes32 hashedVersion = keccak256(bytes(version)); bytes32 typeHash = keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"); _HASHED_NAME = hashedName; _HASHED_VERSION = hashedVersion; _CACHED_CHAIN_ID = block.chainid; _CACHED_DOMAIN_SEPARATOR = _buildDomainSeparator(typeHash, hashedName, hashedVersion); _TYPE_HASH = typeHash; } /** * @dev Returns the domain separator for the current chain. */ function _domainSeparatorV4() internal view returns (bytes32) { if (block.chainid == _CACHED_CHAIN_ID) { return _CACHED_DOMAIN_SEPARATOR; } else { return _buildDomainSeparator(_TYPE_HASH, _HASHED_NAME, _HASHED_VERSION); } } function _buildDomainSeparator(bytes32 typeHash, bytes32 name, bytes32 version) private view returns (bytes32) { return keccak256( abi.encode( typeHash, name, version, block.chainid, address(this) ) ); } /** * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this * function returns the hash of the fully encoded EIP712 message for this domain. * * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example: * * ```solidity * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode( * keccak256("Mail(address to,string contents)"), * mailTo, * keccak256(bytes(mailContents)) * ))); * address signer = ECDSA.recover(digest, signature); * ``` */ function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) { return ECDSA.toTypedDataHash(_domainSeparatorV4(), structHash); } } // File @openzeppelin/contracts/utils/[email protected] pragma solidity ^0.8.0; /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented or decremented by one. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } } // File @openzeppelin/contracts/token/ERC20/extensions/[email protected] pragma solidity ^0.8.0; /** * @dev Implementation of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612]. * * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by * presenting a message signed by the account. By not relying on `{IERC20-approve}`, the token holder account doesn't * need to send a transaction, and thus is not required to hold Ether at all. * * _Available since v3.4._ */ abstract contract ERC20Permit is ERC20, IERC20Permit, EIP712 { using Counters for Counters.Counter; mapping (address => Counters.Counter) private _nonces; // solhint-disable-next-line var-name-mixedcase bytes32 private immutable _PERMIT_TYPEHASH = keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)"); /** * @dev Initializes the {EIP712} domain separator using the `name` parameter, and setting `version` to `"1"`. * * It's a good idea to use the same `name` that is defined as the ERC20 token name. */ constructor(string memory name) EIP712(name, "1") { } /** * @dev See {IERC20Permit-permit}. */ function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) public virtual override { // solhint-disable-next-line not-rely-on-time require(block.timestamp <= deadline, "ERC20Permit: expired deadline"); bytes32 structHash = keccak256( abi.encode( _PERMIT_TYPEHASH, owner, spender, value, _useNonce(owner), deadline ) ); bytes32 hash = _hashTypedDataV4(structHash); address signer = ECDSA.recover(hash, v, r, s); require(signer == owner, "ERC20Permit: invalid signature"); _approve(owner, spender, value); } /** * @dev See {IERC20Permit-nonces}. */ function nonces(address owner) public view virtual override returns (uint256) { return _nonces[owner].current(); } /** * @dev See {IERC20Permit-DOMAIN_SEPARATOR}. */ // solhint-disable-next-line func-name-mixedcase function DOMAIN_SEPARATOR() external view override returns (bytes32) { return _domainSeparatorV4(); } /** * @dev "Consume a nonce": return the current value and increment. * * _Available since v4.1._ */ function _useNonce(address owner) internal virtual returns (uint256 current) { Counters.Counter storage nonce = _nonces[owner]; current = nonce.current(); nonce.increment(); } } // File contracts/PolyTadeToken.sol pragma solidity 0.8.4; contract PolyTradeToken is ERC20Permit { address public governance; // The timestamp after which minting may occur uint256 public mintAllowedAfter; // The timestamp after which burning may occur uint256 public burnAllowedAfter; // Minimum time between mints/burns uint32 public constant minimumTime = 1 days * 365; // Cap on the percentage of totalSupply that can be minted/burned at each mint/burn uint8 public constant cap = 2; event GovernanceChanged(address indexed oldGovernance, address indexed newGovernance); constructor( string memory name, string memory symbol, uint256 initialSupply, uint256 allowedAfter, address _governance, address account ) ERC20(name, symbol) ERC20Permit(name) { require(allowedAfter >= 0, "Minting/Burning can only begin after deployment"); mintAllowedAfter = block.timestamp + allowedAfter; burnAllowedAfter = block.timestamp + allowedAfter; governance = _governance; _mint(account, initialSupply); } /** * @notice Change the governance address * @param _governance The address of the new governance */ function setGovernance(address _governance) external { require(msg.sender == governance, "Unauthorised access"); emit GovernanceChanged(governance, _governance); governance = _governance; } /** * @notice Mint new tokens * @param receiver The address of the destination account * @param amount The number of tokens to be minted */ function mint(address receiver, uint amount) external { require(msg.sender == governance, "Unauthorized access"); require(block.timestamp >= mintAllowedAfter, "minting not allowed yet"); require(receiver != address(0), "cannot transfer to the zero address"); // record the mint mintAllowedAfter = block.timestamp + minimumTime; // mint the amount require(amount <= ((totalSupply() * cap)/100), "exceeded mint cap"); _mint(receiver, amount); } /** * @notice Burn tokens * @param amount The number of tokens to be burned * Tokens will be burned from governance account */ function burn(uint amount) external { require(msg.sender == governance, "Unauthorized access"); require(block.timestamp >= burnAllowedAfter, "burning not allowed yet"); // record the mint burnAllowedAfter = block.timestamp + minimumTime; // mint the amount require(amount <= ((totalSupply() * cap)/100), "exceeded burn cap"); _burn(governance, amount); } }
Contract Security Audit
- Omniscia - June 6th, 2021 - Security Audit Report
[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"uint256","name":"initialSupply","type":"uint256"},{"internalType":"uint256","name":"allowedAfter","type":"uint256"},{"internalType":"address","name":"_governance","type":"address"},{"internalType":"address","name":"account","type":"address"}],"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":"oldGovernance","type":"address"},{"indexed":true,"internalType":"address","name":"newGovernance","type":"address"}],"name":"GovernanceChanged","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":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","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":[],"name":"burnAllowedAfter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cap","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","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":[],"name":"governance","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[],"name":"minimumTime","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"mintAllowedAfter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_governance","type":"address"}],"name":"setGovernance","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"}]
Contract Creation Code
6101406040527f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9610120523480156200003757600080fd5b506040516200215b3803806200215b8339810160408190526200005a91620003ef565b8580604051806040016040528060018152602001603160f81b815250888881600390805190602001906200009092919062000279565b508051620000a690600490602084019062000279565b5050825160209384012082519284019290922060c083815260e08290524660a0818152604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818a018190528183019890985260608101959095526080808601939093523085830152805180860390920182529390920190925280519401939093209092526101005250620001439050565b60405180910390fd5b6200014f83426200048d565b6007556200015e83426200048d565b600855600680546001600160a01b0319166001600160a01b03841617905562000188818562000194565b50505050505062000505565b6001600160a01b038216620001ec5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016200013a565b80600260008282546200020091906200048d565b90915550506001600160a01b038216600090815260208190526040812080548392906200022f9084906200048d565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b8280546200028790620004b2565b90600052602060002090601f016020900481019282620002ab5760008555620002f6565b82601f10620002c657805160ff1916838001178555620002f6565b82800160010185558215620002f6579182015b82811115620002f6578251825591602001919060010190620002d9565b506200030492915062000308565b5090565b5b8082111562000304576000815560010162000309565b80516001600160a01b03811681146200033757600080fd5b919050565b600082601f8301126200034d578081fd5b81516001600160401b03808211156200036a576200036a620004ef565b604051601f8301601f19908116603f01168101908282118183101715620003955762000395620004ef565b81604052838152602092508683858801011115620003b1578485fd5b8491505b83821015620003d45785820183015181830184015290820190620003b5565b83821115620003e557848385830101525b9695505050505050565b60008060008060008060c0878903121562000408578182fd5b86516001600160401b03808211156200041f578384fd5b6200042d8a838b016200033c565b9750602089015191508082111562000443578384fd5b506200045289828a016200033c565b955050604087015193506060870151925062000471608088016200031f565b91506200048160a088016200031f565b90509295509295509295565b60008219821115620004ad57634e487b7160e01b81526011600452602481fd5b500190565b600181811c90821680620004c757607f821691505b60208210811415620004e957634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b60805160a05160c05160e0516101005161012051611c06620005556000396000610c1b01526000611233015260006112820152600061125d015260006111e10152600061120a0152611c066000f3fe608060405234801561001057600080fd5b50600436106101825760003560e01c8063587dc8ec116100d857806395d89b411161008c578063ab033ea911610066578063ab033ea91461033b578063d505accf1461034e578063dd62ed3e1461036157600080fd5b806395d89b411461030d578063a457c2d714610315578063a9059cbb1461032857600080fd5b80636379821f116100bd5780636379821f146102a457806370a08231146102c45780637ecebe00146102fa57600080fd5b8063587dc8ec146102565780635aa6e6751461025f57600080fd5b8063313ce5671161013a5780633950935111610114578063395093511461021b57806340c10f191461022e57806342966c681461024357600080fd5b8063313ce567146101f6578063355274ea1461020b5780633644e5151461021357600080fd5b806318160ddd1161016b57806318160ddd146101c857806323b872dd146101da578063282232a9146101ed57600080fd5b806306fdde0314610187578063095ea7b3146101a5575b600080fd5b61018f6103a7565b60405161019c9190611a3d565b60405180910390f35b6101b86101b33660046119fc565b610439565b604051901515815260200161019c565b6002545b60405190815260200161019c565b6101b86101e8366004611950565b61044f565b6101cc60085481565b60125b60405160ff909116815260200161019c565b6101f9600281565b6101cc610541565b6101b86102293660046119fc565b610550565b61024161023c3660046119fc565b610594565b005b610241610251366004611a25565b6107cd565b6101cc60075481565b60065461027f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019c565b6102af6301e1338081565b60405163ffffffff909116815260200161019c565b6101cc6102d23660046118fd565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101cc6103083660046118fd565b61097b565b61018f6109a8565b6101b86103233660046119fc565b6109b7565b6101b86103363660046119fc565b610a91565b6102416103493660046118fd565b610a9e565b61024161035c36600461198b565b610bad565b6101cc61036f36600461191e565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546103b690611b53565b80601f01602080910402602001604051908101604052809291908181526020018280546103e290611b53565b801561042f5780601f106104045761010080835404028352916020019161042f565b820191906000526020600020905b81548152906001019060200180831161041257829003601f168201915b5050505050905090565b6000610446338484610d6c565b50600192915050565b600061045c848484610f20565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610522576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61053685336105318685611b3c565b610d6c565b506001949350505050565b600061054b6111dd565b905090565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091610446918590610531908690611aae565b60065473ffffffffffffffffffffffffffffffffffffffff163314610615576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f556e617574686f72697a656420616363657373000000000000000000000000006044820152606401610519565b600754421015610681576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f6d696e74696e67206e6f7420616c6c6f776564207965740000000000000000006044820152606401610519565b73ffffffffffffffffffffffffffffffffffffffff8216610724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f63616e6e6f74207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610519565b6107326301e1338042611aae565b6007556064600261074260025490565b61074c9190611aff565b6107569190611ac6565b8111156107bf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f6578636565646564206d696e74206361700000000000000000000000000000006044820152606401610519565b6107c982826112d0565b5050565b60065473ffffffffffffffffffffffffffffffffffffffff16331461084e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f556e617574686f72697a656420616363657373000000000000000000000000006044820152606401610519565b6008544210156108ba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f6275726e696e67206e6f7420616c6c6f776564207965740000000000000000006044820152606401610519565b6108c86301e1338042611aae565b600855606460026108d860025490565b6108e29190611aff565b6108ec9190611ac6565b811115610955576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f6578636565646564206275726e206361700000000000000000000000000000006044820152606401610519565b6006546109789073ffffffffffffffffffffffffffffffffffffffff16826113f0565b50565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600560205260408120545b92915050565b6060600480546103b690611b53565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616845290915281205482811015610a78576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610519565b610a8733856105318685611b3c565b5060019392505050565b6000610446338484610f20565b60065473ffffffffffffffffffffffffffffffffffffffff163314610b1f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f556e617574686f726973656420616363657373000000000000000000000000006044820152606401610519565b60065460405173ffffffffffffffffffffffffffffffffffffffff8084169216907f3aaaebeb4821d6a7e5c77ece53cff0afcc56c82add2c978dbbb7f73e84cbcfd290600090a3600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b83421115610c17576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e650000006044820152606401610519565b60007f0000000000000000000000000000000000000000000000000000000000000000888888610c468c6115de565b60408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090506000610cae82611613565b90506000610cbe8287878761167c565b90508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610d55576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e617475726500006044820152606401610519565b610d608a8a8a610d6c565b50505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8316610e0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610519565b73ffffffffffffffffffffffffffffffffffffffff8216610eb1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610519565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610fc3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610519565b73ffffffffffffffffffffffffffffffffffffffff8216611066576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610519565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260409020548181101561111c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610519565b6111268282611b3c565b73ffffffffffffffffffffffffffffffffffffffff8086166000908152602081905260408082209390935590851681529081208054849290611169908490611aae565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516111cf91815260200190565b60405180910390a350505050565b60007f000000000000000000000000000000000000000000000000000000000000000046141561122c57507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b73ffffffffffffffffffffffffffffffffffffffff821661134d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610519565b806002600082825461135f9190611aae565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290611399908490611aae565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff8216611493576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610519565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015611549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610519565b6115538282611b3c565b73ffffffffffffffffffffffffffffffffffffffff84166000908152602081905260408120919091556002805484929061158e908490611b3c565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610f13565b73ffffffffffffffffffffffffffffffffffffffff811660009081526005602052604090208054600181018255905b50919050565b60006109a26116206111dd565b836040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a082111561172e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152608401610519565b8360ff16601b148061174357508360ff16601c145b6117cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152608401610519565b6040805160008082526020820180845288905260ff871692820192909252606081018590526080810184905260019060a0016020604051602081039080840390855afa158015611823573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166118cb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610519565b95945050505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146118f857600080fd5b919050565b60006020828403121561190e578081fd5b611917826118d4565b9392505050565b60008060408385031215611930578081fd5b611939836118d4565b9150611947602084016118d4565b90509250929050565b600080600060608486031215611964578081fd5b61196d846118d4565b925061197b602085016118d4565b9150604084013590509250925092565b600080600080600080600060e0888a0312156119a5578283fd5b6119ae886118d4565b96506119bc602089016118d4565b95506040880135945060608801359350608088013560ff811681146119df578384fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215611a0e578182fd5b611a17836118d4565b946020939093013593505050565b600060208284031215611a36578081fd5b5035919050565b6000602080835283518082850152825b81811015611a6957858101830151858201604001528201611a4d565b81811115611a7a5783604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b60008219821115611ac157611ac1611ba1565b500190565b600082611afa577f4e487b710000000000000000000000000000000000000000000000000000000081526012600452602481fd5b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611b3757611b37611ba1565b500290565b600082821015611b4e57611b4e611ba1565b500390565b600181811c90821680611b6757607f821691505b6020821081141561160d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220664dd6c9f819fda3e39bd24eab89a1ff07b014f55deb8ce6c2f1ed7a88f18c1a64736f6c6343000804003300000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000052b7d2dcc80cd2e40000000000000000000000000000000000000000000000000000000000000005a39a80000000000000000000000000c8b4b6785d5aa23f31037003abeba528f103cebd000000000000000000000000c8b4b6785d5aa23f31037003abeba528f103cebd0000000000000000000000000000000000000000000000000000000000000009506f6c797472616465000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000055452414445000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101825760003560e01c8063587dc8ec116100d857806395d89b411161008c578063ab033ea911610066578063ab033ea91461033b578063d505accf1461034e578063dd62ed3e1461036157600080fd5b806395d89b411461030d578063a457c2d714610315578063a9059cbb1461032857600080fd5b80636379821f116100bd5780636379821f146102a457806370a08231146102c45780637ecebe00146102fa57600080fd5b8063587dc8ec146102565780635aa6e6751461025f57600080fd5b8063313ce5671161013a5780633950935111610114578063395093511461021b57806340c10f191461022e57806342966c681461024357600080fd5b8063313ce567146101f6578063355274ea1461020b5780633644e5151461021357600080fd5b806318160ddd1161016b57806318160ddd146101c857806323b872dd146101da578063282232a9146101ed57600080fd5b806306fdde0314610187578063095ea7b3146101a5575b600080fd5b61018f6103a7565b60405161019c9190611a3d565b60405180910390f35b6101b86101b33660046119fc565b610439565b604051901515815260200161019c565b6002545b60405190815260200161019c565b6101b86101e8366004611950565b61044f565b6101cc60085481565b60125b60405160ff909116815260200161019c565b6101f9600281565b6101cc610541565b6101b86102293660046119fc565b610550565b61024161023c3660046119fc565b610594565b005b610241610251366004611a25565b6107cd565b6101cc60075481565b60065461027f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019c565b6102af6301e1338081565b60405163ffffffff909116815260200161019c565b6101cc6102d23660046118fd565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101cc6103083660046118fd565b61097b565b61018f6109a8565b6101b86103233660046119fc565b6109b7565b6101b86103363660046119fc565b610a91565b6102416103493660046118fd565b610a9e565b61024161035c36600461198b565b610bad565b6101cc61036f36600461191e565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546103b690611b53565b80601f01602080910402602001604051908101604052809291908181526020018280546103e290611b53565b801561042f5780601f106104045761010080835404028352916020019161042f565b820191906000526020600020905b81548152906001019060200180831161041257829003601f168201915b5050505050905090565b6000610446338484610d6c565b50600192915050565b600061045c848484610f20565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610522576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61053685336105318685611b3c565b610d6c565b506001949350505050565b600061054b6111dd565b905090565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091610446918590610531908690611aae565b60065473ffffffffffffffffffffffffffffffffffffffff163314610615576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f556e617574686f72697a656420616363657373000000000000000000000000006044820152606401610519565b600754421015610681576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f6d696e74696e67206e6f7420616c6c6f776564207965740000000000000000006044820152606401610519565b73ffffffffffffffffffffffffffffffffffffffff8216610724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f63616e6e6f74207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610519565b6107326301e1338042611aae565b6007556064600261074260025490565b61074c9190611aff565b6107569190611ac6565b8111156107bf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f6578636565646564206d696e74206361700000000000000000000000000000006044820152606401610519565b6107c982826112d0565b5050565b60065473ffffffffffffffffffffffffffffffffffffffff16331461084e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f556e617574686f72697a656420616363657373000000000000000000000000006044820152606401610519565b6008544210156108ba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f6275726e696e67206e6f7420616c6c6f776564207965740000000000000000006044820152606401610519565b6108c86301e1338042611aae565b600855606460026108d860025490565b6108e29190611aff565b6108ec9190611ac6565b811115610955576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f6578636565646564206275726e206361700000000000000000000000000000006044820152606401610519565b6006546109789073ffffffffffffffffffffffffffffffffffffffff16826113f0565b50565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600560205260408120545b92915050565b6060600480546103b690611b53565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616845290915281205482811015610a78576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610519565b610a8733856105318685611b3c565b5060019392505050565b6000610446338484610f20565b60065473ffffffffffffffffffffffffffffffffffffffff163314610b1f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f556e617574686f726973656420616363657373000000000000000000000000006044820152606401610519565b60065460405173ffffffffffffffffffffffffffffffffffffffff8084169216907f3aaaebeb4821d6a7e5c77ece53cff0afcc56c82add2c978dbbb7f73e84cbcfd290600090a3600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b83421115610c17576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e650000006044820152606401610519565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9888888610c468c6115de565b60408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090506000610cae82611613565b90506000610cbe8287878761167c565b90508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610d55576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e617475726500006044820152606401610519565b610d608a8a8a610d6c565b50505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8316610e0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610519565b73ffffffffffffffffffffffffffffffffffffffff8216610eb1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610519565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610fc3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610519565b73ffffffffffffffffffffffffffffffffffffffff8216611066576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610519565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260409020548181101561111c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610519565b6111268282611b3c565b73ffffffffffffffffffffffffffffffffffffffff8086166000908152602081905260408082209390935590851681529081208054849290611169908490611aae565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516111cf91815260200190565b60405180910390a350505050565b60007f000000000000000000000000000000000000000000000000000000000000000146141561122c57507fea0b1918fb7cde63566ebbff920eaf6229d71aa6d13e1bfc957856fdecd3491390565b50604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6020808301919091527f3ef51012298d6e75e4916c650f7bd299b4ea9633030345e8849aa8e78414cce5828401527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b73ffffffffffffffffffffffffffffffffffffffff821661134d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610519565b806002600082825461135f9190611aae565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290611399908490611aae565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff8216611493576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610519565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015611549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610519565b6115538282611b3c565b73ffffffffffffffffffffffffffffffffffffffff84166000908152602081905260408120919091556002805484929061158e908490611b3c565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610f13565b73ffffffffffffffffffffffffffffffffffffffff811660009081526005602052604090208054600181018255905b50919050565b60006109a26116206111dd565b836040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a082111561172e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152608401610519565b8360ff16601b148061174357508360ff16601c145b6117cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152608401610519565b6040805160008082526020820180845288905260ff871692820192909252606081018590526080810184905260019060a0016020604051602081039080840390855afa158015611823573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166118cb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610519565b95945050505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146118f857600080fd5b919050565b60006020828403121561190e578081fd5b611917826118d4565b9392505050565b60008060408385031215611930578081fd5b611939836118d4565b9150611947602084016118d4565b90509250929050565b600080600060608486031215611964578081fd5b61196d846118d4565b925061197b602085016118d4565b9150604084013590509250925092565b600080600080600080600060e0888a0312156119a5578283fd5b6119ae886118d4565b96506119bc602089016118d4565b95506040880135945060608801359350608088013560ff811681146119df578384fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215611a0e578182fd5b611a17836118d4565b946020939093013593505050565b600060208284031215611a36578081fd5b5035919050565b6000602080835283518082850152825b81811015611a6957858101830151858201604001528201611a4d565b81811115611a7a5783604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b60008219821115611ac157611ac1611ba1565b500190565b600082611afa577f4e487b710000000000000000000000000000000000000000000000000000000081526012600452602481fd5b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611b3757611b37611ba1565b500290565b600082821015611b4e57611b4e611ba1565b500390565b600181811c90821680611b6757607f821691505b6020821081141561160d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220664dd6c9f819fda3e39bd24eab89a1ff07b014f55deb8ce6c2f1ed7a88f18c1a64736f6c63430008040033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000052b7d2dcc80cd2e40000000000000000000000000000000000000000000000000000000000000005a39a80000000000000000000000000c8b4b6785d5aa23f31037003abeba528f103cebd000000000000000000000000c8b4b6785d5aa23f31037003abeba528f103cebd0000000000000000000000000000000000000000000000000000000000000009506f6c797472616465000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000055452414445000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : name (string): Polytrade
Arg [1] : symbol (string): TRADE
Arg [2] : initialSupply (uint256): 100000000000000000000000000
Arg [3] : allowedAfter (uint256): 94608000
Arg [4] : _governance (address): 0xc8B4b6785d5aA23F31037003abEbA528F103ceBd
Arg [5] : account (address): 0xc8B4b6785d5aA23F31037003abEbA528F103ceBd
-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [2] : 00000000000000000000000000000000000000000052b7d2dcc80cd2e4000000
Arg [3] : 0000000000000000000000000000000000000000000000000000000005a39a80
Arg [4] : 000000000000000000000000c8b4b6785d5aa23f31037003abeba528f103cebd
Arg [5] : 000000000000000000000000c8b4b6785d5aa23f31037003abeba528f103cebd
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000009
Arg [7] : 506f6c7974726164650000000000000000000000000000000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [9] : 5452414445000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
31665:2788:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8759:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10926:169;;;;;;:::i;:::-;;:::i;:::-;;;3061:14:1;;3054:22;3036:41;;3024:2;3009:18;10926:169:0;2991:92:1;9879:108:0;9967:12;;9879:108;;;3234:25:1;;;3222:2;3207:18;9879:108:0;3189:76:1;11577:422:0;;;;;;:::i;:::-;;:::i;31891:31::-;;;;;;9721:93;9804:2;9721:93;;;14404:4:1;14392:17;;;14374:36;;14362:2;14347:18;9721:93:0;14329:87:1;32119:29:0;;32147:1;32119:29;;31131:115;;;:::i;12408:215::-;;;;;;:::i;:::-;;:::i;33335:523::-;;;;;;:::i;:::-;;:::i;:::-;;34022:426;;;;;;:::i;:::-;;:::i;31799:31::-;;;;;;31713:25;;;;;;;;;;;;2841:42:1;2829:55;;;2811:74;;2799:2;2784:18;31713:25:0;2766:125:1;31972:49:0;;32009:12;31972:49;;;;;14209:10:1;14197:23;;;14179:42;;14167:2;14152:18;31972:49:0;14134:93:1;10050:127:0;;;;;;:::i;:::-;10151:18;;10124:7;10151:18;;;;;;;;;;;;10050:127;30873:128;;;;;;:::i;:::-;;:::i;8978:104::-;;;:::i;13126:377::-;;;;;;:::i;:::-;;:::i;10390:175::-;;;;;;:::i;:::-;;:::i;32937:221::-;;;;;;:::i;:::-;;:::i;30036:771::-;;;;;;:::i;:::-;;:::i;10628:151::-;;;;;;:::i;:::-;10744:18;;;;10717:7;10744:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;10628:151;8759:100;8813:13;8846:5;8839:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8759:100;:::o;10926:169::-;11009:4;11026:39;6424:10;11049:7;11058:6;11026:8;:39::i;:::-;-1:-1:-1;11083:4:0;10926:169;;;;:::o;11577:422::-;11683:4;11700:36;11710:6;11718:9;11729:6;11700:9;:36::i;:::-;11776:19;;;11749:24;11776:19;;;:11;:19;;;;;;;;6424:10;11776:33;;;;;;;;11828:26;;;;11820:79;;;;;;;9869:2:1;11820:79:0;;;9851:21:1;9908:2;9888:18;;;9881:30;9947:34;9927:18;;;9920:62;10018:10;9998:18;;;9991:38;10046:19;;11820:79:0;;;;;;;;;11910:57;11919:6;6424:10;11941:25;11960:6;11941:16;:25;:::i;:::-;11910:8;:57::i;:::-;-1:-1:-1;11987:4:0;;11577:422;-1:-1:-1;;;;11577:422:0:o;31131:115::-;31191:7;31218:20;:18;:20::i;:::-;31211:27;;31131:115;:::o;12408:215::-;6424:10;12496:4;12545:25;;;:11;:25;;;;;;;;;:34;;;;;;;;;;12496:4;;12513:80;;12536:7;;12545:47;;12582:10;;12545:47;:::i;33335:523::-;33422:10;;;;33408;:24;33400:56;;;;;;;11026:2:1;33400:56:0;;;11008:21:1;11065:2;11045:18;;;11038:30;11104:21;11084:18;;;11077:49;11143:18;;33400:56:0;10998:169:1;33400:56:0;33494:16;;33475:15;:35;;33467:71;;;;;;;12185:2:1;33467:71:0;;;12167:21:1;12224:2;12204:18;;;12197:30;12263:25;12243:18;;;12236:53;12306:18;;33467:71:0;12157:173:1;33467:71:0;33557:22;;;33549:70;;;;;;;12537:2:1;33549:70:0;;;12519:21:1;12576:2;12556:18;;;12549:30;12615:34;12595:18;;;12588:62;12686:5;12666:18;;;12659:33;12709:19;;33549:70:0;12509:225:1;33549:70:0;33679:29;32009:12;33679:15;:29;:::i;:::-;33660:16;:48;33790:3;32147:1;33769:13;9967:12;;;9879:108;33769:13;:19;;;;:::i;:::-;33768:25;;;;:::i;:::-;33757:6;:37;;33749:67;;;;;;;10278:2:1;33749:67:0;;;10260:21:1;10317:2;10297:18;;;10290:30;10356:19;10336:18;;;10329:47;10393:18;;33749:67:0;10250:167:1;33749:67:0;33827:23;33833:8;33843:6;33827:5;:23::i;:::-;33335:523;;:::o;34022:426::-;34091:10;;;;34077;:24;34069:56;;;;;;;11026:2:1;34069:56:0;;;11008:21:1;11065:2;11045:18;;;11038:30;11104:21;11084:18;;;11077:49;11143:18;;34069:56:0;10998:169:1;34069:56:0;34163:16;;34144:15;:35;;34136:71;;;;;;;8352:2:1;34136:71:0;;;8334:21:1;8391:2;8371:18;;;8364:30;8430:25;8410:18;;;8403:53;8473:18;;34136:71:0;8324:173:1;34136:71:0;34267:29;32009:12;34267:15;:29;:::i;:::-;34248:16;:48;34378:3;32147:1;34357:13;9967:12;;;9879:108;34357:13;:19;;;;:::i;:::-;34356:25;;;;:::i;:::-;34345:6;:37;;34337:67;;;;;;;6031:2:1;34337:67:0;;;6013:21:1;6070:2;6050:18;;;6043:30;6109:19;6089:18;;;6082:47;6146:18;;34337:67:0;6003:167:1;34337:67:0;34421:10;;34415:25;;34421:10;;34433:6;34415:5;:25::i;:::-;34022:426;:::o;30873:128::-;30969:14;;;30942:7;30969:14;;;:7;:14;;;;;28247;30969:24;30962:31;30873:128;-1:-1:-1;;30873:128:0:o;8978:104::-;9034:13;9067:7;9060:14;;;;;:::i;13126:377::-;6424:10;13219:4;13263:25;;;:11;:25;;;;;;;;;:34;;;;;;;;;;13316:35;;;;13308:85;;;;;;;13289:2:1;13308:85:0;;;13271:21:1;13328:2;13308:18;;;13301:30;13367:34;13347:18;;;13340:62;13438:7;13418:18;;;13411:35;13463:19;;13308:85:0;13261:227:1;13308:85:0;13404:67;6424:10;13427:7;13436:34;13455:15;13436:16;:34;:::i;13404:67::-;-1:-1:-1;13491:4:0;;13126:377;-1:-1:-1;;;13126:377:0:o;10390:175::-;10476:4;10493:42;6424:10;10517:9;10528:6;10493:9;:42::i;32937:221::-;33023:10;;;;33009;:24;33001:56;;;;;;;12941:2:1;33001:56:0;;;12923:21:1;12980:2;12960:18;;;12953:30;13019:21;12999:18;;;12992:49;13058:18;;33001:56:0;12913:169:1;33001:56:0;33091:10;;33073:42;;;;;;;33091:10;;33073:42;;33091:10;;33073:42;33126:10;:24;;;;;;;;;;;;;;;32937:221::o;30036:771::-;30265:8;30246:15;:27;;30238:69;;;;;;;7587:2:1;30238:69:0;;;7569:21:1;7626:2;7606:18;;;7599:30;7665:31;7645:18;;;7638:59;7714:18;;30238:69:0;7559:179:1;30238:69:0;30320:18;30394:16;30429:5;30453:7;30479:5;30503:16;30513:5;30503:9;:16::i;:::-;30365:196;;;;;;3557:25:1;;;;3601:42;3679:15;;;3659:18;;;3652:43;3731:15;;;;3711:18;;;3704:43;3763:18;;;3756:34;3806:19;;;3799:35;3850:19;;;3843:35;;;3529:19;;30365:196:0;;;;;;;;;;;;30341:231;;;;;;30320:252;;30585:12;30600:28;30617:10;30600:16;:28::i;:::-;30585:43;;30641:14;30658:28;30672:4;30678:1;30681;30684;30658:13;:28::i;:::-;30641:45;;30715:5;30705:15;;:6;:15;;;30697:58;;;;;;;9510:2:1;30697:58:0;;;9492:21:1;9549:2;9529:18;;;9522:30;9588:32;9568:18;;;9561:60;9638:18;;30697:58:0;9482:180:1;30697:58:0;30768:31;30777:5;30784:7;30793:5;30768:8;:31::i;:::-;30036:771;;;;;;;;;;:::o;16482:346::-;16584:19;;;16576:68;;;;;;;11780:2:1;16576:68:0;;;11762:21:1;11819:2;11799:18;;;11792:30;11858:34;11838:18;;;11831:62;11929:6;11909:18;;;11902:34;11953:19;;16576:68:0;11752:226:1;16576:68:0;16663:21;;;16655:68;;;;;;;7184:2:1;16655:68:0;;;7166:21:1;7223:2;7203:18;;;7196:30;7262:34;7242:18;;;7235:62;7333:4;7313:18;;;7306:32;7355:19;;16655:68:0;7156:224:1;16655:68:0;16736:18;;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;16788:32;;3234:25:1;;;16788:32:0;;3207:18:1;16788:32:0;;;;;;;;16482:346;;;:::o;13993:604::-;14099:20;;;14091:70;;;;;;;11374:2:1;14091:70:0;;;11356:21:1;11413:2;11393:18;;;11386:30;11452:34;11432:18;;;11425:62;11523:7;11503:18;;;11496:35;11548:19;;14091:70:0;11346:227:1;14091:70:0;14180:23;;;14172:71;;;;;;;6377:2:1;14172:71:0;;;6359:21:1;6416:2;6396:18;;;6389:30;6455:34;6435:18;;;6428:62;6526:5;6506:18;;;6499:33;6549:19;;14172:71:0;6349:225:1;14172:71:0;14340:17;;;14316:21;14340:17;;;;;;;;;;;14376:23;;;;14368:74;;;;;;;7945:2:1;14368:74:0;;;7927:21:1;7984:2;7964:18;;;7957:30;8023:34;8003:18;;;7996:62;8094:8;8074:18;;;8067:36;8120:19;;14368:74:0;7917:228:1;14368:74:0;14473:22;14489:6;14473:13;:22;:::i;:::-;14453:17;;;;:9;:17;;;;;;;;;;;:42;;;;14506:20;;;;;;;;:30;;14530:6;;14453:9;14506:30;;14530:6;;14506:30;:::i;:::-;;;;;;;;14571:9;14554:35;;14563:6;14554:35;;;14582:6;14554:35;;;;3234:25:1;;3222:2;3207:18;;3189:76;14554:35:0;;;;;;;;13993:604;;;;:::o;25892:281::-;25945:7;25986:16;25969:13;:33;25965:201;;;-1:-1:-1;26026:24:0;;25892:281::o;25965:201::-;-1:-1:-1;26334:165:0;;;26112:10;26334:165;;;;4148:25:1;;;;26124:12:0;4189:18:1;;;4182:34;26138:15:0;4232:18:1;;;4225:34;26439:13:0;4275:18:1;;;4268:34;26479:4:0;4318:19:1;;;;4311:84;;;;26334:165:0;;;;;;;;;;4120:19:1;;;;26334:165:0;;;26310:200;;;;;;31131:115::o;14879:338::-;14963:21;;;14955:65;;;;;;;13695:2:1;14955:65:0;;;13677:21:1;13734:2;13714:18;;;13707:30;13773:33;13753:18;;;13746:61;13824:18;;14955:65:0;13667:181:1;14955:65:0;15111:6;15095:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;15128:18:0;;;:9;:18;;;;;;;;;;:28;;15150:6;;15128:9;:28;;15150:6;;15128:28;:::i;:::-;;;;-1:-1:-1;;15172:37:0;;3234:25:1;;;15172:37:0;;;;15189:1;;15172:37;;3222:2:1;3207:18;15172:37:0;;;;;;;14879:338;;:::o;15550:494::-;15634:21;;;15626:67;;;;;;;10624:2:1;15626:67:0;;;10606:21:1;10663:2;10643:18;;;10636:30;10702:34;10682:18;;;10675:62;10773:3;10753:18;;;10746:31;10794:19;;15626:67:0;10596:223:1;15626:67:0;15793:18;;;15768:22;15793:18;;;;;;;;;;;15830:24;;;;15822:71;;;;;;;6781:2:1;15822:71:0;;;6763:21:1;6820:2;6800:18;;;6793:30;6859:34;6839:18;;;6832:62;6930:4;6910:18;;;6903:32;6952:19;;15822:71:0;6753:224:1;15822:71:0;15925:23;15942:6;15925:14;:23;:::i;:::-;15904:18;;;:9;:18;;;;;;;;;;:44;;;;15959:12;:22;;15975:6;;15904:9;15959:22;;15975:6;;15959:22;:::i;:::-;;;;-1:-1:-1;;15999:37:0;;3234:25:1;;;16025:1:0;;15999:37;;;;;;3222:2:1;3207:18;15999:37:0;3189:76:1;31384:207:0;31505:14;;;31444:15;31505:14;;;:7;:14;;;;;28247;;28384:1;28366:19;;;;28247:14;31566:17;31384:207;;;;:::o;27160:167::-;27237:7;27264:55;27286:20;:18;:20::i;:::-;27308:10;22769:57;;2486:66:1;22769:57:0;;;2474:79:1;2569:11;;;2562:27;;;2605:12;;;2598:28;;;22732:7:0;;2642:12:1;;22769:57:0;;;;;;;;;;;;22759:68;;;;;;22752:75;;22639:196;;;;;20288:1432;20373:7;21298:66;21284:80;;;21276:127;;;;;;;8704:2:1;21276:127:0;;;8686:21:1;8743:2;8723:18;;;8716:30;8782:34;8762:18;;;8755:62;8853:4;8833:18;;;8826:32;8875:19;;21276:127:0;8676:224:1;21276:127:0;21422:1;:7;;21427:2;21422:7;:18;;;;21433:1;:7;;21438:2;21433:7;21422:18;21414:65;;;;;;;9107:2:1;21414:65:0;;;9089:21:1;9146:2;9126:18;;;9119:30;9185:34;9165:18;;;9158:62;9256:4;9236:18;;;9229:32;9278:19;;21414:65:0;9079:224:1;21414:65:0;21594:24;;;21577:14;21594:24;;;;;;;;;4633:25:1;;;4706:4;4694:17;;4674:18;;;4667:45;;;;4728:18;;;4721:34;;;4771:18;;;4764:34;;;21594:24:0;;4605:19:1;;21594:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;21594:24:0;;;;;;-1:-1:-1;;21637:20:0;;;21629:57;;;;;;;5678:2:1;21629:57:0;;;5660:21:1;5717:2;5697:18;;;5690:30;5756:26;5736:18;;;5729:54;5800:18;;21629:57:0;5650:174:1;21629:57:0;21706:6;20288:1432;-1:-1:-1;;;;;20288:1432:0:o;14:196:1:-;82:20;;142:42;131:54;;121:65;;111:2;;200:1;197;190:12;111:2;63:147;;;:::o;215:196::-;274:6;327:2;315:9;306:7;302:23;298:32;295:2;;;348:6;340;333:22;295:2;376:29;395:9;376:29;:::i;:::-;366:39;285:126;-1:-1:-1;;;285:126:1:o;416:270::-;484:6;492;545:2;533:9;524:7;520:23;516:32;513:2;;;566:6;558;551:22;513:2;594:29;613:9;594:29;:::i;:::-;584:39;;642:38;676:2;665:9;661:18;642:38;:::i;:::-;632:48;;503:183;;;;;:::o;691:338::-;768:6;776;784;837:2;825:9;816:7;812:23;808:32;805:2;;;858:6;850;843:22;805:2;886:29;905:9;886:29;:::i;:::-;876:39;;934:38;968:2;957:9;953:18;934:38;:::i;:::-;924:48;;1019:2;1008:9;1004:18;991:32;981:42;;795:234;;;;;:::o;1034:713::-;1145:6;1153;1161;1169;1177;1185;1193;1246:3;1234:9;1225:7;1221:23;1217:33;1214:2;;;1268:6;1260;1253:22;1214:2;1296:29;1315:9;1296:29;:::i;:::-;1286:39;;1344:38;1378:2;1367:9;1363:18;1344:38;:::i;:::-;1334:48;;1429:2;1418:9;1414:18;1401:32;1391:42;;1480:2;1469:9;1465:18;1452:32;1442:42;;1534:3;1523:9;1519:19;1506:33;1579:4;1572:5;1568:16;1561:5;1558:27;1548:2;;1604:6;1596;1589:22;1548:2;1204:543;;;;-1:-1:-1;1204:543:1;;;;1632:5;1684:3;1669:19;;1656:33;;-1:-1:-1;1736:3:1;1721:19;;;1708:33;;1204:543;-1:-1:-1;;1204:543:1:o;1752:264::-;1820:6;1828;1881:2;1869:9;1860:7;1856:23;1852:32;1849:2;;;1902:6;1894;1887:22;1849:2;1930:29;1949:9;1930:29;:::i;:::-;1920:39;2006:2;1991:18;;;;1978:32;;-1:-1:-1;;;1839:177:1:o;2021:190::-;2080:6;2133:2;2121:9;2112:7;2108:23;2104:32;2101:2;;;2154:6;2146;2139:22;2101:2;-1:-1:-1;2182:23:1;;2091:120;-1:-1:-1;2091:120:1:o;4809:662::-;4921:4;4950:2;4979;4968:9;4961:21;5011:6;5005:13;5054:6;5049:2;5038:9;5034:18;5027:34;5079:4;5092:140;5106:6;5103:1;5100:13;5092:140;;;5201:14;;;5197:23;;5191:30;5167:17;;;5186:2;5163:26;5156:66;5121:10;;5092:140;;;5250:6;5247:1;5244:13;5241:2;;;5320:4;5315:2;5306:6;5295:9;5291:22;5287:31;5280:45;5241:2;-1:-1:-1;5387:2:1;5375:15;5392:66;5371:88;5356:104;;;;5462:2;5352:113;;4930:541;-1:-1:-1;;;4930:541:1:o;14421:128::-;14461:3;14492:1;14488:6;14485:1;14482:13;14479:2;;;14498:18;;:::i;:::-;-1:-1:-1;14534:9:1;;14469:80::o;14554:274::-;14594:1;14620;14610:2;;14655:77;14652:1;14645:88;14756:4;14753:1;14746:15;14784:4;14781:1;14774:15;14610:2;-1:-1:-1;14813:9:1;;14600:228::o;14833:::-;14873:7;14999:1;14931:66;14927:74;14924:1;14921:81;14916:1;14909:9;14902:17;14898:105;14895:2;;;15006:18;;:::i;:::-;-1:-1:-1;15046:9:1;;14885:176::o;15066:125::-;15106:4;15134:1;15131;15128:8;15125:2;;;15139:18;;:::i;:::-;-1:-1:-1;15176:9:1;;15115:76::o;15196:437::-;15275:1;15271:12;;;;15318;;;15339:2;;15393:4;15385:6;15381:17;15371:27;;15339:2;15446;15438:6;15435:14;15415:18;15412:38;15409:2;;;15483:77;15480:1;15473:88;15584:4;15581:1;15574:15;15612:4;15609:1;15602:15;15638:184;15690:77;15687:1;15680:88;15787:4;15784:1;15777:15;15811:4;15808:1;15801:15
Swarm Source
ipfs://664dd6c9f819fda3e39bd24eab89a1ff07b014f55deb8ce6c2f1ed7a88f18c1a
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.