Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00Latest 1 internal transaction
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| 0x60806040 | 17237266 | 1022 days ago | Contract Creation | 0 ETH |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
Factory
Compiler Version
v0.8.16+commit.07a7930e
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
pragma solidity >=0.8.16;
import "./e_brc20Sample.sol";
contract Factory is Ownable {
address[] public tokens;
uint256[] public deployTime;
uint256 public tokenCount;
mapping(string => bool) public registers;
mapping(address => bool) controllers;
bool public InscribingOpen = false;
event InscribeSessionOpen();
event TokenDeployed(address tokenAddress);
event TokenRegister(string ticker);
function deployToken( string calldata _ticker, uint256 _supply, uint256 _limitPerMint) public returns (address) {
require(registers[_toLower(_ticker)] == false, "Ticker alreay registered");
require(controllers[msg.sender] || InscribingOpen == true );
E_BRC20 token = new E_BRC20(_ticker, _supply, _limitPerMint);
tokens.push(address(token));
deployTime.push(_currentBlockTimestamp());
tokenCount += 1;
addRegister(_ticker);
emit TokenDeployed(address(token));
emit TokenRegister(_ticker);
return address(token);
}
function PublicOpenInscribing() onlyOwner public returns(bool success) {
InscribingOpen = true;
emit InscribeSessionOpen();
return true;
}
function addController(address controller) external onlyOwner {
controllers[controller] = true;
}
function removeController(address controller) external onlyOwner {
controllers[controller] = false;
}
function addRegister(string memory ticker) internal {
registers[ticker] = true;
}
function _toLower(string memory str) internal pure returns (string memory) {
bytes memory bStr = bytes(str);
bytes memory bLower = new bytes(bStr.length);
for (uint i = 0; i < bStr.length; i++) {
if ((uint8(bStr[i]) >= 65) && (uint8(bStr[i]) <= 90)) {
bLower[i] = bytes1(uint8(bStr[i]) + 32);
} else {
bLower[i] = bStr[i];
}
}
return string(bLower);
}
function _currentBlockTimestamp() internal view virtual returns (uint256) {
return block.timestamp;
}
}// SPDX-License-Identifier: MIT
pragma solidity >=0.8.16;
import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/utils/math/SafeMath.sol";
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol";
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
contract E_BRC20 is ERC20, ERC20Burnable, Ownable {
event Inscribe(address indexed to, uint256 amount);
event InscribeFinished();
using SafeMath for uint256;
mapping(address => uint256) private _balances;
mapping(address => bool) controllers;
uint256 private _totalSupply;
uint256 private MAXSUP;
uint256 public MAXIMUMSUPPLY;
uint256 public LimitPerMint;
bool public inscribingFinished = false;
constructor(string memory _ticker, uint256 _supply, uint256 _limitPerMint) ERC20(_ticker, _ticker) {
MAXIMUMSUPPLY = _supply;
LimitPerMint = _limitPerMint;
}
modifier canInscribe() { require(!inscribingFinished); _; }
function inscribe(address to, uint256 amount) canInscribe external {
require((MAXSUP + amount) <= MAXIMUMSUPPLY, "Maximum supply has been reached");
require(amount <= LimitPerMint, "Maximum Batch size has been reached");
_totalSupply = _totalSupply.add(amount);
MAXSUP = MAXSUP.add(amount);
_balances[to] = _balances[to].add(amount);
_mint(to, amount);
emit Inscribe(to, amount);
}
function finishInscribing() onlyOwner public returns(bool success) {
inscribingFinished = true;
emit InscribeFinished();
return true;
}
function totalSupply() public override view returns (uint256) {
return _totalSupply;
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20 {
/**
* @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 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 `to`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address to, 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 `from` to `to` 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 from,
address to,
uint256 amount
) external returns (bool);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/extensions/ERC20Burnable.sol)
pragma solidity ^0.8.0;
import "../ERC20.sol";
import "../../../utils/Context.sol";
/**
* @dev Extension of {ERC20} that allows token holders to destroy both their own
* tokens and those that they have an allowance for, in a way that can be
* recognized off-chain (via event analysis).
*/
abstract contract ERC20Burnable is Context, ERC20 {
/**
* @dev Destroys `amount` tokens from the caller.
*
* See {ERC20-_burn}.
*/
function burn(uint256 amount) public virtual {
_burn(_msgSender(), amount);
}
/**
* @dev Destroys `amount` tokens from `account`, deducting from the caller's
* allowance.
*
* See {ERC20-_burn} and {ERC20-allowance}.
*
* Requirements:
*
* - the caller must have allowance for ``accounts``'s tokens of at least
* `amount`.
*/
function burnFrom(address account, uint256 amount) public virtual {
_spendAllowance(account, _msgSender(), amount);
_burn(account, amount);
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/ERC20.sol)
pragma solidity ^0.8.0;
import "./IERC20.sol";
import "./extensions/IERC20Metadata.sol";
import "../../utils/Context.sol";
/**
* @dev Implementation of the {IERC20} interface.
*
* This implementation is agnostic to the way tokens are created. This means
* that a supply mechanism has to be added in a derived contract using {_mint}.
* For a generic mechanism see {ERC20PresetMinterPauser}.
*
* TIP: For a detailed writeup see our guide
* https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
* to implement supply mechanisms].
*
* We have followed general OpenZeppelin Contracts guidelines: functions revert
* instead returning `false` on failure. This behavior is nonetheless
* conventional and does not conflict with the expectations of ERC20
* applications.
*
* Additionally, an {Approval} event is emitted on calls to {transferFrom}.
* This allows applications to reconstruct the allowance for all accounts just
* by listening to said events. Other implementations of the EIP may not emit
* these events, as it isn't required by the specification.
*
* Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
* functions have been added to mitigate the well-known issues around setting
* allowances. See {IERC20-approve}.
*/
contract ERC20 is Context, IERC20, IERC20Metadata {
mapping(address => uint256) private _balances;
mapping(address => mapping(address => uint256)) private _allowances;
uint256 private _totalSupply;
string private _name;
string private _symbol;
/**
* @dev Sets the values for {name} and {symbol}.
*
* The default value of {decimals} is 18. To select a different value for
* {decimals} you should overload it.
*
* All two of these values are immutable: they can only be set once during
* construction.
*/
constructor(string memory name_, string memory symbol_) {
_name = name_;
_symbol = symbol_;
}
/**
* @dev Returns the name of the token.
*/
function name() public view virtual override returns (string memory) {
return _name;
}
/**
* @dev Returns the symbol of the token, usually a shorter version of the
* name.
*/
function symbol() public view virtual override returns (string memory) {
return _symbol;
}
/**
* @dev Returns the number of decimals used to get its user representation.
* For example, if `decimals` equals `2`, a balance of `505` tokens should
* be displayed to a user as `5.05` (`505 / 10 ** 2`).
*
* Tokens usually opt for a value of 18, imitating the relationship between
* Ether and Wei. This is the value {ERC20} uses, unless this function is
* overridden;
*
* NOTE: This information is only used for _display_ purposes: it in
* no way affects any of the arithmetic of the contract, including
* {IERC20-balanceOf} and {IERC20-transfer}.
*/
function decimals() public view virtual override returns (uint8) {
return 18;
}
/**
* @dev See {IERC20-totalSupply}.
*/
function totalSupply() public view virtual override returns (uint256) {
return _totalSupply;
}
/**
* @dev See {IERC20-balanceOf}.
*/
function balanceOf(address account) public view virtual override returns (uint256) {
return _balances[account];
}
/**
* @dev See {IERC20-transfer}.
*
* Requirements:
*
* - `to` cannot be the zero address.
* - the caller must have a balance of at least `amount`.
*/
function transfer(address to, uint256 amount) public virtual override returns (bool) {
address owner = _msgSender();
_transfer(owner, to, 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}.
*
* NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
* `transferFrom`. This is semantically equivalent to an infinite approval.
*
* Requirements:
*
* - `spender` cannot be the zero address.
*/
function approve(address spender, uint256 amount) public virtual override returns (bool) {
address owner = _msgSender();
_approve(owner, 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}.
*
* NOTE: Does not update the allowance if the current allowance
* is the maximum `uint256`.
*
* Requirements:
*
* - `from` and `to` cannot be the zero address.
* - `from` must have a balance of at least `amount`.
* - the caller must have allowance for ``from``'s tokens of at least
* `amount`.
*/
function transferFrom(
address from,
address to,
uint256 amount
) public virtual override returns (bool) {
address spender = _msgSender();
_spendAllowance(from, spender, amount);
_transfer(from, to, amount);
return true;
}
/**
* @dev Atomically increases the allowance granted to `spender` by the caller.
*
* This is an alternative to {approve} that can be used as a mitigation for
* problems described in {IERC20-approve}.
*
* Emits an {Approval} event indicating the updated allowance.
*
* Requirements:
*
* - `spender` cannot be the zero address.
*/
function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
address owner = _msgSender();
_approve(owner, spender, allowance(owner, spender) + addedValue);
return true;
}
/**
* @dev Atomically decreases the allowance granted to `spender` by the caller.
*
* This is an alternative to {approve} that can be used as a mitigation for
* problems described in {IERC20-approve}.
*
* Emits an {Approval} event indicating the updated allowance.
*
* Requirements:
*
* - `spender` cannot be the zero address.
* - `spender` must have allowance for the caller of at least
* `subtractedValue`.
*/
function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
address owner = _msgSender();
uint256 currentAllowance = allowance(owner, spender);
require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
unchecked {
_approve(owner, spender, currentAllowance - subtractedValue);
}
return true;
}
/**
* @dev Moves `amount` of tokens from `from` to `to`.
*
* This internal function is equivalent to {transfer}, and can be used to
* e.g. implement automatic token fees, slashing mechanisms, etc.
*
* Emits a {Transfer} event.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `from` must have a balance of at least `amount`.
*/
function _transfer(
address from,
address to,
uint256 amount
) internal virtual {
require(from != address(0), "ERC20: transfer from the zero address");
require(to != address(0), "ERC20: transfer to the zero address");
_beforeTokenTransfer(from, to, amount);
uint256 fromBalance = _balances[from];
require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
unchecked {
_balances[from] = fromBalance - amount;
// Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
// decrementing then incrementing.
_balances[to] += amount;
}
emit Transfer(from, to, amount);
_afterTokenTransfer(from, to, amount);
}
/** @dev Creates `amount` tokens and assigns them to `account`, increasing
* the total supply.
*
* Emits a {Transfer} event with `from` set to the zero address.
*
* Requirements:
*
* - `account` cannot be the zero address.
*/
function _mint(address account, uint256 amount) internal virtual {
require(account != address(0), "ERC20: mint to the zero address");
_beforeTokenTransfer(address(0), account, amount);
_totalSupply += amount;
unchecked {
// Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
_balances[account] += amount;
}
emit Transfer(address(0), account, amount);
_afterTokenTransfer(address(0), account, amount);
}
/**
* @dev Destroys `amount` tokens from `account`, reducing the
* total supply.
*
* Emits a {Transfer} event with `to` set to the zero address.
*
* Requirements:
*
* - `account` cannot be the zero address.
* - `account` must have at least `amount` tokens.
*/
function _burn(address account, uint256 amount) internal virtual {
require(account != address(0), "ERC20: burn from the zero address");
_beforeTokenTransfer(account, address(0), amount);
uint256 accountBalance = _balances[account];
require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
unchecked {
_balances[account] = accountBalance - amount;
// Overflow not possible: amount <= accountBalance <= totalSupply.
_totalSupply -= amount;
}
emit Transfer(account, address(0), amount);
_afterTokenTransfer(account, address(0), amount);
}
/**
* @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
*
* This internal function is equivalent to `approve`, and can be used to
* e.g. set automatic allowances for certain subsystems, etc.
*
* Emits an {Approval} event.
*
* Requirements:
*
* - `owner` cannot be the zero address.
* - `spender` cannot be the zero address.
*/
function _approve(
address owner,
address spender,
uint256 amount
) internal virtual {
require(owner != address(0), "ERC20: approve from the zero address");
require(spender != address(0), "ERC20: approve to the zero address");
_allowances[owner][spender] = amount;
emit Approval(owner, spender, amount);
}
/**
* @dev Updates `owner` s allowance for `spender` based on spent `amount`.
*
* Does not update the allowance amount in case of infinite allowance.
* Revert if not enough allowance is available.
*
* Might emit an {Approval} event.
*/
function _spendAllowance(
address owner,
address spender,
uint256 amount
) internal virtual {
uint256 currentAllowance = allowance(owner, spender);
if (currentAllowance != type(uint256).max) {
require(currentAllowance >= amount, "ERC20: insufficient allowance");
unchecked {
_approve(owner, spender, currentAllowance - amount);
}
}
}
/**
* @dev Hook that is called before any transfer of tokens. This includes
* minting and burning.
*
* Calling conditions:
*
* - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
* will be transferred to `to`.
* - when `from` is zero, `amount` tokens will be minted for `to`.
* - when `to` is zero, `amount` of ``from``'s tokens will be burned.
* - `from` and `to` are never both zero.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _beforeTokenTransfer(
address from,
address to,
uint256 amount
) internal virtual {}
/**
* @dev Hook that is called after any transfer of tokens. This includes
* minting and burning.
*
* Calling conditions:
*
* - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
* has been transferred to `to`.
* - when `from` is zero, `amount` tokens have been minted for `to`.
* - when `to` is zero, `amount` of ``from``'s tokens have been burned.
* - `from` and `to` are never both zero.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _afterTokenTransfer(
address from,
address to,
uint256 amount
) internal virtual {}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (utils/math/SafeMath.sol)
pragma solidity ^0.8.0;
// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.
/**
* @dev Wrappers over Solidity's arithmetic operations.
*
* NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
* now has built in overflow checking.
*/
library SafeMath {
/**
* @dev Returns the addition of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
uint256 c = a + b;
if (c < a) return (false, 0);
return (true, c);
}
}
/**
* @dev Returns the subtraction of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (b > a) return (false, 0);
return (true, a - b);
}
}
/**
* @dev Returns the multiplication of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
// 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 (true, 0);
uint256 c = a * b;
if (c / a != b) return (false, 0);
return (true, c);
}
}
/**
* @dev Returns the division of two unsigned integers, with a division by zero flag.
*
* _Available since v3.4._
*/
function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (b == 0) return (false, 0);
return (true, a / b);
}
}
/**
* @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
*
* _Available since v3.4._
*/
function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (b == 0) return (false, 0);
return (true, a % b);
}
}
/**
* @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) {
return a + b;
}
/**
* @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 a - b;
}
/**
* @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) {
return a * b;
}
/**
* @dev Returns the integer division of two unsigned integers, reverting on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator.
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
return a / b;
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* reverting 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 a % b;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting with custom message on
* overflow (when the result is negative).
*
* CAUTION: This function is deprecated because it requires allocating memory for the error
* message unnecessarily. For custom revert reasons use {trySub}.
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
unchecked {
require(b <= a, errorMessage);
return a - b;
}
}
/**
* @dev Returns the integer division of two unsigned integers, reverting 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) {
unchecked {
require(b > 0, errorMessage);
return a / b;
}
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* reverting with custom message when dividing by zero.
*
* CAUTION: This function is deprecated because it requires allocating memory for the error
* message unnecessarily. For custom revert reasons use {tryMod}.
*
* 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) {
unchecked {
require(b > 0, errorMessage);
return a % b;
}
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)
pragma solidity ^0.8.0;
import "../utils/Context.sol";
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* By default, the owner account will be the one that deploys the contract. This
* can later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor() {
_transferOwnership(_msgSender());
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
_checkOwner();
_;
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if the sender is not the owner.
*/
function _checkOwner() internal view virtual {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Internal function without access restriction.
*/
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)
pragma solidity ^0.8.0;
/**
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)
pragma solidity ^0.8.0;
import "../IERC20.sol";
/**
* @dev Interface for the optional metadata functions from the ERC20 standard.
*
* _Available since v4.1._
*/
interface IERC20Metadata is IERC20 {
/**
* @dev Returns the name of the token.
*/
function name() external view returns (string memory);
/**
* @dev Returns the symbol of the token.
*/
function symbol() external view returns (string memory);
/**
* @dev Returns the decimals places of the token.
*/
function decimals() external view returns (uint8);
}{
"optimizer": {
"enabled": true,
"runs": 200
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"abi"
]
}
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"anonymous":false,"inputs":[],"name":"InscribeSessionOpen","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"tokenAddress","type":"address"}],"name":"TokenDeployed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"ticker","type":"string"}],"name":"TokenRegister","type":"event"},{"inputs":[],"name":"InscribingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PublicOpenInscribing","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"controller","type":"address"}],"name":"addController","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"deployTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_ticker","type":"string"},{"internalType":"uint256","name":"_supply","type":"uint256"},{"internalType":"uint256","name":"_limitPerMint","type":"uint256"}],"name":"deployToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"","type":"string"}],"name":"registers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"controller","type":"address"}],"name":"removeController","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"tokenCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokens","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
60806040526006805460ff1916905534801561001a57600080fd5b5061002433610029565b610079565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b611d58806100886000396000f3fe60806040523480156200001157600080fd5b5060043610620000c35760003560e01c806390ceebf0116200007a57806390ceebf014620001995780639f181b5e14620001a3578063a7fc7a0714620001ad578063c332bc6614620001c4578063f2fde38b14620001d2578063f6a74ed714620001e957600080fd5b806340e8832314620000c857806343b9de3814620000f25780634f64b2be14620001345780635eea8f0f1462000164578063715018a6146200017b5780638da5cb5b1462000187575b600080fd5b620000df620000d936600462000875565b62000200565b6040519081526020015b60405180910390f35b6200012362000103366004620008a5565b805160208183018101805160048252928201919093012091525460ff1681565b6040519015158152602001620000e9565b6200014b6200014536600462000875565b62000222565b6040516001600160a01b039091168152602001620000e9565b6200014b6200017536600462000960565b6200024d565b62000185620004ca565b005b6000546001600160a01b03166200014b565b62000123620004e2565b620000df60035481565b62000185620001be366004620009e4565b6200052a565b600654620001239060ff1681565b62000185620001e3366004620009e4565b62000558565b62000185620001fa366004620009e4565b620005d7565b600281815481106200021157600080fd5b600091825260209091200154905081565b600181815481106200023357600080fd5b6000918252602090912001546001600160a01b0316905081565b600060046200029286868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200060292505050565b604051620002a1919062000a16565b9081526040519081900360200190205460ff1615620003075760405162461bcd60e51b815260206004820152601860248201527f5469636b657220616c726561792072656769737465726564000000000000000060448201526064015b60405180910390fd5b3360009081526005602052604090205460ff16806200032d575060065460ff1615156001145b6200033757600080fd5b6000858585856040516200034b9062000867565b6200035a949392919062000a70565b604051809103906000f08015801562000377573d6000803e3d6000fd5b506001805480820182557fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180546001600160a01b0319166001600160a01b0384161790556002805480830182556000918252427f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace909101556003805493945091926200040690849062000aaf565b9091555050604080516020601f88018190048102820181019092528681526200044a9188908890819084018382808284376000920191909152506200078492505050565b6040516001600160a01b03821681527f91d24864a084ab70b268a1f865e757ca12006cf298d763b6be697302ef86498c9060200160405180910390a17fcd902e60f1c726c052dd9a7b0b81570c2415ebe501718db9abea7778891184f68686604051620004b992919062000acb565b60405180910390a195945050505050565b620004d4620007bb565b620004e0600062000817565b565b6000620004ee620007bb565b6006805460ff191660011790556040517ff71a8c8bc03716cd8cce71f605672ba8c878870fe703a1b56beb397f8779bc6990600090a150600190565b62000534620007bb565b6001600160a01b03166000908152600560205260409020805460ff19166001179055565b62000562620007bb565b6001600160a01b038116620005c95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620002fe565b620005d48162000817565b50565b620005e1620007bb565b6001600160a01b03166000908152600560205260409020805460ff19169055565b606060008290506000815167ffffffffffffffff8111156200062857620006286200088f565b6040519080825280601f01601f19166020018201604052801562000653576020820181803683370190505b50905060005b82518110156200077c5760418382815181106200067a576200067a62000ae9565b016020015160f81c10801590620006ae5750605a838281518110620006a357620006a362000ae9565b016020015160f81c11155b156200071a57828181518110620006c957620006c962000ae9565b602001015160f81c60f81b60f81c6020620006e5919062000aff565b60f81b828281518110620006fd57620006fd62000ae9565b60200101906001600160f81b031916908160001a90535062000767565b8281815181106200072f576200072f62000ae9565b602001015160f81c60f81b8282815181106200074f576200074f62000ae9565b60200101906001600160f81b031916908160001a9053505b80620007738162000b1b565b91505062000659565b509392505050565b600160048260405162000798919062000a16565b908152604051908190036020019020805491151560ff1990921691909117905550565b6000546001600160a01b03163314620004e05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620002fe565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6111eb8062000b3883390190565b6000602082840312156200088857600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b600060208284031215620008b857600080fd5b813567ffffffffffffffff80821115620008d157600080fd5b818401915084601f830112620008e657600080fd5b813581811115620008fb57620008fb6200088f565b604051601f8201601f19908116603f011681019083821181831017156200092657620009266200088f565b816040528281528760208487010111156200094057600080fd5b826020860160208301376000928101602001929092525095945050505050565b600080600080606085870312156200097757600080fd5b843567ffffffffffffffff808211156200099057600080fd5b818701915087601f830112620009a557600080fd5b813581811115620009b557600080fd5b886020828501011115620009c857600080fd5b6020928301999098509187013596604001359550909350505050565b600060208284031215620009f757600080fd5b81356001600160a01b038116811462000a0f57600080fd5b9392505050565b6000825160005b8181101562000a39576020818601810151858301520162000a1d565b506000920191825250919050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062000a8660608301868862000a47565b6020830194909452506040015292915050565b634e487b7160e01b600052601160045260246000fd5b8082018082111562000ac55762000ac562000a99565b92915050565b60208152600062000ae160208301848662000a47565b949350505050565b634e487b7160e01b600052603260045260246000fd5b60ff818116838216019081111562000ac55762000ac562000a99565b60006001820162000b305762000b3062000a99565b506001019056fe6080604052600c805460ff191690553480156200001b57600080fd5b50604051620011eb380380620011eb8339810160408190526200003e91620000f6565b828060036200004e82826200026c565b5060046200005d82826200026c565b5050506200007a620000746200008a60201b60201c565b6200008e565b600a91909155600b555062000338565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b634e487b7160e01b600052604160045260246000fd5b6000806000606084860312156200010c57600080fd5b83516001600160401b03808211156200012457600080fd5b818601915086601f8301126200013957600080fd5b8151818111156200014e576200014e620000e0565b604051601f8201601f19908116603f01168101908382118183101715620001795762000179620000e0565b816040528281526020935089848487010111156200019657600080fd5b600091505b82821015620001ba57848201840151818301850152908301906200019b565b600092810184019290925250908601516040909601519097959650949350505050565b600181811c90821680620001f257607f821691505b6020821081036200021357634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200026757600081815260208120601f850160051c81016020861015620002425750805b601f850160051c820191505b8181101562000263578281556001016200024e565b5050505b505050565b81516001600160401b03811115620002885762000288620000e0565b620002a081620002998454620001dd565b8462000219565b602080601f831160018114620002d85760008415620002bf5750858301515b600019600386901b1c1916600185901b17855562000263565b600085815260208120601f198616915b828110156200030957888601518255948401946001909101908401620002e8565b5085821015620003285787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b610ea380620003486000396000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d714610265578063a9059cbb14610278578063a992f4741461028b578063dd62ed3e14610298578063ecc76576146102ab578063f2fde38b146102b357600080fd5b806370a08231146101fe578063715018a61461022757806379cc67901461022f5780638da5cb5b1461024257806395d89b411461025d57600080fd5b8063313ce567116100ff578063313ce567146101b757806339509351146101c657806342966c68146101d95780634a8c08eb146101ec5780634fb2ed6b146101f557600080fd5b806306fdde031461013c578063095ea7b31461015a57806315c34e601461017d57806318160ddd1461019257806323b872dd146101a4575b600080fd5b6101446102c6565b6040516101519190610cdb565b60405180910390f35b61016d610168366004610d45565b610358565b6040519015158152602001610151565b61019061018b366004610d45565b610372565b005b6008545b604051908152602001610151565b61016d6101b2366004610d6f565b6104f1565b60405160128152602001610151565b61016d6101d4366004610d45565b610515565b6101906101e7366004610dab565b610537565b610196600b5481565b610196600a5481565b61019661020c366004610dc4565b6001600160a01b031660009081526020819052604090205490565b610190610544565b61019061023d366004610d45565b610558565b6005546040516001600160a01b039091168152602001610151565b610144610571565b61016d610273366004610d45565b610580565b61016d610286366004610d45565b6105fb565b600c5461016d9060ff1681565b6101966102a6366004610ddf565b610609565b61016d610634565b6101906102c1366004610dc4565b61067a565b6060600380546102d590610e12565b80601f016020809104026020016040519081016040528092919081815260200182805461030190610e12565b801561034e5780601f106103235761010080835404028352916020019161034e565b820191906000526020600020905b81548152906001019060200180831161033157829003601f168201915b5050505050905090565b6000336103668185856106f0565b60019150505b92915050565b600c5460ff161561038257600080fd5b600a54816009546103939190610e4c565b11156103e65760405162461bcd60e51b815260206004820152601f60248201527f4d6178696d756d20737570706c7920686173206265656e20726561636865640060448201526064015b60405180910390fd5b600b548111156104445760405162461bcd60e51b815260206004820152602360248201527f4d6178696d756d2042617463682073697a6520686173206265656e20726561636044820152621a195960ea1b60648201526084016103dd565b6008546104519082610815565b6008556009546104619082610815565b6009556001600160a01b0382166000908152600660205260409020546104879082610815565b6001600160a01b0383166000908152600660205260409020556104aa8282610828565b816001600160a01b03167f26f774428a8676013ebca8eda789f66727c8f465cb147d4b283178a69b1a5a25826040516104e591815260200190565b60405180910390a25050565b6000336104ff8582856108e7565b61050a858585610961565b506001949350505050565b6000336103668185856105288383610609565b6105329190610e4c565b6106f0565b6105413382610b05565b50565b61054c610c2f565b6105566000610c89565b565b6105638233836108e7565b61056d8282610b05565b5050565b6060600480546102d590610e12565b6000338161058e8286610609565b9050838110156105ee5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016103dd565b61050a82868684036106f0565b600033610366818585610961565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b600061063e610c2f565b600c805460ff191660011790556040517f2b84c02f19995f682928b2e873fc9fcfc12b76d01d1251ab012f84463a6fa7bd90600090a150600190565b610682610c2f565b6001600160a01b0381166106e75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103dd565b61054181610c89565b6001600160a01b0383166107525760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016103dd565b6001600160a01b0382166107b35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016103dd565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b60006108218284610e4c565b9392505050565b6001600160a01b03821661087e5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016103dd565b80600260008282546108909190610e4c565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b60006108f38484610609565b9050600019811461095b578181101561094e5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016103dd565b61095b84848484036106f0565b50505050565b6001600160a01b0383166109c55760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016103dd565b6001600160a01b038216610a275760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016103dd565b6001600160a01b03831660009081526020819052604090205481811015610a9f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016103dd565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a361095b565b6001600160a01b038216610b655760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016103dd565b6001600160a01b03821660009081526020819052604090205481811015610bd95760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016103dd565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610808565b6005546001600160a01b031633146105565760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103dd565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600060208083528351808285015260005b81811015610d0857858101830151858201604001528201610cec565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114610d4057600080fd5b919050565b60008060408385031215610d5857600080fd5b610d6183610d29565b946020939093013593505050565b600080600060608486031215610d8457600080fd5b610d8d84610d29565b9250610d9b60208501610d29565b9150604084013590509250925092565b600060208284031215610dbd57600080fd5b5035919050565b600060208284031215610dd657600080fd5b61082182610d29565b60008060408385031215610df257600080fd5b610dfb83610d29565b9150610e0960208401610d29565b90509250929050565b600181811c90821680610e2657607f821691505b602082108103610e4657634e487b7160e01b600052602260045260246000fd5b50919050565b8082018082111561036c57634e487b7160e01b600052601160045260246000fdfea2646970667358221220ae1d881e86a499e907c4cd0b77f3eaefdf466f86d13a7f1133cbd3bbb827c8cc64736f6c63430008100033a26469706673582212207d30f3f145e2c26268258f4c9c90806afb3419967dc12188445869a1fd4aafbf64736f6c63430008100033
Deployed Bytecode
0x60806040523480156200001157600080fd5b5060043610620000c35760003560e01c806390ceebf0116200007a57806390ceebf014620001995780639f181b5e14620001a3578063a7fc7a0714620001ad578063c332bc6614620001c4578063f2fde38b14620001d2578063f6a74ed714620001e957600080fd5b806340e8832314620000c857806343b9de3814620000f25780634f64b2be14620001345780635eea8f0f1462000164578063715018a6146200017b5780638da5cb5b1462000187575b600080fd5b620000df620000d936600462000875565b62000200565b6040519081526020015b60405180910390f35b6200012362000103366004620008a5565b805160208183018101805160048252928201919093012091525460ff1681565b6040519015158152602001620000e9565b6200014b6200014536600462000875565b62000222565b6040516001600160a01b039091168152602001620000e9565b6200014b6200017536600462000960565b6200024d565b62000185620004ca565b005b6000546001600160a01b03166200014b565b62000123620004e2565b620000df60035481565b62000185620001be366004620009e4565b6200052a565b600654620001239060ff1681565b62000185620001e3366004620009e4565b62000558565b62000185620001fa366004620009e4565b620005d7565b600281815481106200021157600080fd5b600091825260209091200154905081565b600181815481106200023357600080fd5b6000918252602090912001546001600160a01b0316905081565b600060046200029286868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506200060292505050565b604051620002a1919062000a16565b9081526040519081900360200190205460ff1615620003075760405162461bcd60e51b815260206004820152601860248201527f5469636b657220616c726561792072656769737465726564000000000000000060448201526064015b60405180910390fd5b3360009081526005602052604090205460ff16806200032d575060065460ff1615156001145b6200033757600080fd5b6000858585856040516200034b9062000867565b6200035a949392919062000a70565b604051809103906000f08015801562000377573d6000803e3d6000fd5b506001805480820182557fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180546001600160a01b0319166001600160a01b0384161790556002805480830182556000918252427f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace909101556003805493945091926200040690849062000aaf565b9091555050604080516020601f88018190048102820181019092528681526200044a9188908890819084018382808284376000920191909152506200078492505050565b6040516001600160a01b03821681527f91d24864a084ab70b268a1f865e757ca12006cf298d763b6be697302ef86498c9060200160405180910390a17fcd902e60f1c726c052dd9a7b0b81570c2415ebe501718db9abea7778891184f68686604051620004b992919062000acb565b60405180910390a195945050505050565b620004d4620007bb565b620004e0600062000817565b565b6000620004ee620007bb565b6006805460ff191660011790556040517ff71a8c8bc03716cd8cce71f605672ba8c878870fe703a1b56beb397f8779bc6990600090a150600190565b62000534620007bb565b6001600160a01b03166000908152600560205260409020805460ff19166001179055565b62000562620007bb565b6001600160a01b038116620005c95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620002fe565b620005d48162000817565b50565b620005e1620007bb565b6001600160a01b03166000908152600560205260409020805460ff19169055565b606060008290506000815167ffffffffffffffff8111156200062857620006286200088f565b6040519080825280601f01601f19166020018201604052801562000653576020820181803683370190505b50905060005b82518110156200077c5760418382815181106200067a576200067a62000ae9565b016020015160f81c10801590620006ae5750605a838281518110620006a357620006a362000ae9565b016020015160f81c11155b156200071a57828181518110620006c957620006c962000ae9565b602001015160f81c60f81b60f81c6020620006e5919062000aff565b60f81b828281518110620006fd57620006fd62000ae9565b60200101906001600160f81b031916908160001a90535062000767565b8281815181106200072f576200072f62000ae9565b602001015160f81c60f81b8282815181106200074f576200074f62000ae9565b60200101906001600160f81b031916908160001a9053505b80620007738162000b1b565b91505062000659565b509392505050565b600160048260405162000798919062000a16565b908152604051908190036020019020805491151560ff1990921691909117905550565b6000546001600160a01b03163314620004e05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620002fe565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6111eb8062000b3883390190565b6000602082840312156200088857600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b600060208284031215620008b857600080fd5b813567ffffffffffffffff80821115620008d157600080fd5b818401915084601f830112620008e657600080fd5b813581811115620008fb57620008fb6200088f565b604051601f8201601f19908116603f011681019083821181831017156200092657620009266200088f565b816040528281528760208487010111156200094057600080fd5b826020860160208301376000928101602001929092525095945050505050565b600080600080606085870312156200097757600080fd5b843567ffffffffffffffff808211156200099057600080fd5b818701915087601f830112620009a557600080fd5b813581811115620009b557600080fd5b886020828501011115620009c857600080fd5b6020928301999098509187013596604001359550909350505050565b600060208284031215620009f757600080fd5b81356001600160a01b038116811462000a0f57600080fd5b9392505050565b6000825160005b8181101562000a39576020818601810151858301520162000a1d565b506000920191825250919050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600062000a8660608301868862000a47565b6020830194909452506040015292915050565b634e487b7160e01b600052601160045260246000fd5b8082018082111562000ac55762000ac562000a99565b92915050565b60208152600062000ae160208301848662000a47565b949350505050565b634e487b7160e01b600052603260045260246000fd5b60ff818116838216019081111562000ac55762000ac562000a99565b60006001820162000b305762000b3062000a99565b506001019056fe6080604052600c805460ff191690553480156200001b57600080fd5b50604051620011eb380380620011eb8339810160408190526200003e91620000f6565b828060036200004e82826200026c565b5060046200005d82826200026c565b5050506200007a620000746200008a60201b60201c565b6200008e565b600a91909155600b555062000338565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b634e487b7160e01b600052604160045260246000fd5b6000806000606084860312156200010c57600080fd5b83516001600160401b03808211156200012457600080fd5b818601915086601f8301126200013957600080fd5b8151818111156200014e576200014e620000e0565b604051601f8201601f19908116603f01168101908382118183101715620001795762000179620000e0565b816040528281526020935089848487010111156200019657600080fd5b600091505b82821015620001ba57848201840151818301850152908301906200019b565b600092810184019290925250908601516040909601519097959650949350505050565b600181811c90821680620001f257607f821691505b6020821081036200021357634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200026757600081815260208120601f850160051c81016020861015620002425750805b601f850160051c820191505b8181101562000263578281556001016200024e565b5050505b505050565b81516001600160401b03811115620002885762000288620000e0565b620002a081620002998454620001dd565b8462000219565b602080601f831160018114620002d85760008415620002bf5750858301515b600019600386901b1c1916600185901b17855562000263565b600085815260208120601f198616915b828110156200030957888601518255948401946001909101908401620002e8565b5085821015620003285787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b610ea380620003486000396000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d714610265578063a9059cbb14610278578063a992f4741461028b578063dd62ed3e14610298578063ecc76576146102ab578063f2fde38b146102b357600080fd5b806370a08231146101fe578063715018a61461022757806379cc67901461022f5780638da5cb5b1461024257806395d89b411461025d57600080fd5b8063313ce567116100ff578063313ce567146101b757806339509351146101c657806342966c68146101d95780634a8c08eb146101ec5780634fb2ed6b146101f557600080fd5b806306fdde031461013c578063095ea7b31461015a57806315c34e601461017d57806318160ddd1461019257806323b872dd146101a4575b600080fd5b6101446102c6565b6040516101519190610cdb565b60405180910390f35b61016d610168366004610d45565b610358565b6040519015158152602001610151565b61019061018b366004610d45565b610372565b005b6008545b604051908152602001610151565b61016d6101b2366004610d6f565b6104f1565b60405160128152602001610151565b61016d6101d4366004610d45565b610515565b6101906101e7366004610dab565b610537565b610196600b5481565b610196600a5481565b61019661020c366004610dc4565b6001600160a01b031660009081526020819052604090205490565b610190610544565b61019061023d366004610d45565b610558565b6005546040516001600160a01b039091168152602001610151565b610144610571565b61016d610273366004610d45565b610580565b61016d610286366004610d45565b6105fb565b600c5461016d9060ff1681565b6101966102a6366004610ddf565b610609565b61016d610634565b6101906102c1366004610dc4565b61067a565b6060600380546102d590610e12565b80601f016020809104026020016040519081016040528092919081815260200182805461030190610e12565b801561034e5780601f106103235761010080835404028352916020019161034e565b820191906000526020600020905b81548152906001019060200180831161033157829003601f168201915b5050505050905090565b6000336103668185856106f0565b60019150505b92915050565b600c5460ff161561038257600080fd5b600a54816009546103939190610e4c565b11156103e65760405162461bcd60e51b815260206004820152601f60248201527f4d6178696d756d20737570706c7920686173206265656e20726561636865640060448201526064015b60405180910390fd5b600b548111156104445760405162461bcd60e51b815260206004820152602360248201527f4d6178696d756d2042617463682073697a6520686173206265656e20726561636044820152621a195960ea1b60648201526084016103dd565b6008546104519082610815565b6008556009546104619082610815565b6009556001600160a01b0382166000908152600660205260409020546104879082610815565b6001600160a01b0383166000908152600660205260409020556104aa8282610828565b816001600160a01b03167f26f774428a8676013ebca8eda789f66727c8f465cb147d4b283178a69b1a5a25826040516104e591815260200190565b60405180910390a25050565b6000336104ff8582856108e7565b61050a858585610961565b506001949350505050565b6000336103668185856105288383610609565b6105329190610e4c565b6106f0565b6105413382610b05565b50565b61054c610c2f565b6105566000610c89565b565b6105638233836108e7565b61056d8282610b05565b5050565b6060600480546102d590610e12565b6000338161058e8286610609565b9050838110156105ee5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016103dd565b61050a82868684036106f0565b600033610366818585610961565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b600061063e610c2f565b600c805460ff191660011790556040517f2b84c02f19995f682928b2e873fc9fcfc12b76d01d1251ab012f84463a6fa7bd90600090a150600190565b610682610c2f565b6001600160a01b0381166106e75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103dd565b61054181610c89565b6001600160a01b0383166107525760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016103dd565b6001600160a01b0382166107b35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016103dd565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b60006108218284610e4c565b9392505050565b6001600160a01b03821661087e5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016103dd565b80600260008282546108909190610e4c565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b60006108f38484610609565b9050600019811461095b578181101561094e5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016103dd565b61095b84848484036106f0565b50505050565b6001600160a01b0383166109c55760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016103dd565b6001600160a01b038216610a275760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016103dd565b6001600160a01b03831660009081526020819052604090205481811015610a9f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016103dd565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a361095b565b6001600160a01b038216610b655760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016103dd565b6001600160a01b03821660009081526020819052604090205481811015610bd95760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016103dd565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610808565b6005546001600160a01b031633146105565760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103dd565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600060208083528351808285015260005b81811015610d0857858101830151858201604001528201610cec565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114610d4057600080fd5b919050565b60008060408385031215610d5857600080fd5b610d6183610d29565b946020939093013593505050565b600080600060608486031215610d8457600080fd5b610d8d84610d29565b9250610d9b60208501610d29565b9150604084013590509250925092565b600060208284031215610dbd57600080fd5b5035919050565b600060208284031215610dd657600080fd5b61082182610d29565b60008060408385031215610df257600080fd5b610dfb83610d29565b9150610e0960208401610d29565b90509250929050565b600181811c90821680610e2657607f821691505b602082108103610e4657634e487b7160e01b600052602260045260246000fd5b50919050565b8082018082111561036c57634e487b7160e01b600052601160045260246000fdfea2646970667358221220ae1d881e86a499e907c4cd0b77f3eaefdf466f86d13a7f1133cbd3bbb827c8cc64736f6c63430008100033a26469706673582212207d30f3f145e2c26268258f4c9c90806afb3419967dc12188445869a1fd4aafbf64736f6c63430008100033
Deployed Bytecode Sourcemap
92:2066:8:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;157:27;;;;;;:::i;:::-;;:::i;:::-;;;345:25:9;;;333:2;318:18;157:27:8;;;;;;;;221:40;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1605:14:9;;1598:22;1580:41;;1568:2;1553:18;221:40:8;1440:187:9;128:23:8;;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;1796:32:9;;;1778:51;;1766:2;1751:18;128:23:8;1632:203:9;471:607:8;;;;;;:::i;:::-;;:::i;1831:101:0:-;;;:::i;:::-;;1201:85;1247:7;1273:6;-1:-1:-1;;;;;1273:6:0;1201:85;;1084:166:8;;;:::i;190:25::-;;;;;;1256:105;;;;;;:::i;:::-;;:::i;309:34::-;;;;;;;;;2081:198:0;;;;;;:::i;:::-;;:::i;1367:109:8:-;;;;;;:::i;:::-;;:::i;157:27::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;157:27:8;:::o;128:23::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;128:23:8;;-1:-1:-1;128:23:8;:::o;471:607::-;575:7;602:9;612:17;621:7;;612:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;612:8:8;;-1:-1:-1;;;612:17:8:i;:::-;602:28;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:37;594:74;;;;-1:-1:-1;;;594:74:8;;3491:2:9;594:74:8;;;3473:21:9;3530:2;3510:18;;;3503:30;3569:26;3549:18;;;3542:54;3613:18;;594:74:8;;;;;;;;;698:10;686:23;;;;:11;:23;;;;;;;;;:49;;-1:-1:-1;713:14:8;;;;:22;;:14;:22;686:49;678:59;;;;;;756:13;784:7;;793;802:13;772:44;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;826:6:8;:27;;;;;;;;;;;-1:-1:-1;;;;;;826:27:8;-1:-1:-1;;;;;826:27:8;;;;;863:10;:41;;;;;;;-1:-1:-1;863:41:8;;;2135:15;863:41;;;;;914:10;:15;;826:27;;-1:-1:-1;826:6:8;;914:15;;826:6;;914:15;:::i;:::-;;;;-1:-1:-1;;939:20:8;;;;;;;;;;;;;;;;;;;;;;;;951:7;;;;;;939:20;;951:7;;;;939:20;;;;;;;;;-1:-1:-1;939:11:8;;-1:-1:-1;;;939:20:8:i;:::-;974:29;;-1:-1:-1;;;;;1796:32:9;;1778:51;;974:29:8;;1766:2:9;1751:18;974:29:8;;;;;;;1018:22;1032:7;;1018:22;;;;;;;:::i;:::-;;;;;;;;1065:5;471:607;-1:-1:-1;;;;;471:607:8:o;1831:101:0:-;1094:13;:11;:13::i;:::-;1895:30:::1;1922:1;1895:18;:30::i;:::-;1831:101::o:0;1084:166:8:-;1141:12;1094:13:0;:11;:13::i;:::-;1165:14:8::1;:21:::0;;-1:-1:-1;;1165:21:8::1;1182:4;1165:21;::::0;;1201::::1;::::0;::::1;::::0;1165:14:::1;::::0;1201:21:::1;-1:-1:-1::0;1239:4:8::1;1084:166:::0;:::o;1256:105::-;1094:13:0;:11;:13::i;:::-;-1:-1:-1;;;;;1324:23:8::1;;::::0;;;:11:::1;:23;::::0;;;;:30;;-1:-1:-1;;1324:30:8::1;1350:4;1324:30;::::0;;1256:105::o;2081:198:0:-;1094:13;:11;:13::i;:::-;-1:-1:-1;;;;;2169:22:0;::::1;2161:73;;;::::0;-1:-1:-1;;;2161:73:0;;5024:2:9;2161:73:0::1;::::0;::::1;5006:21:9::0;5063:2;5043:18;;;5036:30;5102:34;5082:18;;;5075:62;-1:-1:-1;;;5153:18:9;;;5146:36;5199:19;;2161:73:0::1;4822:402:9::0;2161:73:0::1;2244:28;2263:8;2244:18;:28::i;:::-;2081:198:::0;:::o;1367:109:8:-;1094:13:0;:11;:13::i;:::-;-1:-1:-1;;;;;1438:23:8::1;1464:5;1438:23:::0;;;:11:::1;:23;::::0;;;;:31;;-1:-1:-1;;1438:31:8::1;::::0;;1367:109::o;1579:463::-;1639:13;1664:17;1690:3;1664:30;;1704:19;1736:4;:11;1726:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1726:22:8;;1704:44;;1763:6;1758:247;1779:4;:11;1775:1;:15;1758:247;;;1834:2;1822:4;1827:1;1822:7;;;;;;;;:::i;:::-;;;;;;;1816:20;;;;1815:48;;;1860:2;1848:4;1853:1;1848:7;;;;;;;;:::i;:::-;;;;;;;1842:20;;1815:48;1811:184;;;1908:4;1913:1;1908:7;;;;;;;;:::i;:::-;;;;;;;;;1902:14;;1919:2;1902:19;;;;:::i;:::-;1895:27;;1883:6;1890:1;1883:9;;;;;;;;:::i;:::-;;;;:39;-1:-1:-1;;;;;1883:39:8;;;;;;;;;1811:184;;;1973:4;1978:1;1973:7;;;;;;;;:::i;:::-;;;;;;;;;1961:6;1968:1;1961:9;;;;;;;;:::i;:::-;;;;:19;-1:-1:-1;;;;;1961:19:8;;;;;;;;;1811:184;1792:3;;;;:::i;:::-;;;;1758:247;;;-1:-1:-1;2028:6:8;1579:463;-1:-1:-1;;;1579:463:8:o;1484:89::-;1562:4;1542:9;1552:6;1542:17;;;;;;:::i;:::-;;;;;;;;;;;;;;:24;;;;;-1:-1:-1;;1542:24:8;;;;;;;;;-1:-1:-1;1484:89:8:o;1359:130:0:-;1247:7;1273:6;-1:-1:-1;;;;;1273:6:0;719:10:5;1422:23:0;1414:68;;;;-1:-1:-1;;;1414:68:0;;5856:2:9;1414:68:0;;;5838:21:9;;;5875:18;;;5868:30;5934:34;5914:18;;;5907:62;5986:18;;1414:68:0;5654:356:9;2433:187:0;2506:16;2525:6;;-1:-1:-1;;;;;2541:17:0;;;-1:-1:-1;;;;;;2541:17:0;;;;;;2573:40;;2525:6;;;;;;;2573:40;;2506:16;2573:40;2496:124;2433:187;:::o;-1:-1:-1:-;;;;;;;;:::o;14:180:9:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;-1:-1:-1;165:23:9;;14:180;-1:-1:-1;14:180:9:o;381:127::-;442:10;437:3;433:20;430:1;423:31;473:4;470:1;463:15;497:4;494:1;487:15;513:922;582:6;635:2;623:9;614:7;610:23;606:32;603:52;;;651:1;648;641:12;603:52;691:9;678:23;720:18;761:2;753:6;750:14;747:34;;;777:1;774;767:12;747:34;815:6;804:9;800:22;790:32;;860:7;853:4;849:2;845:13;841:27;831:55;;882:1;879;872:12;831:55;918:2;905:16;940:2;936;933:10;930:36;;;946:18;;:::i;:::-;1021:2;1015:9;989:2;1075:13;;-1:-1:-1;;1071:22:9;;;1095:2;1067:31;1063:40;1051:53;;;1119:18;;;1139:22;;;1116:46;1113:72;;;1165:18;;:::i;:::-;1205:10;1201:2;1194:22;1240:2;1232:6;1225:18;1280:7;1275:2;1270;1266;1262:11;1258:20;1255:33;1252:53;;;1301:1;1298;1291:12;1252:53;1357:2;1352;1348;1344:11;1339:2;1331:6;1327:15;1314:46;1402:1;1380:15;;;1397:2;1376:24;1369:35;;;;-1:-1:-1;1384:6:9;513:922;-1:-1:-1;;;;;513:922:9:o;1840:734::-;1929:6;1937;1945;1953;2006:2;1994:9;1985:7;1981:23;1977:32;1974:52;;;2022:1;2019;2012:12;1974:52;2062:9;2049:23;2091:18;2132:2;2124:6;2121:14;2118:34;;;2148:1;2145;2138:12;2118:34;2186:6;2175:9;2171:22;2161:32;;2231:7;2224:4;2220:2;2216:13;2212:27;2202:55;;2253:1;2250;2243:12;2202:55;2293:2;2280:16;2319:2;2311:6;2308:14;2305:34;;;2335:1;2332;2325:12;2305:34;2382:7;2375:4;2366:6;2362:2;2358:15;2354:26;2351:39;2348:59;;;2403:1;2400;2393:12;2348:59;2434:4;2426:13;;;;2458:6;;-1:-1:-1;2496:20:9;;;2483:34;;2564:2;2549:18;2536:32;;-1:-1:-1;1840:734:9;;-1:-1:-1;;;;1840:734:9:o;2579:286::-;2638:6;2691:2;2679:9;2670:7;2666:23;2662:32;2659:52;;;2707:1;2704;2697:12;2659:52;2733:23;;-1:-1:-1;;;;;2785:31:9;;2775:42;;2765:70;;2831:1;2828;2821:12;2765:70;2854:5;2579:286;-1:-1:-1;;;2579:286:9:o;2870:414::-;3001:3;3039:6;3033:13;3064:1;3074:129;3088:6;3085:1;3082:13;3074:129;;;3186:4;3170:14;;;3166:25;;3160:32;3147:11;;;3140:53;3103:12;3074:129;;;-1:-1:-1;3258:1:9;3222:16;;3247:13;;;-1:-1:-1;3222:16:9;2870:414;-1:-1:-1;2870:414:9:o;3642:267::-;3731:6;3726:3;3719:19;3783:6;3776:5;3769:4;3764:3;3760:14;3747:43;-1:-1:-1;3835:1:9;3810:16;;;3828:4;3806:27;;;3799:38;;;;3891:2;3870:15;;;-1:-1:-1;;3866:29:9;3857:39;;;3853:50;;3642:267::o;3914:389::-;4129:2;4118:9;4111:21;4092:4;4149:62;4207:2;4196:9;4192:18;4184:6;4176;4149:62;:::i;:::-;4242:2;4227:18;;4220:34;;;;-1:-1:-1;4285:2:9;4270:18;4263:34;4141:70;3914:389;-1:-1:-1;;3914:389:9:o;4308:127::-;4369:10;4364:3;4360:20;4357:1;4350:31;4400:4;4397:1;4390:15;4424:4;4421:1;4414:15;4440:125;4505:9;;;4526:10;;;4523:36;;;4539:18;;:::i;:::-;4440:125;;;;:::o;4570:247::-;4729:2;4718:9;4711:21;4692:4;4749:62;4807:2;4796:9;4792:18;4784:6;4776;4749:62;:::i;:::-;4741:70;4570:247;-1:-1:-1;;;;4570:247:9:o;5229:127::-;5290:10;5285:3;5281:20;5278:1;5271:31;5321:4;5318:1;5311:15;5345:4;5342:1;5335:15;5361:148;5449:4;5428:12;;;5442;;;5424:31;;5467:13;;5464:39;;;5483:18;;:::i;5514:135::-;5553:3;5574:17;;;5571:43;;5594:18;;:::i;:::-;-1:-1:-1;5641:1:9;5630:13;;5514:135::o
Swarm Source
ipfs://7d30f3f145e2c26268258f4c9c90806afb3419967dc12188445869a1fd4aafbf
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.