Overview
APE Balance
0 APE
APE Value
$0.00More Info
Private Name Tags
ContractCreator
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
CreatorFixedPriceSaleStrategy
Compiler Version
v0.8.25+commit.b61c2a91
Optimization Enabled:
Yes with 200 runs
Other Settings:
paris 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/forge-std/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": "paris", "viaIR": true, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"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
60808060405234601557610beb908161001b8239f35b600080fdfe608080604052600436101561001357600080fd5b60003560e01c90816301ffc9a7146109e75750806319b45c4f1461092f57806334db7eee146107e8578063611efc091461072a5780636890e5b31461018357806375d0c0dc146101255780637b49ff2c146100c25763a0a8e4601461007757600080fd5b346100bd5760003660031901126100bd576100b960405161009781610a7b565b60018152603160f81b6020820152604051918291602083526020830190610b20565b0390f35b600080fd5b346100bd5760603660031901126100bd576100db610ab7565b6001600160a01b0360443581811692908390036100bd5716600052600060205260406000206024356000526020526040600020906000526020526020604060002054604051908152f35b346100bd5760003660031901126100bd576100b960405161014581610a7b565b601981527f46697865642050726963652053616c65205374726174656779000000000000006020820152604051918291602083526020830190610b20565b346100bd5760a03660031901126100bd5761019c610ab7565b506084356001600160401b0381116100bd57366023820112156100bd576001600160401b038160040135116100bd573660248260040135830101116100bd57604051906101e882610a7b565b60608252600060208301526040518060208101106001600160401b036020830111176104a657602081016040526000815290602081600401351460001461067c576020818060040135810103126100bd576001600160a01b039061024e90602401610b60565b16905b3360005260016020526040600020602435600052602052604060002080546001600160401b038160401c16421161066a576001600160401b0381164210610658576001600160601b0360018301541660443581029080820460443514901517156106305760643503610646576001600160401b038160801c16610542575b506001015460601c9182156105395760ff60025b166102ed81610b74565b906102fb6040519283610a96565b80825261030a601f1991610b74565b0160005b8181106105145750508452604080516001600160a01b038316602082015260243591810191909152604435606080830191909152815261038a90610353608082610a96565b6040519061036082610a7b565b60028252602082015285516020870151916001830160208901526103848383610b8b565b52610b8b565b5081516104bc575b50508061043f575b50604051602081526060810182519060406020840152815180915260808301602060808360051b86010193019160005b8181106103e1576020870151604087015285850386f35b90919293607f1986820301845284519081519160038310156104295761041d826040602080959460019782965201519181858201520190610b20565b960194019291016103ca565b634e487b7160e01b600052602160045260246000fd5b604051906020820152606435604082015260408152606081018181106001600160401b038211176104a65761049f918160405261047b82610a7b565b60018252608081015282516020840151916001830160208601526103848383610b8b565b508161039a565b634e487b7160e01b600052604160045260246000fd5b604051916044358352604060208401527fb9490aee663998179ad13f9e1c1eb6189c71ad1a9ec87f33ad2766f98d9a268a602435938061050a339560018060a01b0316946040830190610b20565b0390a48280610392565b60209060405161052381610a7b565b600081526060838201528282860101520161030e565b60ff60016102e3565b3360005260006020526040600020602435600052602052604060002060018060a01b0385166000526020526040600020805460443581018111610630576044350190553360005260006020526040600020602435600052602052604060002060018060a01b0385166000526020526001600160401b038160801c1660406000205411156102cf57336000908152602081815260408083206024803585529083528184206001600160a01b0389168086529352928190205490516338b6455960e21b8152600481019290925260809390931c6001600160401b0316918101919091526044810191909152606490fd5b634e487b7160e01b600052601160045260246000fd5b604051632f4613eb60e01b8152600490fd5b6040516374626dc160e11b8152600490fd5b604051630bd8a3eb60e01b8152600490fd5b90506040818060040135810103126100bd5761069a60248201610b60565b9060448101356001600160401b0381116100bd578101602482600401358301016043820112156100bd576024810135906001600160401b0382116104a6576024604051936106f26020601f19601f8701160186610a96565b83855280600401350101604483830101116100bd578160009260446020930183860137830101526001600160a01b0390911690610251565b346100bd5760403660031901126100bd57610743610ab7565b6000608060405161075381610a60565b828152826020820152826040820152826060820152015260018060a01b0316600052600160205260406000206024356000526020526100b9604060002060016040519161079f83610a60565b80546001600160401b03908181168552818160401c16602086015260801c16604084015201546001600160601b038116606083015260601c608082015260405191829182610acd565b346100bd5760c03660031901126100bd5760043560a03660231901126100bd5760405161081481610a60565b6001600160401b0360243581811681036100bd57825260443581811681036100bd57602083019081526064359082821682036100bd57604084019182526001600160601b0360843581811681036100bd576060860190815260a435926001600160a01b03841684036100bd576001946080880194855233600052856020526040600020896000526020526040600020968851166fffffffffffffffff00000000000000008854935160401b16916001600160401b0360801b905160801b16926001600160401b0360c01b1617171785555116906001600160601b0319905160601b16179101557f5e4ad74f00b9a9d4a8452359a7fbd80cc5a6930a9df5e5b797ddc024b24b252c6040518061092a339482610acd565b0390a3005b346100bd576020806003193601126100bd5760043590336000526001815260406000208260005281526000600160408220828155015533600052600181526040600020826000528152600160406000206040519281546001600160401b03918282168652828260401c169086015260801c16604084015201546001600160601b038116606083015260601c60808201527f5e4ad74f00b9a9d4a8452359a7fbd80cc5a6930a9df5e5b797ddc024b24b252c60a03392a3005b346100bd5760203660031901126100bd576004359063ffffffff60e01b82168092036100bd57602091631ed27fcb60e21b8114908115610a5b575b8115610a30575b5015158152f35b636890e5b360e01b811491508115610a4a575b5083610a29565b6301ffc9a760e01b14905083610a43565b610a22565b60a081019081106001600160401b038211176104a657604052565b604081019081106001600160401b038211176104a657604052565b90601f801991011681019081106001600160401b038211176104a657604052565b600435906001600160a01b03821682036100bd57565b919091608060a08201936001600160401b0380825116845280602083015116602085015260408201511660408401526001600160601b0360608201511660608401528160018060a01b0391015116910152565b919082519283825260005b848110610b4c575050826000602080949584010152601f8019910116010190565b602081830181015184830182015201610b2b565b35906001600160a01b03821682036100bd57565b6001600160401b0381116104a65760051b60200190565b8051821015610b9f5760209160051b010190565b634e487b7160e01b600052603260045260246000fdfea26469706673582212208a38978203c4ae8469bc72bf8739e24bb73f13ed52eea0941c383e30dd9f768964736f6c63430008190033
Deployed Bytecode
0x608080604052600436101561001357600080fd5b60003560e01c90816301ffc9a7146109e75750806319b45c4f1461092f57806334db7eee146107e8578063611efc091461072a5780636890e5b31461018357806375d0c0dc146101255780637b49ff2c146100c25763a0a8e4601461007757600080fd5b346100bd5760003660031901126100bd576100b960405161009781610a7b565b60018152603160f81b6020820152604051918291602083526020830190610b20565b0390f35b600080fd5b346100bd5760603660031901126100bd576100db610ab7565b6001600160a01b0360443581811692908390036100bd5716600052600060205260406000206024356000526020526040600020906000526020526020604060002054604051908152f35b346100bd5760003660031901126100bd576100b960405161014581610a7b565b601981527f46697865642050726963652053616c65205374726174656779000000000000006020820152604051918291602083526020830190610b20565b346100bd5760a03660031901126100bd5761019c610ab7565b506084356001600160401b0381116100bd57366023820112156100bd576001600160401b038160040135116100bd573660248260040135830101116100bd57604051906101e882610a7b565b60608252600060208301526040518060208101106001600160401b036020830111176104a657602081016040526000815290602081600401351460001461067c576020818060040135810103126100bd576001600160a01b039061024e90602401610b60565b16905b3360005260016020526040600020602435600052602052604060002080546001600160401b038160401c16421161066a576001600160401b0381164210610658576001600160601b0360018301541660443581029080820460443514901517156106305760643503610646576001600160401b038160801c16610542575b506001015460601c9182156105395760ff60025b166102ed81610b74565b906102fb6040519283610a96565b80825261030a601f1991610b74565b0160005b8181106105145750508452604080516001600160a01b038316602082015260243591810191909152604435606080830191909152815261038a90610353608082610a96565b6040519061036082610a7b565b60028252602082015285516020870151916001830160208901526103848383610b8b565b52610b8b565b5081516104bc575b50508061043f575b50604051602081526060810182519060406020840152815180915260808301602060808360051b86010193019160005b8181106103e1576020870151604087015285850386f35b90919293607f1986820301845284519081519160038310156104295761041d826040602080959460019782965201519181858201520190610b20565b960194019291016103ca565b634e487b7160e01b600052602160045260246000fd5b604051906020820152606435604082015260408152606081018181106001600160401b038211176104a65761049f918160405261047b82610a7b565b60018252608081015282516020840151916001830160208601526103848383610b8b565b508161039a565b634e487b7160e01b600052604160045260246000fd5b604051916044358352604060208401527fb9490aee663998179ad13f9e1c1eb6189c71ad1a9ec87f33ad2766f98d9a268a602435938061050a339560018060a01b0316946040830190610b20565b0390a48280610392565b60209060405161052381610a7b565b600081526060838201528282860101520161030e565b60ff60016102e3565b3360005260006020526040600020602435600052602052604060002060018060a01b0385166000526020526040600020805460443581018111610630576044350190553360005260006020526040600020602435600052602052604060002060018060a01b0385166000526020526001600160401b038160801c1660406000205411156102cf57336000908152602081815260408083206024803585529083528184206001600160a01b0389168086529352928190205490516338b6455960e21b8152600481019290925260809390931c6001600160401b0316918101919091526044810191909152606490fd5b634e487b7160e01b600052601160045260246000fd5b604051632f4613eb60e01b8152600490fd5b6040516374626dc160e11b8152600490fd5b604051630bd8a3eb60e01b8152600490fd5b90506040818060040135810103126100bd5761069a60248201610b60565b9060448101356001600160401b0381116100bd578101602482600401358301016043820112156100bd576024810135906001600160401b0382116104a6576024604051936106f26020601f19601f8701160186610a96565b83855280600401350101604483830101116100bd578160009260446020930183860137830101526001600160a01b0390911690610251565b346100bd5760403660031901126100bd57610743610ab7565b6000608060405161075381610a60565b828152826020820152826040820152826060820152015260018060a01b0316600052600160205260406000206024356000526020526100b9604060002060016040519161079f83610a60565b80546001600160401b03908181168552818160401c16602086015260801c16604084015201546001600160601b038116606083015260601c608082015260405191829182610acd565b346100bd5760c03660031901126100bd5760043560a03660231901126100bd5760405161081481610a60565b6001600160401b0360243581811681036100bd57825260443581811681036100bd57602083019081526064359082821682036100bd57604084019182526001600160601b0360843581811681036100bd576060860190815260a435926001600160a01b03841684036100bd576001946080880194855233600052856020526040600020896000526020526040600020968851166fffffffffffffffff00000000000000008854935160401b16916001600160401b0360801b905160801b16926001600160401b0360c01b1617171785555116906001600160601b0319905160601b16179101557f5e4ad74f00b9a9d4a8452359a7fbd80cc5a6930a9df5e5b797ddc024b24b252c6040518061092a339482610acd565b0390a3005b346100bd576020806003193601126100bd5760043590336000526001815260406000208260005281526000600160408220828155015533600052600181526040600020826000528152600160406000206040519281546001600160401b03918282168652828260401c169086015260801c16604084015201546001600160601b038116606083015260601c60808201527f5e4ad74f00b9a9d4a8452359a7fbd80cc5a6930a9df5e5b797ddc024b24b252c60a03392a3005b346100bd5760203660031901126100bd576004359063ffffffff60e01b82168092036100bd57602091631ed27fcb60e21b8114908115610a5b575b8115610a30575b5015158152f35b636890e5b360e01b811491508115610a4a575b5083610a29565b6301ffc9a760e01b14905083610a43565b610a22565b60a081019081106001600160401b038211176104a657604052565b604081019081106001600160401b038211176104a657604052565b90601f801991011681019081106001600160401b038211176104a657604052565b600435906001600160a01b03821682036100bd57565b919091608060a08201936001600160401b0380825116845280602083015116602085015260408201511660408401526001600160601b0360608201511660608401528160018060a01b0391015116910152565b919082519283825260005b848110610b4c575050826000602080949584010152601f8019910116010190565b602081830181015184830182015201610b2b565b35906001600160a01b03821682036100bd57565b6001600160401b0381116104a65760051b60200190565b8051821015610b9f5760209160051b010190565b634e487b7160e01b600052603260045260246000fdfea26469706673582212208a38978203c4ae8469bc72bf8739e24bb73f13ed52eea0941c383e30dd9f768964736f6c63430008190033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.