Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 102 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Mint | 16129342 | 596 days ago | IN | 0.06 ETH | 0.00155971 | ||||
Mint | 16129324 | 596 days ago | IN | 0.06 ETH | 0.00134838 | ||||
Mint | 16129319 | 596 days ago | IN | 0.06 ETH | 0.00134793 | ||||
Mint | 16129287 | 596 days ago | IN | 0.06 ETH | 0.00172231 | ||||
Mint | 16129272 | 596 days ago | IN | 0.06 ETH | 0.00238568 | ||||
Mint | 16129267 | 596 days ago | IN | 0.06 ETH | 0.00262925 | ||||
Mint | 16129256 | 596 days ago | IN | 0.06 ETH | 0.00145311 | ||||
Mint | 16129211 | 596 days ago | IN | 0.06 ETH | 0.00138455 | ||||
Mint | 16129184 | 596 days ago | IN | 0.06 ETH | 0.00140843 | ||||
Mint | 16129146 | 596 days ago | IN | 0.06 ETH | 0.00164836 | ||||
Mint | 16129075 | 596 days ago | IN | 0.06 ETH | 0.00174862 | ||||
Mint | 16129060 | 596 days ago | IN | 0.06 ETH | 0.00157818 | ||||
Mint | 16129043 | 596 days ago | IN | 0.06 ETH | 0.00173907 | ||||
Mint | 16129042 | 596 days ago | IN | 0.06 ETH | 0.00131436 | ||||
Mint | 16129028 | 596 days ago | IN | 0.06 ETH | 0.00126289 | ||||
Mint | 16129025 | 596 days ago | IN | 0.06 ETH | 0.0012571 | ||||
Mint | 16129024 | 596 days ago | IN | 0.06 ETH | 0.00156649 | ||||
Mint | 16129022 | 596 days ago | IN | 0.06 ETH | 0.00143853 | ||||
Mint | 16129011 | 596 days ago | IN | 0.06 ETH | 0.00140167 | ||||
Mint | 16129000 | 596 days ago | IN | 0.06 ETH | 0.00153226 | ||||
Mint | 16128992 | 596 days ago | IN | 0.06 ETH | 0.00149075 | ||||
Mint | 16128982 | 596 days ago | IN | 0.06 ETH | 0.00122806 | ||||
Mint | 16128974 | 596 days ago | IN | 0.06 ETH | 0.00153912 | ||||
Mint | 16128973 | 596 days ago | IN | 0.06 ETH | 0.00133553 | ||||
Mint | 16128967 | 596 days ago | IN | 0.06 ETH | 0.00168389 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
16129342 | 596 days ago | 0.06 ETH | ||||
16129324 | 596 days ago | 0.06 ETH | ||||
16129319 | 596 days ago | 0.06 ETH | ||||
16129287 | 596 days ago | 0.06 ETH | ||||
16129272 | 596 days ago | 0.06 ETH | ||||
16129267 | 596 days ago | 0.06 ETH | ||||
16129256 | 596 days ago | 0.06 ETH | ||||
16129211 | 596 days ago | 0.06 ETH | ||||
16129184 | 596 days ago | 0.06 ETH | ||||
16129146 | 596 days ago | 0.06 ETH | ||||
16129075 | 596 days ago | 0.06 ETH | ||||
16129060 | 596 days ago | 0.06 ETH | ||||
16129043 | 596 days ago | 0.06 ETH | ||||
16129042 | 596 days ago | 0.06 ETH | ||||
16129028 | 596 days ago | 0.06 ETH | ||||
16129025 | 596 days ago | 0.06 ETH | ||||
16129024 | 596 days ago | 0.06 ETH | ||||
16129022 | 596 days ago | 0.06 ETH | ||||
16129011 | 596 days ago | 0.06 ETH | ||||
16129000 | 596 days ago | 0.06 ETH | ||||
16128992 | 596 days ago | 0.06 ETH | ||||
16128982 | 596 days ago | 0.06 ETH | ||||
16128974 | 596 days ago | 0.06 ETH | ||||
16128973 | 596 days ago | 0.06 ETH | ||||
16128967 | 596 days ago | 0.06 ETH |
Loading...
Loading
Contract Name:
DropEngine
Compiler Version
v0.8.13+commit.abaa5c0e
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.13; /* ███╗ ███╗███████╗████████╗ █████╗ ██╗ █████╗ ██████╗ ███████╗██╗ ████╗ ████║██╔════╝╚══██╔══╝██╔══██╗██║ ██╔══██╗██╔══██╗██╔════╝██║ ██╔████╔██║█████╗ ██║ ███████║██║ ███████║██████╔╝█████╗ ██║ ██║╚██╔╝██║██╔══╝ ██║ ██╔══██║██║ ██╔══██║██╔══██╗██╔══╝ ██║ ██║ ╚═╝ ██║███████╗ ██║ ██║ ██║███████╗██║ ██║██████╔╝███████╗███████╗ ╚═╝ ╚═╝╚══════╝ ╚═╝ ╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝╚═════╝ ╚══════╝╚══════╝ Deployed by Metalabel with 💖 as a permanent application on the Ethereum blockchain. Metalabel is a growing universe of tools, knowledge, and resources for metalabels and cultural collectives. Our purpose is to establish the metalabel as key infrastructure for creative collectives and to inspire a new culture of creative collaboration and mutual support. OUR SQUAD Anna Bulbrook (Curator) Austin Robey (Community) Brandon Valosek (Engineer) Ilya Yudanov (Designer) Lauren Dorman (Engineer) Rob Kalin (Board) Yancey Strickler (Director) https://metalabel.xyz */ import {ICollection} from "../interfaces/ICollection.sol"; import {IEngine, SequenceData} from "../interfaces/IEngine.sol"; import {LibString} from "@metalabel/solmate/src/utils/LibString.sol"; /// @notice Data stored engine-side for each drop. /// @dev Fits in a single storage slot. Price stored as uint80 means max price /// per record is (2^80-1)/1e18 = 1,208,925 ETH. Royalty percentage is stored as /// basis points, 5% = 500, max value of 100% = 10000 fits within 2byte int struct DropData { uint80 price; uint16 royaltyBps; address payable revenueRecipient; // no bytes left } /// @notice Engine that implements a multi-NFT drop. In a given sequence: /// - Token data stores edition number on mint (immutable) /// - Token URIs are derived from as single base URI + edition number /// - All tokens are the same price /// - Primary sales and royalties go to the same revenue recipient contract DropEngine is IEngine { // --- // Errors // --- /// @notice Invalid msg.value on purchase error IncorrectPaymentAmount(); /// @notice If price or recipient is zero, they both have to be zero error InvalidPriceOrRecipient(); /// @notice A permissioned mint or attempt to remove the mint authority was /// sent from an invalid msg.sender error NotMintAuthority(); /// @notice A public mint was attempted for a sequence that currently has a /// mint authority set. Public mint opens after the mint authority is /// removed error PublicMintNotActive(); /// @notice Public mints must come from an EOA and not a smart contract error MinterMustBeEOA(); // --- // Events // --- /// @notice A new drop was created. /// @dev The collection already emits a SequenceCreated event, we're /// emitting the additonal engine-specific data here. event DropCreated( address collection, uint16 sequenceId, uint80 price, uint16 royaltyBps, address recipient, string uriPrefix, address mintAuthority ); /// @notice The permissioned mint authority for a sequence was removed. event PublicMintEnabled(address collection, uint16 sequenceId); // --- // Storage // --- /// @notice Drop data for a given collection + sequence ID. mapping(address => mapping(uint16 => DropData)) public drops; /// @notice Token URI prefix for a given collection + sequence ID /// @dev storing separately from DropData structure to save gas during /// storage reads on mint. mapping(address => mapping(uint16 => string)) public baseTokenURIs; /// @notice If set for a given collection / sequence, only this address can /// mint. mapping(address => mapping(uint16 => address)) public mintAuthorities; // --- // Mint functionality // --- /// @notice Mint a new record. function mint(ICollection collection, uint16 sequenceId) external payable returns (uint256 tokenId) { if (msg.sender != tx.origin) revert MinterMustBeEOA(); DropData storage drop = drops[address(collection)][sequenceId]; if (msg.value != drop.price) revert IncorrectPaymentAmount(); // Check if this sequence is permissioned -- so long as their is a mint // authority, public mint is not active if (mintAuthorities[address(collection)][sequenceId] != address(0)) { revert PublicMintNotActive(); } // Immediately forward payment to the recipient. revenueRecipient could // be a malicious contract but transfer has a 2300 gas limit if (drop.price > 0) { drop.revenueRecipient.transfer(msg.value); } // Collection enforces max mint supply and mint window, so we're not // checking that here // If collection is a malicious contract, that does not impact any state // in the engine. If it's a valid protocol-deployed collection, then it // will work as expected. tokenId = collection.mintRecord(msg.sender, sequenceId); } // --- // Permissioned functionality // --- /// @notice Mint a new record to a specific address, only callable by the /// permissioned mint authority for the sequence. function permissionedMint( ICollection collection, uint16 sequenceId, address to ) external returns (uint256 tokenId) { // Ensure msg.sender is the permissioned mint authority if (mintAuthorities[address(collection)][sequenceId] != msg.sender) { revert NotMintAuthority(); } // Not loading drop data here or sending ETH, permissioned mints are // free. Max supply and mint window are still enforced by the downstream // collection. tokenId = collection.mintRecord(to, sequenceId); } /// @notice Permanently remove the mint authority for a given sequence. function clearMintAuthority(ICollection collection, uint16 sequenceId) external { if (mintAuthorities[address(collection)][sequenceId] != msg.sender) { revert NotMintAuthority(); } delete mintAuthorities[address(collection)][sequenceId]; emit PublicMintEnabled(address(collection), sequenceId); } // --- // IEngine setup // --- /// @inheritdoc IEngine /// @dev There is no access control on this function, we infer the /// collection from msg.sender, and use that to key the stored data. If /// somebody calls this function with bogus info (instead of it getting /// called via the collection), it just wastes storage but does not impact /// contract functionality function configureSequence( uint16 sequenceId, SequenceData calldata, /* sequenceData */ bytes calldata engineData ) external { ( uint80 price, uint16 royaltyBps, address payable recipient, string memory uriPrefix, address mintAuthority ) = abi.decode(engineData, (uint80, uint16, address, string, address)); // Ensure that if a price is set, a recipient is set, and vice versa if ((price == 0) != (recipient == address(0))) { revert InvalidPriceOrRecipient(); } // Set the permissioned mint authority if provided if (mintAuthority != address(0)) { mintAuthorities[msg.sender][sequenceId] = mintAuthority; } // Write engine data (passed through from the collection when the // collection admin calls `configureSequence`) to a struct in the engine // with all the needed info. drops[msg.sender][sequenceId] = DropData({ price: price, royaltyBps: royaltyBps, revenueRecipient: recipient }); baseTokenURIs[msg.sender][sequenceId] = uriPrefix; emit DropCreated( msg.sender, sequenceId, price, royaltyBps, recipient, uriPrefix, mintAuthority ); } // --- // IEngine views // --- /// @inheritdoc IEngine /// @dev Token URI is derived from the base URI + edition number. Edition /// number is written to immutable token data on mint. function getTokenURI(address collection, uint256 tokenId) external view override returns (string memory) { uint16 sequenceId = ICollection(collection).tokenSequenceId(tokenId); uint80 editionNumber = ICollection(collection).tokenMintData(tokenId); return string( abi.encodePacked( baseTokenURIs[collection][sequenceId], LibString.toString(editionNumber), ".json" ) ); } /// @inheritdoc IEngine /// @dev Royalty bps and recipient is per-sequence. function getRoyaltyInfo( address collection, uint256 tokenId, uint256 salePrice ) external view override returns (address, uint256) { uint16 sequenceId = ICollection(collection).tokenSequenceId(tokenId); DropData memory drop = drops[collection][sequenceId]; return (drop.revenueRecipient, (salePrice * drop.royaltyBps) / 10000); } }
// SPDX-License-Identifier: MIT pragma solidity >=0.8.0; /// @notice Efficient library for creating string representations of integers. /// @author Solmate (https://github.com/transmissions11/solmate/blob/main/src/utils/LibString.sol) /// @author Modified from Solady (https://github.com/Vectorized/solady/blob/main/src/utils/LibString.sol) library LibString { function toString(uint256 value) internal pure returns (string memory str) { assembly { // The maximum value of a uint256 contains 78 digits (1 byte per digit), but we allocate 160 bytes // to keep the free memory pointer word aligned. We'll need 1 word for the length, 1 word for the // trailing zeros padding, and 3 other words for a max of 78 digits. In total: 5 * 32 = 160 bytes. let newFreeMemoryPointer := add(mload(0x40), 160) // Update the free memory pointer to avoid overriding our string. mstore(0x40, newFreeMemoryPointer) // Assign str to the end of the zone of newly allocated memory. str := sub(newFreeMemoryPointer, 32) // Clean the last word of memory it may not be overwritten. mstore(str, 0) // Cache the end of the memory to calculate the length later. let end := str // We write the string from rightmost digit to leftmost digit. // The following is essentially a do-while loop that also handles the zero case. // prettier-ignore for { let temp := value } 1 {} { // Move the pointer 1 byte to the left. str := sub(str, 1) // Write the character to the pointer. // The ASCII index of the '0' character is 48. mstore8(str, add(48, mod(temp, 10))) // Keep dividing temp until zero. temp := div(temp, 10) // prettier-ignore if iszero(temp) { break } } // Compute and cache the final total length of the string. let length := sub(end, str) // Move the pointer 32 bytes leftwards to make room for the length. str := sub(str, 32) // Store the string's length at the start of memory allocated for our string. mstore(str, length) } } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.13; /// @notice Collections are ERC721 contracts that contain records. interface ICollection { /// @notice Mint a new record with custom immutable token data. Only /// callable by the sequence-specific engine. function mintRecord( address to, uint16 sequenceId, uint80 tokenData ) external returns (uint256 tokenId); /// @notice Mint a new record with the edition number of the seqeuence /// written to the immutable token data. Only callable by the /// sequence-specific engine. function mintRecord(address to, uint16 sequenceId) external returns (uint256 tokenId); /// @notice Get the sequence ID for a given token. function tokenSequenceId(uint256 tokenId) external view returns (uint16 sequenceId); /// @notice Get the immutable mint data for a given token. function tokenMintData(uint256 tokenId) external view returns (uint80 data); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.13; /// @notice Data stored in the collection for each sequence. /// @dev We could use smaller ints for timestamps and supply, but we'd still be /// stuck with a 2-word storage layout. engine + dropNodeId is 28 bytes, leaving /// us with only 4 bytes for the remaining parameters. struct SequenceData { uint64 sealedBeforeTimestamp; uint64 sealedAfterTimestamp; uint64 maxSupply; uint64 minted; IEngine engine; uint64 dropNodeId; // 4 bytes remaining } /// @notice An engine contract implements record minting mechanics, tokenURI /// computation, and royalty computation. interface IEngine { /// @notice Called by the collection when a new sequence is configured. /// @dev An arbitrary bytes buffer engineData is forwarded from the /// collection that can be used to pass setup and configuration data function configureSequence( uint16 sequenceId, SequenceData calldata sequence, bytes calldata engineData ) external; /// @notice Called by the collection to resolve tokenURI. function getTokenURI(address collection, uint256 tokenId) external view returns (string memory); /// @notice Called by the collection to resolve royalties. function getRoyaltyInfo( address collection, uint256 tokenId, uint256 salePrice ) external view returns (address receiver, uint256 royaltyAmount); }
{ "optimizer": { "enabled": true, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"name":"IncorrectPaymentAmount","type":"error"},{"inputs":[],"name":"InvalidPriceOrRecipient","type":"error"},{"inputs":[],"name":"MinterMustBeEOA","type":"error"},{"inputs":[],"name":"NotMintAuthority","type":"error"},{"inputs":[],"name":"PublicMintNotActive","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"collection","type":"address"},{"indexed":false,"internalType":"uint16","name":"sequenceId","type":"uint16"},{"indexed":false,"internalType":"uint80","name":"price","type":"uint80"},{"indexed":false,"internalType":"uint16","name":"royaltyBps","type":"uint16"},{"indexed":false,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"string","name":"uriPrefix","type":"string"},{"indexed":false,"internalType":"address","name":"mintAuthority","type":"address"}],"name":"DropCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"collection","type":"address"},{"indexed":false,"internalType":"uint16","name":"sequenceId","type":"uint16"}],"name":"PublicMintEnabled","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint16","name":"","type":"uint16"}],"name":"baseTokenURIs","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract ICollection","name":"collection","type":"address"},{"internalType":"uint16","name":"sequenceId","type":"uint16"}],"name":"clearMintAuthority","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"sequenceId","type":"uint16"},{"components":[{"internalType":"uint64","name":"sealedBeforeTimestamp","type":"uint64"},{"internalType":"uint64","name":"sealedAfterTimestamp","type":"uint64"},{"internalType":"uint64","name":"maxSupply","type":"uint64"},{"internalType":"uint64","name":"minted","type":"uint64"},{"internalType":"contract IEngine","name":"engine","type":"address"},{"internalType":"uint64","name":"dropNodeId","type":"uint64"}],"internalType":"struct SequenceData","name":"","type":"tuple"},{"internalType":"bytes","name":"engineData","type":"bytes"}],"name":"configureSequence","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint16","name":"","type":"uint16"}],"name":"drops","outputs":[{"internalType":"uint80","name":"price","type":"uint80"},{"internalType":"uint16","name":"royaltyBps","type":"uint16"},{"internalType":"address payable","name":"revenueRecipient","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"collection","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"salePrice","type":"uint256"}],"name":"getRoyaltyInfo","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"collection","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract ICollection","name":"collection","type":"address"},{"internalType":"uint16","name":"sequenceId","type":"uint16"}],"name":"mint","outputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint16","name":"","type":"uint16"}],"name":"mintAuthorities","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract ICollection","name":"collection","type":"address"},{"internalType":"uint16","name":"sequenceId","type":"uint16"},{"internalType":"address","name":"to","type":"address"}],"name":"permissionedMint","outputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b506110e0806100206000396000f3fe6080604052600436106100865760003560e01c80639b46c29f116100595780639b46c29f14610142578063ad0be4bd14610162578063e4d76a4814610183578063f2c565db146101a3578063f746f01f146101fc57600080fd5b80630b63fd621461008b5780630d8e8f90146100c157806322a5c8d0146100e357806336de974214610103575b600080fd5b34801561009757600080fd5b506100ab6100a6366004610b55565b610289565b6040516100b89190610bdd565b60405180910390f35b3480156100cd57600080fd5b506100e16100dc366004610c07565b6103cd565b005b3480156100ef57600080fd5b506100e16100fe366004610c40565b610489565b34801561010f57600080fd5b5061012361011e366004610cdd565b6106b1565b604080516001600160a01b0390931683526020830191909152016100b8565b34801561014e57600080fd5b506100ab61015d366004610c07565b6107af565b610175610170366004610c07565b610854565b6040519081526020016100b8565b34801561018f57600080fd5b5061017561019e366004610d12565b6109dd565b3480156101af57600080fd5b506101e46101be366004610c07565b60026020908152600092835260408084209091529082529020546001600160a01b031681565b6040516001600160a01b0390911681526020016100b8565b34801561020857600080fd5b50610258610217366004610c07565b60006020818152928152604080822090935290815220546001600160501b03811690600160501b810461ffff1690600160601b90046001600160a01b031683565b604080516001600160501b03909416845261ffff90921660208401526001600160a01b0316908201526060016100b8565b6040516305b5acb960e31b8152600481018290526060906000906001600160a01b03851690632dad65c890602401602060405180830381865afa1580156102d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102f89190610d5d565b604051633aa9eee560e21b8152600481018590529091506000906001600160a01b0386169063eaa7bb9490602401602060405180830381865afa158015610343573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103679190610d8f565b6001600160a01b038616600090815260016020908152604080832061ffff8716845290915290209091506103a36001600160501b038316610a60565b6040516020016103b4929190610e02565b6040516020818303038152906040529250505092915050565b6001600160a01b03828116600090815260026020908152604080832061ffff8616845290915290205416331461041657604051637d77780760e11b815260040160405180910390fd5b6001600160a01b038216600081815260026020908152604080832061ffff86168085529083529281902080546001600160a01b03191690558051938452908301919091527fd21d15ebf75782a96add78aa6745d2dc2352e69cf349b247a28670d680fe0fa9910160405180910390a15050565b60008080808061049b86880188610ee2565b9398509196509450925090506001600160501b038516156001600160a01b03841615146104db5760405163f1c970d160e01b815260040160405180910390fd5b6001600160a01b038116156105225733600090815260026020908152604080832061ffff8d168452909152902080546001600160a01b0319166001600160a01b0383161790555b6040518060600160405280866001600160501b031681526020018561ffff168152602001846001600160a01b0316815250600080336001600160a01b03166001600160a01b0316815260200190815260200160002060008b61ffff1661ffff16815260200190815260200160002060008201518160000160006101000a8154816001600160501b0302191690836001600160501b03160217905550602082015181600001600a6101000a81548161ffff021916908361ffff160217905550604082015181600001600c6101000a8154816001600160a01b0302191690836001600160a01b031602179055509050508160016000336001600160a01b03166001600160a01b0316815260200190815260200160002060008b61ffff1661ffff1681526020019081526020016000209080519060200190610662929190610aa4565b507f7357c827c27a97719fc1ea5d2ca7683516ccb10a2688dffd1e0519d18ff0bdfa338a878787878760405161069e9796959493929190610fdc565b60405180910390a1505050505050505050565b6000806000856001600160a01b0316632dad65c8866040518263ffffffff1660e01b81526004016106e491815260200190565b602060405180830381865afa158015610701573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107259190610d5d565b6001600160a01b0380881660009081526020818152604080832061ffff808716855290835292819020815160608101835290546001600160501b0381168252600160501b8104909416928101839052600160601b90930490931692820183905292935091612710906107979088611042565b6107a1919061106f565b935093505050935093915050565b6001602090815260009283526040808420909152908252902080546107d390610dac565b80601f01602080910402602001604051908101604052809291908181526020018280546107ff90610dac565b801561084c5780601f106108215761010080835404028352916020019161084c565b820191906000526020600020905b81548152906001019060200180831161082f57829003601f168201915b505050505081565b6000333214610876576040516378005e7b60e11b815260040160405180910390fd5b6001600160a01b03831660009081526020818152604080832061ffff86168452909152902080546001600160501b031634146108c557604051636992e1ff60e01b815260040160405180910390fd5b6001600160a01b03848116600090815260026020908152604080832061ffff88168452909152902054161561090d5760405163cd967e3560e01b815260040160405180910390fd5b80546001600160501b0316156109605780546040516001600160a01b03600160601b90920491909116903480156108fc02916000818181858888f1935050505015801561095e573d6000803e3d6000fd5b505b604051636342747b60e01b815233600482015261ffff841660248201526001600160a01b03851690636342747b906044015b6020604051808303816000875af11580156109b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109d59190611091565b949350505050565b6001600160a01b03838116600090815260026020908152604080832061ffff871684529091528120549091163314610a2857604051637d77780760e11b815260040160405180910390fd5b604051636342747b60e01b81526001600160a01b03838116600483015261ffff85166024830152851690636342747b90604401610992565b606060a06040510180604052602081039150506000815280825b600183039250600a81066030018353600a900480610a7a5750819003601f19909101908152919050565b828054610ab090610dac565b90600052602060002090601f016020900481019282610ad25760008555610b18565b82601f10610aeb57805160ff1916838001178555610b18565b82800160010185558215610b18579182015b82811115610b18578251825591602001919060010190610afd565b50610b24929150610b28565b5090565b5b80821115610b245760008155600101610b29565b6001600160a01b0381168114610b5257600080fd5b50565b60008060408385031215610b6857600080fd5b8235610b7381610b3d565b946020939093013593505050565b60005b83811015610b9c578181015183820152602001610b84565b83811115610bab576000848401525b50505050565b60008151808452610bc9816020860160208601610b81565b601f01601f19169290920160200192915050565b602081526000610bf06020830184610bb1565b9392505050565b61ffff81168114610b5257600080fd5b60008060408385031215610c1a57600080fd5b8235610c2581610b3d565b91506020830135610c3581610bf7565b809150509250929050565b600080600080848603610100811215610c5857600080fd5b8535610c6381610bf7565b945060c0601f1982011215610c7757600080fd5b5060208501925060e085013567ffffffffffffffff80821115610c9957600080fd5b818701915087601f830112610cad57600080fd5b813581811115610cbc57600080fd5b886020828501011115610cce57600080fd5b95989497505060200194505050565b600080600060608486031215610cf257600080fd5b8335610cfd81610b3d565b95602085013595506040909401359392505050565b600080600060608486031215610d2757600080fd5b8335610d3281610b3d565b92506020840135610d4281610bf7565b91506040840135610d5281610b3d565b809150509250925092565b600060208284031215610d6f57600080fd5b8151610bf081610bf7565b6001600160501b0381168114610b5257600080fd5b600060208284031215610da157600080fd5b8151610bf081610d7a565b600181811c90821680610dc057607f821691505b602082108103610de057634e487b7160e01b600052602260045260246000fd5b50919050565b60008151610df8818560208601610b81565b9290920192915050565b600080845481600182811c915080831680610e1e57607f831692505b60208084108203610e3d57634e487b7160e01b86526022600452602486fd5b818015610e515760018114610e6257610e8f565b60ff19861689528489019650610e8f565b60008b81526020902060005b86811015610e875781548b820152908501908301610e6e565b505084890196505b505050505050610eb3610ea28286610de6565b64173539b7b760d91b815260050190565b95945050505050565b8035610ec781610b3d565b919050565b634e487b7160e01b600052604160045260246000fd5b600080600080600060a08688031215610efa57600080fd5b8535610f0581610d7a565b94506020860135610f1581610bf7565b93506040860135610f2581610b3d565b9250606086013567ffffffffffffffff80821115610f4257600080fd5b818801915088601f830112610f5657600080fd5b813581811115610f6857610f68610ecc565b604051601f8201601f19908116603f01168101908382118183101715610f9057610f90610ecc565b816040528281528b6020848701011115610fa957600080fd5b826020860160208301376000602084830101528096505050505050610fd060808701610ebc565b90509295509295909350565b6001600160a01b03888116825261ffff88811660208401526001600160501b038816604084015286166060830152848116608083015260e060a083018190526000919061102b90840186610bb1565b915080841660c08401525098975050505050505050565b600081600019048311821515161561106a57634e487b7160e01b600052601160045260246000fd5b500290565b60008261108c57634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156110a357600080fd5b505191905056fea2646970667358221220214cc50180946cdebbcccaae84c951ee364e24cc9832824fa0227131169d999164736f6c634300080d0033
Deployed Bytecode
0x6080604052600436106100865760003560e01c80639b46c29f116100595780639b46c29f14610142578063ad0be4bd14610162578063e4d76a4814610183578063f2c565db146101a3578063f746f01f146101fc57600080fd5b80630b63fd621461008b5780630d8e8f90146100c157806322a5c8d0146100e357806336de974214610103575b600080fd5b34801561009757600080fd5b506100ab6100a6366004610b55565b610289565b6040516100b89190610bdd565b60405180910390f35b3480156100cd57600080fd5b506100e16100dc366004610c07565b6103cd565b005b3480156100ef57600080fd5b506100e16100fe366004610c40565b610489565b34801561010f57600080fd5b5061012361011e366004610cdd565b6106b1565b604080516001600160a01b0390931683526020830191909152016100b8565b34801561014e57600080fd5b506100ab61015d366004610c07565b6107af565b610175610170366004610c07565b610854565b6040519081526020016100b8565b34801561018f57600080fd5b5061017561019e366004610d12565b6109dd565b3480156101af57600080fd5b506101e46101be366004610c07565b60026020908152600092835260408084209091529082529020546001600160a01b031681565b6040516001600160a01b0390911681526020016100b8565b34801561020857600080fd5b50610258610217366004610c07565b60006020818152928152604080822090935290815220546001600160501b03811690600160501b810461ffff1690600160601b90046001600160a01b031683565b604080516001600160501b03909416845261ffff90921660208401526001600160a01b0316908201526060016100b8565b6040516305b5acb960e31b8152600481018290526060906000906001600160a01b03851690632dad65c890602401602060405180830381865afa1580156102d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102f89190610d5d565b604051633aa9eee560e21b8152600481018590529091506000906001600160a01b0386169063eaa7bb9490602401602060405180830381865afa158015610343573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103679190610d8f565b6001600160a01b038616600090815260016020908152604080832061ffff8716845290915290209091506103a36001600160501b038316610a60565b6040516020016103b4929190610e02565b6040516020818303038152906040529250505092915050565b6001600160a01b03828116600090815260026020908152604080832061ffff8616845290915290205416331461041657604051637d77780760e11b815260040160405180910390fd5b6001600160a01b038216600081815260026020908152604080832061ffff86168085529083529281902080546001600160a01b03191690558051938452908301919091527fd21d15ebf75782a96add78aa6745d2dc2352e69cf349b247a28670d680fe0fa9910160405180910390a15050565b60008080808061049b86880188610ee2565b9398509196509450925090506001600160501b038516156001600160a01b03841615146104db5760405163f1c970d160e01b815260040160405180910390fd5b6001600160a01b038116156105225733600090815260026020908152604080832061ffff8d168452909152902080546001600160a01b0319166001600160a01b0383161790555b6040518060600160405280866001600160501b031681526020018561ffff168152602001846001600160a01b0316815250600080336001600160a01b03166001600160a01b0316815260200190815260200160002060008b61ffff1661ffff16815260200190815260200160002060008201518160000160006101000a8154816001600160501b0302191690836001600160501b03160217905550602082015181600001600a6101000a81548161ffff021916908361ffff160217905550604082015181600001600c6101000a8154816001600160a01b0302191690836001600160a01b031602179055509050508160016000336001600160a01b03166001600160a01b0316815260200190815260200160002060008b61ffff1661ffff1681526020019081526020016000209080519060200190610662929190610aa4565b507f7357c827c27a97719fc1ea5d2ca7683516ccb10a2688dffd1e0519d18ff0bdfa338a878787878760405161069e9796959493929190610fdc565b60405180910390a1505050505050505050565b6000806000856001600160a01b0316632dad65c8866040518263ffffffff1660e01b81526004016106e491815260200190565b602060405180830381865afa158015610701573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107259190610d5d565b6001600160a01b0380881660009081526020818152604080832061ffff808716855290835292819020815160608101835290546001600160501b0381168252600160501b8104909416928101839052600160601b90930490931692820183905292935091612710906107979088611042565b6107a1919061106f565b935093505050935093915050565b6001602090815260009283526040808420909152908252902080546107d390610dac565b80601f01602080910402602001604051908101604052809291908181526020018280546107ff90610dac565b801561084c5780601f106108215761010080835404028352916020019161084c565b820191906000526020600020905b81548152906001019060200180831161082f57829003601f168201915b505050505081565b6000333214610876576040516378005e7b60e11b815260040160405180910390fd5b6001600160a01b03831660009081526020818152604080832061ffff86168452909152902080546001600160501b031634146108c557604051636992e1ff60e01b815260040160405180910390fd5b6001600160a01b03848116600090815260026020908152604080832061ffff88168452909152902054161561090d5760405163cd967e3560e01b815260040160405180910390fd5b80546001600160501b0316156109605780546040516001600160a01b03600160601b90920491909116903480156108fc02916000818181858888f1935050505015801561095e573d6000803e3d6000fd5b505b604051636342747b60e01b815233600482015261ffff841660248201526001600160a01b03851690636342747b906044015b6020604051808303816000875af11580156109b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109d59190611091565b949350505050565b6001600160a01b03838116600090815260026020908152604080832061ffff871684529091528120549091163314610a2857604051637d77780760e11b815260040160405180910390fd5b604051636342747b60e01b81526001600160a01b03838116600483015261ffff85166024830152851690636342747b90604401610992565b606060a06040510180604052602081039150506000815280825b600183039250600a81066030018353600a900480610a7a5750819003601f19909101908152919050565b828054610ab090610dac565b90600052602060002090601f016020900481019282610ad25760008555610b18565b82601f10610aeb57805160ff1916838001178555610b18565b82800160010185558215610b18579182015b82811115610b18578251825591602001919060010190610afd565b50610b24929150610b28565b5090565b5b80821115610b245760008155600101610b29565b6001600160a01b0381168114610b5257600080fd5b50565b60008060408385031215610b6857600080fd5b8235610b7381610b3d565b946020939093013593505050565b60005b83811015610b9c578181015183820152602001610b84565b83811115610bab576000848401525b50505050565b60008151808452610bc9816020860160208601610b81565b601f01601f19169290920160200192915050565b602081526000610bf06020830184610bb1565b9392505050565b61ffff81168114610b5257600080fd5b60008060408385031215610c1a57600080fd5b8235610c2581610b3d565b91506020830135610c3581610bf7565b809150509250929050565b600080600080848603610100811215610c5857600080fd5b8535610c6381610bf7565b945060c0601f1982011215610c7757600080fd5b5060208501925060e085013567ffffffffffffffff80821115610c9957600080fd5b818701915087601f830112610cad57600080fd5b813581811115610cbc57600080fd5b886020828501011115610cce57600080fd5b95989497505060200194505050565b600080600060608486031215610cf257600080fd5b8335610cfd81610b3d565b95602085013595506040909401359392505050565b600080600060608486031215610d2757600080fd5b8335610d3281610b3d565b92506020840135610d4281610bf7565b91506040840135610d5281610b3d565b809150509250925092565b600060208284031215610d6f57600080fd5b8151610bf081610bf7565b6001600160501b0381168114610b5257600080fd5b600060208284031215610da157600080fd5b8151610bf081610d7a565b600181811c90821680610dc057607f821691505b602082108103610de057634e487b7160e01b600052602260045260246000fd5b50919050565b60008151610df8818560208601610b81565b9290920192915050565b600080845481600182811c915080831680610e1e57607f831692505b60208084108203610e3d57634e487b7160e01b86526022600452602486fd5b818015610e515760018114610e6257610e8f565b60ff19861689528489019650610e8f565b60008b81526020902060005b86811015610e875781548b820152908501908301610e6e565b505084890196505b505050505050610eb3610ea28286610de6565b64173539b7b760d91b815260050190565b95945050505050565b8035610ec781610b3d565b919050565b634e487b7160e01b600052604160045260246000fd5b600080600080600060a08688031215610efa57600080fd5b8535610f0581610d7a565b94506020860135610f1581610bf7565b93506040860135610f2581610b3d565b9250606086013567ffffffffffffffff80821115610f4257600080fd5b818801915088601f830112610f5657600080fd5b813581811115610f6857610f68610ecc565b604051601f8201601f19908116603f01168101908382118183101715610f9057610f90610ecc565b816040528281528b6020848701011115610fa957600080fd5b826020860160208301376000602084830101528096505050505050610fd060808701610ebc565b90509295509295909350565b6001600160a01b03888116825261ffff88811660208401526001600160501b038816604084015286166060830152848116608083015260e060a083018190526000919061102b90840186610bb1565b915080841660c08401525098975050505050505050565b600081600019048311821515161561106a57634e487b7160e01b600052601160045260246000fd5b500290565b60008261108c57634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156110a357600080fd5b505191905056fea2646970667358221220214cc50180946cdebbcccaae84c951ee364e24cc9832824fa0227131169d999164736f6c634300080d0033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.