Overview
Max Total Supply
81,154,970.214482891856857162 STBU
Holders
235 (0.00%)
Market
Price
$0.0027 @ 0.000001 ETH (+3.30%)
Onchain Market Cap
$215,078.53
Circulating Supply Market Cap
$331,277.00
Other Info
Token Contract (WITH 18 Decimals)
Balance
76.06730177360528952 STBUValue
$0.20 ( ~6.77662241774029E-05 ETH) [0.0001%]Loading...
Loading
Loading...
Loading
Loading...
Loading
Contract Name:
StoboxProtocolSTV3
Compiler Version
v0.8.28+commit.7893614a
Optimization Enabled:
Yes with 200 runs
Other Settings:
cancun EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
pragma solidity 0.8.28;
import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import {IERC173} from "./interfaces/IERC173.sol";
import {IDiamondCut} from "./interfaces/IDiamondCut.sol";
import {LibDiamond} from "./libraries/LibDiamond.sol";
import {LibERC20} from "./libraries/LibERC20.sol";
contract StoboxProtocolSTV3 is IERC20 {
// This is used in diamond constructor
// more arguments are added to this struct
// this avoids stack too deep errors
struct DiamondArgs {
address deployer;
address owner;
address init;
bytes initCalldata;
}
// When no function exists for function called
error FunctionNotFound(bytes4 _functionSelector);
error ZeroAddressIsNotAllowed();
modifier onlyDeployer() {
LibDiamond.enforceIsDeployer();
_;
}
constructor(IDiamondCut.FacetCut[] memory _diamondCut, DiamondArgs memory _args) payable {
LibDiamond.setDeployer(_args.deployer);
LibDiamond.transferOwnership(_args.owner);
LibDiamond.diamondCut(_diamondCut, _args.init, _args.initCalldata);
}
receive() external payable {}
// Find facet for function that is called and execute the
// function if a facet is found and return any value.
fallback() external payable {
LibDiamond.DiamondStorage storage ds;
bytes32 position = LibDiamond.DIAMOND_STORAGE_POSITION;
// get diamond storage
assembly {
ds.slot := position
}
// get facet from function selector
address facet = ds.facetAddressAndSelectorPosition[msg.sig].facetAddress;
if (facet == address(0)) {
revert FunctionNotFound(msg.sig);
}
// Execute external function from facet using delegatecall and return any value.
assembly {
// copy function selector and any arguments
calldatacopy(0, 0, calldatasize())
// execute function call using the facet
let result := delegatecall(gas(), facet, 0, calldatasize(), 0, 0)
// get any return value
returndatacopy(0, 0, returndatasize())
// return any return value or error back to the caller
switch result
case 0 { revert(0, returndatasize()) }
default { return(0, returndatasize()) }
}
}
// Requirements:
// - `to` cannot be the zero address.
// - the caller must have a balance of at least `value`.
function transfer(address to, uint256 value) external returns (bool) {
return LibERC20.transfer(to, value);
}
// NOTE: If `value` 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 value) external returns (bool) {
return LibERC20.approve(spender, value);
}
// Skips emitting an {Approval} event indicating an allowance update. This is not required by the ERC.
// 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 `value`.
// - the caller must have allowance for ``from``'s tokens of at least `value`
function transferFrom(address from, address to, uint256 value) external returns (bool) {
return LibERC20.transferFrom(from, to, value);
}
// @dev Set the address of the new deployer of the contract
// Can only be called by the current deployer.
// @param newDeployer The address of the new deployer of the contract
function setDeployer(address newDeployer) external onlyDeployer {
require(newDeployer != address(0), ZeroAddressIsNotAllowed());
LibDiamond.setDeployer(newDeployer);
}
// @dev Set the address of the new owner of the contract
// Can only be called by the current deployer.
// @param newOwner The address of the new owner of the contract
function transferOwnership(address newOwner) external onlyDeployer {
require(newOwner != address(0), ZeroAddressIsNotAllowed());
LibDiamond.transferOwnership(newOwner);
}
// @dev Returns the name of the token.
function name() external view returns (string memory) {
return LibERC20.name();
}
// @dev Returns the symbol of the token, usually a shorter version of the
function symbol() external view returns (string memory) {
return LibERC20.symbol();
}
// @dev Returns the number of decimals used to get its user representation.
function decimals() external view returns (uint8) {
return LibERC20.decimals();
}
// @dev See {IERC20-totalSupply}.
function totalSupply() external view returns (uint256) {
return LibERC20.totalSupply();
}
// @dev See {IERC20-balanceOf}.
function balanceOf(address account) external view returns (uint256) {
return LibERC20.balanceOf(account);
}
// @dev Returns the max supply of the token, 0 if unlimited.
function maxSupply() external view returns (uint256) {
return LibERC20.maxSupply();
}
function allowance(address owner_, address spender) external view returns (uint256) {
return LibERC20.allowance(owner_, spender);
}
// @dev Get the address of the deployer
function deployer() external view returns (address) {
return LibDiamond.deployer();
}
// @dev Get the address of the owner
function owner() external view returns (address) {
return LibDiamond.owner();
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol)
pragma solidity ^0.8.20;
/**
* @dev Interface of the ERC-20 standard as defined in the ERC.
*/
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 value of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the value of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves a `value` amount of 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 value) 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 a `value` amount of tokens 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 value) external returns (bool);
/**
* @dev Moves a `value` amount of tokens from `from` to `to` using the
* allowance mechanism. `value` 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 value) external returns (bool);
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
/// @title ERC-173 Contract Ownership Standard
/// Note: the ERC-165 identifier for this interface is 0x7f5828d0
interface IERC173 {
/// @dev This emits when ownership of a contract changes.
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/// @notice Get the address of the owner
/// @return The address of the owner.
function owner() external view returns (address);
/// @notice Set the address of the new owner of the contract
/// @dev Set _newOwner to address(0) to renounce any ownership.
/// @param _newOwner The address of the new owner of the contract
function transferOwnership(address _newOwner) external;
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.26;
import {IDiamond} from "./IDiamond.sol";
interface IDiamondCut is IDiamond {
/// @notice Add/replace/remove any number of functions and optionally execute
/// a function with delegatecall
/// @param _diamondCut Contains the facet addresses and function selectors
/// @param _init The address of the contract or facet to execute _calldata
/// @param _calldata A function call, including function selector and arguments
/// _calldata is executed with delegatecall on _init
function diamondCut(FacetCut[] calldata _diamondCut, address _init, bytes calldata _calldata) external;
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import {IDiamond} from "../interfaces/IDiamond.sol";
import {IDiamondCut} from "../interfaces/IDiamondCut.sol";
library LibDiamond {
struct FacetAddressAndSelectorPosition {
address facetAddress;
uint16 selectorPosition;
}
struct DiamondStorage {
// function selector => facet address and selector position in selectors array
mapping(bytes4 => FacetAddressAndSelectorPosition) facetAddressAndSelectorPosition;
bytes4[] selectors;
mapping(bytes4 => bool) supportedInterfaces;
// deployer of the contract
address deployer;
address owner;
}
bytes32 constant DIAMOND_STORAGE_POSITION = keccak256("diamond.standard.diamond.storage");
event DeployerRightsTransferred(address indexed previousDeployer, address indexed newDeployer);
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address indexed _init, bytes _calldata);
error NoSelectorsGivenToAdd();
error NotDeployer(address _user, address _deployer);
error NotOwner(address _user, address _owner);
error NoSelectorsProvidedForFacetForCut(address _facetAddress);
error CannotAddSelectorsToZeroAddress(bytes4[] _selectors);
error NoBytecodeAtAddress(address _contractAddress, string _message);
error IncorrectFacetCutAction(uint8 _action);
error CannotAddFunctionToDiamondThatAlreadyExists(bytes4 _selector);
error CannotReplaceFunctionsFromFacetWithZeroAddress(bytes4[] _selectors);
error CannotReplaceImmutableFunction(bytes4 _selector);
error CannotReplaceFunctionWithTheSameFunctionFromTheSameFacet(bytes4 _selector);
error CannotReplaceFunctionThatDoesNotExists(bytes4 _selector);
error RemoveFacetAddressMustBeZeroAddress(address _facetAddress);
error CannotRemoveFunctionThatDoesNotExist(bytes4 _selector);
error CannotRemoveImmutableFunction(bytes4 _selector);
error InitializationFunctionReverted(address _initializationContractAddress, bytes _calldata);
function setDeployer(address _newDeployer) internal {
DiamondStorage storage ds = diamondStorage();
emit DeployerRightsTransferred(ds.deployer, _newDeployer);
ds.deployer = _newDeployer;
}
function transferOwnership(address _newOwner) internal {
DiamondStorage storage ds = diamondStorage();
emit OwnershipTransferred(ds.owner, _newOwner);
ds.owner = _newOwner;
}
// Internal function version of diamondCut
function diamondCut(IDiamondCut.FacetCut[] memory _diamondCut, address _init, bytes memory _calldata) internal {
for (uint256 facetIndex; facetIndex < _diamondCut.length; facetIndex++) {
bytes4[] memory functionSelectors = _diamondCut[facetIndex].functionSelectors;
address facetAddress = _diamondCut[facetIndex].facetAddress;
if (functionSelectors.length == 0) {
revert NoSelectorsProvidedForFacetForCut(facetAddress);
}
IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;
if (action == IDiamond.FacetCutAction.Add) {
addFunctions(facetAddress, functionSelectors);
} else if (action == IDiamond.FacetCutAction.Replace) {
replaceFunctions(facetAddress, functionSelectors);
} else if (action == IDiamond.FacetCutAction.Remove) {
removeFunctions(facetAddress, functionSelectors);
} else {
revert IncorrectFacetCutAction(uint8(action));
}
}
emit DiamondCut(_diamondCut, _init, _calldata);
initializeDiamondCut(_init, _calldata);
}
function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {
if (_facetAddress == address(0)) {
revert CannotAddSelectorsToZeroAddress(_functionSelectors);
}
DiamondStorage storage ds = diamondStorage();
uint16 selectorCount = uint16(ds.selectors.length);
enforceHasContractCode(_facetAddress, "LibDiamondCut: Add facet has no code");
for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {
bytes4 selector = _functionSelectors[selectorIndex];
address oldFacetAddress = ds.facetAddressAndSelectorPosition[selector].facetAddress;
if (oldFacetAddress != address(0)) {
revert CannotAddFunctionToDiamondThatAlreadyExists(selector);
}
ds.facetAddressAndSelectorPosition[selector] = FacetAddressAndSelectorPosition(_facetAddress, selectorCount);
ds.selectors.push(selector);
selectorCount++;
}
}
function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {
DiamondStorage storage ds = diamondStorage();
if (_facetAddress == address(0)) {
revert CannotReplaceFunctionsFromFacetWithZeroAddress(_functionSelectors);
}
enforceHasContractCode(_facetAddress, "LibDiamondCut: Replace facet has no code");
for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {
bytes4 selector = _functionSelectors[selectorIndex];
address oldFacetAddress = ds.facetAddressAndSelectorPosition[selector].facetAddress;
// can't replace immutable functions -- functions defined directly in the diamond in this case
if (oldFacetAddress == address(this)) {
revert CannotReplaceImmutableFunction(selector);
}
if (oldFacetAddress == _facetAddress) {
revert CannotReplaceFunctionWithTheSameFunctionFromTheSameFacet(selector);
}
if (oldFacetAddress == address(0)) {
revert CannotReplaceFunctionThatDoesNotExists(selector);
}
// replace old facet address
ds.facetAddressAndSelectorPosition[selector].facetAddress = _facetAddress;
}
}
function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {
DiamondStorage storage ds = diamondStorage();
uint256 selectorCount = ds.selectors.length;
if (_facetAddress != address(0)) {
revert RemoveFacetAddressMustBeZeroAddress(_facetAddress);
}
for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {
bytes4 selector = _functionSelectors[selectorIndex];
FacetAddressAndSelectorPosition memory oldFacetAddressAndSelectorPosition =
ds.facetAddressAndSelectorPosition[selector];
if (oldFacetAddressAndSelectorPosition.facetAddress == address(0)) {
revert CannotRemoveFunctionThatDoesNotExist(selector);
}
// can't remove immutable functions -- functions defined directly in the diamond
if (oldFacetAddressAndSelectorPosition.facetAddress == address(this)) {
revert CannotRemoveImmutableFunction(selector);
}
// replace selector with last selector
selectorCount--;
if (oldFacetAddressAndSelectorPosition.selectorPosition != selectorCount) {
bytes4 lastSelector = ds.selectors[selectorCount];
ds.selectors[oldFacetAddressAndSelectorPosition.selectorPosition] = lastSelector;
ds.facetAddressAndSelectorPosition[lastSelector].selectorPosition =
oldFacetAddressAndSelectorPosition.selectorPosition;
}
// delete last selector
ds.selectors.pop();
delete ds.facetAddressAndSelectorPosition[selector];
}
}
function initializeDiamondCut(address _init, bytes memory _calldata) internal {
if (_init == address(0)) {
return;
}
enforceHasContractCode(_init, "LibDiamondCut: _init address has no code");
(bool success, bytes memory error) = _init.delegatecall(_calldata);
if (!success) {
if (error.length > 0) {
// bubble up error
/// @solidity memory-safe-assembly
assembly {
let returndata_size := mload(error)
revert(add(32, error), returndata_size)
}
} else {
revert InitializationFunctionReverted(_init, _calldata);
}
}
}
function diamondStorage() internal pure returns (DiamondStorage storage ds) {
bytes32 position = DIAMOND_STORAGE_POSITION;
assembly {
ds.slot := position
}
}
function deployer() internal view returns (address deployer_) {
deployer_ = diamondStorage().deployer;
}
function owner() internal view returns (address owner_) {
owner_ = diamondStorage().owner;
}
function enforceIsDeployer() internal view {
if (msg.sender != diamondStorage().deployer) {
revert NotDeployer(msg.sender, diamondStorage().deployer);
}
}
function enforceIsOwner() internal view {
if (msg.sender != diamondStorage().owner) {
revert NotOwner(msg.sender, diamondStorage().owner);
}
}
function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {
uint256 contractSize;
assembly {
contractSize := extcodesize(_contract)
}
if (contractSize == 0) {
revert NoBytecodeAtAddress(_contract, _errorMessage);
}
}
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.28;
import {IERC20Errors} from "@openzeppelin/contracts/interfaces/draft-IERC6093.sol";
import {ITransferValidation} from "../interfaces/ITransferValidation.sol";
library LibERC20 {
struct ERC20Storage {
mapping(address account => uint256) _balances;
mapping(address account => mapping(address spender => uint256)) _allowances;
uint256 _totalSupply;
string _name;
string _symbol;
uint8 _decimals;
uint256 _maxSupply;
}
bytes32 constant ERC20_POSITION = keccak256("erc20.storage");
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(address indexed owner, address indexed spender, uint256 value);
function erc20Storage() internal pure returns (ERC20Storage storage storageStruct) {
bytes32 position = ERC20_POSITION;
assembly {
storageStruct.slot := position
}
}
// @dev Returns the name of the token.
function name() internal view returns (string memory) {
return erc20Storage()._name;
}
// @dev Returns the symbol of the token, usually a shorter version of the
function symbol() internal view returns (string memory) {
return erc20Storage()._symbol;
}
// @dev Returns the number of decimals used to get its user representation.
function decimals() internal view returns (uint8) {
return erc20Storage()._decimals;
}
// @dev See {IERC20-totalSupply}.
function totalSupply() internal view returns (uint256) {
return erc20Storage()._totalSupply;
}
// @dev See {IERC20-balanceOf}.
function balanceOf(address account) internal view returns (uint256) {
return erc20Storage()._balances[account];
}
// @dev Returns the max supply of the token, 0 if unlimited.
function maxSupply() internal view returns (uint256) {
return erc20Storage()._maxSupply;
}
// Requirements:
// - `to` cannot be the zero address.
// - the caller must have a balance of at least `value`.
function transfer(address to, uint256 value) internal returns (bool) {
address owner_ = _msgSender();
_transfer(owner_, to, value);
return true;
}
function allowance(address owner_, address spender) internal view returns (uint256) {
return erc20Storage()._allowances[owner_][spender];
}
// NOTE: If `value` 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 value) internal returns (bool) {
address owner_ = _msgSender();
_approve(owner_, spender, value);
return true;
}
// Skips emitting an {Approval} event indicating an allowance update. This is not required by the ERC.
// 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 `value`.
// - the caller must have allowance for ``from``'s tokens of at least `value`
function transferFrom(address from, address to, uint256 value) internal returns (bool) {
address spender = _msgSender();
_spendAllowance(from, spender, value);
_transfer(from, to, value);
return true;
}
// @dev Moves a `value` amount of tokens from `from` to `to`.
// Emits a {Transfer} event.
function _transfer(address from, address to, uint256 value) internal {
if (from == address(0)) {
revert IERC20Errors.ERC20InvalidSender(address(0));
}
if (to == address(0)) {
revert IERC20Errors.ERC20InvalidReceiver(address(0));
}
_update(from, to, value);
}
// @dev Emits a {Transfer} event.
function _update(address from, address to, uint256 value) internal {
ITransferValidation(address(this)).beforeUpdateValidation(from, to, value);
ERC20Storage storage erc20s = erc20Storage();
if (from == address(0)) {
// Overflow check required: The rest of the code assumes that totalSupply never overflows
erc20s._totalSupply += value;
} else {
uint256 fromBalance = erc20s._balances[from];
if (fromBalance < value) {
revert IERC20Errors.ERC20InsufficientBalance(from, fromBalance, value);
}
unchecked {
// Overflow not possible: value <= fromBalance <= totalSupply.
erc20s._balances[from] = fromBalance - value;
}
}
if (to == address(0)) {
unchecked {
// Overflow not possible: value <= totalSupply or value <= fromBalance <= totalSupply.
erc20s._totalSupply -= value;
}
} else {
unchecked {
// Overflow not possible: balance + value is at most totalSupply, which we know fits into a uint256.
erc20s._balances[to] += value;
}
}
emit Transfer(from, to, value);
ITransferValidation(address(this)).afterUpdateValidation(from, to, value);
}
// @dev Creates a `value` amount of tokens and assigns them to `account`, by transferring it from address(0).
// Relies on the `_update` mechanism
// Emits a {Transfer} event with `from` set to the zero address.
function _mint(address account, uint256 value) internal {
if (account == address(0)) {
revert IERC20Errors.ERC20InvalidReceiver(address(0));
}
_update(address(0), account, value);
}
// @dev Destroys a `value` amount of tokens from `account`, lowering the total supply.
// Relies on the `_update` mechanism.
// Emits a {Transfer} event with `to` set to the zero address.
function _burn(address account, uint256 value) internal {
if (account == address(0)) {
revert IERC20Errors.ERC20InvalidSender(address(0));
}
_update(account, address(0), value);
}
// @dev Sets `value` as the allowance of `spender` over the `owner` s tokens.
// Emits an {Approval} event.
// - `owner` cannot be the zero address.
// - `spender` cannot be the zero address.
function _approve(address owner_, address spender, uint256 value) internal {
_approve(owner_, spender, value, true);
}
// @dev Variant of {_approve} with an optional flag to enable or disable the {Approval} event.
function _approve(address owner_, address spender, uint256 value, bool emitEvent) internal {
ERC20Storage storage erc20s = erc20Storage();
if (owner_ == address(0)) {
revert IERC20Errors.ERC20InvalidApprover(address(0));
}
if (spender == address(0)) {
revert IERC20Errors.ERC20InvalidSpender(address(0));
}
erc20s._allowances[owner_][spender] = value;
if (emitEvent) {
emit Approval(owner_, spender, value);
}
}
// @dev Updates `owner_` s allowance for `spender` based on spent `value`.
// Does not update the allowance value in case of infinite allowance.
// Revert if not enough allowance is available.
// Does not emit an {Approval} event.
function _spendAllowance(address owner_, address spender, uint256 value) internal {
uint256 currentAllowance = allowance(owner_, spender);
if (currentAllowance != type(uint256).max) {
if (currentAllowance < value) {
revert IERC20Errors.ERC20InsufficientAllowance(spender, currentAllowance, value);
}
unchecked {
_approve(owner_, spender, currentAllowance - value, false);
}
}
}
function _msgSender() internal view returns (address) {
return msg.sender;
}
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.26;
interface IDiamond {
enum FacetCutAction {
Add,
Replace,
Remove
}
// Add=0, Replace=1, Remove=2
struct FacetCut {
address facetAddress;
FacetCutAction action;
bytes4[] functionSelectors;
}
event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.1.0) (interfaces/draft-IERC6093.sol)
pragma solidity ^0.8.20;
/**
* @dev Standard ERC-20 Errors
* Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-20 tokens.
*/
interface IERC20Errors {
/**
* @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.
* @param sender Address whose tokens are being transferred.
* @param balance Current balance for the interacting account.
* @param needed Minimum amount required to perform a transfer.
*/
error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed);
/**
* @dev Indicates a failure with the token `sender`. Used in transfers.
* @param sender Address whose tokens are being transferred.
*/
error ERC20InvalidSender(address sender);
/**
* @dev Indicates a failure with the token `receiver`. Used in transfers.
* @param receiver Address to which tokens are being transferred.
*/
error ERC20InvalidReceiver(address receiver);
/**
* @dev Indicates a failure with the `spender`’s `allowance`. Used in transfers.
* @param spender Address that may be allowed to operate on tokens without being their owner.
* @param allowance Amount of tokens a `spender` is allowed to operate with.
* @param needed Minimum amount required to perform a transfer.
*/
error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed);
/**
* @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
* @param approver Address initiating an approval operation.
*/
error ERC20InvalidApprover(address approver);
/**
* @dev Indicates a failure with the `spender` to be approved. Used in approvals.
* @param spender Address that may be allowed to operate on tokens without being their owner.
*/
error ERC20InvalidSpender(address spender);
}
/**
* @dev Standard ERC-721 Errors
* Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-721 tokens.
*/
interface IERC721Errors {
/**
* @dev Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in ERC-20.
* Used in balance queries.
* @param owner Address of the current owner of a token.
*/
error ERC721InvalidOwner(address owner);
/**
* @dev Indicates a `tokenId` whose `owner` is the zero address.
* @param tokenId Identifier number of a token.
*/
error ERC721NonexistentToken(uint256 tokenId);
/**
* @dev Indicates an error related to the ownership over a particular token. Used in transfers.
* @param sender Address whose tokens are being transferred.
* @param tokenId Identifier number of a token.
* @param owner Address of the current owner of a token.
*/
error ERC721IncorrectOwner(address sender, uint256 tokenId, address owner);
/**
* @dev Indicates a failure with the token `sender`. Used in transfers.
* @param sender Address whose tokens are being transferred.
*/
error ERC721InvalidSender(address sender);
/**
* @dev Indicates a failure with the token `receiver`. Used in transfers.
* @param receiver Address to which tokens are being transferred.
*/
error ERC721InvalidReceiver(address receiver);
/**
* @dev Indicates a failure with the `operator`’s approval. Used in transfers.
* @param operator Address that may be allowed to operate on tokens without being their owner.
* @param tokenId Identifier number of a token.
*/
error ERC721InsufficientApproval(address operator, uint256 tokenId);
/**
* @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
* @param approver Address initiating an approval operation.
*/
error ERC721InvalidApprover(address approver);
/**
* @dev Indicates a failure with the `operator` to be approved. Used in approvals.
* @param operator Address that may be allowed to operate on tokens without being their owner.
*/
error ERC721InvalidOperator(address operator);
}
/**
* @dev Standard ERC-1155 Errors
* Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-1155 tokens.
*/
interface IERC1155Errors {
/**
* @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.
* @param sender Address whose tokens are being transferred.
* @param balance Current balance for the interacting account.
* @param needed Minimum amount required to perform a transfer.
* @param tokenId Identifier number of a token.
*/
error ERC1155InsufficientBalance(address sender, uint256 balance, uint256 needed, uint256 tokenId);
/**
* @dev Indicates a failure with the token `sender`. Used in transfers.
* @param sender Address whose tokens are being transferred.
*/
error ERC1155InvalidSender(address sender);
/**
* @dev Indicates a failure with the token `receiver`. Used in transfers.
* @param receiver Address to which tokens are being transferred.
*/
error ERC1155InvalidReceiver(address receiver);
/**
* @dev Indicates a failure with the `operator`’s approval. Used in transfers.
* @param operator Address that may be allowed to operate on tokens without being their owner.
* @param owner Address of the current owner of a token.
*/
error ERC1155MissingApprovalForAll(address operator, address owner);
/**
* @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
* @param approver Address initiating an approval operation.
*/
error ERC1155InvalidApprover(address approver);
/**
* @dev Indicates a failure with the `operator` to be approved. Used in approvals.
* @param operator Address that may be allowed to operate on tokens without being their owner.
*/
error ERC1155InvalidOperator(address operator);
/**
* @dev Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation.
* Used in batch transfers.
* @param idsLength Length of the array of token identifiers
* @param valuesLength Length of the array of token amounts
*/
error ERC1155InvalidArrayLength(uint256 idsLength, uint256 valuesLength);
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.26;
interface ITransferValidation {
function beforeUpdateValidation(address from, address to, uint256 value) external view;
function afterUpdateValidation(address from, address to, uint256 value) external view;
}{
"remappings": [
"@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/",
"ds-test/=lib/openzeppelin-contracts/lib/forge-std/lib/ds-test/src/",
"erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/",
"forge-std/=lib/forge-std/src/",
"openzeppelin-contracts/=lib/openzeppelin-contracts/",
"halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/"
],
"optimizer": {
"enabled": true,
"runs": 200
},
"metadata": {
"useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"evmVersion": "cancun",
"viaIR": true,
"libraries": {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"components":[{"internalType":"address","name":"facetAddress","type":"address"},{"internalType":"enum IDiamond.FacetCutAction","name":"action","type":"uint8"},{"internalType":"bytes4[]","name":"functionSelectors","type":"bytes4[]"}],"internalType":"struct IDiamond.FacetCut[]","name":"_diamondCut","type":"tuple[]"},{"components":[{"internalType":"address","name":"deployer","type":"address"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"init","type":"address"},{"internalType":"bytes","name":"initCalldata","type":"bytes"}],"internalType":"struct StoboxProtocolSTV3.DiamondArgs","name":"_args","type":"tuple"}],"stateMutability":"payable","type":"constructor"},{"inputs":[{"internalType":"bytes4","name":"_selector","type":"bytes4"}],"name":"CannotAddFunctionToDiamondThatAlreadyExists","type":"error"},{"inputs":[{"internalType":"bytes4[]","name":"_selectors","type":"bytes4[]"}],"name":"CannotAddSelectorsToZeroAddress","type":"error"},{"inputs":[{"internalType":"bytes4","name":"_selector","type":"bytes4"}],"name":"CannotRemoveFunctionThatDoesNotExist","type":"error"},{"inputs":[{"internalType":"bytes4","name":"_selector","type":"bytes4"}],"name":"CannotRemoveImmutableFunction","type":"error"},{"inputs":[{"internalType":"bytes4","name":"_selector","type":"bytes4"}],"name":"CannotReplaceFunctionThatDoesNotExists","type":"error"},{"inputs":[{"internalType":"bytes4","name":"_selector","type":"bytes4"}],"name":"CannotReplaceFunctionWithTheSameFunctionFromTheSameFacet","type":"error"},{"inputs":[{"internalType":"bytes4[]","name":"_selectors","type":"bytes4[]"}],"name":"CannotReplaceFunctionsFromFacetWithZeroAddress","type":"error"},{"inputs":[{"internalType":"bytes4","name":"_selector","type":"bytes4"}],"name":"CannotReplaceImmutableFunction","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"},{"inputs":[{"internalType":"bytes4","name":"_functionSelector","type":"bytes4"}],"name":"FunctionNotFound","type":"error"},{"inputs":[{"internalType":"uint8","name":"_action","type":"uint8"}],"name":"IncorrectFacetCutAction","type":"error"},{"inputs":[{"internalType":"address","name":"_initializationContractAddress","type":"address"},{"internalType":"bytes","name":"_calldata","type":"bytes"}],"name":"InitializationFunctionReverted","type":"error"},{"inputs":[{"internalType":"address","name":"_contractAddress","type":"address"},{"internalType":"string","name":"_message","type":"string"}],"name":"NoBytecodeAtAddress","type":"error"},{"inputs":[{"internalType":"address","name":"_facetAddress","type":"address"}],"name":"NoSelectorsProvidedForFacetForCut","type":"error"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"address","name":"_deployer","type":"address"}],"name":"NotDeployer","type":"error"},{"inputs":[{"internalType":"address","name":"_facetAddress","type":"address"}],"name":"RemoveFacetAddressMustBeZeroAddress","type":"error"},{"inputs":[],"name":"ZeroAddressIsNotAllowed","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":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":"previousDeployer","type":"address"},{"indexed":true,"internalType":"address","name":"newDeployer","type":"address"}],"name":"DeployerRightsTransferred","type":"event"},{"anonymous":false,"inputs":[{"components":[{"internalType":"address","name":"facetAddress","type":"address"},{"internalType":"enum IDiamond.FacetCutAction","name":"action","type":"uint8"},{"internalType":"bytes4[]","name":"functionSelectors","type":"bytes4[]"}],"indexed":false,"internalType":"struct IDiamond.FacetCut[]","name":"_diamondCut","type":"tuple[]"},{"indexed":true,"internalType":"address","name":"_init","type":"address"},{"indexed":false,"internalType":"bytes","name":"_calldata","type":"bytes"}],"name":"DiamondCut","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":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"},{"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"},{"stateMutability":"payable","type":"fallback"},{"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":"value","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":[],"name":"deployer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"newDeployer","type":"address"}],"name":"setDeployer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","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":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
60806040526118468038038061001481610a01565b92833981016040828203126108f45781516001600160401b0381116108f45782019181601f840112156108f45782519061005561005083610a26565b610a01565b93602085848152016020819460051b830101918583116108f45760208101915b8383106108f857505050506020810151906001600160401b0382116108f457016080818403126108f457604051608081016001600160401b0381118282101761040d576040526100c482610a3d565b81526100d260208301610a3d565b90602081019182526100e660408401610a3d565b60408201908152606084015190936001600160401b0382116108f4570185601f820112156108f45780519061011d61005083610a51565b96828852602083830101116108f457815f92602080939a98999a01838b015e8801015260608101869052515f5160206118265f395f51905f52546001600160a01b03918216918291167f606864aa4cc34987a8dfd5e24f90fae803f44751861578bcdf2ea0fe4af46c915f80a35f5160206118265f395f51905f5280546001600160a01b031916919091179055515f5160206118065f395f51905f52546001600160a01b03918216918291167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a35f5160206118065f395f51905f5280546001600160a01b031916919091179055515f926001600160a01b0390911691905b81518410156107e35760406102338584610a6c565b510151916001600160a01b036102498683610a6c565b515116938351156107d05760206102608784610a6c565b51015160038110156107bc578061046a5750841561044b5761ffff5f5160206117e65f395f51905f525416926102d66102996060610a01565b602481527f4c69624469616d6f6e644375743a2041646420666163657420686173206e6f20602082015263636f646560e01b604082015287610c2f565b5f935b8551851015610433576001600160e01b03196102f58688610a6c565b51165f8181525f5160206117c65f395f51905f5260205260409020546001600160a01b0316610421576103876103296109e2565b89815261ffff9390931660208085018281525f8581525f5160206117c65f395f51905f5290925260409091209451855491516001600160b01b03199092166001600160a01b03919091161760a09190911b61ffff60a01b1617909355565b5f5160206117e65f395f51905f5254906801000000000000000082101561040d576103c78260016103e494015f5160206117e65f395f51905f5255610ab8565b90919063ffffffff83549160031b9260e01c831b921b1916179055565b61ffff81146103f957600194850194016102d9565b634e487b7160e01b5f52601160045260245ffd5b634e487b7160e01b5f52604160045260245ffd5b63ebbf5d0760e01b5f5260045260245ffd5b5094509490959250600191505b01929193909361021e565b6040516302b8da0760e21b8152806104668660048301610b10565b0390fd5b949694600181036105c3575086156105a8579193916104cd61048c6060610a01565b602881527f4c69624469616d6f6e644375743a205265706c61636520666163657420686173602082015267206e6f20636f646560c01b604082015288610c2f565b6001600160a01b038716945f5b8551811015610597576001600160e01b03196104f68288610a6c565b51165f8181525f5160206117c65f395f51905f5260205260409020546001600160a01b0316308114610584578a8114610571571561055f575f9081525f5160206117c65f395f51905f526020526040902080546001600160a01b031916881790556001016104da565b637479f93960e01b5f5260045260245ffd5b50631ac6ce8d60e11b5f5260045260245ffd5b50632901806d60e11b5f5260045260245ffd5b509450949095506001919250610440565b60405163cd98a96f60e01b8152806104668660048301610b10565b93949391929091600281036107a657505f5160206117e65f395f51905f5254968061079457505f5b8551811015610786576001600160e01b03196106078288610a6c565b511690815f525f5160206117c65f395f51905f5260205260405f209861062b6109e2565b99549960018060a01b038b1680825261ffff602083019c60a01c168c521561077357516001600160a01b031630146107605780156103f9575f1901988961ffff825116036106ec575b505f5160206117e65f395f51905f52549182156106d8576001925f190161069a81610ab8565b63ffffffff82549160031b1b191690555f5160206117e65f395f51905f52555f525f5160206117c65f395f51905f526020525f6040812055016105eb565b634e487b7160e01b5f52603160045260245ffd5b61075a9061ffff6106fc8c610ab8565b90549060031b1c60e01b91610717836103c784845116610ab8565b516001600160e01b03199092165f9081525f5160206117c65f395f51905f5260205260409020805461ffff60a01b19169190921660a01b61ffff60a01b16179055565b5f610674565b82630df5fd6160e31b5f5260045260245ffd5b83637a08a22d60e01b5f5260045260245ffd5b509350936001919550610440565b63d091bc8160e01b5f5260045260245ffd5b60ff90633ff4d20f60e11b5f521660045260245ffd5b634e487b7160e01b5f52602160045260245ffd5b8463e767f91f60e01b5f5260045260245ffd5b6040805181815292519083018190526060600582901b840181019695505f9084015b82821061085e5761084f8787807f8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb67389806108478f828103602084015287610a94565b0390a2610b53565b604051610b579081610c6f8239f35b848803605f19018152835180516001600160a01b0316895260208101519498939492939192606083019160038210156107bc57604060809160209384870152015193606060408201528451809452019201905f905b8082106108d157505050602080600192990192019201909291610805565b82516001600160e01b0319168452602093840193909201916001909101906108b3565b5f80fd5b82516001600160401b0381116108f45782016060818903601f1901126108f45760405190606082016001600160401b0381118382101761040d5760405261094160208201610a3d565b8252604081015160038110156108f457602083015260608101516001600160401b0381116108f457602091010188601f820112156108f457805161098761005082610a26565b9160208084848152019260051b820101908b82116108f457602001915b8183106109c1575050506040820152815260209283019201610075565b82516001600160e01b0319811681036108f4578152602092830192016109a4565b60408051919082016001600160401b0381118382101761040d57604052565b6040519190601f01601f191682016001600160401b0381118382101761040d57604052565b6001600160401b03811161040d5760051b60200190565b51906001600160a01b03821682036108f457565b6001600160401b03811161040d57601f01601f191660200190565b8051821015610a805760209160051b010190565b634e487b7160e01b5f52603260045260245ffd5b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b905f5160206117e65f395f51905f5254821015610a80575f5160206117e65f395f51905f525f52600382901c7fc0d727610ea16241eff4447d08bb1b4595f7d2ec4515282437a13b7d0df4b922019160021b601c1690565b60206040818301928281528451809452019201905f5b818110610b335750505090565b82516001600160e01b031916845260209384019390920191600101610b26565b6001600160a01b03811691908215610c2a575f8091610bb6610b756060610a01565b602881527f4c69624469616d6f6e644375743a205f696e6974206164647265737320686173602082015267206e6f20636f646560c01b604082015282610c2f565b83519060208501905af4913d15610c22573d92610bd561005085610a51565b9384523d5f602086013e5b15610bea57505050565b825115610bf957825160208401fd5b61046660405192839263192105d760e01b84526004840152604060248401526044830190610a94565b606092610be0565b505050565b803b15610c3a575050565b6040805163919834b960e01b81526001600160a01b0390921660048301526024820152908190610466906044830190610a9456fe60806040526004361015610015575b366107ce57005b5f3560e01c806306fdde03146100f4578063095ea7b3146100ef57806318160ddd146100ea57806323b872dd146100e5578063313ce567146100e057806370a08231146100db5780638da5cb5b146100d657806395d89b41146100d157806396214735146100cc578063a9059cbb146100c7578063d5abeb01146100c2578063d5f39488146100bd578063dd62ed3e146100b85763f2fde38b0361000e57610711565b6106e2565b6106ae565b610672565b610641565b61059a565b6104a7565b610473565b610447565b610408565b61037e565b610342565b61028e565b610131565b5f91031261010357565b5f80fd5b602060409281835280519182918282860152018484015e5f828201840152601f01601f1916010190565b34610103575f366003190112610103576040515f7f3f2e03f6ef530dc867b64a6018538f5b04254876becd658fe3e8b11f387f223d548060011c9060018116908115610258575b60208310821461024457828552602085019190811561022b57506001146101ba575b6101b6846101aa81860382610847565b60405191829182610107565b0390f35b7f3f2e03f6ef530dc867b64a6018538f5b04254876becd658fe3e8b11f387f223d5f9081529250907fc1bc66ddf6d9f731ac5c9600f2da44727b3841bfcb4d8927aec1a1707b4516575b818410610217575050016101aa8261019a565b805484840152602090930192600101610204565b60ff191682525090151560051b0190506101aa8261019a565b634e487b7160e01b5f52602260045260245ffd5b91607f1691610178565b600435906001600160a01b038216820361010357565b602435906001600160a01b038216820361010357565b34610103576040366003190112610103576102a7610262565b602435331561032f576001600160a01b03821691821561031c576102e482916102cf336108b5565b9060018060a01b03165f5260205260405f2090565b556040519081527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560203392a3602060405160018152f35b634a1406b160e11b5f525f60045260245ffd5b63e602df0560e01b5f525f60045260245ffd5b34610103575f3660031901126101035760207f3f2e03f6ef530dc867b64a6018538f5b04254876becd658fe3e8b11f387f223c54604051908152f35b3461010357606036600319011261010357610397610262565b61039f610278565b604435906103b0336102cf856108b5565b5492600184016103d1575b6103c59350610926565b60405160018152602090f35b8284106103ed576103e8836103c595033383610aa8565b6103bb565b8284637dc7a0d960e11b5f523360045260245260445260645ffd5b34610103575f36600319011261010357602060ff7f3f2e03f6ef530dc867b64a6018538f5b04254876becd658fe3e8b11f387f223f5416604051908152f35b3461010357602036600319011261010357602061046a610465610262565b61087d565b54604051908152f35b34610103575f366003190112610103575f516020610ae25f395f51905f52546040516001600160a01b039091168152602090f35b34610103575f366003190112610103576040515f7f3f2e03f6ef530dc867b64a6018538f5b04254876becd658fe3e8b11f387f223e548060011c9060018116908115610590575b60208310821461024457828552602085019190811561022b575060011461051f576101b6846101aa81860382610847565b7f3f2e03f6ef530dc867b64a6018538f5b04254876becd658fe3e8b11f387f223e5f9081529250907f6ee639f5db3ff26ae5edbf6980842c95dab47c8e6ba17fd75536ecd3f9711b7c5b81841061057c575050016101aa8261019a565b805484840152602090930192600101610569565b91607f16916104ee565b34610103576020366003190112610103576105b3610262565b6105bb6108ed565b6001600160a01b03166105cf8115156107b8565b5f516020610b025f395f51905f525481906001600160a01b03167f606864aa4cc34987a8dfd5e24f90fae803f44751861578bcdf2ea0fe4af46c915f80a36bffffffffffffffffffffffff60a01b5f516020610b025f395f51905f525416175f516020610b025f395f51905f52555f80f35b346101035760403660031901126101035761066761065d610262565b6024359033610926565b602060405160018152f35b34610103575f3660031901126101035760207f3f2e03f6ef530dc867b64a6018538f5b04254876becd658fe3e8b11f387f224054604051908152f35b34610103575f366003190112610103575f516020610b025f395f51905f52546040516001600160a01b039091168152602090f35b3461010357604036600319011261010357602061046a610700610262565b6102cf61070b610278565b916108b5565b346101035760203660031901126101035761072a610262565b6107326108ed565b6001600160a01b03166107468115156107b8565b5f516020610ae25f395f51905f525481906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a36bffffffffffffffffffffffff60a01b5f516020610ae25f395f51905f525416175f516020610ae25f395f51905f52555f80f35b156107bf57565b632ae88f8960e21b5f5260045ffd5b5f80356001600160e01b0319168082527fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c6020526040909120546001600160a01b0316908115610835575f8083368280378136915af43d5f803e15610831573d5ff35b3d5ffd5b630a82dd7360e31b5f5260045260245ffd5b90601f8019910116810190811067ffffffffffffffff82111761086957604052565b634e487b7160e01b5f52604160045260245ffd5b6001600160a01b03165f9081527f3f2e03f6ef530dc867b64a6018538f5b04254876becd658fe3e8b11f387f223a6020526040902090565b6001600160a01b03165f9081527f3f2e03f6ef530dc867b64a6018538f5b04254876becd658fe3e8b11f387f223b6020526040902090565b5f516020610b025f395f51905f52546001600160a01b0316338190036109105750565b630eca8ea560e11b5f523360045260245260445ffd5b906001600160a01b0382168015610a95576001600160a01b038216908115610a8257303b1561010357604051632775fab560e11b81526001600160a01b03858116600483015284166024820152604481018690525f81606481305afa8015610a4557610a6e575b506109978461087d565b54858110610a4a578590036109ab8561087d565b556109b58361087d565b8054860190556040518581527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602090a3303b156101035760405163013e4ddd60e21b81526001600160a01b0392831660048201529116602482015260448101919091525f81606481305afa8015610a4557610a2f5750565b80610a3d5f610a4393610847565b806100f9565b565b610ad6565b63391434e360e21b5f526001600160a01b038516600452602452604485905260645ffd5b80610a3d5f610a7c93610847565b5f61098d565b63ec442f0560e01b5f525f60045260245ffd5b634b637e8f60e11b5f525f60045260245ffd5b906001600160a01b0382161561032f576001600160a01b0381161561031c576102cf610ad3926108b5565b55565b6040513d5f823e3d90fdfec8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c1320c8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131fa2646970667358221220e39fe1be05030210086e6167fe76ce4e54928e9b566f2bd219db85536596024964736f6c634300081c0033c8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131cc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131dc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c1320c8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131f000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000004e0000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000003c000000000000000000000000072548f7bba84816ce0df8a6317044e328ffdeb2d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000011f931c1c00000000000000000000000000000000000000000000000000000000000000000000000000000000d64dc15a62eae274341bdbc20c50f11aa06b76d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000057a0ed62700000000000000000000000000000000000000000000000000000000adfca15e0000000000000000000000000000000000000000000000000000000052ef6b2c00000000000000000000000000000000000000000000000000000000cdffacc60000000000000000000000000000000000000000000000000000000001ffc9a700000000000000000000000000000000000000000000000000000000000000000000000000000000de8d5b12acc3f7b7bf8a5a133c2e2185fd01701400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000842966c680000000000000000000000000000000000000000000000000000000079cc67900000000000000000000000000000000000000000000000000000000040c10f19000000000000000000000000000000000000000000000000000000004000aea00000000000000000000000000000000000000000000000000000000094c7bf7b0000000000000000000000000000000000000000000000000000000092dc369a0000000000000000000000000000000000000000000000000000000004e6ebc300000000000000000000000000000000000000000000000000000000136ad20400000000000000000000000000000000000000000000000000000000000000000000000000000000b14a5b8503f40922ab2baf4960f1a40d4f06d8140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000024eebf56a0000000000000000000000000000000000000000000000000000000004f93774000000000000000000000000000000000000000000000000000000000000000000000000000000001903067a38158386eaf5e1087305b18ff0db602b00000000000000000000000044d02eec5fe9d462ba0467f909258373e5674244000000000000000000000000d0c48a3fee5a003b4f82f1d058d74ab5382a4fad00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000104f8f5faa2000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000cecb8f27f4200f3a000000000000000000000000000000000000000000000000000000000000000000001053746f626f7820546f6b656e20762e33000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004535442550000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x60806040526004361015610015575b366107ce57005b5f3560e01c806306fdde03146100f4578063095ea7b3146100ef57806318160ddd146100ea57806323b872dd146100e5578063313ce567146100e057806370a08231146100db5780638da5cb5b146100d657806395d89b41146100d157806396214735146100cc578063a9059cbb146100c7578063d5abeb01146100c2578063d5f39488146100bd578063dd62ed3e146100b85763f2fde38b0361000e57610711565b6106e2565b6106ae565b610672565b610641565b61059a565b6104a7565b610473565b610447565b610408565b61037e565b610342565b61028e565b610131565b5f91031261010357565b5f80fd5b602060409281835280519182918282860152018484015e5f828201840152601f01601f1916010190565b34610103575f366003190112610103576040515f7f3f2e03f6ef530dc867b64a6018538f5b04254876becd658fe3e8b11f387f223d548060011c9060018116908115610258575b60208310821461024457828552602085019190811561022b57506001146101ba575b6101b6846101aa81860382610847565b60405191829182610107565b0390f35b7f3f2e03f6ef530dc867b64a6018538f5b04254876becd658fe3e8b11f387f223d5f9081529250907fc1bc66ddf6d9f731ac5c9600f2da44727b3841bfcb4d8927aec1a1707b4516575b818410610217575050016101aa8261019a565b805484840152602090930192600101610204565b60ff191682525090151560051b0190506101aa8261019a565b634e487b7160e01b5f52602260045260245ffd5b91607f1691610178565b600435906001600160a01b038216820361010357565b602435906001600160a01b038216820361010357565b34610103576040366003190112610103576102a7610262565b602435331561032f576001600160a01b03821691821561031c576102e482916102cf336108b5565b9060018060a01b03165f5260205260405f2090565b556040519081527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560203392a3602060405160018152f35b634a1406b160e11b5f525f60045260245ffd5b63e602df0560e01b5f525f60045260245ffd5b34610103575f3660031901126101035760207f3f2e03f6ef530dc867b64a6018538f5b04254876becd658fe3e8b11f387f223c54604051908152f35b3461010357606036600319011261010357610397610262565b61039f610278565b604435906103b0336102cf856108b5565b5492600184016103d1575b6103c59350610926565b60405160018152602090f35b8284106103ed576103e8836103c595033383610aa8565b6103bb565b8284637dc7a0d960e11b5f523360045260245260445260645ffd5b34610103575f36600319011261010357602060ff7f3f2e03f6ef530dc867b64a6018538f5b04254876becd658fe3e8b11f387f223f5416604051908152f35b3461010357602036600319011261010357602061046a610465610262565b61087d565b54604051908152f35b34610103575f366003190112610103575f516020610ae25f395f51905f52546040516001600160a01b039091168152602090f35b34610103575f366003190112610103576040515f7f3f2e03f6ef530dc867b64a6018538f5b04254876becd658fe3e8b11f387f223e548060011c9060018116908115610590575b60208310821461024457828552602085019190811561022b575060011461051f576101b6846101aa81860382610847565b7f3f2e03f6ef530dc867b64a6018538f5b04254876becd658fe3e8b11f387f223e5f9081529250907f6ee639f5db3ff26ae5edbf6980842c95dab47c8e6ba17fd75536ecd3f9711b7c5b81841061057c575050016101aa8261019a565b805484840152602090930192600101610569565b91607f16916104ee565b34610103576020366003190112610103576105b3610262565b6105bb6108ed565b6001600160a01b03166105cf8115156107b8565b5f516020610b025f395f51905f525481906001600160a01b03167f606864aa4cc34987a8dfd5e24f90fae803f44751861578bcdf2ea0fe4af46c915f80a36bffffffffffffffffffffffff60a01b5f516020610b025f395f51905f525416175f516020610b025f395f51905f52555f80f35b346101035760403660031901126101035761066761065d610262565b6024359033610926565b602060405160018152f35b34610103575f3660031901126101035760207f3f2e03f6ef530dc867b64a6018538f5b04254876becd658fe3e8b11f387f224054604051908152f35b34610103575f366003190112610103575f516020610b025f395f51905f52546040516001600160a01b039091168152602090f35b3461010357604036600319011261010357602061046a610700610262565b6102cf61070b610278565b916108b5565b346101035760203660031901126101035761072a610262565b6107326108ed565b6001600160a01b03166107468115156107b8565b5f516020610ae25f395f51905f525481906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a36bffffffffffffffffffffffff60a01b5f516020610ae25f395f51905f525416175f516020610ae25f395f51905f52555f80f35b156107bf57565b632ae88f8960e21b5f5260045ffd5b5f80356001600160e01b0319168082527fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c6020526040909120546001600160a01b0316908115610835575f8083368280378136915af43d5f803e15610831573d5ff35b3d5ffd5b630a82dd7360e31b5f5260045260245ffd5b90601f8019910116810190811067ffffffffffffffff82111761086957604052565b634e487b7160e01b5f52604160045260245ffd5b6001600160a01b03165f9081527f3f2e03f6ef530dc867b64a6018538f5b04254876becd658fe3e8b11f387f223a6020526040902090565b6001600160a01b03165f9081527f3f2e03f6ef530dc867b64a6018538f5b04254876becd658fe3e8b11f387f223b6020526040902090565b5f516020610b025f395f51905f52546001600160a01b0316338190036109105750565b630eca8ea560e11b5f523360045260245260445ffd5b906001600160a01b0382168015610a95576001600160a01b038216908115610a8257303b1561010357604051632775fab560e11b81526001600160a01b03858116600483015284166024820152604481018690525f81606481305afa8015610a4557610a6e575b506109978461087d565b54858110610a4a578590036109ab8561087d565b556109b58361087d565b8054860190556040518581527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602090a3303b156101035760405163013e4ddd60e21b81526001600160a01b0392831660048201529116602482015260448101919091525f81606481305afa8015610a4557610a2f5750565b80610a3d5f610a4393610847565b806100f9565b565b610ad6565b63391434e360e21b5f526001600160a01b038516600452602452604485905260645ffd5b80610a3d5f610a7c93610847565b5f61098d565b63ec442f0560e01b5f525f60045260245ffd5b634b637e8f60e11b5f525f60045260245ffd5b906001600160a01b0382161561032f576001600160a01b0381161561031c576102cf610ad3926108b5565b55565b6040513d5f823e3d90fdfec8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c1320c8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131fa2646970667358221220e39fe1be05030210086e6167fe76ce4e54928e9b566f2bd219db85536596024964736f6c634300081c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000004e0000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000003c000000000000000000000000072548f7bba84816ce0df8a6317044e328ffdeb2d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000011f931c1c00000000000000000000000000000000000000000000000000000000000000000000000000000000d64dc15a62eae274341bdbc20c50f11aa06b76d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000057a0ed62700000000000000000000000000000000000000000000000000000000adfca15e0000000000000000000000000000000000000000000000000000000052ef6b2c00000000000000000000000000000000000000000000000000000000cdffacc60000000000000000000000000000000000000000000000000000000001ffc9a700000000000000000000000000000000000000000000000000000000000000000000000000000000de8d5b12acc3f7b7bf8a5a133c2e2185fd01701400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000842966c680000000000000000000000000000000000000000000000000000000079cc67900000000000000000000000000000000000000000000000000000000040c10f19000000000000000000000000000000000000000000000000000000004000aea00000000000000000000000000000000000000000000000000000000094c7bf7b0000000000000000000000000000000000000000000000000000000092dc369a0000000000000000000000000000000000000000000000000000000004e6ebc300000000000000000000000000000000000000000000000000000000136ad20400000000000000000000000000000000000000000000000000000000000000000000000000000000b14a5b8503f40922ab2baf4960f1a40d4f06d8140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000024eebf56a0000000000000000000000000000000000000000000000000000000004f93774000000000000000000000000000000000000000000000000000000000000000000000000000000001903067a38158386eaf5e1087305b18ff0db602b00000000000000000000000044d02eec5fe9d462ba0467f909258373e5674244000000000000000000000000d0c48a3fee5a003b4f82f1d058d74ab5382a4fad00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000104f8f5faa2000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000cecb8f27f4200f3a000000000000000000000000000000000000000000000000000000000000000000001053746f626f7820546f6b656e20762e33000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004535442550000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _diamondCut (tuple[]):
Arg [1] : facetAddress (address): 0x72548F7BbA84816CE0dF8a6317044E328Ffdeb2D
Arg [2] : action (uint8): 0
Arg [3] : functionSelectors (bytes4[]): 0x1f931c1
Arg [1] : facetAddress (address): 0xD64dC15A62EAe274341BDbC20c50f11AA06B76d0
Arg [2] : action (uint8): 0
Arg [3] : functionSelectors (bytes4[]): 0x01ffc9a
Arg [1] : facetAddress (address): 0xDE8d5b12aCC3F7b7BF8A5a133c2e2185fd017014
Arg [2] : action (uint8): 0
Arg [3] : functionSelectors (bytes4[]): 0x136ad20
Arg [1] : facetAddress (address): 0xb14A5b8503F40922aB2BAF4960f1A40D4F06D814
Arg [2] : action (uint8): 0
Arg [3] : functionSelectors (bytes4[]): 0x04f9377
Arg [1] : _args (tuple):
Arg [1] : deployer (address): 0x1903067A38158386EAF5E1087305B18ff0Db602B
Arg [2] : owner (address): 0x44d02eEC5fe9D462ba0467F909258373E5674244
Arg [3] : init (address): 0xD0C48A3FEe5a003B4F82f1d058d74ab5382A4fAD
Arg [4] : initCalldata (bytes): 0xf8f5faa2000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000cecb8f27f4200f3a000000000000000000000000000000000000000000000000000000000000000000001053746f626f7820546f6b656e20762e330000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045354425500000000000000000000000000000000000000000000000000000000
-----Encoded View---------------
53 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 00000000000000000000000000000000000000000000000000000000000004e0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000120
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000240
Arg [6] : 00000000000000000000000000000000000000000000000000000000000003c0
Arg [7] : 00000000000000000000000072548f7bba84816ce0df8a6317044e328ffdeb2d
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [10] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [11] : 1f931c1c00000000000000000000000000000000000000000000000000000000
Arg [12] : 000000000000000000000000d64dc15a62eae274341bdbc20c50f11aa06b76d0
Arg [13] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [14] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [15] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [16] : 7a0ed62700000000000000000000000000000000000000000000000000000000
Arg [17] : adfca15e00000000000000000000000000000000000000000000000000000000
Arg [18] : 52ef6b2c00000000000000000000000000000000000000000000000000000000
Arg [19] : cdffacc600000000000000000000000000000000000000000000000000000000
Arg [20] : 01ffc9a700000000000000000000000000000000000000000000000000000000
Arg [21] : 000000000000000000000000de8d5b12acc3f7b7bf8a5a133c2e2185fd017014
Arg [22] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [23] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [24] : 0000000000000000000000000000000000000000000000000000000000000008
Arg [25] : 42966c6800000000000000000000000000000000000000000000000000000000
Arg [26] : 79cc679000000000000000000000000000000000000000000000000000000000
Arg [27] : 40c10f1900000000000000000000000000000000000000000000000000000000
Arg [28] : 4000aea000000000000000000000000000000000000000000000000000000000
Arg [29] : 94c7bf7b00000000000000000000000000000000000000000000000000000000
Arg [30] : 92dc369a00000000000000000000000000000000000000000000000000000000
Arg [31] : 04e6ebc300000000000000000000000000000000000000000000000000000000
Arg [32] : 136ad20400000000000000000000000000000000000000000000000000000000
Arg [33] : 000000000000000000000000b14a5b8503f40922ab2baf4960f1a40d4f06d814
Arg [34] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [35] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [36] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [37] : 4eebf56a00000000000000000000000000000000000000000000000000000000
Arg [38] : 04f9377400000000000000000000000000000000000000000000000000000000
Arg [39] : 0000000000000000000000001903067a38158386eaf5e1087305b18ff0db602b
Arg [40] : 00000000000000000000000044d02eec5fe9d462ba0467f909258373e5674244
Arg [41] : 000000000000000000000000d0c48a3fee5a003b4f82f1d058d74ab5382a4fad
Arg [42] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [43] : 0000000000000000000000000000000000000000000000000000000000000104
Arg [44] : f8f5faa200000000000000000000000000000000000000000000000000000000
Arg [45] : 0000008000000000000000000000000000000000000000000000000000000000
Arg [46] : 000000c000000000000000000000000000000000000000000000000000000000
Arg [47] : 00000012000000000000000000000000000000000000000000cecb8f27f4200f
Arg [48] : 3a00000000000000000000000000000000000000000000000000000000000000
Arg [49] : 0000001053746f626f7820546f6b656e20762e33000000000000000000000000
Arg [50] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [51] : 0000000453544255000000000000000000000000000000000000000000000000
Arg [52] : 0000000000000000000000000000000000000000000000000000000000000000
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.
Add Token to MetaMask (Web3)