Source Code
Overview
ETH Balance
ETH Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 6 from a total of 6 transactions
| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Approve | 17440283 | 318 days ago | IN | 0 ETH | 0.00000257 | ||||
| Approve | 16940512 | 331 days ago | IN | 0 ETH | 0.00000264 | ||||
| Transfer Ownersh... | 16070617 | 353 days ago | IN | 0 ETH | 0.00000279 | ||||
| Set CCIP Admin | 16070604 | 353 days ago | IN | 0 ETH | 0.00000209 | ||||
| Approve | 16066793 | 353 days ago | IN | 0 ETH | 0.00000272 | ||||
| Accept Ownership | 15865647 | 358 days ago | IN | 0 ETH | 0.00000174 |
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Block | From | To | |||
|---|---|---|---|---|---|---|
| 19957167 | 241 days ago | 0 ETH | ||||
| 19957167 | 241 days ago | 0 ETH | ||||
| 17661550 | 312 days ago | 0 ETH | ||||
| 17661550 | 312 days ago | 0 ETH | ||||
| 17661550 | 312 days ago | 0 ETH | ||||
| 17440287 | 318 days ago | 0 ETH | ||||
| 17440287 | 318 days ago | 0 ETH | ||||
| 17440287 | 318 days ago | 0 ETH | ||||
| 17440287 | 318 days ago | 0 ETH | ||||
| 17440119 | 318 days ago | 0 ETH | ||||
| 17440119 | 318 days ago | 0 ETH | ||||
| 17440119 | 318 days ago | 0 ETH | ||||
| 17440119 | 318 days ago | 0 ETH | ||||
| 17355317 | 320 days ago | 0 ETH | ||||
| 17355317 | 320 days ago | 0 ETH | ||||
| 17355317 | 320 days ago | 0 ETH | ||||
| 17355317 | 320 days ago | 0 ETH | ||||
| 17355317 | 320 days ago | 0 ETH | ||||
| 17355317 | 320 days ago | 0 ETH | ||||
| 17355317 | 320 days ago | 0 ETH | ||||
| 17350331 | 320 days ago | 0 ETH | ||||
| 16940516 | 331 days ago | 0 ETH | ||||
| 16940516 | 331 days ago | 0 ETH | ||||
| 16940516 | 331 days ago | 0 ETH | ||||
| 16940516 | 331 days ago | 0 ETH |
Loading...
Loading
Contract Name:
FactoryBurnMintERC20
Compiler Version
v0.8.24+commit.e11b9ed9
Contract Source Code (Solidity)
/**
*Submitted for verification at lineascan.build/ on 2025-02-26
*/
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
interface IOwnable {
function owner() external returns (address);
function transferOwnership(address recipient) external;
function acceptOwnership() external;
}
pragma solidity ^0.8.4;
/// @notice A minimal contract that implements 2-step ownership transfer and nothing more. It's made to be minimal
/// to reduce the impact of the bytecode size on any contract that inherits from it.
contract Ownable2Step is IOwnable {
/// @notice The pending owner is the address to which ownership may be transferred.
address private s_pendingOwner;
/// @notice The owner is the current owner of the contract.
/// @dev The owner is the second storage variable so any implementing contract could pack other state with it
/// instead of the much less used s_pendingOwner.
address private s_owner;
error OwnerCannotBeZero();
error MustBeProposedOwner();
error CannotTransferToSelf();
error OnlyCallableByOwner();
event OwnershipTransferRequested(address indexed from, address indexed to);
event OwnershipTransferred(address indexed from, address indexed to);
constructor(address newOwner, address pendingOwner) {
if (newOwner == address(0)) {
revert OwnerCannotBeZero();
}
s_owner = newOwner;
if (pendingOwner != address(0)) {
_transferOwnership(pendingOwner);
}
}
/// @notice Get the current owner
function owner() public view override returns (address) {
return s_owner;
}
/// @notice Allows an owner to begin transferring ownership to a new address. The new owner needs to call
/// `acceptOwnership` to accept the transfer before any permissions are changed.
/// @param to The address to which ownership will be transferred.
function transferOwnership(address to) public override onlyOwner {
_transferOwnership(to);
}
/// @notice validate, transfer ownership, and emit relevant events
/// @param to The address to which ownership will be transferred.
function _transferOwnership(address to) private {
if (to == msg.sender) {
revert CannotTransferToSelf();
}
s_pendingOwner = to;
emit OwnershipTransferRequested(s_owner, to);
}
/// @notice Allows an ownership transfer to be completed by the recipient.
function acceptOwnership() external override {
if (msg.sender != s_pendingOwner) {
revert MustBeProposedOwner();
}
address oldOwner = s_owner;
s_owner = msg.sender;
s_pendingOwner = address(0);
emit OwnershipTransferred(oldOwner, msg.sender);
}
/// @notice validate access
function _validateOwnership() internal view {
if (msg.sender != s_owner) {
revert OnlyCallableByOwner();
}
}
/// @notice Reverts if called by anyone other than the contract owner.
modifier onlyOwner() {
_validateOwnership();
_;
}
}
pragma solidity ^0.8.4;
/// @notice Sets the msg.sender to be the owner of the contract and does not set a pending owner.
contract Ownable2StepMsgSender is Ownable2Step {
constructor() Ownable2Step(msg.sender, address(0)) {}
}
// 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);
}
pragma solidity ^0.8.0;
interface IBurnMintERC20 is IERC20 {
/// @notice Mints new tokens for a given address.
/// @param account The address to mint the new tokens to.
/// @param amount The number of tokens to be minted.
/// @dev this function increases the total supply.
function mint(address account, uint256 amount) external;
/// @notice Burns tokens from the sender.
/// @param amount The number of tokens to be burned.
/// @dev this function decreases the total supply.
function burn(uint256 amount) external;
/// @notice Burns tokens from a given address..
/// @param account The address to burn tokens from.
/// @param amount The number of tokens to be burned.
/// @dev this function decreases the total supply.
function burn(address account, uint256 amount) external;
/// @notice Burns tokens from a given address..
/// @param account The address to burn tokens from.
/// @param amount The number of tokens to be burned.
/// @dev this function decreases the total supply.
function burnFrom(address account, uint256 amount) external;
}
// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface for the optional metadata functions from the ERC20 standard.
*
* _Available since v4.1._
*/
interface IERC20Metadata is IERC20 {
/**
* @dev Returns the name of the token.
*/
function name() external view returns (string memory);
/**
* @dev Returns the symbol of the token.
*/
function symbol() external view returns (string memory);
/**
* @dev Returns the decimals places of the token.
*/
function decimals() external view returns (uint8);
}
// 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;
}
}
// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/ERC20.sol)
pragma solidity ^0.8.0;
/**
* @dev Implementation of the {IERC20} interface.
*
* This implementation is agnostic to the way tokens are created. This means
* that a supply mechanism has to be added in a derived contract using {_mint}.
* For a generic mechanism see {ERC20PresetMinterPauser}.
*
* TIP: For a detailed writeup see our guide
* https://forum.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 {}
}
// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/extensions/ERC20Burnable.sol)
pragma solidity ^0.8.0;
/**
* @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);
}
}
pragma solidity ^0.8.0;
interface IGetCCIPAdmin {
/// @notice Returns the admin of the token.
/// @dev This method is named to never conflict with existing methods.
function getCCIPAdmin() external view returns (address);
}
// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC165 standard, as defined in the
* https://eips.ethereum.org/EIPS/eip-165[EIP].
*
* Implementers can declare support of contract interfaces, which can then be
* queried by others ({ERC165Checker}).
*
* For an implementation, see {ERC165}.
*/
interface IERC165 {
/**
* @dev Returns true if this contract implements the interface defined by
* `interfaceId`. See the corresponding
* https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
* to learn more about how these ids are created.
*
* This function call must use less than 30 000 gas.
*/
function supportsInterface(bytes4 interfaceId) external view returns (bool);
}
// OpenZeppelin Contracts (last updated v4.8.0) (utils/structs/EnumerableSet.sol)
// This file was procedurally generated from scripts/generate/templates/EnumerableSet.js.
pragma solidity ^0.8.0;
/**
* @dev Library for managing
* https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive
* types.
*
* Sets have the following properties:
*
* - Elements are added, removed, and checked for existence in constant time
* (O(1)).
* - Elements are enumerated in O(n). No guarantees are made on the ordering.
*
* ```
* contract Example {
* // Add the library methods
* using EnumerableSet for EnumerableSet.AddressSet;
*
* // Declare a set state variable
* EnumerableSet.AddressSet private mySet;
* }
* ```
*
* As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`)
* and `uint256` (`UintSet`) are supported.
*
* [WARNING]
* ====
* Trying to delete such a structure from storage will likely result in data corruption, rendering the structure
* unusable.
* See https://github.com/ethereum/solidity/pull/11843[ethereum/solidity#11843] for more info.
*
* In order to clean an EnumerableSet, you can either remove all elements one by one or create a fresh instance using an
* array of EnumerableSet.
* ====
*/
library EnumerableSet {
// To implement this library for multiple types with as little code
// repetition as possible, we write it in terms of a generic Set type with
// bytes32 values.
// The Set implementation uses private functions, and user-facing
// implementations (such as AddressSet) are just wrappers around the
// underlying Set.
// This means that we can only create new EnumerableSets for types that fit
// in bytes32.
struct Set {
// Storage of set values
bytes32[] _values;
// Position of the value in the `values` array, plus 1 because index 0
// means a value is not in the set.
mapping(bytes32 => uint256) _indexes;
}
/**
* @dev Add a value to a set. O(1).
*
* Returns true if the value was added to the set, that is if it was not
* already present.
*/
function _add(Set storage set, bytes32 value) private returns (bool) {
if (!_contains(set, value)) {
set._values.push(value);
// The value is stored at length-1, but we add 1 to all indexes
// and use 0 as a sentinel value
set._indexes[value] = set._values.length;
return true;
} else {
return false;
}
}
/**
* @dev Removes a value from a set. O(1).
*
* Returns true if the value was removed from the set, that is if it was
* present.
*/
function _remove(Set storage set, bytes32 value) private returns (bool) {
// We read and store the value's index to prevent multiple reads from the same storage slot
uint256 valueIndex = set._indexes[value];
if (valueIndex != 0) {
// Equivalent to contains(set, value)
// To delete an element from the _values array in O(1), we swap the element to delete with the last one in
// the array, and then remove the last element (sometimes called as 'swap and pop').
// This modifies the order of the array, as noted in {at}.
uint256 toDeleteIndex = valueIndex - 1;
uint256 lastIndex = set._values.length - 1;
if (lastIndex != toDeleteIndex) {
bytes32 lastValue = set._values[lastIndex];
// Move the last value to the index where the value to delete is
set._values[toDeleteIndex] = lastValue;
// Update the index for the moved value
set._indexes[lastValue] = valueIndex; // Replace lastValue's index to valueIndex
}
// Delete the slot where the moved value was stored
set._values.pop();
// Delete the index for the deleted slot
delete set._indexes[value];
return true;
} else {
return false;
}
}
/**
* @dev Returns true if the value is in the set. O(1).
*/
function _contains(
Set storage set,
bytes32 value
) private view returns (bool) {
return set._indexes[value] != 0;
}
/**
* @dev Returns the number of values on the set. O(1).
*/
function _length(Set storage set) private view returns (uint256) {
return set._values.length;
}
/**
* @dev Returns the value stored at position `index` in the set. O(1).
*
* Note that there are no guarantees on the ordering of values inside the
* array, and it may change when more values are added or removed.
*
* Requirements:
*
* - `index` must be strictly less than {length}.
*/
function _at(
Set storage set,
uint256 index
) private view returns (bytes32) {
return set._values[index];
}
/**
* @dev Return the entire set in an array
*
* WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed
* to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that
* this function has an unbounded cost, and using it as part of a state-changing function may render the function
* uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.
*/
function _values(Set storage set) private view returns (bytes32[] memory) {
return set._values;
}
// Bytes32Set
struct Bytes32Set {
Set _inner;
}
/**
* @dev Add a value to a set. O(1).
*
* Returns true if the value was added to the set, that is if it was not
* already present.
*/
function add(
Bytes32Set storage set,
bytes32 value
) internal returns (bool) {
return _add(set._inner, value);
}
/**
* @dev Removes a value from a set. O(1).
*
* Returns true if the value was removed from the set, that is if it was
* present.
*/
function remove(
Bytes32Set storage set,
bytes32 value
) internal returns (bool) {
return _remove(set._inner, value);
}
/**
* @dev Returns true if the value is in the set. O(1).
*/
function contains(
Bytes32Set storage set,
bytes32 value
) internal view returns (bool) {
return _contains(set._inner, value);
}
/**
* @dev Returns the number of values in the set. O(1).
*/
function length(Bytes32Set storage set) internal view returns (uint256) {
return _length(set._inner);
}
/**
* @dev Returns the value stored at position `index` in the set. O(1).
*
* Note that there are no guarantees on the ordering of values inside the
* array, and it may change when more values are added or removed.
*
* Requirements:
*
* - `index` must be strictly less than {length}.
*/
function at(
Bytes32Set storage set,
uint256 index
) internal view returns (bytes32) {
return _at(set._inner, index);
}
/**
* @dev Return the entire set in an array
*
* WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed
* to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that
* this function has an unbounded cost, and using it as part of a state-changing function may render the function
* uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.
*/
function values(
Bytes32Set storage set
) internal view returns (bytes32[] memory) {
bytes32[] memory store = _values(set._inner);
bytes32[] memory result;
/// @solidity memory-safe-assembly
assembly {
result := store
}
return result;
}
// AddressSet
struct AddressSet {
Set _inner;
}
/**
* @dev Add a value to a set. O(1).
*
* Returns true if the value was added to the set, that is if it was not
* already present.
*/
function add(
AddressSet storage set,
address value
) internal returns (bool) {
return _add(set._inner, bytes32(uint256(uint160(value))));
}
/**
* @dev Removes a value from a set. O(1).
*
* Returns true if the value was removed from the set, that is if it was
* present.
*/
function remove(
AddressSet storage set,
address value
) internal returns (bool) {
return _remove(set._inner, bytes32(uint256(uint160(value))));
}
/**
* @dev Returns true if the value is in the set. O(1).
*/
function contains(
AddressSet storage set,
address value
) internal view returns (bool) {
return _contains(set._inner, bytes32(uint256(uint160(value))));
}
/**
* @dev Returns the number of values in the set. O(1).
*/
function length(AddressSet storage set) internal view returns (uint256) {
return _length(set._inner);
}
/**
* @dev Returns the value stored at position `index` in the set. O(1).
*
* Note that there are no guarantees on the ordering of values inside the
* array, and it may change when more values are added or removed.
*
* Requirements:
*
* - `index` must be strictly less than {length}.
*/
function at(
AddressSet storage set,
uint256 index
) internal view returns (address) {
return address(uint160(uint256(_at(set._inner, index))));
}
/**
* @dev Return the entire set in an array
*
* WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed
* to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that
* this function has an unbounded cost, and using it as part of a state-changing function may render the function
* uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.
*/
function values(
AddressSet storage set
) internal view returns (address[] memory) {
bytes32[] memory store = _values(set._inner);
address[] memory result;
/// @solidity memory-safe-assembly
assembly {
result := store
}
return result;
}
// UintSet
struct UintSet {
Set _inner;
}
/**
* @dev Add a value to a set. O(1).
*
* Returns true if the value was added to the set, that is if it was not
* already present.
*/
function add(UintSet storage set, uint256 value) internal returns (bool) {
return _add(set._inner, bytes32(value));
}
/**
* @dev Removes a value from a set. O(1).
*
* Returns true if the value was removed from the set, that is if it was
* present.
*/
function remove(
UintSet storage set,
uint256 value
) internal returns (bool) {
return _remove(set._inner, bytes32(value));
}
/**
* @dev Returns true if the value is in the set. O(1).
*/
function contains(
UintSet storage set,
uint256 value
) internal view returns (bool) {
return _contains(set._inner, bytes32(value));
}
/**
* @dev Returns the number of values in the set. O(1).
*/
function length(UintSet storage set) internal view returns (uint256) {
return _length(set._inner);
}
/**
* @dev Returns the value stored at position `index` in the set. O(1).
*
* Note that there are no guarantees on the ordering of values inside the
* array, and it may change when more values are added or removed.
*
* Requirements:
*
* - `index` must be strictly less than {length}.
*/
function at(
UintSet storage set,
uint256 index
) internal view returns (uint256) {
return uint256(_at(set._inner, index));
}
/**
* @dev Return the entire set in an array
*
* WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed
* to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that
* this function has an unbounded cost, and using it as part of a state-changing function may render the function
* uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.
*/
function values(
UintSet storage set
) internal view returns (uint256[] memory) {
bytes32[] memory store = _values(set._inner);
uint256[] memory result;
/// @solidity memory-safe-assembly
assembly {
result := store
}
return result;
}
}
pragma solidity 0.8.24;
/// @notice A basic ERC20 compatible token contract with burn and minting roles.
/// @dev The constructor has been modified to support the deployment pattern used by a factory contract.
/// @dev The total supply can be limited during deployment.
contract FactoryBurnMintERC20 is
IBurnMintERC20,
IGetCCIPAdmin,
IERC165,
ERC20Burnable,
Ownable2StepMsgSender
{
using EnumerableSet for EnumerableSet.AddressSet;
error SenderNotMinter(address sender);
error SenderNotBurner(address sender);
error MaxSupplyExceeded(uint256 supplyAfterMint);
event MintAccessGranted(address minter);
event BurnAccessGranted(address burner);
event MintAccessRevoked(address minter);
event BurnAccessRevoked(address burner);
event CCIPAdminTransferred(
address indexed previousAdmin,
address indexed newAdmin
);
/// @dev The number of decimals for the token
uint8 internal immutable i_decimals;
/// @dev The maximum supply of the token, 0 if unlimited
uint256 internal immutable i_maxSupply;
/// @dev the CCIPAdmin can be used to register with the CCIP token admin registry, but has no other special powers,
/// and can only be transferred by the owner.
address internal s_ccipAdmin;
/// @dev the allowed minter addresses
EnumerableSet.AddressSet internal s_minters;
/// @dev the allowed burner addresses
EnumerableSet.AddressSet internal s_burners;
/// @dev the underscores in parameter names are used to suppress compiler warnings about shadowing ERC20 functions
constructor(
string memory name,
string memory symbol,
uint8 decimals_,
uint256 maxSupply_,
uint256 preMint,
address newOwner
) ERC20(name, symbol) {
i_decimals = decimals_;
i_maxSupply = maxSupply_;
s_ccipAdmin = newOwner;
// Mint the initial supply to the new Owner, saving gas by not calling if the mint amount is zero
if (preMint != 0) _mint(newOwner, preMint);
// Grant the deployer the minter and burner roles. This contract is expected to be deployed by a factory
// contract that will transfer ownership to the correct address after deployment, so granting minting and burning
// privileges here saves gas by not requiring two transactions.
grantMintRole(newOwner);
grantBurnRole(newOwner);
}
/// @inheritdoc IERC165
function supportsInterface(
bytes4 interfaceId
) public pure virtual override returns (bool) {
return
interfaceId == type(IERC20).interfaceId ||
interfaceId == type(IBurnMintERC20).interfaceId ||
interfaceId == type(IERC165).interfaceId ||
interfaceId == type(IOwnable).interfaceId ||
interfaceId == type(IGetCCIPAdmin).interfaceId;
}
// ================================================================
// │ ERC20 │
// ================================================================
/// @dev Returns the number of decimals used in its user representation.
function decimals() public view virtual override returns (uint8) {
return i_decimals;
}
/// @dev Returns the max supply of the token, 0 if unlimited.
function maxSupply() public view virtual returns (uint256) {
return i_maxSupply;
}
/// @dev Uses OZ ERC20 _transfer to disallow sending to address(0).
/// @dev Disallows sending to address(this)
function _transfer(
address from,
address to,
uint256 amount
) internal virtual override validAddress(to) {
super._transfer(from, to, amount);
}
/// @dev Uses OZ ERC20 _approve to disallow approving for address(0).
/// @dev Disallows approving for address(this)
function _approve(
address owner,
address spender,
uint256 amount
) internal virtual override validAddress(spender) {
super._approve(owner, spender, amount);
}
/// @dev Exists to be backwards compatible with the older naming convention.
/// @param spender the account being approved to spend on the users' behalf.
/// @param subtractedValue the amount being removed from the approval.
/// @return success Bool to return if the approval was successfully decreased.
function decreaseApproval(
address spender,
uint256 subtractedValue
) external returns (bool success) {
return decreaseAllowance(spender, subtractedValue);
}
/// @dev Exists to be backwards compatible with the older naming convention.
/// @param spender the account being approved to spend on the users' behalf.
/// @param addedValue the amount being added to the approval.
function increaseApproval(address spender, uint256 addedValue) external {
increaseAllowance(spender, addedValue);
}
// ================================================================
// │ Burning & minting │
// ================================================================
/// @inheritdoc ERC20Burnable
/// @dev Uses OZ ERC20 _burn to disallow burning from address(0).
/// @dev Decreases the total supply.
function burn(
uint256 amount
) public override(IBurnMintERC20, ERC20Burnable) onlyBurner {
super.burn(amount);
}
/// @inheritdoc IBurnMintERC20
/// @dev Alias for BurnFrom for compatibility with the older naming convention.
/// @dev Uses burnFrom for all validation & logic.
function burn(address account, uint256 amount) public virtual override {
burnFrom(account, amount);
}
/// @inheritdoc ERC20Burnable
/// @dev Uses OZ ERC20 _burn to disallow burning from address(0).
/// @dev Decreases the total supply.
function burnFrom(
address account,
uint256 amount
) public override(IBurnMintERC20, ERC20Burnable) onlyBurner {
super.burnFrom(account, amount);
}
/// @inheritdoc IBurnMintERC20
/// @dev Uses OZ ERC20 _mint to disallow minting to address(0).
/// @dev Disallows minting to address(this)
/// @dev Increases the total supply.
function mint(
address account,
uint256 amount
) external override onlyMinter validAddress(account) {
if (i_maxSupply != 0 && totalSupply() + amount > i_maxSupply)
revert MaxSupplyExceeded(totalSupply() + amount);
_mint(account, amount);
}
// ================================================================
// │ Roles │
// ================================================================
/// @notice grants both mint and burn roles to `burnAndMinter`.
/// @dev calls public functions so this function does not require
/// access controls. This is handled in the inner functions.
function grantMintAndBurnRoles(address burnAndMinter) external {
grantMintRole(burnAndMinter);
grantBurnRole(burnAndMinter);
}
/// @notice Grants mint role to the given address.
/// @dev only the owner can call this function.
function grantMintRole(address minter) public onlyOwner {
if (s_minters.add(minter)) {
emit MintAccessGranted(minter);
}
}
/// @notice Grants burn role to the given address.
/// @dev only the owner can call this function.
/// @param burner the address to grant the burner role to
function grantBurnRole(address burner) public onlyOwner {
if (s_burners.add(burner)) {
emit BurnAccessGranted(burner);
}
}
/// @notice Revokes mint role for the given address.
/// @dev only the owner can call this function.
/// @param minter the address to revoke the mint role from.
function revokeMintRole(address minter) external onlyOwner {
if (s_minters.remove(minter)) {
emit MintAccessRevoked(minter);
}
}
/// @notice Revokes burn role from the given address.
/// @dev only the owner can call this function
/// @param burner the address to revoke the burner role from
function revokeBurnRole(address burner) external onlyOwner {
if (s_burners.remove(burner)) {
emit BurnAccessRevoked(burner);
}
}
/// @notice Returns all permissioned minters
function getMinters() external view returns (address[] memory) {
return s_minters.values();
}
/// @notice Returns all permissioned burners
function getBurners() external view returns (address[] memory) {
return s_burners.values();
}
/// @notice Returns the current CCIPAdmin
function getCCIPAdmin() external view returns (address) {
return s_ccipAdmin;
}
/// @notice Transfers the CCIPAdmin role to a new address
/// @dev only the owner can call this function, NOT the current ccipAdmin, and 1-step ownership transfer is used.
/// @param newAdmin The address to transfer the CCIPAdmin role to. Setting to address(0) is a valid way to revoke
/// the role
function setCCIPAdmin(address newAdmin) public onlyOwner {
address currentAdmin = s_ccipAdmin;
s_ccipAdmin = newAdmin;
emit CCIPAdminTransferred(currentAdmin, newAdmin);
}
// ================================================================
// │ Access │
// ================================================================
/// @notice Checks whether a given address is a minter for this token.
/// @return true if the address is allowed to mint.
function isMinter(address minter) public view returns (bool) {
return s_minters.contains(minter);
}
/// @notice Checks whether a given address is a burner for this token.
/// @return true if the address is allowed to burn.
function isBurner(address burner) public view returns (bool) {
return s_burners.contains(burner);
}
/// @notice Checks whether the msg.sender is a permissioned minter for this token
/// @dev Reverts with a SenderNotMinter if the check fails
modifier onlyMinter() {
if (!isMinter(msg.sender)) revert SenderNotMinter(msg.sender);
_;
}
/// @notice Checks whether the msg.sender is a permissioned burner for this token
/// @dev Reverts with a SenderNotBurner if the check fails
modifier onlyBurner() {
if (!isBurner(msg.sender)) revert SenderNotBurner(msg.sender);
_;
}
/// @notice Check if recipient is valid (not this contract address).
/// @param recipient the account we transfer/approve to.
/// @dev Reverts with an empty revert to be compatible with the existing link token when
/// the recipient is this contract address.
modifier validAddress(address recipient) virtual {
// solhint-disable-next-line reason-string, gas-custom-errors
if (recipient == address(this)) revert();
_;
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"uint8","name":"decimals_","type":"uint8"},{"internalType":"uint256","name":"maxSupply_","type":"uint256"},{"internalType":"uint256","name":"preMint","type":"uint256"},{"internalType":"address","name":"newOwner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"CannotTransferToSelf","type":"error"},{"inputs":[{"internalType":"uint256","name":"supplyAfterMint","type":"uint256"}],"name":"MaxSupplyExceeded","type":"error"},{"inputs":[],"name":"MustBeProposedOwner","type":"error"},{"inputs":[],"name":"OnlyCallableByOwner","type":"error"},{"inputs":[],"name":"OwnerCannotBeZero","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"SenderNotBurner","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"SenderNotMinter","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"burner","type":"address"}],"name":"BurnAccessGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"burner","type":"address"}],"name":"BurnAccessRevoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousAdmin","type":"address"},{"indexed":true,"internalType":"address","name":"newAdmin","type":"address"}],"name":"CCIPAdminTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"minter","type":"address"}],"name":"MintAccessGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"minter","type":"address"}],"name":"MintAccessRevoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"OwnershipTransferRequested","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"OwnershipTransferred","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":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"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":"subtractedValue","type":"uint256"}],"name":"decreaseApproval","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getBurners","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCCIPAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMinters","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"burner","type":"address"}],"name":"grantBurnRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"burnAndMinter","type":"address"}],"name":"grantMintAndBurnRoles","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"minter","type":"address"}],"name":"grantMintRole","outputs":[],"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":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseApproval","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"burner","type":"address"}],"name":"isBurner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"minter","type":"address"}],"name":"isMinter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"burner","type":"address"}],"name":"revokeBurnRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"minter","type":"address"}],"name":"revokeMintRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAdmin","type":"address"}],"name":"setCCIPAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","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":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
60c06040523480156200001157600080fd5b506040516200234c3803806200234c833981016040819052620000349162000476565b33600087876003620000478382620005bf565b506004620000568282620005bf565b5050506001600160a01b0382166200008157604051639b15e16f60e01b815260040160405180910390fd5b600680546001600160a01b0319166001600160a01b0384811691909117909155811615620000b457620000b48162000112565b505060ff841660805260a0839052600780546001600160a01b0319166001600160a01b0383161790558115620000f057620000f081836200018e565b620000fb8162000254565b6200010681620002b2565b505050505050620006ad565b336001600160a01b038216036200013c57604051636d6c4ee560e11b815260040160405180910390fd5b600580546001600160a01b0319166001600160a01b03838116918217909255600654604051919216907fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae127890600090a350565b6001600160a01b038216620001e95760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b8060026000828254620001fd91906200068b565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6200025e6200030e565b6200026b6008826200033c565b15620002af576040516001600160a01b03821681527fe46fef8bbff1389d9010703cf8ebb363fb3daf5bf56edc27080b67bc8d9251ea906020015b60405180910390a15b50565b620002bc6200030e565b620002c9600a826200033c565b15620002af576040516001600160a01b03821681527f92308bb7573b2a3d17ddb868b39d8ebec433f3194421abc22d084f89658c9bad90602001620002a6565b505050565b6006546001600160a01b031633146200033a576040516315ae3a6f60e11b815260040160405180910390fd5b565b600062000353836001600160a01b0384166200035c565b90505b92915050565b6000818152600183016020526040812054620003a55750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915562000356565b50600062000356565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620003d657600080fd5b81516001600160401b0380821115620003f357620003f3620003ae565b604051601f8301601f19908116603f011681019082821181831017156200041e576200041e620003ae565b81604052838152602092508660208588010111156200043c57600080fd5b600091505b8382101562000460578582018301518183018401529082019062000441565b6000602085830101528094505050505092915050565b60008060008060008060c087890312156200049057600080fd5b86516001600160401b0380821115620004a857600080fd5b620004b68a838b01620003c4565b97506020890151915080821115620004cd57600080fd5b50620004dc89828a01620003c4565b955050604087015160ff81168114620004f457600080fd5b6060880151608089015160a08a015192965090945092506001600160a01b03811681146200052157600080fd5b809150509295509295509295565b600181811c908216806200054457607f821691505b6020821081036200056557634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000309576000816000526020600020601f850160051c81016020861015620005965750805b601f850160051c820191505b81811015620005b757828155600101620005a2565b505050505050565b81516001600160401b03811115620005db57620005db620003ae565b620005f381620005ec84546200052f565b846200056b565b602080601f8311600181146200062b5760008415620006125750858301515b600019600386901b1c1916600185901b178555620005b7565b600085815260208120601f198616915b828110156200065c578886015182559484019460019091019084016200063b565b50858210156200067b5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b808201808211156200035657634e487b7160e01b600052601160045260246000fd5b60805160a051611c6b620006e1600039600081816104970152818161083c01526108660152600061028c0152611c6b6000f3fe608060405234801561001057600080fd5b506004361061020b5760003560e01c806386fe8b431161012a578063aa271e1a116100bd578063d5abeb011161008c578063dd62ed3e11610071578063dd62ed3e146104ce578063f2fde38b14610514578063f81094f31461052757600080fd5b8063d5abeb0114610495578063d73dd623146104bb57600080fd5b8063aa271e1a14610449578063c2e3273d1461045c578063c630948d1461046f578063c64d0ebc1461048257600080fd5b80639dc29fac116100f95780639dc29fac146103fd578063a457c2d714610410578063a8fa343c14610423578063a9059cbb1461043657600080fd5b806386fe8b43146103905780638da5cb5b146103985780638fd6a6ac146103d757806395d89b41146103f557600080fd5b806342966c68116101a25780636b32810b116101715780636b32810b1461032a57806370a082311461033f57806379ba50971461037557806379cc67901461037d57600080fd5b806342966c68146102de5780634334614a146102f15780634f5632f814610304578063661884631461031757600080fd5b806323b872dd116101de57806323b872dd14610272578063313ce5671461028557806339509351146102b657806340c10f19146102c957600080fd5b806301ffc9a71461021057806306fdde0314610238578063095ea7b31461024d57806318160ddd14610260575b600080fd5b61022361021e366004611930565b61053a565b60405190151581526020015b60405180910390f35b6102406106b7565b60405161022f9190611972565b61022361025b366004611a08565b610749565b6002545b60405190815260200161022f565b610223610280366004611a32565b610761565b60405160ff7f000000000000000000000000000000000000000000000000000000000000000016815260200161022f565b6102236102c4366004611a08565b610785565b6102dc6102d7366004611a08565b6107d1565b005b6102dc6102ec366004611a6e565b6108f8565b6102236102ff366004611a87565b610945565b6102dc610312366004611a87565b610952565b610223610325366004611a08565b6109b7565b6103326109ca565b60405161022f9190611aa2565b61026461034d366004611a87565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6102dc6109db565b6102dc61038b366004611a08565b610aac565b610332610afb565b60065473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161022f565b60075473ffffffffffffffffffffffffffffffffffffffff166103b2565b610240610b07565b6102dc61040b366004611a08565b610b16565b61022361041e366004611a08565b610b20565b6102dc610431366004611a87565b610bf1565b610223610444366004611a08565b610c70565b610223610457366004611a87565b610c7e565b6102dc61046a366004611a87565b610c8b565b6102dc61047d366004611a87565b610ce9565b6102dc610490366004611a87565b610cf7565b7f0000000000000000000000000000000000000000000000000000000000000000610264565b6102dc6104c9366004611a08565b610d55565b6102646104dc366004611afc565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6102dc610522366004611a87565b610d5f565b6102dc610535366004611a87565b610d70565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f36372b070000000000000000000000000000000000000000000000000000000014806105cd57507fffffffff0000000000000000000000000000000000000000000000000000000082167fe6599b4d00000000000000000000000000000000000000000000000000000000145b8061061957507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b8061066557507fffffffff0000000000000000000000000000000000000000000000000000000082167f06e2784700000000000000000000000000000000000000000000000000000000145b806106b157507fffffffff0000000000000000000000000000000000000000000000000000000082167f8fd6a6ac00000000000000000000000000000000000000000000000000000000145b92915050565b6060600380546106c690611b2f565b80601f01602080910402602001604051908101604052809291908181526020018280546106f290611b2f565b801561073f5780601f106107145761010080835404028352916020019161073f565b820191906000526020600020905b81548152906001019060200180831161072257829003601f168201915b5050505050905090565b600033610757818585610dce565b5060019392505050565b60003361076f858285610e02565b61077a858585610ed3565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919061075790829086906107cc908790611bb1565b610dce565b6107da33610c7e565b610817576040517fe2c8c9d50000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b813073ffffffffffffffffffffffffffffffffffffffff82160361083a57600080fd5b7f00000000000000000000000000000000000000000000000000000000000000001580159061089b57507f00000000000000000000000000000000000000000000000000000000000000008261088f60025490565b6108999190611bb1565b115b156108e957816108aa60025490565b6108b49190611bb1565b6040517fcbbf111300000000000000000000000000000000000000000000000000000000815260040161080e91815260200190565b6108f38383610f01565b505050565b61090133610945565b610939576040517fc820b10b00000000000000000000000000000000000000000000000000000000815233600482015260240161080e565b61094281610ff4565b50565b60006106b1600a83610ffe565b61095a61102d565b610965600a82611080565b156109425760405173ffffffffffffffffffffffffffffffffffffffff821681527f0a675452746933cefe3d74182e78db7afe57ba60eaa4234b5d85e9aa41b0610c906020015b60405180910390a150565b60006109c38383610b20565b9392505050565b60606109d660086110a2565b905090565b60055473ffffffffffffffffffffffffffffffffffffffff163314610a2c576040517f02b543c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000008082163390811790935560058054909116905560405173ffffffffffffffffffffffffffffffffffffffff909116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a350565b610ab533610945565b610aed576040517fc820b10b00000000000000000000000000000000000000000000000000000000815233600482015260240161080e565b610af782826110af565b5050565b60606109d6600a6110a2565b6060600480546106c690611b2f565b610af78282610aac565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919083811015610be4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161080e565b61077a8286868403610dce565b610bf961102d565b6007805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f9524c9e4b0b61eb018dd58a1cd856e3e74009528328ab4a613b434fa631d724290600090a35050565b600033610757818585610ed3565b60006106b1600883610ffe565b610c9361102d565b610c9e6008826110c4565b156109425760405173ffffffffffffffffffffffffffffffffffffffff821681527fe46fef8bbff1389d9010703cf8ebb363fb3daf5bf56edc27080b67bc8d9251ea906020016109ac565b610cf281610c8b565b610942815b610cff61102d565b610d0a600a826110c4565b156109425760405173ffffffffffffffffffffffffffffffffffffffff821681527f92308bb7573b2a3d17ddb868b39d8ebec433f3194421abc22d084f89658c9bad906020016109ac565b6108f38282610785565b610d6761102d565b610942816110e6565b610d7861102d565b610d83600882611080565b156109425760405173ffffffffffffffffffffffffffffffffffffffff821681527fed998b960f6340d045f620c119730f7aa7995e7425c2401d3a5b64ff998a59e9906020016109ac565b813073ffffffffffffffffffffffffffffffffffffffff821603610df157600080fd5b610dfc8484846111ac565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610dfc5781811015610ec6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161080e565b610dfc8484848403610dce565b813073ffffffffffffffffffffffffffffffffffffffff821603610ef657600080fd5b610dfc84848461135f565b73ffffffffffffffffffffffffffffffffffffffff8216610f7e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161080e565b8060026000828254610f909190611bb1565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b61094233826115ce565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260018301602052604081205415156109c3565b60065473ffffffffffffffffffffffffffffffffffffffff16331461107e576040517f2b5c74de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60006109c38373ffffffffffffffffffffffffffffffffffffffff8416611792565b606060006109c383611885565b6110ba823383610e02565b610af782826115ce565b60006109c38373ffffffffffffffffffffffffffffffffffffffff84166118e1565b3373ffffffffffffffffffffffffffffffffffffffff821603611135576040517fdad89dca00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff838116918217909255600654604051919216907fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae127890600090a350565b73ffffffffffffffffffffffffffffffffffffffff831661124e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161080e565b73ffffffffffffffffffffffffffffffffffffffff82166112f1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161080e565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316611402576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161080e565b73ffffffffffffffffffffffffffffffffffffffff82166114a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161080e565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260409020548181101561155b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161080e565b73ffffffffffffffffffffffffffffffffffffffff848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610dfc565b73ffffffffffffffffffffffffffffffffffffffff8216611671576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161080e565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015611727576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161080e565b73ffffffffffffffffffffffffffffffffffffffff83166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b6000818152600183016020526040812054801561187b5760006117b6600183611bc4565b85549091506000906117ca90600190611bc4565b905081811461182f5760008660000182815481106117ea576117ea611bd7565b906000526020600020015490508087600001848154811061180d5761180d611bd7565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061184057611840611c06565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506106b1565b60009150506106b1565b6060816000018054806020026020016040519081016040528092919081815260200182805480156118d557602002820191906000526020600020905b8154815260200190600101908083116118c1575b50505050509050919050565b6000818152600183016020526040812054611928575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556106b1565b5060006106b1565b60006020828403121561194257600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146109c357600080fd5b60006020808352835180602085015260005b818110156119a057858101830151858201604001528201611984565b5060006040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168501019250505092915050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611a0357600080fd5b919050565b60008060408385031215611a1b57600080fd5b611a24836119df565b946020939093013593505050565b600080600060608486031215611a4757600080fd5b611a50846119df565b9250611a5e602085016119df565b9150604084013590509250925092565b600060208284031215611a8057600080fd5b5035919050565b600060208284031215611a9957600080fd5b6109c3826119df565b6020808252825182820181905260009190848201906040850190845b81811015611af057835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101611abe565b50909695505050505050565b60008060408385031215611b0f57600080fd5b611b18836119df565b9150611b26602084016119df565b90509250929050565b600181811c90821680611b4357607f821691505b602082108103611b7c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156106b1576106b1611b82565b818103818111156106b1576106b1611b82565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220572dd596653cfd3c611f6ee7c2a28480e1870c28da473628e274d226be517feb64736f6c6343000818003300000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fc8d2f6d1937cd4ccaad5c26fbb42a3dfc9dac850000000000000000000000000000000000000000000000000000000000000011436f6e7374656c6c6174696f6e2045544800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000057872455448000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061020b5760003560e01c806386fe8b431161012a578063aa271e1a116100bd578063d5abeb011161008c578063dd62ed3e11610071578063dd62ed3e146104ce578063f2fde38b14610514578063f81094f31461052757600080fd5b8063d5abeb0114610495578063d73dd623146104bb57600080fd5b8063aa271e1a14610449578063c2e3273d1461045c578063c630948d1461046f578063c64d0ebc1461048257600080fd5b80639dc29fac116100f95780639dc29fac146103fd578063a457c2d714610410578063a8fa343c14610423578063a9059cbb1461043657600080fd5b806386fe8b43146103905780638da5cb5b146103985780638fd6a6ac146103d757806395d89b41146103f557600080fd5b806342966c68116101a25780636b32810b116101715780636b32810b1461032a57806370a082311461033f57806379ba50971461037557806379cc67901461037d57600080fd5b806342966c68146102de5780634334614a146102f15780634f5632f814610304578063661884631461031757600080fd5b806323b872dd116101de57806323b872dd14610272578063313ce5671461028557806339509351146102b657806340c10f19146102c957600080fd5b806301ffc9a71461021057806306fdde0314610238578063095ea7b31461024d57806318160ddd14610260575b600080fd5b61022361021e366004611930565b61053a565b60405190151581526020015b60405180910390f35b6102406106b7565b60405161022f9190611972565b61022361025b366004611a08565b610749565b6002545b60405190815260200161022f565b610223610280366004611a32565b610761565b60405160ff7f000000000000000000000000000000000000000000000000000000000000001216815260200161022f565b6102236102c4366004611a08565b610785565b6102dc6102d7366004611a08565b6107d1565b005b6102dc6102ec366004611a6e565b6108f8565b6102236102ff366004611a87565b610945565b6102dc610312366004611a87565b610952565b610223610325366004611a08565b6109b7565b6103326109ca565b60405161022f9190611aa2565b61026461034d366004611a87565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6102dc6109db565b6102dc61038b366004611a08565b610aac565b610332610afb565b60065473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161022f565b60075473ffffffffffffffffffffffffffffffffffffffff166103b2565b610240610b07565b6102dc61040b366004611a08565b610b16565b61022361041e366004611a08565b610b20565b6102dc610431366004611a87565b610bf1565b610223610444366004611a08565b610c70565b610223610457366004611a87565b610c7e565b6102dc61046a366004611a87565b610c8b565b6102dc61047d366004611a87565b610ce9565b6102dc610490366004611a87565b610cf7565b7f0000000000000000000000000000000000000000000000000000000000000000610264565b6102dc6104c9366004611a08565b610d55565b6102646104dc366004611afc565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6102dc610522366004611a87565b610d5f565b6102dc610535366004611a87565b610d70565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f36372b070000000000000000000000000000000000000000000000000000000014806105cd57507fffffffff0000000000000000000000000000000000000000000000000000000082167fe6599b4d00000000000000000000000000000000000000000000000000000000145b8061061957507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b8061066557507fffffffff0000000000000000000000000000000000000000000000000000000082167f06e2784700000000000000000000000000000000000000000000000000000000145b806106b157507fffffffff0000000000000000000000000000000000000000000000000000000082167f8fd6a6ac00000000000000000000000000000000000000000000000000000000145b92915050565b6060600380546106c690611b2f565b80601f01602080910402602001604051908101604052809291908181526020018280546106f290611b2f565b801561073f5780601f106107145761010080835404028352916020019161073f565b820191906000526020600020905b81548152906001019060200180831161072257829003601f168201915b5050505050905090565b600033610757818585610dce565b5060019392505050565b60003361076f858285610e02565b61077a858585610ed3565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919061075790829086906107cc908790611bb1565b610dce565b6107da33610c7e565b610817576040517fe2c8c9d50000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b813073ffffffffffffffffffffffffffffffffffffffff82160361083a57600080fd5b7f00000000000000000000000000000000000000000000000000000000000000001580159061089b57507f00000000000000000000000000000000000000000000000000000000000000008261088f60025490565b6108999190611bb1565b115b156108e957816108aa60025490565b6108b49190611bb1565b6040517fcbbf111300000000000000000000000000000000000000000000000000000000815260040161080e91815260200190565b6108f38383610f01565b505050565b61090133610945565b610939576040517fc820b10b00000000000000000000000000000000000000000000000000000000815233600482015260240161080e565b61094281610ff4565b50565b60006106b1600a83610ffe565b61095a61102d565b610965600a82611080565b156109425760405173ffffffffffffffffffffffffffffffffffffffff821681527f0a675452746933cefe3d74182e78db7afe57ba60eaa4234b5d85e9aa41b0610c906020015b60405180910390a150565b60006109c38383610b20565b9392505050565b60606109d660086110a2565b905090565b60055473ffffffffffffffffffffffffffffffffffffffff163314610a2c576040517f02b543c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000008082163390811790935560058054909116905560405173ffffffffffffffffffffffffffffffffffffffff909116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a350565b610ab533610945565b610aed576040517fc820b10b00000000000000000000000000000000000000000000000000000000815233600482015260240161080e565b610af782826110af565b5050565b60606109d6600a6110a2565b6060600480546106c690611b2f565b610af78282610aac565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919083811015610be4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161080e565b61077a8286868403610dce565b610bf961102d565b6007805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f9524c9e4b0b61eb018dd58a1cd856e3e74009528328ab4a613b434fa631d724290600090a35050565b600033610757818585610ed3565b60006106b1600883610ffe565b610c9361102d565b610c9e6008826110c4565b156109425760405173ffffffffffffffffffffffffffffffffffffffff821681527fe46fef8bbff1389d9010703cf8ebb363fb3daf5bf56edc27080b67bc8d9251ea906020016109ac565b610cf281610c8b565b610942815b610cff61102d565b610d0a600a826110c4565b156109425760405173ffffffffffffffffffffffffffffffffffffffff821681527f92308bb7573b2a3d17ddb868b39d8ebec433f3194421abc22d084f89658c9bad906020016109ac565b6108f38282610785565b610d6761102d565b610942816110e6565b610d7861102d565b610d83600882611080565b156109425760405173ffffffffffffffffffffffffffffffffffffffff821681527fed998b960f6340d045f620c119730f7aa7995e7425c2401d3a5b64ff998a59e9906020016109ac565b813073ffffffffffffffffffffffffffffffffffffffff821603610df157600080fd5b610dfc8484846111ac565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610dfc5781811015610ec6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161080e565b610dfc8484848403610dce565b813073ffffffffffffffffffffffffffffffffffffffff821603610ef657600080fd5b610dfc84848461135f565b73ffffffffffffffffffffffffffffffffffffffff8216610f7e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161080e565b8060026000828254610f909190611bb1565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b61094233826115ce565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260018301602052604081205415156109c3565b60065473ffffffffffffffffffffffffffffffffffffffff16331461107e576040517f2b5c74de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60006109c38373ffffffffffffffffffffffffffffffffffffffff8416611792565b606060006109c383611885565b6110ba823383610e02565b610af782826115ce565b60006109c38373ffffffffffffffffffffffffffffffffffffffff84166118e1565b3373ffffffffffffffffffffffffffffffffffffffff821603611135576040517fdad89dca00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff838116918217909255600654604051919216907fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae127890600090a350565b73ffffffffffffffffffffffffffffffffffffffff831661124e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161080e565b73ffffffffffffffffffffffffffffffffffffffff82166112f1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161080e565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316611402576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161080e565b73ffffffffffffffffffffffffffffffffffffffff82166114a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161080e565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260409020548181101561155b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161080e565b73ffffffffffffffffffffffffffffffffffffffff848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610dfc565b73ffffffffffffffffffffffffffffffffffffffff8216611671576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161080e565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015611727576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161080e565b73ffffffffffffffffffffffffffffffffffffffff83166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b6000818152600183016020526040812054801561187b5760006117b6600183611bc4565b85549091506000906117ca90600190611bc4565b905081811461182f5760008660000182815481106117ea576117ea611bd7565b906000526020600020015490508087600001848154811061180d5761180d611bd7565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061184057611840611c06565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506106b1565b60009150506106b1565b6060816000018054806020026020016040519081016040528092919081815260200182805480156118d557602002820191906000526020600020905b8154815260200190600101908083116118c1575b50505050509050919050565b6000818152600183016020526040812054611928575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556106b1565b5060006106b1565b60006020828403121561194257600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146109c357600080fd5b60006020808352835180602085015260005b818110156119a057858101830151858201604001528201611984565b5060006040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168501019250505092915050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611a0357600080fd5b919050565b60008060408385031215611a1b57600080fd5b611a24836119df565b946020939093013593505050565b600080600060608486031215611a4757600080fd5b611a50846119df565b9250611a5e602085016119df565b9150604084013590509250925092565b600060208284031215611a8057600080fd5b5035919050565b600060208284031215611a9957600080fd5b6109c3826119df565b6020808252825182820181905260009190848201906040850190845b81811015611af057835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101611abe565b50909695505050505050565b60008060408385031215611b0f57600080fd5b611b18836119df565b9150611b26602084016119df565b90509250929050565b600181811c90821680611b4357607f821691505b602082108103611b7c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156106b1576106b1611b82565b818103818111156106b1576106b1611b82565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220572dd596653cfd3c611f6ee7c2a28480e1870c28da473628e274d226be517feb64736f6c63430008180033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fc8d2f6d1937cd4ccaad5c26fbb42a3dfc9dac850000000000000000000000000000000000000000000000000000000000000011436f6e7374656c6c6174696f6e2045544800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000057872455448000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : name (string): Constellation ETH
Arg [1] : symbol (string): xrETH
Arg [2] : decimals_ (uint8): 18
Arg [3] : maxSupply_ (uint256): 0
Arg [4] : preMint (uint256): 0
Arg [5] : newOwner (address): 0xfC8d2f6d1937cd4CcAaD5c26FBB42a3dfc9dAc85
-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000012
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [5] : 000000000000000000000000fc8d2f6d1937cd4ccaad5c26fbb42a3dfc9dac85
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000011
Arg [7] : 436f6e7374656c6c6174696f6e20455448000000000000000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [9] : 7872455448000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
38556:11164:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40820:427;;;;;;:::i;:::-;;:::i;:::-;;;516:14:1;;509:22;491:41;;479:2;464:18;40820:427:0;;;;;;;;10982:100;;;:::i;:::-;;;;;;;:::i;13399:226::-;;;;;;:::i;:::-;;:::i;12102:108::-;12190:12;;12102:108;;;1761:25:1;;;1749:2;1734:18;12102:108:0;1615:177:1;14205:295:0;;;;;;:::i;:::-;;:::i;41558:101::-;;;2302:4:1;41641:10:0;2290:17:1;2272:36;;2260:2;2245:18;41558:101:0;2130:184:1;14909:263:0;;;;;;:::i;:::-;;:::i;44750:300::-;;;;;;:::i;:::-;;:::i;:::-;;43765:141;;;;;;:::i;:::-;;:::i;48580:113::-;;;;;;:::i;:::-;;:::i;46784:164::-;;;;;;:::i;:::-;;:::i;42822:194::-;;;;;;:::i;:::-;;:::i;47006:107::-;;;:::i;:::-;;;;;;;:::i;12273:143::-;;;;;;:::i;:::-;12390:18;;12363:7;12390:18;;;;;;;;;;;;12273:143;2477:320;;;:::i;44362:184::-;;;;;;:::i;:::-;;:::i;47171:107::-;;;:::i;1534:89::-;1608:7;;;;1534:89;;;3557:42:1;3545:55;;;3527:74;;3515:2;3500:18;1534:89:0;3381:226:1;47333:93:0;47407:11;;;;47333:93;;11201:104;;;:::i;44091:115::-;;;;;;:::i;:::-;;:::i;15675:498::-;;;;;;:::i;:::-;;:::i;47753:207::-;;;;;;:::i;:::-;;:::i;12622:218::-;;;;;;:::i;:::-;;:::i;48326:113::-;;;;;;:::i;:::-;;:::i;45755:158::-;;;;;;:::i;:::-;;:::i;45489:149::-;;;;;;:::i;:::-;;:::i;46093:158::-;;;;;;:::i;:::-;;:::i;41734:96::-;41811:11;41734:96;;43255:129;;;;;;:::i;:::-;;:::i;12903:176::-;;;;;;:::i;:::-;13044:18;;;;13017:7;13044:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;12903:176;1899:106;;;;;;:::i;:::-;;:::i;46435:164::-;;;;;;:::i;:::-;;:::i;40820:427::-;40921:4;40958:39;;;40973:24;40958:39;;:103;;-1:-1:-1;41014:47:0;;;41029:32;41014:47;40958:103;:160;;;-1:-1:-1;41078:40:0;;;41093:25;41078:40;40958:160;:218;;;-1:-1:-1;41135:41:0;;;41150:26;41135:41;40958:218;:281;;;-1:-1:-1;41193:46:0;;;41208:31;41193:46;40958:281;40938:301;40820:427;-1:-1:-1;;40820:427:0:o;10982:100::-;11036:13;11069:5;11062:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10982:100;:::o;13399:226::-;13507:4;8770:10;13563:32;8770:10;13579:7;13588:6;13563:8;:32::i;:::-;-1:-1:-1;13613:4:0;;13399:226;-1:-1:-1;;;13399:226:0:o;14205:295::-;14336:4;8770:10;14394:38;14410:4;8770:10;14425:6;14394:15;:38::i;:::-;14443:27;14453:4;14459:2;14463:6;14443:9;:27::i;:::-;-1:-1:-1;14488:4:0;;14205:295;-1:-1:-1;;;;14205:295:0:o;14909:263::-;8770:10;15022:4;13044:18;;;:11;:18;;;;;;;;;:27;;;;;;;;;;15022:4;;8770:10;15078:64;;8770:10;;13044:27;;15103:38;;15131:10;;15103:38;:::i;:::-;15078:8;:64::i;44750:300::-;48890:20;48899:10;48890:8;:20::i;:::-;48885:61;;48919:27;;;;;48935:10;48919:27;;;3527:74:1;3500:18;;48919:27:0;;;;;;;;48885:61;44864:7;49682:4:::1;49661:26;::::0;::::1;::::0;49657:40:::1;;49689:8;::::0;::::1;49657:40;44888:11:::2;:16:::0;;::::2;::::0;:56:::2;;;44933:11;44924:6;44908:13;12190:12:::0;;;12102:108;44908:13:::2;:22;;;;:::i;:::-;:36;44888:56;44884:123;;;45000:6;44984:13;12190:12:::0;;;12102:108;44984:13:::2;:22;;;;:::i;:::-;44966:41;;;;;;;;;1761:25:1::0;;1749:2;1734:18;;1615:177;44884:123:0::2;45020:22;45026:7;45035:6;45020:5;:22::i;:::-;48957:1:::1;44750:300:::0;;:::o;43765:141::-;49163:20;49172:10;49163:8;:20::i;:::-;49158:61;;49192:27;;;;;49208:10;49192:27;;;3527:74:1;3500:18;;49192:27:0;3381:226:1;49158:61:0;43880:18:::1;43891:6;43880:10;:18::i;:::-;43765:141:::0;:::o;48580:113::-;48635:4;48659:26;:9;48678:6;48659:18;:26::i;46784:164::-;3098:20;:18;:20::i;:::-;46858:24:::1;:9;46875:6:::0;46858:16:::1;:24::i;:::-;46854:87;;;46904:25;::::0;3557:42:1;3545:55;;3527:74;;46904:25:0::1;::::0;3515:2:1;3500:18;46904:25:0::1;;;;;;;;46784:164:::0;:::o;42822:194::-;42933:12;42965:43;42983:7;42992:15;42965:17;:43::i;:::-;42958:50;42822:194;-1:-1:-1;;;42822:194:0:o;47006:107::-;47051:16;47087:18;:9;:16;:18::i;:::-;47080:25;;47006:107;:::o;2477:320::-;2551:14;;;;2537:10;:28;2533:89;;2589:21;;;;;;;;;;;;;;2533:89;2653:7;;;2671:20;;;;2681:10;2671:20;;;;;;2702:14;:27;;;;;;;2747:42;;2653:7;;;;;2681:10;2653:7;;2747:42;;2634:16;;2747:42;2522:275;2477:320::o;44362:184::-;49163:20;49172:10;49163:8;:20::i;:::-;49158:61;;49192:27;;;;;49208:10;49192:27;;;3527:74:1;3500:18;;49192:27:0;3381:226:1;49158:61:0;44507:31:::1;44522:7;44531:6;44507:14;:31::i;:::-;44362:184:::0;;:::o;47171:107::-;47216:16;47252:18;:9;:16;:18::i;11201:104::-;11257:13;11290:7;11283:14;;;;;:::i;44091:115::-;44173:25;44182:7;44191:6;44173:8;:25::i;15675:498::-;8770:10;15793:4;13044:18;;;:11;:18;;;;;;;;;:27;;;;;;;;;;15793:4;;8770:10;15954:15;15934:16;:35;;15912:122;;;;;;;4840:2:1;15912:122:0;;;4822:21:1;4879:2;4859:18;;;4852:30;4918:34;4898:18;;;4891:62;4989:7;4969:18;;;4962:35;5014:19;;15912:122:0;4638:401:1;15912:122:0;16070:60;16079:5;16086:7;16114:15;16095:16;:34;16070:8;:60::i;47753:207::-;3098:20;:18;:20::i;:::-;47844:11:::1;::::0;;::::1;47868:22:::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;47908:44:::1;::::0;47844:11;::::1;::::0;47868:22;47844:11;;47908:44:::1;::::0;47821:20:::1;::::0;47908:44:::1;47810:150;47753:207:::0;:::o;12622:218::-;12726:4;8770:10;12782:28;8770:10;12799:2;12803:6;12782:9;:28::i;48326:113::-;48381:4;48405:26;:9;48424:6;48405:18;:26::i;45755:158::-;3098:20;:18;:20::i;:::-;45826:21:::1;:9;45840:6:::0;45826:13:::1;:21::i;:::-;45822:84;;;45869:25;::::0;3557:42:1;3545:55;;3527:74;;45869:25:0::1;::::0;3515:2:1;3500:18;45869:25:0::1;3381:226:1::0;45489:149:0;45563:28;45577:13;45563;:28::i;:::-;45602;45616:13;46093:158;3098:20;:18;:20::i;:::-;46164:21:::1;:9;46178:6:::0;46164:13:::1;:21::i;:::-;46160:84;;;46207:25;::::0;3557:42:1;3545:55;;3527:74;;46207:25:0::1;::::0;3515:2:1;3500:18;46207:25:0::1;3381:226:1::0;43255:129:0;43338:38;43356:7;43365:10;43338:17;:38::i;1899:106::-;3098:20;:18;:20::i;:::-;1975:22:::1;1994:2;1975:18;:22::i;46435:164::-:0;3098:20;:18;:20::i;:::-;46509:24:::1;:9;46526:6:::0;46509:16:::1;:24::i;:::-;46505:87;;;46555:25;::::0;3557:42:1;3545:55;;3527:74;;46555:25:0::1;::::0;3515:2:1;3500:18;46555:25:0::1;3381:226:1::0;42285:205:0;42424:7;49682:4;49661:26;;;;49657:40;;49689:8;;;49657:40;42444:38:::1;42459:5;42466:7;42475:6;42444:14;:38::i;:::-;42285:205:::0;;;;:::o;20472:502::-;13044:18;;;;20607:24;13044:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;20694:17;20674:37;;20670:297;;20774:6;20754:16;:26;;20728:117;;;;;;;5246:2:1;20728:117:0;;;5228:21:1;5285:2;5265:18;;;5258:30;5324:31;5304:18;;;5297:59;5373:18;;20728:117:0;5044:353:1;20728:117:0;20889:51;20898:5;20905:7;20933:6;20914:16;:25;20889:8;:51::i;41960:190::-;42094:2;49682:4;49661:26;;;;49657:40;;49689:8;;;49657:40;42109:33:::1;42125:4;42131:2;42135:6;42109:15;:33::i;17807:548::-:0;17891:21;;;17883:65;;;;;;;5604:2:1;17883:65:0;;;5586:21:1;5643:2;5623:18;;;5616:30;5682:33;5662:18;;;5655:61;5733:18;;17883:65:0;5402:355:1;17883:65:0;18039:6;18023:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;18194:18:0;;;:9;:18;;;;;;;;;;;:28;;;;;;18249:37;1761:25:1;;;18249:37:0;;1734:18:1;18249:37:0;;;;;;;44362:184;;:::o;22934:91::-;22990:27;8770:10;23010:6;22990:5;:27::i;33902:192::-;34061:23;;;34007:4;29063:19;;;:12;;;:19;;;;;;:24;;34031:55;28941:154;2838:144;2911:7;;;;2897:10;:21;2893:82;;2942:21;;;;;;;;;;;;;;2893:82;2838:144::o;33633:183::-;33731:4;33755:53;33763:3;33783:23;;;33755:7;:53::i;35384:326::-;35463:16;35492:22;35517:19;35525:3;35517:7;:19::i;23344:164::-;23421:46;23437:7;8770:10;23460:6;23421:15;:46::i;:::-;23478:22;23484:7;23493:6;23478:5;:22::i;33280:177::-;33375:4;33399:50;33404:3;33424:23;;;33399:4;:50::i;2156:233::-;2225:10;2219:16;;;;2215:78;;2259:22;;;;;;;;;;;;;;2215:78;2305:14;:19;;;;;;;;;;;;;;2369:7;;2342:39;;2305:19;;2369:7;;2342:39;;-1:-1:-1;;2342:39:0;2156:233;:::o;19801:380::-;19937:19;;;19929:68;;;;;;;5964:2:1;19929:68:0;;;5946:21:1;6003:2;5983:18;;;5976:30;6042:34;6022:18;;;6015:62;6113:6;6093:18;;;6086:34;6137:19;;19929:68:0;5762:400:1;19929:68:0;20016:21;;;20008:68;;;;;;;6369:2:1;20008:68:0;;;6351:21:1;6408:2;6388:18;;;6381:30;6447:34;6427:18;;;6420:62;6518:4;6498:18;;;6491:32;6540:19;;20008:68:0;6167:398:1;20008:68:0;20089:18;;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;20141:32;;1761:25:1;;;20141:32:0;;1734:18:1;20141:32:0;;;;;;;19801:380;;;:::o;16643:877::-;16774:18;;;16766:68;;;;;;;6772:2:1;16766:68:0;;;6754:21:1;6811:2;6791:18;;;6784:30;6850:34;6830:18;;;6823:62;6921:7;6901:18;;;6894:35;6946:19;;16766:68:0;6570:401:1;16766:68:0;16853:16;;;16845:64;;;;;;;7178:2:1;16845:64:0;;;7160:21:1;7217:2;7197:18;;;7190:30;7256:34;7236:18;;;7229:62;7327:5;7307:18;;;7300:33;7350:19;;16845:64:0;6976:399:1;16845:64:0;16995:15;;;16973:19;16995:15;;;;;;;;;;;17043:21;;;;17021:109;;;;;;;7582:2:1;17021:109:0;;;7564:21:1;7621:2;7601:18;;;7594:30;7660:34;7640:18;;;7633:62;7731:8;7711:18;;;7704:36;7757:19;;17021:109:0;7380:402:1;17021:109:0;17166:15;;;;:9;:15;;;;;;;;;;;17184:20;;;17166:38;;17384:13;;;;;;;;;;:23;;;;;;17436:26;;1761:25:1;;;17384:13:0;;17436:26;;1734:18:1;17436:26:0;;;;;;;17475:37;44750:300;18688:675;18772:21;;;18764:67;;;;;;;7989:2:1;18764:67:0;;;7971:21:1;8028:2;8008:18;;;8001:30;8067:34;8047:18;;;8040:62;8138:3;8118:18;;;8111:31;8159:19;;18764:67:0;7787:397:1;18764:67:0;18931:18;;;18906:22;18931:18;;;;;;;;;;;18968:24;;;;18960:71;;;;;;;8391:2:1;18960:71:0;;;8373:21:1;8430:2;8410:18;;;8403:30;8469:34;8449:18;;;8442:62;8540:4;8520:18;;;8513:32;8562:19;;18960:71:0;8189:398:1;18960:71:0;19067:18;;;:9;:18;;;;;;;;;;;19088:23;;;19067:44;;19206:12;:22;;;;;;;19257:37;1761:25:1;;;19067:9:0;;:18;19257:37;;1734:18:1;19257:37:0;;;;;;;48957:1:::1;44750:300:::0;;:::o;27435:1420::-;27501:4;27640:19;;;:12;;;:19;;;;;;27676:15;;27672:1176;;28051:21;28075:14;28088:1;28075:10;:14;:::i;:::-;28124:18;;28051:38;;-1:-1:-1;28104:17:0;;28124:22;;28145:1;;28124:22;:::i;:::-;28104:42;;28180:13;28167:9;:26;28163:405;;28214:17;28234:3;:11;;28246:9;28234:22;;;;;;;;:::i;:::-;;;;;;;;;28214:42;;28388:9;28359:3;:11;;28371:13;28359:26;;;;;;;;:::i;:::-;;;;;;;;;;;;:38;;;;28473:23;;;:12;;;:23;;;;;:36;;;28163:405;28649:17;;:3;;:17;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;28744:3;:12;;:19;28757:5;28744:19;;;;;;;;;;;28737:26;;;28787:4;28780:11;;;;;;;27672:1176;28831:5;28824:12;;;;;30339:111;30395:16;30431:3;:11;;30424:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30339:111;;;:::o;26845:414::-;26908:4;29063:19;;;:12;;;:19;;;;;;26925:327;;-1:-1:-1;26968:23:0;;;;;;;;:11;:23;;;;;;;;;;;;;27151:18;;27129:19;;;:12;;;:19;;;;;;:40;;;;27184:11;;26925:327;-1:-1:-1;27235:5:0;27228:12;;14:332:1;72:6;125:2;113:9;104:7;100:23;96:32;93:52;;;141:1;138;131:12;93:52;180:9;167:23;230:66;223:5;219:78;212:5;209:89;199:117;;312:1;309;302:12;543:607;655:4;684:2;713;702:9;695:21;745:6;739:13;788:6;783:2;772:9;768:18;761:34;813:1;823:140;837:6;834:1;831:13;823:140;;;932:14;;;928:23;;922:30;898:17;;;917:2;894:26;887:66;852:10;;823:140;;;827:3;1012:1;1007:2;998:6;987:9;983:22;979:31;972:42;1141:2;1071:66;1066:2;1058:6;1054:15;1050:88;1039:9;1035:104;1031:113;1023:121;;;;543:607;;;;:::o;1155:196::-;1223:20;;1283:42;1272:54;;1262:65;;1252:93;;1341:1;1338;1331:12;1252:93;1155:196;;;:::o;1356:254::-;1424:6;1432;1485:2;1473:9;1464:7;1460:23;1456:32;1453:52;;;1501:1;1498;1491:12;1453:52;1524:29;1543:9;1524:29;:::i;:::-;1514:39;1600:2;1585:18;;;;1572:32;;-1:-1:-1;;;1356:254:1:o;1797:328::-;1874:6;1882;1890;1943:2;1931:9;1922:7;1918:23;1914:32;1911:52;;;1959:1;1956;1949:12;1911:52;1982:29;2001:9;1982:29;:::i;:::-;1972:39;;2030:38;2064:2;2053:9;2049:18;2030:38;:::i;:::-;2020:48;;2115:2;2104:9;2100:18;2087:32;2077:42;;1797:328;;;;;:::o;2319:180::-;2378:6;2431:2;2419:9;2410:7;2406:23;2402:32;2399:52;;;2447:1;2444;2437:12;2399:52;-1:-1:-1;2470:23:1;;2319:180;-1:-1:-1;2319:180:1:o;2504:186::-;2563:6;2616:2;2604:9;2595:7;2591:23;2587:32;2584:52;;;2632:1;2629;2622:12;2584:52;2655:29;2674:9;2655:29;:::i;2695:681::-;2866:2;2918:21;;;2988:13;;2891:18;;;3010:22;;;2837:4;;2866:2;3089:15;;;;3063:2;3048:18;;;2837:4;3132:218;3146:6;3143:1;3140:13;3132:218;;;3211:13;;3226:42;3207:62;3195:75;;3325:15;;;;3290:12;;;;3168:1;3161:9;3132:218;;;-1:-1:-1;3367:3:1;;2695:681;-1:-1:-1;;;;;;2695:681:1:o;3612:260::-;3680:6;3688;3741:2;3729:9;3720:7;3716:23;3712:32;3709:52;;;3757:1;3754;3747:12;3709:52;3780:29;3799:9;3780:29;:::i;:::-;3770:39;;3828:38;3862:2;3851:9;3847:18;3828:38;:::i;:::-;3818:48;;3612:260;;;;;:::o;3877:437::-;3956:1;3952:12;;;;3999;;;4020:61;;4074:4;4066:6;4062:17;4052:27;;4020:61;4127:2;4119:6;4116:14;4096:18;4093:38;4090:218;;4164:77;4161:1;4154:88;4265:4;4262:1;4255:15;4293:4;4290:1;4283:15;4090:218;;3877:437;;;:::o;4319:184::-;4371:77;4368:1;4361:88;4468:4;4465:1;4458:15;4492:4;4489:1;4482:15;4508:125;4573:9;;;4594:10;;;4591:36;;;4607:18;;:::i;8592:128::-;8659:9;;;8680:11;;;8677:37;;;8694:18;;:::i;8725:184::-;8777:77;8774:1;8767:88;8874:4;8871:1;8864:15;8898:4;8895:1;8888:15;8914:184;8966:77;8963:1;8956:88;9063:4;9060:1;9053:15;9087:4;9084:1;9077:15
Swarm Source
ipfs://572dd596653cfd3c611f6ee7c2a28480e1870c28da473628e274d226be517feb
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
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.