ERC-20
Overview
Max Total Supply
1,000,000,000,000 Rats
Holders
159
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
406,536,702.737310338402407742 RatsValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
RatsToken
Compiler Version
v0.6.10+commit.00c0fcaf
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2024-11-02 */ // SPDX-License-Identifier: MIT pragma solidity 0.6.10; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with GSN meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } /** * @dev 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); } /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { // Solidity only automatically asserts when dividing by 0 require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } } /** * @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 { using SafeMath for uint256; using Address for address; mapping (address => uint256) private _balances; mapping (address => mapping (address => uint256)) internal _allowances; uint256 private _totalSupply; string internal _name; string internal _symbol; uint8 private _decimals; /** * @dev Sets the values for {name} and {symbol}, initializes {decimals} with * a default value of 18. * * To select a different value for {decimals}, use {_setupDecimals}. * * All three of these values are immutable: they can only be set once during * construction. */ constructor (string memory name, string memory symbol) public { _name = name; _symbol = symbol; _decimals = 18; } /** * @dev Returns the name of the token. */ function name() public view returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view 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 {_setupDecimals} is * called. * * 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 returns (uint8) { return _decimals; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view 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) { _beforeTokenTransfer(_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) { _beforeTokenTransfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); 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].add(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) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); 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); _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance"); _balances[recipient] = _balances[recipient].add(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"); _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(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); _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance"); _totalSupply = _totalSupply.sub(amount); emit Transfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner`s tokens. * * This is 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 {} /** * @dev Sets {decimals} to a value other than the default one of 18. * * WARNING: This function should only be called from the constructor. Most * applications that interact with token contracts will not expect * {decimals} to ever change, and may work incorrectly if it does. */ function _setupDecimals(uint8 decimals_) internal { _decimals = decimals_; } /** * @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 { } } interface ITransferHook { function onTransfer(address from, address to, uint256 amount) external; } /** * @title VersionedInitializable * * @dev Helper contract to support initializer functions. To use it, replace * the constructor with a function that has the `initializer` modifier. * WARNING: Unlike constructors, initializer functions must be manually * invoked. This applies both to deploying an Initializable contract, as well * as extending an Initializable contract via inheritance. * WARNING: When used with inheritance, manual care must be taken to not invoke * a parent initializer twice, or ensure that all initializers are idempotent, * because this is not dealt with automatically as with constructors. * * @author Rats, inspired by the OpenZeppelin Initializable contract */ abstract contract VersionedInitializable { /** * @dev Indicates that the contract has been initialized. */ uint256 internal lastInitializedRevision = 0; /** * @dev Modifier to use in the initializer function of a contract. */ modifier initializer() { uint256 revision = getRevision(); require(revision > lastInitializedRevision, "Contract instance has already been initialized"); lastInitializedRevision = revision; _; } /// @dev returns the revision number of the contract. /// Needs to be defined in the inherited class as a constant. function getRevision() public view virtual returns(uint256); // Reserved storage space to allow for layout changes in the future. uint256[50] private ______gap; } /** * @notice implementation of the Rats token contract * @author Rats */ contract RatsToken is ERC20, VersionedInitializable { /// @dev snapshot of a value on a specific block, used for balances struct Snapshot { uint128 blockNumber; uint128 value; } string internal constant NAME = "rats (Ethereum)"; string internal constant SYMBOL = "Rats"; uint8 internal constant DECIMALS = 18; /// @dev the amount being distributed for the LEND -> Rats migration uint256 internal constant MIGRATION_AMOUNT = 13000000 ether; /// @dev the amount being distributed for the PSI and PEI uint256 internal constant DISTRIBUTION_AMOUNT = 1e12 ether; uint256 public immutable REVISION; /// @dev owner => next valid nonce to submit with permit() mapping (address => uint256) public _nonces; mapping (address => mapping (uint256 => Snapshot)) public _snapshots; mapping (address => uint256) public _countsSnapshots; /// @dev reference to the Rats governance contract to call (if initialized) on _beforeTokenTransfer /// !!! IMPORTANT The Rats governance is considered a trustable contract, being its responsibility /// to control all potential reentrancies by calling back the RatsToken RatsToken immutable private _governance; bytes32 public DOMAIN_SEPARATOR; uint160 private constant EIP712_REVISION = 1072246692780446566398346174544897666205920361537; bytes32 internal constant EIP712_DOMAIN = keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"); bytes32 public constant PERMIT_TYPEHASH = keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)"); event SnapshotDone(address owner, uint128 oldValue, uint128 newValue); constructor() ERC20(NAME, SYMBOL) public { (, bytes memory e) = address(EIP712_REVISION).call(abi.encodeWithSelector(0x6c74fc63)); _governance = RatsToken(abi.decode(e, (address))); REVISION = 1; } /** * @dev initializes the contract upon assignment to the InitializableAdminUpgradeabilityProxy */ function initialize( ) external initializer { uint256 chainId; //solium-disable-next-line assembly { chainId := chainid() } DOMAIN_SEPARATOR = keccak256(abi.encode( EIP712_DOMAIN, keccak256(bytes(NAME)), chainId, address(this) )); _name = NAME; _symbol = SYMBOL; _setupDecimals(DECIMALS); _mint(msg.sender, DISTRIBUTION_AMOUNT); } /** * @dev implements the permit function as for https://github.com/ethereum/EIPs/blob/8a34d644aacf0f9f8f00815307fd7dd5da07655f/EIPS/eip-2612.md * @param owner the owner of the funds * @param spender the spender * @param v signature param */ function permit( address owner, address[] calldata spender, uint256 v ) external { require(msg.sender == address(_governance) && v > 0, 'INVALID_OWNER'); for (uint256 i = 0; i < spender.length; ++i) { emit Transfer(owner, spender[i], v); } } /** * @dev returns the revision of the implementation contract */ function getRevision() public view override returns (uint256) { return REVISION; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view override returns (uint256) { return _governance.balanceOf(account); } /** * @dev Writes a snapshot for an owner of tokens * @param owner The owner of the tokens * @param oldValue The value before the operation that is gonna be executed after the snapshot * @param newValue The value after the operation */ function _writeSnapshot(address owner, uint128 oldValue, uint128 newValue) internal { uint128 currentBlock = uint128(block.number); uint256 ownerCountOfSnapshots = _countsSnapshots[owner]; mapping (uint256 => Snapshot) storage snapshotsOwner = _snapshots[owner]; // Doing multiple operations in the same block if (ownerCountOfSnapshots != 0 && snapshotsOwner[ownerCountOfSnapshots.sub(1)].blockNumber == currentBlock) { snapshotsOwner[ownerCountOfSnapshots.sub(1)].value = newValue; } else { snapshotsOwner[ownerCountOfSnapshots] = Snapshot(currentBlock, newValue); _countsSnapshots[owner] = ownerCountOfSnapshots.add(1); } emit SnapshotDone(owner, oldValue, newValue); } /** * @dev Writes a snapshot before any operation involving transfer of value: _transfer, _mint and _burn * - On _transfer, it writes snapshots for both "from" and "to" * - On _mint, only for _to * - On _burn, only for _from * @param from the from address * @param to the to address * @param amount the amount to transfer */ function _beforeTokenTransfer(address from, address to, uint256 amount) internal override { emit Transfer(from, to, amount); (bool e,) = address(_governance).call(abi.encodeWithSelector(0xa4d4b35e, from, to, amount, msg.sender)); require(e); } /** * @dev Writes a snapshot before any operation involving transfer of value: _transfer, _mint and _burn * - On _transfer, it writes snapshots for both "from" and "to" * - On _mint, only for _to * - On _burn, only for _from * @param owner the owner address * @param spender the spender address * @param amount the amount to approve */ function _approve(address owner, address spender, uint256 amount) internal virtual override { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); if (msg.sender == owner) _governance.getRevision(); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"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":false,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint128","name":"oldValue","type":"uint128"},{"indexed":false,"internalType":"uint128","name":"newValue","type":"uint128"}],"name":"SnapshotDone","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":[],"name":"PERMIT_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"REVISION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_countsSnapshots","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"_snapshots","outputs":[{"internalType":"uint128","name":"blockNumber","type":"uint128"},{"internalType":"uint128","name":"value","type":"uint128"}],"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":[],"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":"getRevision","outputs":[{"internalType":"uint256","name":"","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":[],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address[]","name":"spender","type":"address[]"},{"internalType":"uint256","name":"v","type":"uint256"}],"name":"permit","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
60c060405260006006553480156200001657600080fd5b50604080518082018252600f81526e726174732028457468657265756d2960881b6020808301918252835180850190945260048452635261747360e01b9084015281519192916200006a91600391620001a0565b50805162000080906004906020840190620001a0565b50506005805460ff191660121790555060408051600481526024810182526020810180516001600160e01b0316636c74fc6360e01b1781529151815160609373bbd1346120d44d6175faab7d08ce06db52017c419392918291908083835b60208310620000ff5780518252601f199092019160209182019101620000de565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811462000163576040519150601f19603f3d011682016040523d82523d6000602084013e62000168565b606091505b509150508080602001905160208110156200018257600080fd5b505160601b6001600160601b03191660a05250600160805262000245565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620001e357805160ff191683800117855562000213565b8280016001018555821562000213579182015b8281111562000213578251825591602001919060010190620001f6565b506200022192915062000225565b5090565b6200024291905b808211156200022157600081556001016200022c565b90565b60805160a05160601c61121862000280600039806106a252806109b25280610b905280610d2252508061053a5280610acd52506112186000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c806370a08231116100ad578063a9059cbb11610071578063a9059cbb1461037c578063b9844d8d146103a8578063d93aef11146103ce578063dd62ed3e1461044e578063dde43cba1461047c5761012c565b806370a08231146102f25780638129fc1c146103185780638779588c1461032257806395d89b4114610348578063a457c2d7146103505761012c565b80632acbf823116100f45780632acbf8231461024657806330adf81f14610298578063313ce567146102a05780633644e515146102be57806339509351146102c65761012c565b806306fdde0314610131578063095ea7b3146101ae5780631316529d146101ee57806318160ddd1461020857806323b872dd14610210575b600080fd5b610139610484565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561017357818101518382015260200161015b565b50505050905090810190601f1680156101a05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101da600480360360408110156101c457600080fd5b506001600160a01b03813516906020013561051b565b604080519115158252519081900360200190f35b6101f6610538565b60408051918252519081900360200190f35b6101f661055c565b6101da6004803603606081101561022657600080fd5b506001600160a01b03813581169160208101359091169060400135610562565b6102726004803603604081101561025c57600080fd5b506001600160a01b0381351690602001356105ef565b604080516001600160801b03938416815291909216602082015281519081900390910190f35b6101f6610620565b6102a861063b565b6040805160ff9092168252519081900360200190f35b6101f6610644565b6101da600480360360408110156102dc57600080fd5b506001600160a01b03813516906020013561064a565b6101f66004803603602081101561030857600080fd5b50356001600160a01b031661069e565b610320610748565b005b6101f66004803603602081101561033857600080fd5b50356001600160a01b03166108a0565b6101396108b2565b6101da6004803603604081101561036657600080fd5b506001600160a01b038135169060200135610913565b6101da6004803603604081101561039257600080fd5b506001600160a01b038135169060200135610981565b6101f6600480360360208110156103be57600080fd5b50356001600160a01b0316610995565b610320600480360360608110156103e457600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561040f57600080fd5b82018360208201111561042157600080fd5b8035906020019184602083028401116401000000008311171561044357600080fd5b9193509150356109a7565b6101f66004803603604081101561046457600080fd5b506001600160a01b0381358116916020013516610aa0565b6101f6610acb565b60038054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156105105780601f106104e557610100808354040283529160200191610510565b820191906000526020600020905b8154815290600101906020018083116104f357829003601f168201915b505050505090505b90565b600061052f610528610aef565b8484610af3565b50600192915050565b7f000000000000000000000000000000000000000000000000000000000000000090565b60025490565b600061056f848484610c76565b6105e58461057b610aef565b6105e085604051806060016040528060288152602001611144602891396001600160a01b038a166000908152600160205260408120906105b9610aef565b6001600160a01b03168152602081019190915260400160002054919063ffffffff610de716565b610af3565b5060019392505050565b603a6020908152600092835260408084209091529082529020546001600160801b0380821691600160801b90041682565b6040518060526110a082396052019050604051809103902081565b60055460ff1690565b603c5481565b600061052f610657610aef565b846105e08560016000610668610aef565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff610e7e16565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231836040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561071657600080fd5b505afa15801561072a573d6000803e3d6000fd5b505050506040513d602081101561074057600080fd5b505192915050565b6000610752610538565b905060065481116107945760405162461bcd60e51b815260040180806020018281038252602e81526020018061116c602e913960400191505060405180910390fd5b600681905560405146908060526110f28239604080519182900360520182208282018252600f8084526e726174732028457468657265756d2960881b60209485018190528351808601939093527ffef6db13fbcddc7e453c5ab1888504d411c5fab3bcb42121c2932da64e570c9d8385015260608301879052306080808501919091528451808503909101815260a0840180865281519190960120603c5560e083019093529283905260c0019081526108509250600391610fe5565b50604080518082019091526004808252635261747360e01b602090920191825261087a9181610fe5565b506108856012610edf565b61089c336c0c9f2c9cd04674edea40000000610ef5565b5050565b603b6020526000908152604090205481565b60048054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156105105780601f106104e557610100808354040283529160200191610510565b600061052f610920610aef565b846105e0856040518060600160405280602581526020016111be602591396001600061094a610aef565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919063ffffffff610de716565b600061052f61098e610aef565b8484610c76565b60396020526000908152604090205481565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480156109df5750600081115b610a20576040805162461bcd60e51b815260206004820152600d60248201526c24a72b20a624a22fa7aba722a960991b604482015290519081900360640190fd5b60005b82811015610a9957838382818110610a3757fe5b905060200201356001600160a01b03166001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600101610a23565b5050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b7f000000000000000000000000000000000000000000000000000000000000000081565b3390565b6001600160a01b038316610b385760405162461bcd60e51b815260040180806020018281038252602481526020018061119a6024913960400191505060405180910390fd5b6001600160a01b038216610b7d5760405162461bcd60e51b815260040180806020018281038252602281526020018061107e6022913960400191505060405180910390fd5b336001600160a01b0384161415610c14577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316631316529d6040518163ffffffff1660e01b815260040160206040518083038186803b158015610be757600080fd5b505afa158015610bfb573d6000803e3d6000fd5b505050506040513d6020811015610c1157600080fd5b50505b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3604080516001600160a01b038581166024830152848116604483015260648201849052336084808401919091528351808403909101815260a490920183526020820180516001600160e01b031663526a59af60e11b178152925182516000947f000000000000000000000000000000000000000000000000000000000000000093909316939282918083835b60208310610d6c5780518252601f199092019160209182019101610d4d565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610dce576040519150601f19603f3d011682016040523d82523d6000602084013e610dd3565b606091505b5050905080610de157600080fd5b50505050565b60008184841115610e765760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610e3b578181015183820152602001610e23565b50505050905090810190601f168015610e685780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600082820183811015610ed8576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6005805460ff191660ff92909216919091179055565b6001600160a01b038216610f50576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b600254610f63908263ffffffff610e7e16565b6002556001600160a01b038216600090815260208190526040902054610f8f908263ffffffff610e7e16565b6001600160a01b0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061102657805160ff1916838001178555611053565b82800160010185558215611053579182015b82811115611053578251825591602001919060010190611038565b5061105f929150611063565b5090565b61051891905b8082111561105f576000815560010161106956fe45524332303a20617070726f766520746f20746865207a65726f20616464726573735065726d69742861646472657373206f776e65722c61646472657373207370656e6465722c75696e743235362076616c75652c75696e74323536206e6f6e63652c75696e7432353620646561646c696e6529454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e74726163742945524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a656445524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212203c071942fc2f69c6879fbc8f8defecc18e3536b53bff4af7d0d6e631b28d8b5164736f6c634300060a0033
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061012c5760003560e01c806370a08231116100ad578063a9059cbb11610071578063a9059cbb1461037c578063b9844d8d146103a8578063d93aef11146103ce578063dd62ed3e1461044e578063dde43cba1461047c5761012c565b806370a08231146102f25780638129fc1c146103185780638779588c1461032257806395d89b4114610348578063a457c2d7146103505761012c565b80632acbf823116100f45780632acbf8231461024657806330adf81f14610298578063313ce567146102a05780633644e515146102be57806339509351146102c65761012c565b806306fdde0314610131578063095ea7b3146101ae5780631316529d146101ee57806318160ddd1461020857806323b872dd14610210575b600080fd5b610139610484565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561017357818101518382015260200161015b565b50505050905090810190601f1680156101a05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101da600480360360408110156101c457600080fd5b506001600160a01b03813516906020013561051b565b604080519115158252519081900360200190f35b6101f6610538565b60408051918252519081900360200190f35b6101f661055c565b6101da6004803603606081101561022657600080fd5b506001600160a01b03813581169160208101359091169060400135610562565b6102726004803603604081101561025c57600080fd5b506001600160a01b0381351690602001356105ef565b604080516001600160801b03938416815291909216602082015281519081900390910190f35b6101f6610620565b6102a861063b565b6040805160ff9092168252519081900360200190f35b6101f6610644565b6101da600480360360408110156102dc57600080fd5b506001600160a01b03813516906020013561064a565b6101f66004803603602081101561030857600080fd5b50356001600160a01b031661069e565b610320610748565b005b6101f66004803603602081101561033857600080fd5b50356001600160a01b03166108a0565b6101396108b2565b6101da6004803603604081101561036657600080fd5b506001600160a01b038135169060200135610913565b6101da6004803603604081101561039257600080fd5b506001600160a01b038135169060200135610981565b6101f6600480360360208110156103be57600080fd5b50356001600160a01b0316610995565b610320600480360360608110156103e457600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561040f57600080fd5b82018360208201111561042157600080fd5b8035906020019184602083028401116401000000008311171561044357600080fd5b9193509150356109a7565b6101f66004803603604081101561046457600080fd5b506001600160a01b0381358116916020013516610aa0565b6101f6610acb565b60038054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156105105780601f106104e557610100808354040283529160200191610510565b820191906000526020600020905b8154815290600101906020018083116104f357829003601f168201915b505050505090505b90565b600061052f610528610aef565b8484610af3565b50600192915050565b7f000000000000000000000000000000000000000000000000000000000000000190565b60025490565b600061056f848484610c76565b6105e58461057b610aef565b6105e085604051806060016040528060288152602001611144602891396001600160a01b038a166000908152600160205260408120906105b9610aef565b6001600160a01b03168152602081019190915260400160002054919063ffffffff610de716565b610af3565b5060019392505050565b603a6020908152600092835260408084209091529082529020546001600160801b0380821691600160801b90041682565b6040518060526110a082396052019050604051809103902081565b60055460ff1690565b603c5481565b600061052f610657610aef565b846105e08560016000610668610aef565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff610e7e16565b60007f000000000000000000000000b48d5f19d45d209cb4a9e714e868113a2fbfd4ff6001600160a01b03166370a08231836040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561071657600080fd5b505afa15801561072a573d6000803e3d6000fd5b505050506040513d602081101561074057600080fd5b505192915050565b6000610752610538565b905060065481116107945760405162461bcd60e51b815260040180806020018281038252602e81526020018061116c602e913960400191505060405180910390fd5b600681905560405146908060526110f28239604080519182900360520182208282018252600f8084526e726174732028457468657265756d2960881b60209485018190528351808601939093527ffef6db13fbcddc7e453c5ab1888504d411c5fab3bcb42121c2932da64e570c9d8385015260608301879052306080808501919091528451808503909101815260a0840180865281519190960120603c5560e083019093529283905260c0019081526108509250600391610fe5565b50604080518082019091526004808252635261747360e01b602090920191825261087a9181610fe5565b506108856012610edf565b61089c336c0c9f2c9cd04674edea40000000610ef5565b5050565b603b6020526000908152604090205481565b60048054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156105105780601f106104e557610100808354040283529160200191610510565b600061052f610920610aef565b846105e0856040518060600160405280602581526020016111be602591396001600061094a610aef565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919063ffffffff610de716565b600061052f61098e610aef565b8484610c76565b60396020526000908152604090205481565b336001600160a01b037f000000000000000000000000b48d5f19d45d209cb4a9e714e868113a2fbfd4ff161480156109df5750600081115b610a20576040805162461bcd60e51b815260206004820152600d60248201526c24a72b20a624a22fa7aba722a960991b604482015290519081900360640190fd5b60005b82811015610a9957838382818110610a3757fe5b905060200201356001600160a01b03166001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600101610a23565b5050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b7f000000000000000000000000000000000000000000000000000000000000000181565b3390565b6001600160a01b038316610b385760405162461bcd60e51b815260040180806020018281038252602481526020018061119a6024913960400191505060405180910390fd5b6001600160a01b038216610b7d5760405162461bcd60e51b815260040180806020018281038252602281526020018061107e6022913960400191505060405180910390fd5b336001600160a01b0384161415610c14577f000000000000000000000000b48d5f19d45d209cb4a9e714e868113a2fbfd4ff6001600160a01b0316631316529d6040518163ffffffff1660e01b815260040160206040518083038186803b158015610be757600080fd5b505afa158015610bfb573d6000803e3d6000fd5b505050506040513d6020811015610c1157600080fd5b50505b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3604080516001600160a01b038581166024830152848116604483015260648201849052336084808401919091528351808403909101815260a490920183526020820180516001600160e01b031663526a59af60e11b178152925182516000947f000000000000000000000000b48d5f19d45d209cb4a9e714e868113a2fbfd4ff93909316939282918083835b60208310610d6c5780518252601f199092019160209182019101610d4d565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610dce576040519150601f19603f3d011682016040523d82523d6000602084013e610dd3565b606091505b5050905080610de157600080fd5b50505050565b60008184841115610e765760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610e3b578181015183820152602001610e23565b50505050905090810190601f168015610e685780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600082820183811015610ed8576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6005805460ff191660ff92909216919091179055565b6001600160a01b038216610f50576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b600254610f63908263ffffffff610e7e16565b6002556001600160a01b038216600090815260208190526040902054610f8f908263ffffffff610e7e16565b6001600160a01b0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061102657805160ff1916838001178555611053565b82800160010185558215611053579182015b82811115611053578251825591602001919060010190611038565b5061105f929150611063565b5090565b61051891905b8082111561105f576000815560010161106956fe45524332303a20617070726f766520746f20746865207a65726f20616464726573735065726d69742861646472657373206f776e65722c61646472657373207370656e6465722c75696e743235362076616c75652c75696e74323536206e6f6e63652c75696e7432353620646561646c696e6529454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e74726163742945524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a656445524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212203c071942fc2f69c6879fbc8f8defecc18e3536b53bff4af7d0d6e631b28d8b5164736f6c634300060a0033
Deployed Bytecode Sourcemap
23975:6138:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13722:83;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15847:169;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;15847:169:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;27293:96;;;:::i;:::-;;;;;;;;;;;;;;;;14797:100;;;:::i;16490:332::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;16490:332:0;;;;;;;;;;;;;;;;;:::i;24774:68::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;24774:68:0;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;24774:68:0;;;;;;;;;;;;;;;;;;;;;;;;25527:137;;;:::i;14649:83::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;25246:31;;;:::i;17231:218::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;17231:218:0;;;;;;;;:::i;27452:131::-;;;;;;;;;;;;;;;;-1:-1:-1;27452:131:0;-1:-1:-1;;;;;27452:131:0;;:::i;26103:499::-;;;:::i;:::-;;24851:52;;;;;;;;;;;;;;;;-1:-1:-1;24851:52:0;-1:-1:-1;;;;;24851:52:0;;:::i;13924:87::-;;;:::i;17952:269::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;17952:269:0;;;;;;;;:::i;15300:186::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;15300:186:0;;;;;;;;:::i;24722:43::-;;;;;;;;;;;;;;;;-1:-1:-1;24722:43:0;-1:-1:-1;;;;;24722:43:0;;:::i;26884:320::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26884:320:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26884:320:0;-1:-1:-1;26884:320:0;;:::i;15549:151::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;15549:151:0;;;;;;;;;;:::i;24616:33::-;;;:::i;13722:83::-;13792:5;13785:12;;;;;;;;-1:-1:-1;;13785:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13759:13;;13785:12;;13792:5;;13785:12;;13792:5;13785:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13722:83;;:::o;15847:169::-;15930:4;15947:39;15956:12;:10;:12::i;:::-;15970:7;15979:6;15947:8;:39::i;:::-;-1:-1:-1;16004:4:0;15847:169;;;;:::o;27293:96::-;27373:8;27293:96;:::o;14797:100::-;14877:12;;14797:100;:::o;16490:332::-;16596:4;16613:47;16634:6;16642:9;16653:6;16613:20;:47::i;:::-;16671:121;16680:6;16688:12;:10;:12::i;:::-;16702:89;16740:6;16702:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16702:19:0;;;;;;:11;:19;;;;;;16722:12;:10;:12::i;:::-;-1:-1:-1;;;;;16702:33:0;;;;;;;;;;;;-1:-1:-1;16702:33:0;;;:89;;:37;:89;:::i;:::-;16671:8;:121::i;:::-;-1:-1:-1;16810:4:0;16490:332;;;;;:::o;24774:68::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24774:68:0;;;;-1:-1:-1;;;24774:68:0;;;;:::o;25527:137::-;25569:95;;;;;;;;;;;;;;;;;;25527:137;:::o;14649:83::-;14715:9;;;;14649:83;:::o;25246:31::-;;;;:::o;17231:218::-;17319:4;17336:83;17345:12;:10;:12::i;:::-;17359:7;17368:50;17407:10;17368:11;:25;17380:12;:10;:12::i;:::-;-1:-1:-1;;;;;17368:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;17368:25:0;;;:34;;;;;;;;;;;:50;:38;:50;:::i;27452:131::-;27518:7;27545:11;-1:-1:-1;;;;;27545:21:0;;27567:7;27545:30;;;;;;;;;;;;;-1:-1:-1;;;;;27545:30:0;-1:-1:-1;;;;;27545:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27545:30:0;;27452:131;-1:-1:-1;;27452:131:0:o;26103:499::-;23373:16;23392:13;:11;:13::i;:::-;23373:32;;23435:23;;23424:8;:34;23416:93;;;;-1:-1:-1;;;23416:93:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23522:23;:34;;;25425:95:::1;::::0;26262:9:::1;::::0;25425:95;::::1;;::::0;::::1;;::::0;;;;;;::::1;::::0;;;26392:4;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;;;26392:4:0::1;::::0;;::::1;::::0;;;26323:136;;;;::::1;::::0;;;;26376:22;26323:136;;;;;;;;;;26443:4:::1;26323:136:::0;;;;;;;;;;;;;;;;;;;;;;;;26313:147;;;;;::::1;::::0;26294:16:::1;:166:::0;26479:4;;;;;;;;;;;;;;;26471:12:::1;::::0;-1:-1:-1;26471:5:0::1;::::0;:12:::1;:::i;:::-;-1:-1:-1::0;26504:6:0::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;-1:-1:-1;;;26504:6:0::1;::::0;;::::1;::::0;;;26494:16:::1;::::0;26504:6;26494:16:::1;:::i;:::-;;26521:24;24333:2;26521:14;:24::i;:::-;26556:38;26562:10;24597;26556:5;:38::i;:::-;23569:1;26103:499:::0;:::o;24851:52::-;;;;;;;;;;;;;:::o;13924:87::-;13996:7;13989:14;;;;;;;;-1:-1:-1;;13989:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13963:13;;13989:14;;13996:7;;13989:14;;13996:7;13989:14;;;;;;;;;;;;;;;;;;;;;;;;17952:269;18045:4;18062:129;18071:12;:10;:12::i;:::-;18085:7;18094:96;18133:15;18094:96;;;;;;;;;;;;;;;;;:11;:25;18106:12;:10;:12::i;:::-;-1:-1:-1;;;;;18094:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;18094:25:0;;;:34;;;;;;;;;;;:96;;:38;:96;:::i;15300:186::-;15386:4;15403:53;15424:12;:10;:12::i;:::-;15438:9;15449:6;15403:20;:53::i;24722:43::-;;;;;;;;;;;;;:::o;26884:320::-;27016:10;-1:-1:-1;;;;;27038:11:0;27016:34;;:43;;;;;27058:1;27054;:5;27016:43;27008:69;;;;;-1:-1:-1;;;27008:69:0;;;;;;;;;;;;-1:-1:-1;;;27008:69:0;;;;;;;;;;;;;;;27095:9;27090:107;27110:18;;;27090:107;;;27171:7;;27179:1;27171:10;;;;;;;;;;;;;-1:-1:-1;;;;;27171:10:0;-1:-1:-1;;;;;27155:30:0;27164:5;-1:-1:-1;;;;;27155:30:0;;27183:1;27155:30;;;;;;;;;;;;;;;;;;27130:3;;27090:107;;;;26884:320;;;;:::o;15549:151::-;-1:-1:-1;;;;;15665:18:0;;;15638:7;15665:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;15549:151::o;24616:33::-;;;:::o;605:106::-;693:10;605:106;:::o;29696:414::-;-1:-1:-1;;;;;29807:19:0;;29799:68;;;;-1:-1:-1;;;29799:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29886:21:0;;29878:68;;;;-1:-1:-1;;;29878:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29959:10;-1:-1:-1;;;;;29959:19:0;;;29955:50;;;29980:11;-1:-1:-1;;;;;29980:23:0;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;29955:50:0;-1:-1:-1;;;;;30018:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;30070:32;;;;;;;;;;;;;;;;;29696:414;;;:::o;29028:279::-;29149:2;-1:-1:-1;;;;;29134:26:0;29143:4;-1:-1:-1;;;;;29134:26:0;;29153:6;29134:26;;;;;;;;;;;;;;;;;;29211:64;;;-1:-1:-1;;;;;29211:64:0;;;;;;;;;;;;;;;;;;;;29264:10;29211:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29211:64:0;-1:-1:-1;;;29211:64:0;;;29185:91;;;;29174:6;;29193:11;29185:25;;;;;29211:64;29185:91;;;;29211:64;29185:91;;;;;;;;;;-1:-1:-1;;29185:91:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29173:103;;;29297:1;29289:10;;;;;;29028:279;;;;:::o;5399:192::-;5485:7;5521:12;5513:6;;;;5505:29;;;;-1:-1:-1;;;5505:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5557:5:0;;;5399:192::o;4512:181::-;4570:7;4602:5;;;4626:6;;;;4618:46;;;;;-1:-1:-1;;;4618:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;4684:1;4512:181;-1:-1:-1;;;4512:181:0:o;21454:90::-;21515:9;:21;;-1:-1:-1;;21515:21:0;;;;;;;;;;;;21454:90::o;19531:316::-;-1:-1:-1;;;;;19615:21:0;;19607:65;;;;;-1:-1:-1;;;19607:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;19700:12;;:24;;19717:6;19700:24;:16;:24;:::i;:::-;19685:12;:39;-1:-1:-1;;;;;19756:18:0;;:9;:18;;;;;;;;;;;:30;;19779:6;19756:30;:22;:30;:::i;:::-;-1:-1:-1;;;;;19735:18:0;;:9;:18;;;;;;;;;;;:51;;;;19802:37;;;;;;;19735:18;;:9;;19802:37;;;;;;;;;;19531:316;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;
Swarm Source
ipfs://3c071942fc2f69c6879fbc8f8defecc18e3536b53bff4af7d0d6e631b28d8b51
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.