ERC-20
Overview
Max Total Supply
1,000,000 GLACIS
Holders
8
Total Transfers
-
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
GlacisLabs
Compiler Version
v0.8.18+commit.87f61d96
Contract Source Code (Solidity Multiple files format)
/* _______ _ _______ _______ _________ _______ ( ____ \( \ ( ___ )( ____ \\__ __/( ____ \ | ( \/| ( | ( ) || ( \/ ) ( | ( \/ | | | | | (___) || | | | | (_____ | | ____ | | | ___ || | | | (_____ ) | | \_ )| | | ( ) || | | | ) | | (___) || (____/\| ) ( || (____/\___) (___/\____) | (_______)(_______/|/ \|(_______/\_______/\_______) https://glacislabs.net https://twitter.com/glacis_labs */ import {IGlacisRouterEvents} from "./IGlacisRouter.sol"; import {IXERC20} from "./IXERC20.sol"; import {IXERC20Lockbox} from "./IXERC20Lockbox.sol"; // File: @openzeppelin/contracts/utils/Context.sol // SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/token/ERC20/IERC20.sol // 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); 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); } // File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol // 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); } // File: @openzeppelin/contracts/token/ERC20/ERC20.sol // OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/ERC20.sol) pragma solidity ^0.8.0; 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; } 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; } 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; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { address owner = _msgSender(); _approve(owner, spender, allowance(owner, spender) + addedValue); return true; } 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); } 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); } } } function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } pragma solidity ^0.8.9; contract GlacisLabs is ERC20 { constructor() ERC20("Glacis Labs", "GLACIS") { _mint(msg.sender, 1000000 * 10 ** decimals()); } }
// SPDX-License-Identifier: Apache-2.0 pragma solidity 0.8.18; /// @title Glacis Commons /// @dev Contract for utility functions and structures common to Glacis Client and Infrastructure contract GlacisCommons { struct GlacisData { bytes32 messageId; uint256 nonce; address originalFrom; address originalTo; } struct GlacisTokenData { address glacisToken; uint256 glacisTokenAmount; } struct GlacisRoute { uint256 fromChainId; // 0 means any chain address fromAddress; // 0x00 means any address uint8 fromGmpId; // 0 means any GMP } /// @notice De-serialize a uint8 bitmap to an uint8 array /// @param bitmap The bitmap to be de-serialized /// @return The de-serialized array function _uint8ToUint8Array( uint8 bitmap ) internal pure returns (uint8[] memory) { uint8[] memory result = new uint8[](8); uint8 size; for (uint8 i = 0; i < 8; i++) { // Extract each bit from the uint8 value and store it as a uint8 element in the array if ((bitmap >> i) & uint8(1) == uint8(1)) result[size++] = i + 1; } assembly { mstore(result, size) } return result; } /// @notice Queries if a bit is ON on a bitmap /// @param bitmap The bitmap to be queried /// @param bitIndex The bitindex to query /// @return True if the bit is on, false otherwise function _isBitSet( uint8 bitmap, uint8 bitIndex ) internal pure returns (bool) { return (bitmap & (uint8(1) << bitIndex)) != 0; } /// @notice Set a bit to ON on a bitmap /// @param bitmap The bitmap to be modified /// @param bitIndex The bitindex to set to 1 /// @return the modified bitmap with the bit set function _setBit( uint8 bitmap, uint8 bitIndex ) internal pure returns (uint8) { return bitmap | (uint8(1) << bitIndex); } }
// SPDX-License-Identifier: Apache-2.0 pragma solidity 0.8.18; interface IGlacisAccessControlClient { /// @notice Adds an allowed route for this client /// @notice Queries if a route from path GMP+Chain+Address is allowed for this client /// @return True if route is allowed, false otherwise function isAllowedRoute( uint256 fromChainId, address fromAddress, uint8 fromGmpId, bytes memory payload ) external view returns (bool); }
// SPDX-License-Identifier: Apache-2.0 pragma solidity 0.8.18; /// An interface that defines the GMP modules (adapters) that the GlacisRouter interacts with. interface IGlacisAdapter { /// Determines if a chain is available through this adapter /// @param chainId the Glacis chain ID /// @return true if the chain is available, false otherwise function chainIsAvailable(uint256 chainId) external view returns (bool); /// Sends a payload across chains to the destination router. /// @param chainId the Glacis chain ID /// @param payload the data packet to send across chains function sendMessage( uint256 chainId, address refundAddress, bytes calldata payload ) external payable; error IGlacisAdapter__ChainIsNotAvailable(uint256 toChainId); }
// SPDX-License-Identifier: Apache-2.0 pragma solidity 0.8.18; import {GlacisCommons} from "./GlacisCommons.sol"; import {IGlacisAccessControlClient} from "./IGlacisAccessControlClient.sol"; /// An interface that defines the GMP modules (adapters) that the GlacisRouter interacts with. abstract contract IGlacisClient is IGlacisAccessControlClient { uint256 private immutable DEFAULT_QUORUM; constructor(uint256 _defaultQuorum) { DEFAULT_QUORUM = _defaultQuorum; } /// @notice Receives message from GMP(s) through GlacisRouter /// @param fromGmpIds IDs of the GMPs that sent this message (that reached quorum requirements) /// @param fromChainId Source chain (Glacis chain ID) /// @param fromAddress Source address on source chain /// @param payload Routed payload function receiveMessage( uint8[] calldata fromGmpIds, uint256 fromChainId, address fromAddress, bytes calldata payload ) external virtual; /// @notice The quorum of messages that the contract expects with a specific message function getQuorum( GlacisCommons.GlacisData memory, bytes memory ) public view virtual returns (uint256) { return DEFAULT_QUORUM; } }
// SPDX-License-Identifier: Apache-2.0 pragma solidity 0.8.18; import {GlacisCommons} from "./GlacisCommons.sol"; import {IMessageDispatcher} from "./IMessageDispatcher.sol"; import {IMessageExecutor} from "./IMessageExecutor.sol"; abstract contract IGlacisRouterEvents is GlacisCommons, IMessageDispatcher, IMessageExecutor { event GlacisAbstractRouter__MessageIdCreated( bytes32 indexed messageId, address indexed sender, uint256 nonce ); event GlacisRouter__ReceivedMessage( bytes32 indexed messageId, address indexed from, uint256 indexed fromChainId, address to ); event GlacisRouter__MessageDispatched( bytes32 indexed messageId, address indexed from, uint256 indexed toChainId, address to, bytes data, uint8[] gmps, uint256[] fees, address refundAddress, bool retriable ); event GlacisRouter__MessageRetried( bytes32 indexed messageId, address indexed from, uint256 indexed toChainId, address to, bytes data, uint8[] gmps, uint256[] fees, address refundAddress ); } interface IGlacisRouter { function route( uint256 chainId, address to, bytes memory payload, uint8[] memory gmps, uint256[] memory fees, address refundAddress, bool retry ) external payable returns (bytes32); function routeRetry( uint256 chainId, address to, bytes memory payload, uint8[] memory gmp, uint256[] memory fees, address refundAddress, bytes32 messageId, uint256 nonce ) external payable returns (bytes32); function receiveMessage( uint256 fromChainId, bytes memory glacisPayload ) external; }
// SPDX-License-Identifier: Apache-2.0 pragma solidity 0.8.18; import {GlacisCommons} from "./GlacisCommons.sol"; import {IGlacisAccessControlClient} from "./IGlacisAccessControlClient.sol"; /// An interface that defines the GMP modules (adapters) that the GlacisRouter interacts with. /// Should be paired with the IGlacisClient abstract smart contract. interface IGlacisTokenClient is IGlacisAccessControlClient { /// @notice Receives message from GMP(s) through GlacisRouter /// @param fromGmpIds ID of the GMP that sent this message (that reached quorum requirements) /// @param fromChainId Source chain (Glacis chain ID) /// @param fromAddress Source address on source chain /// @param payload Routed payload function receiveMessageWithTokens( uint8[] memory fromGmpIds, uint256 fromChainId, address fromAddress, bytes calldata payload, address token, uint256 amount ) external; /// @notice The quorum of messages that the contract expects with a specific message from the /// token router function getQuorum( GlacisCommons.GlacisData memory, bytes memory, address, uint256 ) external view returns (uint256); }
// SPDX-License-Identifier: Apache-2.0 pragma solidity 0.8.18; import {IMessageDispatcher} from "./IMessageDispatcher.sol"; import {IMessageExecutor} from "./IMessageExecutor.sol"; interface IGlacisTokenMediator is IMessageDispatcher, IMessageExecutor { event GlacisTokenMediator__TokensBurnt( address from, address token, uint256 amount ); event GlacisTokenMediator__TokensMinted( address to, address token, uint256 amount ); function route( uint256 chainId, address to, bytes memory payload, uint8[] memory gmps, uint256[] memory fees, address refundAddress, bool retry, address token, uint256 tokenAmount ) external payable returns (bytes32); function routeRetry( uint256 chainId, address to, bytes memory payload, uint8[] memory gmp, uint256[] memory fees, address refundAddress, bytes32 messageId, uint256 nonce, address token, uint256 tokenAmount ) external payable returns (bytes32); }
// SPDX-License-Identifier: Apache-2.0 pragma solidity 0.8.18; /// An interface as described by EIP-5164. In Glacis' current implementation, messages are not dispatched with the /// dispatchMessage function, hence its removal. The only adherence now is to the event, which the GlacisRouter will /// use. interface IMessageDispatcher { /// The MessageDispatched event must be emitted by the MessageDispatcher when an individual message is dispatched. event MessageDispatched( bytes32 indexed messageId, address indexed from, uint256 indexed toChainId, address to, bytes data ); }
// SPDX-License-Identifier: Apache-2.0 pragma solidity 0.8.18; interface IMessageExecutor { /// MessageIdExecuted must be emitted once a message or message batch has been executed. event MessageIdExecuted( uint256 indexed fromChainId, bytes32 indexed messageId ); /// MessageExecutors must revert if a messageId has already been executed and should emit a /// MessageIdAlreadyExecuted custom error. error MessageIdAlreadyExecuted(bytes32 messageId); /// MessageExecutors must revert if an individual message fails and should emit a MessageFailure custom error. error MessageFailure(bytes32 messageId, bytes errorData); // This note from EIP-5164 seems repetitive as Axelar and the other chains already do this // MessageExecutors MUST append the ABI-packed (messageId, fromChainId, from) to the calldata for each message /// being executed. This allows the receiver of the message to verify the cross-chain sender and the chain that the /// message is coming from. }
// SPDX-License-Identifier: UNLICENSED pragma solidity 0.8.18; interface IXERC20 { /** * @notice Emits when a lockbox is set * * @param _lockbox The address of the lockbox */ event LockboxSet(address _lockbox); /** * @notice Emits when a limit is set * * @param _mintingLimit The updated minting limit we are setting to the bridge * @param _burningLimit The updated burning limit we are setting to the bridge * @param _bridge The address of the bridge we are setting the limit too */ event BridgeLimitsSet( uint256 _mintingLimit, uint256 _burningLimit, address indexed _bridge ); /** * @notice Reverts when a user with too low of a limit tries to call mint/burn */ error IXERC20_NotHighEnoughLimits(); /** * @notice Reverts when caller is not the factory */ error IXERC20_NotFactory(); struct Bridge { BridgeParameters minterParams; BridgeParameters burnerParams; } struct BridgeParameters { uint256 timestamp; uint256 ratePerSecond; uint256 maxLimit; uint256 currentLimit; } /** * @notice Sets the lockbox address * * @param _lockbox The address of the lockbox */ function setLockbox(address _lockbox) external; /** * @notice Updates the limits of any bridge * @dev Can only be called by the owner * @param _mintingLimit The updated minting limit we are setting to the bridge * @param _burningLimit The updated burning limit we are setting to the bridge * @param _bridge The address of the bridge we are setting the limits too */ function setLimits( address _bridge, uint256 _mintingLimit, uint256 _burningLimit ) external; /** * @notice Returns the max limit of a minter * * @param _minter The minter we are viewing the limits of * @return _limit The limit the minter has */ function mintingMaxLimitOf( address _minter ) external view returns (uint256 _limit); /** * @notice Returns the max limit of a bridge * * @param _bridge the bridge we are viewing the limits of * @return _limit The limit the bridge has */ function burningMaxLimitOf( address _bridge ) external view returns (uint256 _limit); /** * @notice Returns the current limit of a minter * * @param _minter The minter we are viewing the limits of * @return _limit The limit the minter has */ function mintingCurrentLimitOf( address _minter ) external view returns (uint256 _limit); /** * @notice Returns the current limit of a bridge * * @param _bridge the bridge we are viewing the limits of * @return _limit The limit the bridge has */ function burningCurrentLimitOf( address _bridge ) external view returns (uint256 _limit); /** * @notice Mints tokens for a user * @dev Can only be called by a minter * @param _user The address of the user who needs tokens minted * @param _amount The amount of tokens being minted */ function mint(address _user, uint256 _amount) external; /** * @notice Burns tokens for a user * @dev Can only be called by a minter * @param _user The address of the user who needs tokens burned * @param _amount The amount of tokens being burned */ function burn(address _user, uint256 _amount) external; } interface IXERC20GlacisExtension { /** * @notice Returns a token variant for a specific chainId if it exists. * * @param chainId The chainId of the token variant. */ function getTokenVariant(uint256 chainId) external view returns (address); /** * @notice Sets a token variant for a specific chainId. * * @param chainId The chainId of the token variant. * @param variant The address of the token variant. */ function setTokenVariant(uint256 chainId, address variant) external; }
// SPDX-License-Identifier: UNLICENSED pragma solidity 0.8.18; interface IXERC20Lockbox { /** * @notice Emitted when tokens are deposited into the lockbox */ event Deposit(address _sender, uint256 _amount); /** * @notice Emitted when tokens are withdrawn from the lockbox */ event Withdraw(address _sender, uint256 _amount); /** * @notice Reverts when a user tries to deposit native tokens on a non-native lockbox */ error IXERC20Lockbox_NotNative(); /** * @notice Reverts when a user tries to deposit non-native tokens on a native lockbox */ error IXERC20Lockbox_Native(); /** * @notice Reverts when a user tries to withdraw and the call fails */ error IXERC20Lockbox_WithdrawFailed(); /** * @notice Deposit ERC20 tokens into the lockbox * * @param _amount The amount of tokens to deposit */ function deposit(uint256 _amount) external; /** * @notice Deposit ERC20 tokens into the lockbox, and send the XERC20 to a user * * @param _user The user to send the XERC20 to * @param _amount The amount of tokens to deposit */ function depositTo(address _user, uint256 _amount) external; /** * @notice Deposit the native asset into the lockbox, and send the XERC20 to a user * * @param _user The user to send the XERC20 to */ function depositNativeTo(address _user) external payable; /** * @notice Withdraw ERC20 tokens from the lockbox * * @param _amount The amount of tokens to withdraw */ function withdraw(uint256 _amount) external; /** * @notice Withdraw ERC20 tokens from the lockbox * * @param _user The user to withdraw to * @param _amount The amount of tokens to withdraw */ function withdrawTo(address _user, uint256 _amount) external; }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":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":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","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"}]
Contract Creation Code
60806040523480156200001157600080fd5b506040518060400160405280600b81526020016a476c61636973204c61627360a81b81525060405180604001604052806006815260200165474c4143495360d01b815250816003908162000066919062000229565b50600462000075828262000229565b505050620000af336200008d620000b560201b60201c565b6200009a90600a6200040a565b620000a990620f424062000422565b620000ba565b62000452565b601290565b6001600160a01b038216620001155760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b80600260008282546200012991906200043c565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b505050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620001b057607f821691505b602082108103620001d157634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200018057600081815260208120601f850160051c81016020861015620002005750805b601f850160051c820191505b8181101562000221578281556001016200020c565b505050505050565b81516001600160401b0381111562000245576200024562000185565b6200025d816200025684546200019b565b84620001d7565b602080601f8311600181146200029557600084156200027c5750858301515b600019600386901b1c1916600185901b17855562000221565b600085815260208120601f198616915b82811015620002c657888601518255948401946001909101908401620002a5565b5085821015620002e55787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156200034c578160001904821115620003305762000330620002f5565b808516156200033e57918102915b93841c939080029062000310565b509250929050565b600082620003655750600162000404565b81620003745750600062000404565b81600181146200038d57600281146200039857620003b8565b600191505062000404565b60ff841115620003ac57620003ac620002f5565b50506001821b62000404565b5060208310610133831016604e8410600b8410161715620003dd575081810a62000404565b620003e983836200030b565b8060001904821115620004005762000400620002f5565b0290505b92915050565b60006200041b60ff84168362000354565b9392505050565b8082028115828204841417620004045762000404620002f5565b80820180821115620004045762000404620002f5565b61085280620004626000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c80633950935111610071578063395093511461012357806370a082311461013657806395d89b411461015f578063a457c2d714610167578063a9059cbb1461017a578063dd62ed3e1461018d57600080fd5b806306fdde03146100ae578063095ea7b3146100cc57806318160ddd146100ef57806323b872dd14610101578063313ce56714610114575b600080fd5b6100b66101a0565b6040516100c3919061069c565b60405180910390f35b6100df6100da366004610706565b610232565b60405190151581526020016100c3565b6002545b6040519081526020016100c3565b6100df61010f366004610730565b61024c565b604051601281526020016100c3565b6100df610131366004610706565b610270565b6100f361014436600461076c565b6001600160a01b031660009081526020819052604090205490565b6100b6610292565b6100df610175366004610706565b6102a1565b6100df610188366004610706565b610321565b6100f361019b36600461078e565b61032f565b6060600380546101af906107c1565b80601f01602080910402602001604051908101604052809291908181526020018280546101db906107c1565b80156102285780601f106101fd57610100808354040283529160200191610228565b820191906000526020600020905b81548152906001019060200180831161020b57829003601f168201915b5050505050905090565b60003361024081858561035a565b60019150505b92915050565b60003361025a85828561047e565b6102658585856104f8565b506001949350505050565b600033610240818585610283838361032f565b61028d91906107fb565b61035a565b6060600480546101af906107c1565b600033816102af828661032f565b9050838110156103145760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b610265828686840361035a565b6000336102408185856104f8565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166103bc5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161030b565b6001600160a01b03821661041d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161030b565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600061048a848461032f565b905060001981146104f257818110156104e55760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161030b565b6104f2848484840361035a565b50505050565b6001600160a01b03831661055c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161030b565b6001600160a01b0382166105be5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161030b565b6001600160a01b038316600090815260208190526040902054818110156106365760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161030b565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36104f2565b600060208083528351808285015260005b818110156106c9578581018301518582016040015282016106ad565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b038116811461070157600080fd5b919050565b6000806040838503121561071957600080fd5b610722836106ea565b946020939093013593505050565b60008060006060848603121561074557600080fd5b61074e846106ea565b925061075c602085016106ea565b9150604084013590509250925092565b60006020828403121561077e57600080fd5b610787826106ea565b9392505050565b600080604083850312156107a157600080fd5b6107aa836106ea565b91506107b8602084016106ea565b90509250929050565b600181811c908216806107d557607f821691505b6020821081036107f557634e487b7160e01b600052602260045260246000fd5b50919050565b8082018082111561024657634e487b7160e01b600052601160045260246000fdfea2646970667358221220b09ea8a21907e25777e199a645d1d93aff18e0ee89332fb02b9d961e15134c3e64736f6c63430008120033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100a95760003560e01c80633950935111610071578063395093511461012357806370a082311461013657806395d89b411461015f578063a457c2d714610167578063a9059cbb1461017a578063dd62ed3e1461018d57600080fd5b806306fdde03146100ae578063095ea7b3146100cc57806318160ddd146100ef57806323b872dd14610101578063313ce56714610114575b600080fd5b6100b66101a0565b6040516100c3919061069c565b60405180910390f35b6100df6100da366004610706565b610232565b60405190151581526020016100c3565b6002545b6040519081526020016100c3565b6100df61010f366004610730565b61024c565b604051601281526020016100c3565b6100df610131366004610706565b610270565b6100f361014436600461076c565b6001600160a01b031660009081526020819052604090205490565b6100b6610292565b6100df610175366004610706565b6102a1565b6100df610188366004610706565b610321565b6100f361019b36600461078e565b61032f565b6060600380546101af906107c1565b80601f01602080910402602001604051908101604052809291908181526020018280546101db906107c1565b80156102285780601f106101fd57610100808354040283529160200191610228565b820191906000526020600020905b81548152906001019060200180831161020b57829003601f168201915b5050505050905090565b60003361024081858561035a565b60019150505b92915050565b60003361025a85828561047e565b6102658585856104f8565b506001949350505050565b600033610240818585610283838361032f565b61028d91906107fb565b61035a565b6060600480546101af906107c1565b600033816102af828661032f565b9050838110156103145760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b610265828686840361035a565b6000336102408185856104f8565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166103bc5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161030b565b6001600160a01b03821661041d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161030b565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600061048a848461032f565b905060001981146104f257818110156104e55760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161030b565b6104f2848484840361035a565b50505050565b6001600160a01b03831661055c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161030b565b6001600160a01b0382166105be5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161030b565b6001600160a01b038316600090815260208190526040902054818110156106365760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161030b565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36104f2565b600060208083528351808285015260005b818110156106c9578581018301518582016040015282016106ad565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b038116811461070157600080fd5b919050565b6000806040838503121561071957600080fd5b610722836106ea565b946020939093013593505050565b60008060006060848603121561074557600080fd5b61074e846106ea565b925061075c602085016106ea565b9150604084013590509250925092565b60006020828403121561077e57600080fd5b610787826106ea565b9392505050565b600080604083850312156107a157600080fd5b6107aa836106ea565b91506107b8602084016106ea565b90509250929050565b600181811c908216806107d557607f821691505b6020821081036107f557634e487b7160e01b600052602260045260246000fd5b50919050565b8082018082111561024657634e487b7160e01b600052601160045260246000fdfea2646970667358221220b09ea8a21907e25777e199a645d1d93aff18e0ee89332fb02b9d961e15134c3e64736f6c63430008120033
Deployed Bytecode Sourcemap
12541:148:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4984:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6718:201;;;;;;:::i;:::-;;:::i;:::-;;;1169:14:12;;1162:22;1144:41;;1132:2;1117:18;6718:201:1;1004:187:12;5477:108:1;5565:12;;5477:108;;;1342:25:12;;;1330:2;1315:18;5477:108:1;1196:177:12;6927:315:1;;;;;;:::i;:::-;;:::i;5319:93::-;;;5402:2;1853:36:12;;1841:2;1826:18;5319:93:1;1711:184:12;7256:238:1;;;;;;:::i;:::-;;:::i;5648:127::-;;;;;;:::i;:::-;-1:-1:-1;;;;;5749:18:1;5722:7;5749:18;;;;;;;;;;;;5648:127;5203:104;;;:::i;7508:436::-;;;;;;:::i;:::-;;:::i;5981:203::-;;;;;;:::i;:::-;;:::i;6247:151::-;;;;;;:::i;:::-;;:::i;4984:100::-;5038:13;5071:5;5064:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4984:100;:::o;6718:201::-;6801:4;954:10;6857:32;954:10;6873:7;6882:6;6857:8;:32::i;:::-;6907:4;6900:11;;;6718:201;;;;;:::o;6927:315::-;7068:4;954:10;7136:38;7152:4;954:10;7167:6;7136:15;:38::i;:::-;7185:27;7195:4;7201:2;7205:6;7185:9;:27::i;:::-;-1:-1:-1;7230:4:1;;6927:315;-1:-1:-1;;;;6927:315:1:o;7256:238::-;7344:4;954:10;7400:64;954:10;7416:7;7453:10;7425:25;954:10;7416:7;7425:9;:25::i;:::-;:38;;;;:::i;:::-;7400:8;:64::i;5203:104::-;5259:13;5292:7;5285:14;;;;;:::i;7508:436::-;7601:4;954:10;7601:4;7684:25;954:10;7701:7;7684:9;:25::i;:::-;7657:52;;7748:15;7728:16;:35;;7720:85;;;;-1:-1:-1;;;7720:85:1;;3170:2:12;7720:85:1;;;3152:21:12;3209:2;3189:18;;;3182:30;3248:34;3228:18;;;3221:62;-1:-1:-1;;;3299:18:12;;;3292:35;3344:19;;7720:85:1;;;;;;;;;7841:60;7850:5;7857:7;7885:15;7866:16;:34;7841:8;:60::i;5981:203::-;6060:4;954:10;6116:28;954:10;6133:2;6137:6;6116:9;:28::i;6247:151::-;-1:-1:-1;;;;;6363:18:1;;;6336:7;6363:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;6247:151::o;11113:380::-;-1:-1:-1;;;;;11249:19:1;;11241:68;;;;-1:-1:-1;;;11241:68:1;;3576:2:12;11241:68:1;;;3558:21:12;3615:2;3595:18;;;3588:30;3654:34;3634:18;;;3627:62;-1:-1:-1;;;3705:18:12;;;3698:34;3749:19;;11241:68:1;3374:400:12;11241:68:1;-1:-1:-1;;;;;11328:21:1;;11320:68;;;;-1:-1:-1;;;11320:68:1;;3981:2:12;11320:68:1;;;3963:21:12;4020:2;4000:18;;;3993:30;4059:34;4039:18;;;4032:62;-1:-1:-1;;;4110:18:12;;;4103:32;4152:19;;11320:68:1;3779:398:12;11320:68:1;-1:-1:-1;;;;;11401:18:1;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;11453:32;;1342:25:12;;;11453:32:1;;1315:18:12;11453:32:1;;;;;;;11113:380;;;:::o;11784:453::-;11919:24;11946:25;11956:5;11963:7;11946:9;:25::i;:::-;11919:52;;-1:-1:-1;;11986:16:1;:37;11982:248;;12068:6;12048:16;:26;;12040:68;;;;-1:-1:-1;;;12040:68:1;;4384:2:12;12040:68:1;;;4366:21:12;4423:2;4403:18;;;4396:30;4462:31;4442:18;;;4435:59;4511:18;;12040:68:1;4182:353:12;12040:68:1;12152:51;12161:5;12168:7;12196:6;12177:16;:25;12152:8;:51::i;:::-;11908:329;11784:453;;;:::o;8414:848::-;-1:-1:-1;;;;;8545:18:1;;8537:68;;;;-1:-1:-1;;;8537:68:1;;4742:2:12;8537:68:1;;;4724:21:12;4781:2;4761:18;;;4754:30;4820:34;4800:18;;;4793:62;-1:-1:-1;;;4871:18:12;;;4864:35;4916:19;;8537:68:1;4540:401:12;8537:68:1;-1:-1:-1;;;;;8624:16:1;;8616:64;;;;-1:-1:-1;;;8616:64:1;;5148:2:12;8616:64:1;;;5130:21:12;5187:2;5167:18;;;5160:30;5226:34;5206:18;;;5199:62;-1:-1:-1;;;5277:18:12;;;5270:33;5320:19;;8616:64:1;4946:399:12;8616:64:1;-1:-1:-1;;;;;8774:15:1;;8752:19;8774:15;;;;;;;;;;;8808:21;;;;8800:72;;;;-1:-1:-1;;;8800:72:1;;5552:2:12;8800:72:1;;;5534:21:12;5591:2;5571:18;;;5564:30;5630:34;5610:18;;;5603:62;-1:-1:-1;;;5681:18:12;;;5674:36;5727:19;;8800:72:1;5350:402:12;8800:72:1;-1:-1:-1;;;;;8908:15:1;;;:9;:15;;;;;;;;;;;8926:20;;;8908:38;;9126:13;;;;;;;;;;:23;;;;;;9178:26;;1342:25:12;;;9126:13:1;;9178:26;;1315:18:12;9178:26:1;;;;;;;9217:37;12245:125;14:548:12;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:173::-;635:20;;-1:-1:-1;;;;;684:31:12;;674:42;;664:70;;730:1;727;720:12;664:70;567:173;;;:::o;745:254::-;813:6;821;874:2;862:9;853:7;849:23;845:32;842:52;;;890:1;887;880:12;842:52;913:29;932:9;913:29;:::i;:::-;903:39;989:2;974:18;;;;961:32;;-1:-1:-1;;;745:254:12:o;1378:328::-;1455:6;1463;1471;1524:2;1512:9;1503:7;1499:23;1495:32;1492:52;;;1540:1;1537;1530:12;1492:52;1563:29;1582:9;1563:29;:::i;:::-;1553:39;;1611:38;1645:2;1634:9;1630:18;1611:38;:::i;:::-;1601:48;;1696:2;1685:9;1681:18;1668:32;1658:42;;1378:328;;;;;:::o;1900:186::-;1959:6;2012:2;2000:9;1991:7;1987:23;1983:32;1980:52;;;2028:1;2025;2018:12;1980:52;2051:29;2070:9;2051:29;:::i;:::-;2041:39;1900:186;-1:-1:-1;;;1900:186:12:o;2091:260::-;2159:6;2167;2220:2;2208:9;2199:7;2195:23;2191:32;2188:52;;;2236:1;2233;2226:12;2188:52;2259:29;2278:9;2259:29;:::i;:::-;2249:39;;2307:38;2341:2;2330:9;2326:18;2307:38;:::i;:::-;2297:48;;2091:260;;;;;:::o;2356:380::-;2435:1;2431:12;;;;2478;;;2499:61;;2553:4;2545:6;2541:17;2531:27;;2499:61;2606:2;2598:6;2595:14;2575:18;2572:38;2569:161;;2652:10;2647:3;2643:20;2640:1;2633:31;2687:4;2684:1;2677:15;2715:4;2712:1;2705:15;2569:161;;2356:380;;;:::o;2741:222::-;2806:9;;;2827:10;;;2824:133;;;2879:10;2874:3;2870:20;2867:1;2860:31;2914:4;2911:1;2904:15;2942:4;2939:1;2932:15
Swarm Source
ipfs://b09ea8a21907e25777e199a645d1d93aff18e0ee89332fb02b9d961e15134c3e
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.