Source Code
Overview
ETH Balance
0 ETH
ETH Value
$0.00View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Cross-Chain Transactions
Loading...
Loading
Contract Name:
CreatorFixedPriceSaleStrategy
Compiler Version
v0.8.25+commit.b61c2a91
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.17;
import { IMinter1155 } from "../../interfaces/IMinter1155.sol";
import { ICreatorCommands } from "../../interfaces/ICreatorCommands.sol";
import { SaleStrategy } from "../SaleStrategy.sol";
import { SaleCommandHelper } from "../utils/SaleCommandHelper.sol";
import { LimitedMintPerAddress } from "../utils/LimitedMintPerAddress.sol";
/// @title CreatorFixedPriceSaleStrategy
/// @notice A sale strategy for Creator that allows for fixed price sales over a given time period
contract CreatorFixedPriceSaleStrategy is SaleStrategy, LimitedMintPerAddress {
struct SalesConfig {
/// @notice Unix timestamp for the sale start
uint64 saleStart;
/// @notice Unix timestamp for the sale end
uint64 saleEnd;
/// @notice Max tokens that can be minted for an address, 0 if unlimited
uint64 maxTokensPerAddress;
/// @notice Price per token in eth wei
uint96 pricePerToken;
/// @notice Funds recipient (0 if no different funds recipient than the contract global)
address fundsRecipient;
}
// target -> tokenId -> settings
mapping(address => mapping(uint256 => SalesConfig)) internal salesConfigs;
using SaleCommandHelper for ICreatorCommands.CommandSet;
/// @notice The name of the sale strategy
function contractName() external pure override returns (string memory) {
return "Fixed Price Sale Strategy";
}
/// @notice The version of the sale strategy
function contractVersion() external pure override returns (string memory) {
return "1";
}
error WrongValueSent();
error SaleEnded();
error SaleHasNotStarted();
event SaleSet(address indexed mediaContract, uint256 indexed tokenId, SalesConfig salesConfig);
event MintComment(
address indexed sender, address indexed tokenContract, uint256 indexed tokenId, uint256 quantity, string comment
);
/// @notice Compiles and returns the commands needed to mint a token using this sales strategy
/// @param tokenId The token ID to mint
/// @param quantity The quantity of tokens to mint
/// @param ethValueSent The amount of ETH sent with the transaction
/// @param minterArguments The arguments passed to the minter, which should be the address to mint to
function requestMint(
address,
uint256 tokenId,
uint256 quantity,
uint256 ethValueSent,
bytes calldata minterArguments
)
external
returns (ICreatorCommands.CommandSet memory commands)
{
address mintTo;
string memory comment = "";
if (minterArguments.length == 32) {
mintTo = abi.decode(minterArguments, (address));
} else {
(mintTo, comment) = abi.decode(minterArguments, (address, string));
}
SalesConfig storage config = salesConfigs[msg.sender][tokenId];
// If sales config does not exist this first check will always fail.
// Check sale end
if (block.timestamp > config.saleEnd) {
revert SaleEnded();
}
// Check sale start
if (block.timestamp < config.saleStart) {
revert SaleHasNotStarted();
}
// Check value sent
if (config.pricePerToken * quantity != ethValueSent) {
revert WrongValueSent();
}
// Check minted per address limit
if (config.maxTokensPerAddress > 0) {
_requireMintNotOverLimitAndUpdate(config.maxTokensPerAddress, quantity, msg.sender, tokenId, mintTo);
}
bool shouldTransferFunds = config.fundsRecipient != address(0);
commands.setSize(shouldTransferFunds ? 2 : 1);
// Mint command
commands.mint(mintTo, tokenId, quantity);
if (bytes(comment).length > 0) {
emit MintComment(mintTo, msg.sender, tokenId, quantity, comment);
}
// Should transfer funds if funds recipient is set to a non-default address
if (shouldTransferFunds) {
commands.transfer(config.fundsRecipient, ethValueSent);
}
}
/// @notice Sets the sale config for a given token
function setSale(uint256 tokenId, SalesConfig memory salesConfig) external {
salesConfigs[msg.sender][tokenId] = salesConfig;
// Emit event
emit SaleSet(msg.sender, tokenId, salesConfig);
}
/// @notice Deletes the sale config for a given token
function resetSale(uint256 tokenId) external override {
delete salesConfigs[msg.sender][tokenId];
// Deleted sale emit event
emit SaleSet(msg.sender, tokenId, salesConfigs[msg.sender][tokenId]);
}
/// @notice Returns the sale config for a given token
function sale(address tokenContract, uint256 tokenId) external view returns (SalesConfig memory) {
return salesConfigs[tokenContract][tokenId];
}
function supportsInterface(bytes4 interfaceId)
public
pure
virtual
override(LimitedMintPerAddress, SaleStrategy)
returns (bool)
{
return super.supportsInterface(interfaceId) || LimitedMintPerAddress.supportsInterface(interfaceId)
|| SaleStrategy.supportsInterface(interfaceId);
}
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;
import { IERC165Upgradeable } from "@openzeppelin/contracts-upgradeable/interfaces/IERC165Upgradeable.sol";
import { ICreatorCommands } from "./ICreatorCommands.sol";
/// @notice Minter standard interface
/// @dev Minters need to confirm to the ERC165 selector of type(IMinter1155).interfaceId
interface IMinter1155 is IERC165Upgradeable {
function requestMint(
address sender,
uint256 tokenId,
uint256 quantity,
uint256 ethValueSent,
bytes calldata minterArguments
)
external
returns (ICreatorCommands.CommandSet memory commands);
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;
/// @notice Creator Commands used by minter modules passed back to the main modules
interface ICreatorCommands {
/// @notice This enum is used to define supported creator action types.
/// This can change in the future
enum CreatorActions
// No operation - also the default for mintings that may not return a command
{
NO_OP,
// Send ether
SEND_ETH,
// Mint operation
MINT
}
/// @notice This command is for
struct Command {
// Method for operation
CreatorActions method;
// Arguments used for this operation
bytes args;
}
/// @notice This command set is returned from the minter back to the user
struct CommandSet {
Command[] commands;
uint256 at;
}
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;
import { IERC165Upgradeable } from "@openzeppelin/contracts-upgradeable/interfaces/IERC165Upgradeable.sol";
import { IMinter1155 } from "../interfaces/IMinter1155.sol";
import { IContractMetadata } from "../interfaces/IContractMetadata.sol";
import { IVersionedContract } from "../interfaces/IVersionedContract.sol";
/// @notice Sales Strategy Helper contract template on top of IMinter1155
abstract contract SaleStrategy is IMinter1155, IVersionedContract, IContractMetadata {
/// @notice This function resets the sales configuration for a given tokenId and contract.
/// @dev This function is intentioned to be called directly from the affected sales contract
function resetSale(uint256 tokenId) external virtual;
function supportsInterface(bytes4 interfaceId) public pure virtual returns (bool) {
return interfaceId == type(IMinter1155).interfaceId || interfaceId == type(IERC165Upgradeable).interfaceId;
}
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;
import { ICreatorCommands } from "../../interfaces/ICreatorCommands.sol";
/// @title SaleCommandHelper
/// @notice Helper library for creating commands for the sale contract
library SaleCommandHelper {
/// @notice Sets the size of commands and initializes command array. Empty entries are skipped by the resolver.
/// @dev Beware: this removes all previous command entries from memory
/// @param commandSet command set struct storage.
/// @param size size to set for the new struct
function setSize(ICreatorCommands.CommandSet memory commandSet, uint256 size) internal pure {
commandSet.commands = new ICreatorCommands.Command[](size);
}
/// @notice Creates a command to mint a token
/// @param commandSet The command set to add the command to
/// @param to The address to mint to
/// @param tokenId The token ID to mint
/// @param quantity The quantity of tokens to mint
function mint(
ICreatorCommands.CommandSet memory commandSet,
address to,
uint256 tokenId,
uint256 quantity
)
internal
pure
{
unchecked {
commandSet.commands[commandSet.at++] = ICreatorCommands.Command({
method: ICreatorCommands.CreatorActions.MINT,
args: abi.encode(to, tokenId, quantity)
});
}
}
/// @notice Creates a command to transfer ETH
/// @param commandSet The command set to add the command to
/// @param to The address to transfer to
/// @param amount The amount of ETH to transfer
function transfer(ICreatorCommands.CommandSet memory commandSet, address to, uint256 amount) internal pure {
unchecked {
commandSet.commands[commandSet.at++] = ICreatorCommands.Command({
method: ICreatorCommands.CreatorActions.SEND_ETH,
args: abi.encode(to, amount)
});
}
}
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;
import { ILimitedMintPerAddress } from "../../interfaces/ILimitedMintPerAddress.sol";
contract LimitedMintPerAddress is ILimitedMintPerAddress {
/// @notice Storage for slot to check user mints
/// @notice target contract -> tokenId -> minter user -> numberMinted
/// @dev No gap or stroage interface since this is used within non-upgradeable contracts
mapping(address => mapping(uint256 => mapping(address => uint256))) internal mintedPerAddress;
function getMintedPerWallet(
address tokenContract,
uint256 tokenId,
address wallet
)
external
view
returns (uint256)
{
return mintedPerAddress[tokenContract][tokenId][wallet];
}
function _requireMintNotOverLimitAndUpdate(
uint256 limit,
uint256 numRequestedMint,
address tokenContract,
uint256 tokenId,
address wallet
)
internal
{
mintedPerAddress[tokenContract][tokenId][wallet] += numRequestedMint;
if (mintedPerAddress[tokenContract][tokenId][wallet] > limit) {
revert UserExceedsMintLimit(wallet, limit, mintedPerAddress[tokenContract][tokenId][wallet]);
}
}
function supportsInterface(bytes4 interfaceId) public pure virtual override returns (bool) {
return interfaceId == type(ILimitedMintPerAddress).interfaceId;
}
}// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (interfaces/IERC165.sol) pragma solidity ^0.8.0; import "../utils/introspection/IERC165Upgradeable.sol";
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;
interface IContractMetadata {
/// @notice Contract name returns the pretty contract name
function contractName() external returns (string memory);
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;
interface IVersionedContract {
function contractVersion() external returns (string memory);
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;
import { IERC165Upgradeable } from "@openzeppelin/contracts-upgradeable/interfaces/IERC165Upgradeable.sol";
interface ILimitedMintPerAddress is IERC165Upgradeable {
error UserExceedsMintLimit(address user, uint256 limit, uint256 requestedAmount);
function getMintedPerWallet(address token, uint256 tokenId, address wallet) external view returns (uint256);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC165 standard, as defined in the
* https://eips.ethereum.org/EIPS/eip-165[EIP].
*
* Implementers can declare support of contract interfaces, which can then be
* queried by others ({ERC165Checker}).
*
* For an implementation, see {ERC165}.
*/
interface IERC165Upgradeable {
/**
* @dev Returns true if this contract implements the interface defined by
* `interfaceId`. See the corresponding
* https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
* to learn more about how these ids are created.
*
* This function call must use less than 30 000 gas.
*/
function supportsInterface(bytes4 interfaceId) external view returns (bool);
}{
"remappings": [
"@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/",
"@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/",
"forge-std/=lib/forge-std/src/",
"ds-test/=lib/solmate/lib/ds-test/src/",
"erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/",
"openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/",
"openzeppelin-contracts/=lib/openzeppelin-contracts/",
"openzeppelin/=lib/openzeppelin-contracts/contracts/",
"solmate/=lib/solmate/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":[],"name":"SaleEnded","type":"error"},{"inputs":[],"name":"SaleHasNotStarted","type":"error"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"limit","type":"uint256"},{"internalType":"uint256","name":"requestedAmount","type":"uint256"}],"name":"UserExceedsMintLimit","type":"error"},{"inputs":[],"name":"WrongValueSent","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"tokenContract","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"quantity","type":"uint256"},{"indexed":false,"internalType":"string","name":"comment","type":"string"}],"name":"MintComment","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"mediaContract","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"components":[{"internalType":"uint64","name":"saleStart","type":"uint64"},{"internalType":"uint64","name":"saleEnd","type":"uint64"},{"internalType":"uint64","name":"maxTokensPerAddress","type":"uint64"},{"internalType":"uint96","name":"pricePerToken","type":"uint96"},{"internalType":"address","name":"fundsRecipient","type":"address"}],"indexed":false,"internalType":"struct CreatorFixedPriceSaleStrategy.SalesConfig","name":"salesConfig","type":"tuple"}],"name":"SaleSet","type":"event"},{"inputs":[],"name":"contractName","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"contractVersion","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"tokenContract","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"wallet","type":"address"}],"name":"getMintedPerWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"uint256","name":"ethValueSent","type":"uint256"},{"internalType":"bytes","name":"minterArguments","type":"bytes"}],"name":"requestMint","outputs":[{"components":[{"components":[{"internalType":"enum ICreatorCommands.CreatorActions","name":"method","type":"uint8"},{"internalType":"bytes","name":"args","type":"bytes"}],"internalType":"struct ICreatorCommands.Command[]","name":"commands","type":"tuple[]"},{"internalType":"uint256","name":"at","type":"uint256"}],"internalType":"struct ICreatorCommands.CommandSet","name":"commands","type":"tuple"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"resetSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenContract","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"sale","outputs":[{"components":[{"internalType":"uint64","name":"saleStart","type":"uint64"},{"internalType":"uint64","name":"saleEnd","type":"uint64"},{"internalType":"uint64","name":"maxTokensPerAddress","type":"uint64"},{"internalType":"uint96","name":"pricePerToken","type":"uint96"},{"internalType":"address","name":"fundsRecipient","type":"address"}],"internalType":"struct CreatorFixedPriceSaleStrategy.SalesConfig","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"components":[{"internalType":"uint64","name":"saleStart","type":"uint64"},{"internalType":"uint64","name":"saleEnd","type":"uint64"},{"internalType":"uint64","name":"maxTokensPerAddress","type":"uint64"},{"internalType":"uint96","name":"pricePerToken","type":"uint96"},{"internalType":"address","name":"fundsRecipient","type":"address"}],"internalType":"struct CreatorFixedPriceSaleStrategy.SalesConfig","name":"salesConfig","type":"tuple"}],"name":"setSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"}]Contract Creation Code
60808060405234601557610b50908161001a8239f35b5f80fdfe6080806040526004361015610012575f80fd5b5f3560e01c90816301ffc9a71461096a5750806319b45c4f146108ba57806334db7eee14610777578063611efc09146106be5780636890e5b31461017657806375d0c0dc146101195780637b49ff2c146100bd5763a0a8e46014610074575f80fd5b346100b9575f3660031901126100b9576100b5604051610093816109fe565b60018152603160f81b6020820152604051918291602083526020830190610aa3565b0390f35b5f80fd5b346100b95760603660031901126100b9576100d6610a3a565b6001600160a01b0360443581811692908390036100b957165f525f60205260405f206024355f5260205260405f20905f52602052602060405f2054604051908152f35b346100b9575f3660031901126100b9576100b5604051610138816109fe565b601981527f46697865642050726963652053616c65205374726174656779000000000000006020820152604051918291602083526020830190610aa3565b346100b95760a03660031901126100b95761018f610a3a565b506084356001600160401b0381116100b957366023820112156100b95780600401356001600160401b0381116100b957602482018183019260248401933685116100b957604051946101e0866109fe565b606086525f602087015260405160208101908082106001600160401b03831117610481576020916040525f815295145f1461062a57509060209103126100b9576001600160a01b039061023290610ac7565b16905b335f52600160205260405f206024355f5260205260405f208054906001600160401b038260401c164211610618576001600160401b038216421061060657600101906001600160601b0382541660443581029080820460443514901517156105e057606435036105f45760801c6001600160401b03168061051a575b505460601c9182156105115760ff60025b166102cc81610adb565b906102da6040519283610a19565b8082526102e9601f1991610adb565b015f5b8181106104ed5750508452604080516001600160a01b038316602082015260243591810191909152604435606080830191909152815261036890610331608082610a19565b6040519061033e826109fe565b60028252602082015285516020870151916001830160208901526103628383610af2565b52610af2565b508151610495575b50508061041a575b50604051602081526060810182519060406020840152815180915260808301602060808360051b8601019301915f5b8181106103be576020870151604087015285850386f35b90919293607f198682030184528451908151916003831015610406576103fa826040602080959460019782965201519181858201520190610aa3565b960194019291016103a7565b634e487b7160e01b5f52602160045260245ffd5b604051906020820152606435604082015260408152606081018181106001600160401b038211176104815761047a9181604052610456826109fe565b60018252608081015282516020840151916001830160208601526103628383610af2565b5081610378565b634e487b7160e01b5f52604160045260245ffd5b604051916044358352604060208401527fb9490aee663998179ad13f9e1c1eb6189c71ad1a9ec87f33ad2766f98d9a268a60243593806104e3339560018060a01b0316946040830190610aa3565b0390a48280610370565b6020906040516104fc816109fe565b5f8152606083820152828286010152016102ec565b60ff60016102c2565b335f525f60205260405f206024355f5260205260405f2060018060a01b03851690815f5260205260405f2080549060443582018092116105e05755335f525f60205260405f206024355f5260205260405f20815f526020528160405f20541161058357506102b1565b8490335f525f60205260405f206024355f5260205260405f20905f526020526105dc60405f20546040519384936338b6455960e21b855260048501604091949392606082019560018060a01b0316825260208201520152565b0390fd5b634e487b7160e01b5f52601160045260245ffd5b604051632f4613eb60e01b8152600490fd5b6040516374626dc160e11b8152600490fd5b604051630bd8a3eb60e01b8152600490fd5b929180945060409103126100b95761064190610ac7565b916044810135906001600160401b0382116100b95701816043820112156100b9576024810135906001600160401b038211610481576040519261068e601f8401601f191660200185610a19565b828452604483830101116100b957815f9260446020930183860137830101526001600160a01b0390911690610235565b346100b95760403660031901126100b9576106d7610a3a565b5f60806040516106e6816109e3565b828152826020820152826040820152826060820152015260018060a01b03165f52600160205260405f206024355f526020526100b560405f2060016040519161072e836109e3565b80546001600160401b03908181168552818160401c16602086015260801c16604084015201546001600160601b038116606083015260601c608082015260405191829182610a50565b346100b95760c03660031901126100b95760043560a03660231901126100b9576040516107a3816109e3565b6001600160401b0360243581811681036100b957825260443581811681036100b957602083019081526064359082821682036100b957604084019182526001600160601b0360843581811681036100b9576060860190815260a435926001600160a01b03841684036100b95760019460808801948552335f528560205260405f20895f5260205260405f20968851166fffffffffffffffff00000000000000008854935160401b16916001600160401b0360801b905160801b16926001600160401b0360c01b1617171785555116906001600160601b0319905160601b16179101557f5e4ad74f00b9a9d4a8452359a7fbd80cc5a6930a9df5e5b797ddc024b24b252c604051806108b5339482610a50565b0390a3005b346100b9576020806003193601126100b95760043590335f526001815260405f20825f5281525f6001604082208281550155335f526001815260405f20825f528152600160405f206040519281546001600160401b03918282168652828260401c169086015260801c16604084015201546001600160601b038116606083015260601c60808201527f5e4ad74f00b9a9d4a8452359a7fbd80cc5a6930a9df5e5b797ddc024b24b252c60a03392a3005b346100b95760203660031901126100b9576004359063ffffffff60e01b82168092036100b957602091631ed27fcb60e21b81149081156109de575b81156109b3575b5015158152f35b636890e5b360e01b8114915081156109cd575b50836109ac565b6301ffc9a760e01b149050836109c6565b6109a5565b60a081019081106001600160401b0382111761048157604052565b604081019081106001600160401b0382111761048157604052565b90601f801991011681019081106001600160401b0382111761048157604052565b600435906001600160a01b03821682036100b957565b919091608060a08201936001600160401b0380825116845280602083015116602085015260408201511660408401526001600160601b0360608201511660608401528160018060a01b0391015116910152565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b35906001600160a01b03821682036100b957565b6001600160401b0381116104815760051b60200190565b8051821015610b065760209160051b010190565b634e487b7160e01b5f52603260045260245ffdfea2646970667358221220d0d5af8b8deab25d55ac75acdf58872ff6422e1bf536ff034812b53637413f8964736f6c63430008190033
Deployed Bytecode
0x6080806040526004361015610012575f80fd5b5f3560e01c90816301ffc9a71461096a5750806319b45c4f146108ba57806334db7eee14610777578063611efc09146106be5780636890e5b31461017657806375d0c0dc146101195780637b49ff2c146100bd5763a0a8e46014610074575f80fd5b346100b9575f3660031901126100b9576100b5604051610093816109fe565b60018152603160f81b6020820152604051918291602083526020830190610aa3565b0390f35b5f80fd5b346100b95760603660031901126100b9576100d6610a3a565b6001600160a01b0360443581811692908390036100b957165f525f60205260405f206024355f5260205260405f20905f52602052602060405f2054604051908152f35b346100b9575f3660031901126100b9576100b5604051610138816109fe565b601981527f46697865642050726963652053616c65205374726174656779000000000000006020820152604051918291602083526020830190610aa3565b346100b95760a03660031901126100b95761018f610a3a565b506084356001600160401b0381116100b957366023820112156100b95780600401356001600160401b0381116100b957602482018183019260248401933685116100b957604051946101e0866109fe565b606086525f602087015260405160208101908082106001600160401b03831117610481576020916040525f815295145f1461062a57509060209103126100b9576001600160a01b039061023290610ac7565b16905b335f52600160205260405f206024355f5260205260405f208054906001600160401b038260401c164211610618576001600160401b038216421061060657600101906001600160601b0382541660443581029080820460443514901517156105e057606435036105f45760801c6001600160401b03168061051a575b505460601c9182156105115760ff60025b166102cc81610adb565b906102da6040519283610a19565b8082526102e9601f1991610adb565b015f5b8181106104ed5750508452604080516001600160a01b038316602082015260243591810191909152604435606080830191909152815261036890610331608082610a19565b6040519061033e826109fe565b60028252602082015285516020870151916001830160208901526103628383610af2565b52610af2565b508151610495575b50508061041a575b50604051602081526060810182519060406020840152815180915260808301602060808360051b8601019301915f5b8181106103be576020870151604087015285850386f35b90919293607f198682030184528451908151916003831015610406576103fa826040602080959460019782965201519181858201520190610aa3565b960194019291016103a7565b634e487b7160e01b5f52602160045260245ffd5b604051906020820152606435604082015260408152606081018181106001600160401b038211176104815761047a9181604052610456826109fe565b60018252608081015282516020840151916001830160208601526103628383610af2565b5081610378565b634e487b7160e01b5f52604160045260245ffd5b604051916044358352604060208401527fb9490aee663998179ad13f9e1c1eb6189c71ad1a9ec87f33ad2766f98d9a268a60243593806104e3339560018060a01b0316946040830190610aa3565b0390a48280610370565b6020906040516104fc816109fe565b5f8152606083820152828286010152016102ec565b60ff60016102c2565b335f525f60205260405f206024355f5260205260405f2060018060a01b03851690815f5260205260405f2080549060443582018092116105e05755335f525f60205260405f206024355f5260205260405f20815f526020528160405f20541161058357506102b1565b8490335f525f60205260405f206024355f5260205260405f20905f526020526105dc60405f20546040519384936338b6455960e21b855260048501604091949392606082019560018060a01b0316825260208201520152565b0390fd5b634e487b7160e01b5f52601160045260245ffd5b604051632f4613eb60e01b8152600490fd5b6040516374626dc160e11b8152600490fd5b604051630bd8a3eb60e01b8152600490fd5b929180945060409103126100b95761064190610ac7565b916044810135906001600160401b0382116100b95701816043820112156100b9576024810135906001600160401b038211610481576040519261068e601f8401601f191660200185610a19565b828452604483830101116100b957815f9260446020930183860137830101526001600160a01b0390911690610235565b346100b95760403660031901126100b9576106d7610a3a565b5f60806040516106e6816109e3565b828152826020820152826040820152826060820152015260018060a01b03165f52600160205260405f206024355f526020526100b560405f2060016040519161072e836109e3565b80546001600160401b03908181168552818160401c16602086015260801c16604084015201546001600160601b038116606083015260601c608082015260405191829182610a50565b346100b95760c03660031901126100b95760043560a03660231901126100b9576040516107a3816109e3565b6001600160401b0360243581811681036100b957825260443581811681036100b957602083019081526064359082821682036100b957604084019182526001600160601b0360843581811681036100b9576060860190815260a435926001600160a01b03841684036100b95760019460808801948552335f528560205260405f20895f5260205260405f20968851166fffffffffffffffff00000000000000008854935160401b16916001600160401b0360801b905160801b16926001600160401b0360c01b1617171785555116906001600160601b0319905160601b16179101557f5e4ad74f00b9a9d4a8452359a7fbd80cc5a6930a9df5e5b797ddc024b24b252c604051806108b5339482610a50565b0390a3005b346100b9576020806003193601126100b95760043590335f526001815260405f20825f5281525f6001604082208281550155335f526001815260405f20825f528152600160405f206040519281546001600160401b03918282168652828260401c169086015260801c16604084015201546001600160601b038116606083015260601c60808201527f5e4ad74f00b9a9d4a8452359a7fbd80cc5a6930a9df5e5b797ddc024b24b252c60a03392a3005b346100b95760203660031901126100b9576004359063ffffffff60e01b82168092036100b957602091631ed27fcb60e21b81149081156109de575b81156109b3575b5015158152f35b636890e5b360e01b8114915081156109cd575b50836109ac565b6301ffc9a760e01b149050836109c6565b6109a5565b60a081019081106001600160401b0382111761048157604052565b604081019081106001600160401b0382111761048157604052565b90601f801991011681019081106001600160401b0382111761048157604052565b600435906001600160a01b03821682036100b957565b919091608060a08201936001600160401b0380825116845280602083015116602085015260408201511660408401526001600160601b0360608201511660608401528160018060a01b0391015116910152565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b35906001600160a01b03821682036100b957565b6001600160401b0381116104815760051b60200190565b8051821015610b065760209160051b010190565b634e487b7160e01b5f52603260045260245ffdfea2646970667358221220d0d5af8b8deab25d55ac75acdf58872ff6422e1bf536ff034812b53637413f8964736f6c63430008190033
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.