Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Decentralized Web
Overview
Max Total Supply
21,825,118.005122294 OHM
Holders
8,131 (0.00%)
Market
Price
$18.76 @ 0.005106 ETH (+6.22%)
Onchain Market Cap
$409,439,213.78
Circulating Supply Market Cap
$306,645,449.00
Other Info
Token Contract (WITH 9 Decimals)
Balance
0.007338908 OHMValue
$0.14 ( ~3.81018996760454E-05 Eth) [0.0000%]Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
OlympusERC20Token
Compiler Version
v0.7.5+commit.eb77ed08
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-12-11 */ // SPDX-License-Identifier: AGPL-3.0-or-later // File: interfaces/IOlympusAuthority.sol pragma solidity =0.7.5; interface IOlympusAuthority { /* ========== EVENTS ========== */ event GovernorPushed(address indexed from, address indexed to, bool _effectiveImmediately); event GuardianPushed(address indexed from, address indexed to, bool _effectiveImmediately); event PolicyPushed(address indexed from, address indexed to, bool _effectiveImmediately); event VaultPushed(address indexed from, address indexed to, bool _effectiveImmediately); event GovernorPulled(address indexed from, address indexed to); event GuardianPulled(address indexed from, address indexed to); event PolicyPulled(address indexed from, address indexed to); event VaultPulled(address indexed from, address indexed to); /* ========== VIEW ========== */ function governor() external view returns (address); function guardian() external view returns (address); function policy() external view returns (address); function vault() external view returns (address); } // File: types/OlympusAccessControlled.sol pragma solidity >=0.7.5; abstract contract OlympusAccessControlled { /* ========== EVENTS ========== */ event AuthorityUpdated(IOlympusAuthority indexed authority); string UNAUTHORIZED = "UNAUTHORIZED"; // save gas /* ========== STATE VARIABLES ========== */ IOlympusAuthority public authority; /* ========== Constructor ========== */ constructor(IOlympusAuthority _authority) { authority = _authority; emit AuthorityUpdated(_authority); } /* ========== MODIFIERS ========== */ modifier onlyGovernor() { require(msg.sender == authority.governor(), UNAUTHORIZED); _; } modifier onlyGuardian() { require(msg.sender == authority.guardian(), UNAUTHORIZED); _; } modifier onlyPolicy() { require(msg.sender == authority.policy(), UNAUTHORIZED); _; } modifier onlyVault() { require(msg.sender == authority.vault(), UNAUTHORIZED); _; } /* ========== GOV ONLY ========== */ function setAuthority(IOlympusAuthority _newAuthority) external onlyGovernor { authority = _newAuthority; emit AuthorityUpdated(_newAuthority); } } // File: cryptography/ECDSA.sol pragma solidity ^0.7.5; /** * @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 { enum RecoverError { NoError, InvalidSignature, InvalidSignatureLength, InvalidSignatureS, InvalidSignatureV } function _throwError(RecoverError error) private pure { if (error == RecoverError.NoError) { return; // no error: do nothing } else if (error == RecoverError.InvalidSignature) { revert("ECDSA: invalid signature"); } else if (error == RecoverError.InvalidSignatureLength) { revert("ECDSA: invalid signature length"); } else if (error == RecoverError.InvalidSignatureS) { revert("ECDSA: invalid signature 's' value"); } else if (error == RecoverError.InvalidSignatureV) { revert("ECDSA: invalid signature 'v' value"); } } /** * @dev Returns the address that signed a hashed message (`hash`) with * `signature` or error string. 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. * * Documentation for signature generation: * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js] * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers] * * _Available since v4.3._ */ function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) { // 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) { bytes32 r; bytes32 s; uint8 v; // ecrecover takes the signature parameters, and the only way to get them // currently is to use assembly. assembly { r := mload(add(signature, 0x20)) s := mload(add(signature, 0x40)) v := byte(0, mload(add(signature, 0x60))) } return tryRecover(hash, v, r, s); } else if (signature.length == 64) { bytes32 r; bytes32 vs; // ecrecover takes the signature parameters, and the only way to get them // currently is to use assembly. assembly { r := mload(add(signature, 0x20)) vs := mload(add(signature, 0x40)) } return tryRecover(hash, r, vs); } else { return (address(0), RecoverError.InvalidSignatureLength); } } /** * @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) { (address recovered, RecoverError error) = tryRecover(hash, signature); _throwError(error); return recovered; } /** * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately. * * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures] * * _Available since v4.3._ */ function tryRecover( bytes32 hash, bytes32 r, bytes32 vs ) internal pure returns (address, RecoverError) { bytes32 s; uint8 v; assembly { s := and(vs, 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) v := add(shr(255, vs), 27) } return tryRecover(hash, v, r, s); } /** * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately. * * _Available since v4.2._ */ function recover( bytes32 hash, bytes32 r, bytes32 vs ) internal pure returns (address) { (address recovered, RecoverError error) = tryRecover(hash, r, vs); _throwError(error); return recovered; } /** * @dev Overload of {ECDSA-tryRecover} that receives the `v`, * `r` and `s` signature fields separately. * * _Available since v4.3._ */ function tryRecover( bytes32 hash, uint8 v, bytes32 r, bytes32 s ) internal pure returns (address, RecoverError) { // 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 (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): 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. if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) { return (address(0), RecoverError.InvalidSignatureS); } if (v != 27 && v != 28) { return (address(0), RecoverError.InvalidSignatureV); } // If the signature is valid (and not malleable), return the signer address address signer = ecrecover(hash, v, r, s); if (signer == address(0)) { return (address(0), RecoverError.InvalidSignature); } return (signer, RecoverError.NoError); } /** * @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) { (address recovered, RecoverError error) = tryRecover(hash, v, r, s); _throwError(error); return recovered; } /** * @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: cryptography/EIP712.sol pragma solidity ^0.7.5; /** * @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) { uint256 chainID; assembly { chainID := chainid() } 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 = 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) { uint256 chainID; assembly { chainID := chainid() } if (chainID == _CACHED_CHAIN_ID) { return _CACHED_DOMAIN_SEPARATOR; } else { return _buildDomainSeparator(_TYPE_HASH, _HASHED_NAME, _HASHED_VERSION); } } function _buildDomainSeparator( bytes32 typeHash, bytes32 nameHash, bytes32 versionHash ) private view returns (bytes32) { uint256 chainID; assembly { chainID := chainid() } return keccak256(abi.encode(typeHash, nameHash, versionHash, 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: interfaces/IERC20Permit.sol pragma solidity >=0.7.5; /** * @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 th xe 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: interfaces/IERC20.sol pragma solidity >=0.7.5; 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: interfaces/IOHM.sol pragma solidity >=0.7.5; interface IOHM is IERC20 { function mint(address account_, uint256 amount_) external; function burn(uint256 amount) external; function burnFrom(address account_, uint256 amount_) external; } // File: libraries/SafeMath.sol pragma solidity ^0.7.5; // TODO(zx): Replace all instances of SafeMath with OZ implementation library SafeMath { function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } // Only used in the BondingCalculator.sol function sqrrt(uint256 a) internal pure returns (uint c) { if (a > 3) { c = a; uint b = add( div( a, 2), 1 ); while (b < c) { c = b; b = div( add( div( a, b ), b), 2 ); } } else if (a != 0) { c = 1; } } } // File: libraries/Counters.sol pragma solidity ^0.7.5; library Counters { using SafeMath for uint256; 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 { // The {SafeMath} overflow check can be skipped here, see the comment at the top counter._value += 1; } function decrement(Counter storage counter) internal { counter._value = counter._value.sub(1); } } // File: types/ERC20.sol pragma solidity >=0.7.5; abstract contract ERC20 is IERC20 { using SafeMath for uint256; // TODO comment actual hash value. bytes32 constant private ERC20TOKEN_ERC1820_INTERFACE_ID = keccak256( "ERC20Token" ); mapping (address => uint256) internal _balances; mapping (address => mapping (address => uint256)) internal _allowances; uint256 internal _totalSupply; string internal _name; string internal _symbol; uint8 internal immutable _decimals; constructor (string memory name_, string memory symbol_, uint8 decimals_) { _name = name_; _symbol = symbol_; _decimals = decimals_; } function name() public view returns (string memory) { return _name; } function symbol() public view returns (string memory) { return _symbol; } function decimals() public view virtual returns (uint8) { return _decimals; } function totalSupply() public view override returns (uint256) { return _totalSupply; } function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(msg.sender, recipient, amount); return true; } function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(msg.sender, spender, amount); return true; } function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, msg.sender, _allowances[sender][msg.sender].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(msg.sender, spender, _allowances[msg.sender][spender].add(addedValue)); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(msg.sender, spender, _allowances[msg.sender][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } 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); } function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(address(0), account, amount); } 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); } 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); } function _beforeTokenTransfer( address from_, address to_, uint256 amount_ ) internal virtual { } } // File: types/ERC20Permit.sol pragma solidity >=0.7.5; /** * @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 { 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: OlympusERC20.sol pragma solidity ^0.7.5; contract OlympusERC20Token is ERC20Permit, IOHM, OlympusAccessControlled { using SafeMath for uint256; constructor(address _authority) ERC20("Olympus", "OHM", 9) ERC20Permit("Olympus") OlympusAccessControlled(IOlympusAuthority(_authority)) {} function mint(address account_, uint256 amount_) external override onlyVault { _mint(account_, amount_); } function burn(uint256 amount) external override { _burn(msg.sender, amount); } function burnFrom(address account_, uint256 amount_) external override { _burnFrom(account_, amount_); } function _burnFrom(address account_, uint256 amount_) internal { uint256 decreasedAllowance_ = allowance(account_, msg.sender).sub(amount_, "ERC20: burn amount exceeds allowance"); _approve(account_, msg.sender, decreasedAllowance_); _burn(account_, amount_); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_authority","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":"contract IOlympusAuthority","name":"authority","type":"address"}],"name":"AuthorityUpdated","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":[],"name":"authority","outputs":[{"internalType":"contract IOlympusAuthority","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account_","type":"address"},{"internalType":"uint256","name":"amount_","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account_","type":"address"},{"internalType":"uint256","name":"amount_","type":"uint256"}],"name":"mint","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"}],"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":"contract IOlympusAuthority","name":"_newAuthority","type":"address"}],"name":"setAuthority","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
7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9610140526101a0604052600c6101608190526b15539055551213d49256915160a21b61018090815262000057916006919062000243565b503480156200006557600080fd5b5060405162001a3438038062001a34833981810160405260208110156200008b57600080fd5b50516040805180820182526007808252664f6c796d70757360c81b60208381018290528451808601865260018152603160f81b818301528551808701875293845283820192835285518087019096526003808752624f484d60e81b928701929092528351879686959294929390926009926200010992919062000243565b5081516200011f90600490602085019062000243565b5060f81b7fff00000000000000000000000000000000000000000000000000000000000000166080525050815160208084019190912082519183019190912060e08290526101008190524660c081905291907f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6200019f818484620001fe565b60a052610120525050600780546001600160a01b0319166001600160a01b0387169081179091556040519094507f2f658b440c35314f52658ea8a740e05b284cdc84dc9ae01e891f21b8933e7cad9350600092509050a25050620002ef565b604080516020808201959095528082019390935260608301919091524660808301523060a0808401919091528151808403909101815260c09092019052805191012090565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826200027b5760008555620002c6565b82601f106200029657805160ff1916838001178555620002c6565b82800160010185558215620002c6579182015b82811115620002c6578251825591602001919060010190620002a9565b50620002d4929150620002d8565b5090565b5b80821115620002d45760008155600101620002d9565b60805160f81c60a05160c05160e0516101005161012051610140516116ee62000346600039806109de525080610e63525080610ea5525080610e84525080610e0f525080610e3752508061058f52506116ee6000f3fe608060405234801561001057600080fd5b50600436106101215760003560e01c806370a08231116100ad578063a457c2d711610071578063a457c2d714610376578063a9059cbb146103a2578063bf7e214f146103ce578063d505accf146103f2578063dd62ed3e1461044357610121565b806370a08231146102d057806379cc6790146102f65780637a9e5e4b146103225780637ecebe001461034857806395d89b411461036e57610121565b8063313ce567116100f4578063313ce567146102335780633644e51514610251578063395093511461025957806340c10f191461028557806342966c68146102b357610121565b806306fdde0314610126578063095ea7b3146101a357806318160ddd146101e357806323b872dd146101fd575b600080fd5b61012e610471565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610168578181015183820152602001610150565b50505050905090810190601f1680156101955780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101cf600480360360408110156101b957600080fd5b506001600160a01b038135169060200135610508565b604080519115158252519081900360200190f35b6101eb61051e565b60408051918252519081900360200190f35b6101cf6004803603606081101561021357600080fd5b506001600160a01b03813581169160208101359091169060400135610524565b61023b61058d565b6040805160ff9092168252519081900360200190f35b6101eb6105b1565b6101cf6004803603604081101561026f57600080fd5b506001600160a01b0381351690602001356105c0565b6102b16004803603604081101561029b57600080fd5b506001600160a01b0381351690602001356105f6565b005b6102b1600480360360208110156102c957600080fd5b503561072a565b6101eb600480360360208110156102e657600080fd5b50356001600160a01b0316610737565b6102b16004803603604081101561030c57600080fd5b506001600160a01b038135169060200135610752565b6102b16004803603602081101561033857600080fd5b50356001600160a01b031661075c565b6101eb6004803603602081101561035e57600080fd5b50356001600160a01b0316610892565b61012e6108b9565b6101cf6004803603604081101561038c57600080fd5b506001600160a01b03813516906020013561091a565b6101cf600480360360408110156103b857600080fd5b506001600160a01b038135169060200135610969565b6103d6610976565b604080516001600160a01b039092168252519081900360200190f35b6102b1600480360360e081101561040857600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135610985565b6101eb6004803603604081101561045957600080fd5b506001600160a01b0381358116916020013516610b01565b60038054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156104fd5780601f106104d2576101008083540402835291602001916104fd565b820191906000526020600020905b8154815290600101906020018083116104e057829003601f168201915b505050505090505b90565b6000610515338484610b2c565b50600192915050565b60025490565b6000610531848484610c18565b610583843361057e856040518060600160405280602881526020016115de602891396001600160a01b038a1660009081526001602090815260408083203384529091529020549190610d73565b610b2c565b5060019392505050565b7f000000000000000000000000000000000000000000000000000000000000000090565b60006105bb610e0a565b905090565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909161051591859061057e9086610ed1565b600760009054906101000a90046001600160a01b03166001600160a01b031663fbfa77cf6040518163ffffffff1660e01b815260040160206040518083038186803b15801561064457600080fd5b505afa158015610658573d6000803e3d6000fd5b505050506040513d602081101561066e57600080fd5b50516006906001600160a01b0316331461071b5760405162461bcd60e51b815260206004820190815282546002600019610100600184161502019091160460248301819052909182916044909101908490801561070c5780601f106106e15761010080835404028352916020019161070c565b820191906000526020600020905b8154815290600101906020018083116106ef57829003601f168201915b50509250505060405180910390fd5b506107268282610f32565b5050565b6107343382611022565b50565b6001600160a01b031660009081526020819052604090205490565b610726828261111e565b600760009054906101000a90046001600160a01b03166001600160a01b0316630c340a246040518163ffffffff1660e01b815260040160206040518083038186803b1580156107aa57600080fd5b505afa1580156107be573d6000803e3d6000fd5b505050506040513d60208110156107d457600080fd5b50516006906001600160a01b031633146108475760405162461bcd60e51b815260206004820190815282546002600019610100600184161502019091160460248301819052909182916044909101908490801561070c5780601f106106e15761010080835404028352916020019161070c565b50600780546001600160a01b0319166001600160a01b0383169081179091556040517f2f658b440c35314f52658ea8a740e05b284cdc84dc9ae01e891f21b8933e7cad90600090a250565b6001600160a01b03811660009081526005602052604081206108b39061116a565b92915050565b60048054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156104fd5780601f106104d2576101008083540402835291602001916104fd565b6000610515338461057e85604051806060016040528060258152602001611694602591393360009081526001602090815260408083206001600160a01b038d1684529091529020549190610d73565b6000610515338484610c18565b6007546001600160a01b031681565b834211156109da576040805162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e65000000604482015290519081900360640190fd5b60007f0000000000000000000000000000000000000000000000000000000000000000888888610a098c61116e565b8960405160200180878152602001866001600160a01b03168152602001856001600160a01b0316815260200184815260200183815260200182815260200196505050505050506040516020818303038152906040528051906020012090506000610a72826111a0565b90506000610a82828787876111b3565b9050896001600160a01b0316816001600160a01b031614610aea576040805162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e61747572650000604482015290519081900360640190fd5b610af58a8a8a610b2c565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b038316610b715760405162461bcd60e51b81526004018080602001828103825260248152602001806116706024913960400191505060405180910390fd5b6001600160a01b038216610bb65760405162461bcd60e51b81526004018080602001828103825260228152602001806115526022913960400191505060405180910390fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316610c5d5760405162461bcd60e51b815260040180806020018281038252602581526020018061164b6025913960400191505060405180910390fd5b6001600160a01b038216610ca25760405162461bcd60e51b815260040180806020018281038252602381526020018061150d6023913960400191505060405180910390fd5b610cad838383611165565b610cea81604051806060016040528060268152602001611574602691396001600160a01b0386166000908152602081905260409020549190610d73565b6001600160a01b038085166000908152602081905260408082209390935590841681522054610d199082610ed1565b6001600160a01b038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60008184841115610e025760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610dc7578181015183820152602001610daf565b50505050905090810190601f168015610df45780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000467f0000000000000000000000000000000000000000000000000000000000000000811415610e5e577f0000000000000000000000000000000000000000000000000000000000000000915050610505565b610ec97f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006111db565b915050610505565b600082820183811015610f2b576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6001600160a01b038216610f8d576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b610f9960008383611165565b600254610fa69082610ed1565b6002556001600160a01b038216600090815260208190526040902054610fcc9082610ed1565b6001600160a01b0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6001600160a01b0382166110675760405162461bcd60e51b815260040180806020018281038252602181526020018061162a6021913960400191505060405180910390fd5b61107382600083611165565b6110b081604051806060016040528060228152602001611530602291396001600160a01b0385166000908152602081905260409020549190610d73565b6001600160a01b0383166000908152602081905260409020556002546110d69082611220565b6002556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b600061114e82604051806060016040528060248152602001611606602491396111478633610b01565b9190610d73565b905061115b833383610b2c565b6111658383611022565b505050565b5490565b6001600160a01b038116600090815260056020526040812061118f8161116a565b915061119a81611262565b50919050565b60006108b36111ad610e0a565b8361126b565b60008060006111c4878787876112a6565b915091506111d18161139b565b5095945050505050565b604080516020808201959095528082019390935260608301919091524660808301523060a0808401919091528151808403909101815260c09092019052805191012090565b6000610f2b83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610d73565b80546001019055565b6040805161190160f01b6020808301919091526022820194909452604280820193909352815180820390930183526062019052805191012090565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156112dd5750600090506003611392565b8460ff16601b141580156112f557508460ff16601c14155b156113065750600090506004611392565b600060018787878760405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015611362573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661138b57600060019250925050611392565b9150600090505b94509492505050565b60008160048111156113a957fe5b14156113b457610734565b60018160048111156113c257fe5b1415611415576040805162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b600281600481111561142357fe5b1415611476576040805162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015290519081900360640190fd5b600381600481111561148457fe5b14156114c15760405162461bcd60e51b815260040180806020018281038252602281526020018061159a6022913960400191505060405180910390fd5b60048160048111156114cf57fe5b14156107345760405162461bcd60e51b81526004018080602001828103825260228152602001806115bc6022913960400191505060405180910390fdfe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545434453413a20696e76616c6964207369676e6174757265202773272076616c756545434453413a20696e76616c6964207369676e6174757265202776272076616c756545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e20616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212201dd9d58665b9f124afb5f5fd154759d875decbca6dcc7036a2d0e59c76a3832a64736f6c634300070500330000000000000000000000001c21f8ea7e39e2ba00bc12d2968d63f4acb38b7a
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101215760003560e01c806370a08231116100ad578063a457c2d711610071578063a457c2d714610376578063a9059cbb146103a2578063bf7e214f146103ce578063d505accf146103f2578063dd62ed3e1461044357610121565b806370a08231146102d057806379cc6790146102f65780637a9e5e4b146103225780637ecebe001461034857806395d89b411461036e57610121565b8063313ce567116100f4578063313ce567146102335780633644e51514610251578063395093511461025957806340c10f191461028557806342966c68146102b357610121565b806306fdde0314610126578063095ea7b3146101a357806318160ddd146101e357806323b872dd146101fd575b600080fd5b61012e610471565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610168578181015183820152602001610150565b50505050905090810190601f1680156101955780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101cf600480360360408110156101b957600080fd5b506001600160a01b038135169060200135610508565b604080519115158252519081900360200190f35b6101eb61051e565b60408051918252519081900360200190f35b6101cf6004803603606081101561021357600080fd5b506001600160a01b03813581169160208101359091169060400135610524565b61023b61058d565b6040805160ff9092168252519081900360200190f35b6101eb6105b1565b6101cf6004803603604081101561026f57600080fd5b506001600160a01b0381351690602001356105c0565b6102b16004803603604081101561029b57600080fd5b506001600160a01b0381351690602001356105f6565b005b6102b1600480360360208110156102c957600080fd5b503561072a565b6101eb600480360360208110156102e657600080fd5b50356001600160a01b0316610737565b6102b16004803603604081101561030c57600080fd5b506001600160a01b038135169060200135610752565b6102b16004803603602081101561033857600080fd5b50356001600160a01b031661075c565b6101eb6004803603602081101561035e57600080fd5b50356001600160a01b0316610892565b61012e6108b9565b6101cf6004803603604081101561038c57600080fd5b506001600160a01b03813516906020013561091a565b6101cf600480360360408110156103b857600080fd5b506001600160a01b038135169060200135610969565b6103d6610976565b604080516001600160a01b039092168252519081900360200190f35b6102b1600480360360e081101561040857600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135610985565b6101eb6004803603604081101561045957600080fd5b506001600160a01b0381358116916020013516610b01565b60038054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156104fd5780601f106104d2576101008083540402835291602001916104fd565b820191906000526020600020905b8154815290600101906020018083116104e057829003601f168201915b505050505090505b90565b6000610515338484610b2c565b50600192915050565b60025490565b6000610531848484610c18565b610583843361057e856040518060600160405280602881526020016115de602891396001600160a01b038a1660009081526001602090815260408083203384529091529020549190610d73565b610b2c565b5060019392505050565b7f000000000000000000000000000000000000000000000000000000000000000990565b60006105bb610e0a565b905090565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909161051591859061057e9086610ed1565b600760009054906101000a90046001600160a01b03166001600160a01b031663fbfa77cf6040518163ffffffff1660e01b815260040160206040518083038186803b15801561064457600080fd5b505afa158015610658573d6000803e3d6000fd5b505050506040513d602081101561066e57600080fd5b50516006906001600160a01b0316331461071b5760405162461bcd60e51b815260206004820190815282546002600019610100600184161502019091160460248301819052909182916044909101908490801561070c5780601f106106e15761010080835404028352916020019161070c565b820191906000526020600020905b8154815290600101906020018083116106ef57829003601f168201915b50509250505060405180910390fd5b506107268282610f32565b5050565b6107343382611022565b50565b6001600160a01b031660009081526020819052604090205490565b610726828261111e565b600760009054906101000a90046001600160a01b03166001600160a01b0316630c340a246040518163ffffffff1660e01b815260040160206040518083038186803b1580156107aa57600080fd5b505afa1580156107be573d6000803e3d6000fd5b505050506040513d60208110156107d457600080fd5b50516006906001600160a01b031633146108475760405162461bcd60e51b815260206004820190815282546002600019610100600184161502019091160460248301819052909182916044909101908490801561070c5780601f106106e15761010080835404028352916020019161070c565b50600780546001600160a01b0319166001600160a01b0383169081179091556040517f2f658b440c35314f52658ea8a740e05b284cdc84dc9ae01e891f21b8933e7cad90600090a250565b6001600160a01b03811660009081526005602052604081206108b39061116a565b92915050565b60048054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156104fd5780601f106104d2576101008083540402835291602001916104fd565b6000610515338461057e85604051806060016040528060258152602001611694602591393360009081526001602090815260408083206001600160a01b038d1684529091529020549190610d73565b6000610515338484610c18565b6007546001600160a01b031681565b834211156109da576040805162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e65000000604482015290519081900360640190fd5b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9888888610a098c61116e565b8960405160200180878152602001866001600160a01b03168152602001856001600160a01b0316815260200184815260200183815260200182815260200196505050505050506040516020818303038152906040528051906020012090506000610a72826111a0565b90506000610a82828787876111b3565b9050896001600160a01b0316816001600160a01b031614610aea576040805162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e61747572650000604482015290519081900360640190fd5b610af58a8a8a610b2c565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b038316610b715760405162461bcd60e51b81526004018080602001828103825260248152602001806116706024913960400191505060405180910390fd5b6001600160a01b038216610bb65760405162461bcd60e51b81526004018080602001828103825260228152602001806115526022913960400191505060405180910390fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316610c5d5760405162461bcd60e51b815260040180806020018281038252602581526020018061164b6025913960400191505060405180910390fd5b6001600160a01b038216610ca25760405162461bcd60e51b815260040180806020018281038252602381526020018061150d6023913960400191505060405180910390fd5b610cad838383611165565b610cea81604051806060016040528060268152602001611574602691396001600160a01b0386166000908152602081905260409020549190610d73565b6001600160a01b038085166000908152602081905260408082209390935590841681522054610d199082610ed1565b6001600160a01b038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60008184841115610e025760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610dc7578181015183820152602001610daf565b50505050905090810190601f168015610df45780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000467f0000000000000000000000000000000000000000000000000000000000000001811415610e5e577fb86338c2ea64c0e4cc86f7224cf3207aaae6f51fd55aa8b31cf5b137cc777b7f915050610505565b610ec97f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f5cb8f939bed19e73a0229b7f12172ba2ec61ccc623f4cf0c36f42aacbd39b6617fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66111db565b915050610505565b600082820183811015610f2b576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6001600160a01b038216610f8d576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b610f9960008383611165565b600254610fa69082610ed1565b6002556001600160a01b038216600090815260208190526040902054610fcc9082610ed1565b6001600160a01b0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6001600160a01b0382166110675760405162461bcd60e51b815260040180806020018281038252602181526020018061162a6021913960400191505060405180910390fd5b61107382600083611165565b6110b081604051806060016040528060228152602001611530602291396001600160a01b0385166000908152602081905260409020549190610d73565b6001600160a01b0383166000908152602081905260409020556002546110d69082611220565b6002556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b600061114e82604051806060016040528060248152602001611606602491396111478633610b01565b9190610d73565b905061115b833383610b2c565b6111658383611022565b505050565b5490565b6001600160a01b038116600090815260056020526040812061118f8161116a565b915061119a81611262565b50919050565b60006108b36111ad610e0a565b8361126b565b60008060006111c4878787876112a6565b915091506111d18161139b565b5095945050505050565b604080516020808201959095528082019390935260608301919091524660808301523060a0808401919091528151808403909101815260c09092019052805191012090565b6000610f2b83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610d73565b80546001019055565b6040805161190160f01b6020808301919091526022820194909452604280820193909352815180820390930183526062019052805191012090565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156112dd5750600090506003611392565b8460ff16601b141580156112f557508460ff16601c14155b156113065750600090506004611392565b600060018787878760405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015611362573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661138b57600060019250925050611392565b9150600090505b94509492505050565b60008160048111156113a957fe5b14156113b457610734565b60018160048111156113c257fe5b1415611415576040805162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b600281600481111561142357fe5b1415611476576040805162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015290519081900360640190fd5b600381600481111561148457fe5b14156114c15760405162461bcd60e51b815260040180806020018281038252602281526020018061159a6022913960400191505060405180910390fd5b60048160048111156114cf57fe5b14156107345760405162461bcd60e51b81526004018080602001828103825260228152602001806115bc6022913960400191505060405180910390fdfe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545434453413a20696e76616c6964207369676e6174757265202773272076616c756545434453413a20696e76616c6964207369676e6174757265202776272076616c756545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e20616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212201dd9d58665b9f124afb5f5fd154759d875decbca6dcc7036a2d0e59c76a3832a64736f6c63430007050033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000001c21f8ea7e39e2ba00bc12d2968d63f4acb38b7a
-----Decoded View---------------
Arg [0] : _authority (address): 0x1c21F8EA7e39E2BA00BC12d2968D63F4acb38b7A
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000001c21f8ea7e39e2ba00bc12d2968d63f4acb38b7a
Deployed Bytecode Sourcemap
31163:932:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24658:83;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25526:167;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;25526:167:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;24943:100;;;:::i;:::-;;;;;;;;;;;;;;;;25701:317;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;25701:317:0;;;;;;;;;;;;;;;;;:::i;24844:91::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;30626:115;;;:::i;26026:214::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;26026:214:0;;;;;;;;:::i;31443:120::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;31443:120:0;;;;;;;;:::i;:::-;;31571:92;;;;;;;;;;;;;;;;-1:-1:-1;31571:92:0;;:::i;25051:127::-;;;;;;;;;;;;;;;;-1:-1:-1;25051:127:0;-1:-1:-1;;;;;25051:127:0;;:::i;31671:118::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;31671:118:0;;;;;;;;:::i;2303:168::-;;;;;;;;;;;;;;;;-1:-1:-1;2303:168:0;-1:-1:-1;;;;;2303:168:0;;:::i;30368:128::-;;;;;;;;;;;;;;;;-1:-1:-1;30368:128:0;-1:-1:-1;;;;;30368:128:0;;:::i;24749:87::-;;;:::i;26248:265::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;26248:265:0;;;;;;;;:::i;25186:173::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;25186:173:0;;;;;;;;:::i;1491:34::-;;;:::i;:::-;;;;-1:-1:-1;;;;;1491:34:0;;;;;;;;;;;;;;29657:645;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;29657:645:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;25367:151::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;25367:151:0;;;;;;;;;;:::i;24658:83::-;24728:5;24721:12;;;;;;;;-1:-1:-1;;24721:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24695:13;;24721:12;;24728:5;;24721:12;;24728:5;24721:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24658:83;;:::o;25526:167::-;25609:4;25626:37;25635:10;25647:7;25656:6;25626:8;:37::i;:::-;-1:-1:-1;25681:4:0;25526:167;;;;:::o;24943:100::-;25023:12;;24943:100;:::o;25701:317::-;25807:4;25824:36;25834:6;25842:9;25853:6;25824:9;:36::i;:::-;25871:117;25880:6;25888:10;25900:87;25936:6;25900:87;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25900:19:0;;;;;;:11;:19;;;;;;;;25920:10;25900:31;;;;;;;;;:87;:35;:87::i;:::-;25871:8;:117::i;:::-;-1:-1:-1;26006:4:0;25701:317;;;;;:::o;24844:91::-;24918:9;24844:91;:::o;30626:115::-;30686:7;30713:20;:18;:20::i;:::-;30706:27;;30626:115;:::o;26026:214::-;26140:10;26114:4;26161:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;26161:32:0;;;;;;;;;;26114:4;;26131:79;;26152:7;;26161:48;;26198:10;26161:36;:48::i;31443:120::-;2191:9;;;;;;;;;-1:-1:-1;;;;;2191:9:0;-1:-1:-1;;;;;2191:15:0;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2191:17:0;2210:12;;-1:-1:-1;;;;;2177:31:0;:10;:31;2169:54;;;;-1:-1:-1;;;2169:54:0;;;;;;;;;;;;-1:-1:-1;;2169:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31531:24:::1;31537:8;31547:7;31531:5;:24::i;:::-;31443:120:::0;;:::o;31571:92::-;31630:25;31636:10;31648:6;31630:5;:25::i;:::-;31571:92;:::o;25051:127::-;-1:-1:-1;;;;;25152:18:0;25125:7;25152:18;;;;;;;;;;;;25051:127::o;31671:118::-;31753:28;31763:8;31773:7;31753:9;:28::i;2303:168::-;1830:9;;;;;;;;;-1:-1:-1;;;;;1830:9:0;-1:-1:-1;;;;;1830:18:0;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1830:20:0;1852:12;;-1:-1:-1;;;;;1816:34:0;:10;:34;1808:57;;;;-1:-1:-1;;;1808:57:0;;;;;;;;;;;;-1:-1:-1;;1808:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2391:9:0::1;:25:::0;;-1:-1:-1;;;;;;2391:25:0::1;-1:-1:-1::0;;;;;2391:25:0;::::1;::::0;;::::1;::::0;;;2432:31:::1;::::0;::::1;::::0;-1:-1:-1;;2432:31:0::1;2303:168:::0;:::o;30368:128::-;-1:-1:-1;;;;;30464:14:0;;30437:7;30464:14;;;:7;:14;;;;;:24;;:22;:24::i;:::-;30457:31;30368:128;-1:-1:-1;;30368:128:0:o;24749:87::-;24821:7;24814:14;;;;;;;;-1:-1:-1;;24814:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24788:13;;24814:14;;24821:7;;24814:14;;24821:7;24814:14;;;;;;;;;;;;;;;;;;;;;;;;26248:265;26341:4;26358:125;26367:10;26379:7;26388:94;26425:15;26388:94;;;;;;;;;;;;;;;;;26400:10;26388:23;;;;:11;:23;;;;;;;;-1:-1:-1;;;;;26388:32:0;;;;;;;;;;;:94;:36;:94::i;25186:173::-;25272:4;25289:40;25299:10;25311:9;25322:6;25289:9;:40::i;1491:34::-;;;-1:-1:-1;;;;;1491:34:0;;:::o;29657:645::-;29901:8;29882:15;:27;;29874:69;;;;;-1:-1:-1;;;29874:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;29956:18;29998:16;30016:5;30023:7;30032:5;30039:16;30049:5;30039:9;:16::i;:::-;30057:8;29987:79;;;;;;;;;;;-1:-1:-1;;;;;29987:79:0;;;;;;-1:-1:-1;;;;;29987:79:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29977:90;;;;;;29956:111;;30080:12;30095:28;30112:10;30095:16;:28::i;:::-;30080:43;;30136:14;30153:28;30167:4;30173:1;30176;30179;30153:13;:28::i;:::-;30136:45;;30210:5;-1:-1:-1;;;;;30200:15:0;:6;-1:-1:-1;;;;;30200:15:0;;30192:58;;;;;-1:-1:-1;;;30192:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;30263:31;30272:5;30279:7;30288:5;30263:8;:31::i;:::-;29657:645;;;;;;;;;;:::o;25367:151::-;-1:-1:-1;;;;;25483:18:0;;;25456:7;25483:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;25367:151::o;27876:346::-;-1:-1:-1;;;;;27978:19:0;;27970:68;;;;-1:-1:-1;;;27970:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28057:21:0;;28049:68;;;;-1:-1:-1;;;28049:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28130:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;28182:32;;;;;;;;;;;;;;;;;27876:346;;;:::o;26521:539::-;-1:-1:-1;;;;;26627:20:0;;26619:70;;;;-1:-1:-1;;;26619:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26708:23:0;;26700:71;;;;-1:-1:-1;;;26700:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26784:47;26805:6;26813:9;26824:6;26784:20;:47::i;:::-;26864:71;26886:6;26864:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26864:17:0;;:9;:17;;;;;;;;;;;;:71;:21;:71::i;:::-;-1:-1:-1;;;;;26844:17:0;;;:9;:17;;;;;;;;;;;:91;;;;26969:20;;;;;;;:32;;26994:6;26969:24;:32::i;:::-;-1:-1:-1;;;;;26946:20:0;;;:9;:20;;;;;;;;;;;;:55;;;;27017:35;;;;;;;26946:20;;27017:35;;;;;;;;;;;;;26521:539;;;:::o;21712:192::-;21798:7;21834:12;21826:6;;;;21818:29;;;;-1:-1:-1;;;21818:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;21870:5:0;;;21712:192::o;14579:370::-;14632:7;14715:9;14762:16;14751:27;;14747:195;;;14802:24;14795:31;;;;;14747:195;14866:64;14888:10;14900:12;14914:15;14866:21;:64::i;:::-;14859:71;;;;;21379:181;21437:7;21469:5;;;21493:6;;;;21485:46;;;;;-1:-1:-1;;;21485:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;21551:1;21379:181;-1:-1:-1;;;21379:181:0:o;27068:374::-;-1:-1:-1;;;;;27152:21:0;;27144:65;;;;;-1:-1:-1;;;27144:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;27220:49;27249:1;27253:7;27262:6;27220:20;:49::i;:::-;27295:12;;:24;;27312:6;27295:16;:24::i;:::-;27280:12;:39;-1:-1:-1;;;;;27351:18:0;;:9;:18;;;;;;;;;;;:30;;27374:6;27351:22;:30::i;:::-;-1:-1:-1;;;;;27330:18:0;;:9;:18;;;;;;;;;;;:51;;;;27397:37;;;;;;;27330:18;;:9;;27397:37;;;;;;;;;;27068:374;;:::o;27450:418::-;-1:-1:-1;;;;;27534:21:0;;27526:67;;;;-1:-1:-1;;;27526:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27606:49;27627:7;27644:1;27648:6;27606:20;:49::i;:::-;27689:68;27712:6;27689:68;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;27689:18:0;;:9;:18;;;;;;;;;;;;:68;:22;:68::i;:::-;-1:-1:-1;;;;;27668:18:0;;:9;:18;;;;;;;;;;:89;27783:12;;:24;;27800:6;27783:16;:24::i;:::-;27768:12;:39;27823:37;;;;;;;;27849:1;;-1:-1:-1;;;;;27823:37:0;;;;;;;;;;;;27450:418;;:::o;31797:295::-;31871:27;31901:84;31937:7;31901:84;;;;;;;;;;;;;;;;;:31;31911:8;31921:10;31901:9;:31::i;:::-;:35;:84;:35;:84::i;:::-;31871:114;;31998:51;32007:8;32017:10;32029:19;31998:8;:51::i;:::-;32060:24;32066:8;32076:7;32060:5;:24::i;:::-;31797:295;;;:::o;23493:114::-;23585:14;;23493:114::o;30879:207::-;-1:-1:-1;;;;;31000:14:0;;30939:15;31000:14;;;:7;:14;;;;;31035:15;31000:14;31035:13;:15::i;:::-;31025:25;;31061:17;:5;:15;:17::i;:::-;30879:207;;;;:::o;15949:167::-;16026:7;16053:55;16075:20;:18;:20::i;:::-;16097:10;16053:21;:55::i;10053:279::-;10181:7;10202:17;10221:18;10243:25;10254:4;10260:1;10263;10266;10243:10;:25::i;:::-;10201:67;;;;10279:18;10291:5;10279:11;:18::i;:::-;-1:-1:-1;10315:9:0;10053:279;-1:-1:-1;;;;;10053:279:0:o;14957:350::-;15231:67;;;;;;;;;;;;;;;;;;;;;;;;;15182:9;15231:67;;;;15292:4;15231:67;;;;;;;;;;;;;;;;;;;;;;;;15221:78;;;;;;14957:350::o;21568:136::-;21626:7;21653:43;21657:1;21660;21653:43;;;;;;;;;;;;;;;;;:3;:43::i;23615:181::-;23769:19;;23787:1;23769:19;;;23615:181::o;11251:196::-;11381:57;;;-1:-1:-1;;;11381:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11371:68;;;;;;11251:196::o;8282:1632::-;8413:7;;9347:66;9334:79;;9330:163;;;-1:-1:-1;9446:1:0;;-1:-1:-1;9450:30:0;9430:51;;9330:163;9507:1;:7;;9512:2;9507:7;;:18;;;;;9518:1;:7;;9523:2;9518:7;;9507:18;9503:102;;;-1:-1:-1;9558:1:0;;-1:-1:-1;9562:30:0;9542:51;;9503:102;9702:14;9719:24;9729:4;9735:1;9738;9741;9719:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;9719:24:0;;-1:-1:-1;;9719:24:0;;;-1:-1:-1;;;;;;;9758:20:0;;9754:103;;9811:1;9815:29;9795:50;;;;;;;9754:103;9877:6;-1:-1:-1;9885:20:0;;-1:-1:-1;8282:1632:0;;;;;;;;:::o;2944:643::-;3022:20;3013:5;:29;;;;;;;;;3009:571;;;3059:7;;3009:571;3120:29;3111:5;:38;;;;;;;;;3107:473;;;3166:34;;;-1:-1:-1;;;3166:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;3107:473;3231:35;3222:5;:44;;;;;;;;;3218:362;;;3283:41;;;-1:-1:-1;;;3283:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;3218:362;3355:30;3346:5;:39;;;;;;;;;3342:238;;;3402:44;;-1:-1:-1;;;3402:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3342:238;3477:30;3468:5;:39;;;;;;;;;3464:116;;;3524:44;;-1:-1:-1;;;3524:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Swarm Source
ipfs://1dd9d58665b9f124afb5f5fd154759d875decbca6dcc7036a2d0e59c76a3832a
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.