More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 40 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Set Mint Require... | 54421355 | 272 days ago | IN | 0 POL | 0.01645917 | ||||
Set Mint Require... | 54421297 | 272 days ago | IN | 0 POL | 0.01175874 | ||||
Set Mint Require... | 54340513 | 274 days ago | IN | 0 POL | 0.01131629 | ||||
Set Mint Require... | 54297048 | 275 days ago | IN | 0 POL | 0.02690119 | ||||
Set Mint Require... | 54297013 | 275 days ago | IN | 0 POL | 0.01945575 | ||||
Set Mint Require... | 54296991 | 275 days ago | IN | 0 POL | 0.01292429 | ||||
Set Mint Require... | 54296923 | 275 days ago | IN | 0 POL | 0.0162455 | ||||
Set Mint Require... | 54296819 | 275 days ago | IN | 0 POL | 0.04356921 | ||||
Set Mint Require... | 54296800 | 275 days ago | IN | 0 POL | 0.0406503 | ||||
Set Mint Require... | 54111513 | 280 days ago | IN | 0 POL | 0.00664422 | ||||
Set Mint Require... | 54111475 | 280 days ago | IN | 0 POL | 0.00640043 | ||||
Set Mint Require... | 54111463 | 280 days ago | IN | 0 POL | 0.00669419 | ||||
Set Mint Require... | 54111442 | 280 days ago | IN | 0 POL | 0.0074013 | ||||
Set Mint Require... | 54111424 | 280 days ago | IN | 0 POL | 0.00837188 | ||||
Set Mint Require... | 54111406 | 280 days ago | IN | 0 POL | 0.00876144 | ||||
Set Mint Require... | 54111380 | 280 days ago | IN | 0 POL | 0.00702058 | ||||
Set Mint Require... | 54110492 | 280 days ago | IN | 0 POL | 0.00597975 | ||||
Set Mint Require... | 54110468 | 280 days ago | IN | 0 POL | 0.00601604 | ||||
Set Mint Require... | 54110458 | 280 days ago | IN | 0 POL | 0.00589794 | ||||
Set Mint Require... | 54101526 | 280 days ago | IN | 0 POL | 0.00890357 | ||||
Set Mint Require... | 54101517 | 280 days ago | IN | 0 POL | 0.01687735 | ||||
Set Mint Require... | 54101436 | 280 days ago | IN | 0 POL | 0.0105832 | ||||
Set Mint Require... | 54101409 | 280 days ago | IN | 0 POL | 0.01862569 | ||||
Set Mint Require... | 54101385 | 280 days ago | IN | 0 POL | 0.02379099 | ||||
Set Mint Require... | 54101236 | 280 days ago | IN | 0 POL | 0.02651053 |
Loading...
Loading
Contract Name:
ERC1155BurnToMint
Compiler Version
v0.8.19+commit.7dd6d404
Optimization Enabled:
Yes with 20000 runs
Other Settings:
paris EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: Apache-2.0 pragma solidity ^0.8.19; import {IERC1155} from "@0xsequence/erc-1155/contracts/interfaces/IERC1155.sol"; import {IERC1155TokenReceiver} from "@0xsequence/erc-1155/contracts/interfaces/IERC1155TokenReceiver.sol"; import {IERC1155ItemsFunctions} from "@0xsequence/contracts-library/tokens/ERC1155/presets/items/IERC1155Items.sol"; import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol"; // Thrown when token id is invalid error InvalidTokenId(); // Thrown when mint requirements are not met error MintRequirementsNotMet(); // Thrown when input array length is invalid error InvalidArrayLength(); // Thrown when method called is invalid error InvalidMethod(); interface IERC1155Items is IERC1155ItemsFunctions, IERC1155 { function batchBurn(uint256[] memory tokenIds, uint256[] memory amounts) external; } struct TokenRequirements { uint256 tokenId; uint256 amount; } contract ERC1155BurnToMint is IERC1155TokenReceiver, Ownable { IERC1155Items private immutable ITEMS; mapping(uint256 => TokenRequirements[]) public burnRequirements; mapping(uint256 => TokenRequirements[]) public holdRequirements; constructor(address items, address owner_) { Ownable.transferOwnership(owner_); ITEMS = IERC1155Items(items); } /** * Contract owner can mint anything */ function mintOpen(address to, uint256 tokenId, uint256 amount) external onlyOwner { ITEMS.mint(to, tokenId, amount, ""); } /** * Owner sets minting requirements for a token. * @dev This function does not validate inputs ids of the inputs. * @dev `burnTokenIds` and `holdTokenIds` should not overlap, should be unique and should not contain `mintTokenId`. */ function setMintRequirements( uint256 mintTokenId, uint256[] calldata burnTokenIds, uint256[] calldata burnAmounts, uint256[] calldata holdTokenIds, uint256[] calldata holdAmounts ) external onlyOwner { if (burnTokenIds.length != burnAmounts.length || holdTokenIds.length != holdAmounts.length) { revert InvalidArrayLength(); } delete burnRequirements[mintTokenId]; delete holdRequirements[mintTokenId]; for (uint256 i = 0; i < burnTokenIds.length; i++) { burnRequirements[mintTokenId].push(TokenRequirements(burnTokenIds[i], burnAmounts[i])); } for (uint256 i = 0; i < holdTokenIds.length; i++) { holdRequirements[mintTokenId].push(TokenRequirements(holdTokenIds[i], holdAmounts[i])); } } /** * @notice Use `onERC1155BatchReceived` instead. */ function onERC1155Received(address, address, uint256, uint256, bytes calldata) external pure override returns (bytes4) { revert InvalidMethod(); } /** * Receive tokens for burning and mint new token. * @dev `data` is abi.encode(mintTokenId). */ function onERC1155BatchReceived( address, address from, uint256[] calldata tokenIds, uint256[] calldata amounts, bytes calldata data ) external override returns (bytes4) { if (msg.sender != address(ITEMS)) { // Got tokens from incorrect contract revert MintRequirementsNotMet(); } // Check mint requirements uint256 mintTokenId = abi.decode(data, (uint256)); _checkMintRequirements(from, mintTokenId, tokenIds, amounts); // Burn these tokens and mint the new token ITEMS.batchBurn(tokenIds, amounts); ITEMS.mint(from, mintTokenId, 1, ""); return this.onERC1155BatchReceived.selector; } /** * Checks mint requirements for a token. * @dev This function assumes the `burnTokenIds` and `burnAmounts` have been burned. */ function _checkMintRequirements( address holder, uint256 mintTokenId, uint256[] calldata burnTokenIds, uint256[] calldata burnAmounts ) internal view { if (burnTokenIds.length != burnAmounts.length || burnTokenIds.length == 0) { revert InvalidArrayLength(); } // Check burn tokens sent is correct TokenRequirements[] memory requirements = burnRequirements[mintTokenId]; if (requirements.length != burnTokenIds.length) { revert MintRequirementsNotMet(); } for (uint256 i = 0; i < requirements.length; i++) { if (requirements[i].tokenId != burnTokenIds[i] || requirements[i].amount != burnAmounts[i]) { // Invalid burn token id or amount revert MintRequirementsNotMet(); } } // Check held tokens requirements = holdRequirements[mintTokenId]; if (requirements.length != 0) { address[] memory holders = new address[](requirements.length); uint256[] memory holdTokenIds = new uint256[](requirements.length); for (uint256 i = 0; i < requirements.length; i++) { holders[i] = holder; holdTokenIds[i] = requirements[i].tokenId; } uint256[] memory balances = ITEMS.balanceOfBatch(holders, holdTokenIds); for (uint256 i = 0; i < requirements.length; i++) { if (balances[i] < requirements[i].amount) { // Not enough held tokens revert MintRequirementsNotMet(); } } } } function getMintRequirements(uint256 mintTokenId) external view returns ( uint256[] memory burnIds, uint256[] memory burnAmounts, uint256[] memory holdIds, uint256[] memory holdAmounts ) { TokenRequirements[] memory requirements = burnRequirements[mintTokenId]; uint256 requirementsLength = requirements.length; burnIds = new uint256[](requirementsLength); burnAmounts = new uint256[](requirementsLength); for (uint256 i = 0; i < requirementsLength; i++) { burnIds[i] = requirements[i].tokenId; burnAmounts[i] = requirements[i].amount; } requirements = holdRequirements[mintTokenId]; requirementsLength = requirements.length; holdIds = new uint256[](requirementsLength); holdAmounts = new uint256[](requirementsLength); for (uint256 i = 0; i < requirementsLength; i++) { holdIds[i] = requirements[i].tokenId; holdAmounts[i] = requirements[i].amount; } } }
// SPDX-License-Identifier: Apache-2.0 pragma solidity ^0.8.0; import './IERC165.sol'; interface IERC1155 is IERC165 { /****************************************| | Events | |_______________________________________*/ /** * @dev Either TransferSingle or TransferBatch MUST emit when tokens are transferred, including zero amount transfers as well as minting or burning * Operator MUST be msg.sender * When minting/creating tokens, the `_from` field MUST be set to `0x0` * When burning/destroying tokens, the `_to` field MUST be set to `0x0` * The total amount transferred from address 0x0 minus the total amount transferred to 0x0 may be used by clients and exchanges to be added to the "circulating supply" for a given token ID * To broadcast the existence of a token ID with no initial balance, the contract SHOULD emit the TransferSingle event from `0x0` to `0x0`, with the token creator as `_operator`, and a `_amount` of 0 */ event TransferSingle(address indexed _operator, address indexed _from, address indexed _to, uint256 _id, uint256 _amount); /** * @dev Either TransferSingle or TransferBatch MUST emit when tokens are transferred, including zero amount transfers as well as minting or burning * Operator MUST be msg.sender * When minting/creating tokens, the `_from` field MUST be set to `0x0` * When burning/destroying tokens, the `_to` field MUST be set to `0x0` * The total amount transferred from address 0x0 minus the total amount transferred to 0x0 may be used by clients and exchanges to be added to the "circulating supply" for a given token ID * To broadcast the existence of multiple token IDs with no initial balance, this SHOULD emit the TransferBatch event from `0x0` to `0x0`, with the token creator as `_operator`, and a `_amount` of 0 */ event TransferBatch(address indexed _operator, address indexed _from, address indexed _to, uint256[] _ids, uint256[] _amounts); /** * @dev MUST emit when an approval is updated */ event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved); /****************************************| | Functions | |_______________________________________*/ /** * @notice Transfers amount of an _id from the _from address to the _to address specified * @dev MUST emit TransferSingle event on success * Caller must be approved to manage the _from account's tokens (see isApprovedForAll) * MUST throw if `_to` is the zero address * MUST throw if balance of sender for token `_id` is lower than the `_amount` sent * MUST throw on any other error * When transfer is complete, this function MUST check if `_to` is a smart contract (code size > 0). If so, it MUST call `onERC1155Received` on `_to` and revert if the return amount is not `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` * @param _from Source address * @param _to Target address * @param _id ID of the token type * @param _amount Transfered amount * @param _data Additional data with no specified format, sent in call to `_to` */ function safeTransferFrom(address _from, address _to, uint256 _id, uint256 _amount, bytes calldata _data) external; /** * @notice Send multiple types of Tokens from the _from address to the _to address (with safety call) * @dev MUST emit TransferBatch event on success * Caller must be approved to manage the _from account's tokens (see isApprovedForAll) * MUST throw if `_to` is the zero address * MUST throw if length of `_ids` is not the same as length of `_amounts` * MUST throw if any of the balance of sender for token `_ids` is lower than the respective `_amounts` sent * MUST throw on any other error * When transfer is complete, this function MUST check if `_to` is a smart contract (code size > 0). If so, it MUST call `onERC1155BatchReceived` on `_to` and revert if the return amount is not `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` * Transfers and events MUST occur in the array order they were submitted (_ids[0] before _ids[1], etc) * @param _from Source addresses * @param _to Target addresses * @param _ids IDs of each token type * @param _amounts Transfer amounts per token type * @param _data Additional data with no specified format, sent in call to `_to` */ function safeBatchTransferFrom(address _from, address _to, uint256[] calldata _ids, uint256[] calldata _amounts, bytes calldata _data) external; /** * @notice Get the balance of an account's Tokens * @param _owner The address of the token holder * @param _id ID of the Token * @return The _owner's balance of the Token type requested */ function balanceOf(address _owner, uint256 _id) external view returns (uint256); /** * @notice Get the balance of multiple account/token pairs * @param _owners The addresses of the token holders * @param _ids ID of the Tokens * @return The _owner's balance of the Token types requested (i.e. balance for each (owner, id) pair) */ function balanceOfBatch(address[] calldata _owners, uint256[] calldata _ids) external view returns (uint256[] memory); /** * @notice Enable or disable approval for a third party ("operator") to manage all of caller's tokens * @dev MUST emit the ApprovalForAll event on success * @param _operator Address to add to the set of authorized operators * @param _approved True if the operator is approved, false to revoke approval */ function setApprovalForAll(address _operator, bool _approved) external; /** * @notice Queries the approval status of an operator for a given owner * @param _owner The owner of the Tokens * @param _operator Address of authorized operator * @return isOperator True if the operator is approved, false if not */ function isApprovedForAll(address _owner, address _operator) external view returns (bool isOperator); }
// SPDX-License-Identifier: Apache-2.0 pragma solidity ^0.8.0; /** * @dev ERC-1155 interface for accepting safe transfers. */ interface IERC1155TokenReceiver { /** * @notice Handle the receipt of a single ERC1155 token type * @dev An ERC1155-compliant smart contract MUST call this function on the token recipient contract, at the end of a `safeTransferFrom` after the balance has been updated * This function MAY throw to revert and reject the transfer * Return of other amount than the magic value MUST result in the transaction being reverted * Note: The token contract address is always the message sender * @param _operator The address which called the `safeTransferFrom` function * @param _from The address which previously owned the token * @param _id The id of the token being transferred * @param _amount The amount of tokens being transferred * @param _data Additional data with no specified format * @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` */ function onERC1155Received(address _operator, address _from, uint256 _id, uint256 _amount, bytes calldata _data) external returns(bytes4); /** * @notice Handle the receipt of multiple ERC1155 token types * @dev An ERC1155-compliant smart contract MUST call this function on the token recipient contract, at the end of a `safeBatchTransferFrom` after the balances have been updated * This function MAY throw to revert and reject the transfer * Return of other amount than the magic value WILL result in the transaction being reverted * Note: The token contract address is always the message sender * @param _operator The address which called the `safeBatchTransferFrom` function * @param _from The address which previously owned the token * @param _ids An array containing ids of each token being transferred * @param _amounts An array containing amounts of each token being transferred * @param _data Additional data with no specified format * @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` */ function onERC1155BatchReceived(address _operator, address _from, uint256[] calldata _ids, uint256[] calldata _amounts, bytes calldata _data) external returns(bytes4); }
// SPDX-License-Identifier: Apache-2.0 pragma solidity ^0.8.19; interface IERC1155ItemsFunctions { /** * Mint tokens. * @param to Address to mint tokens to. * @param tokenId Token ID to mint. * @param amount Amount of tokens to mint. * @param data Data to pass if receiver is contract. */ function mint(address to, uint256 tokenId, uint256 amount, bytes memory data) external; /** * Mint tokens. * @param to Address to mint tokens to. * @param tokenIds Token IDs to mint. * @param amounts Amounts of tokens to mint. * @param data Data to pass if receiver is contract. */ function batchMint(address to, uint256[] memory tokenIds, uint256[] memory amounts, bytes memory data) external; } interface IERC1155ItemsSignals { /** * Invalid initialization error. */ error InvalidInitialization(); } interface IERC1155Items is IERC1155ItemsFunctions, IERC1155ItemsSignals {}
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol) pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: Apache-2.0 pragma solidity ^0.8.0; /** * @title ERC165 * @dev https://github.com/ethereum/EIPs/blob/master/EIPS/eip-165.md */ interface IERC165 { /** * @notice Query if a contract implements an interface * @dev Interface identification is specified in ERC-165. This function * uses less than 30,000 gas * @param _interfaceId The interface identifier, as specified in ERC-165 */ function supportsInterface(bytes4 _interfaceId) external view returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
{ "remappings": [ "@0xsequence/contracts-library/=src/", "ds-test/=lib/forge-std/lib/ds-test/src/", "forge-std/=lib/forge-std/src/", "murky/=lib/murky/src/", "@0xsequence/erc20-meta-token/=node_modules/@0xsequence/erc20-meta-token/", "@0xsequence/erc-1155/=node_modules/@0xsequence/erc-1155/", "erc721a/=node_modules/erc721a/", "erc721a-upgradeable/=node_modules/erc721a-upgradeable/", "@openzeppelin/=node_modules/@openzeppelin/", "openzeppelin-contracts/=lib/murky/lib/openzeppelin-contracts/" ], "optimizer": { "enabled": true, "runs": 20000 }, "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":[{"internalType":"address","name":"items","type":"address"},{"internalType":"address","name":"owner_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"InvalidArrayLength","type":"error"},{"inputs":[],"name":"InvalidMethod","type":"error"},{"inputs":[],"name":"MintRequirementsNotMet","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"burnRequirements","outputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"mintTokenId","type":"uint256"}],"name":"getMintRequirements","outputs":[{"internalType":"uint256[]","name":"burnIds","type":"uint256[]"},{"internalType":"uint256[]","name":"burnAmounts","type":"uint256[]"},{"internalType":"uint256[]","name":"holdIds","type":"uint256[]"},{"internalType":"uint256[]","name":"holdAmounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"holdRequirements","outputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mintOpen","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"onERC1155BatchReceived","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC1155Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"mintTokenId","type":"uint256"},{"internalType":"uint256[]","name":"burnTokenIds","type":"uint256[]"},{"internalType":"uint256[]","name":"burnAmounts","type":"uint256[]"},{"internalType":"uint256[]","name":"holdTokenIds","type":"uint256[]"},{"internalType":"uint256[]","name":"holdAmounts","type":"uint256[]"}],"name":"setMintRequirements","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60a0346200017057601f620015ab38819003918201601f19168301916001600160401b038311848410176200017557808492604094855283398101031262000170576200005a602062000052836200018b565b92016200018b565b906200006633620001a0565b6000546001600160a01b03929033908416036200012c5782811615620000d8576200009190620001a0565b166080526040516113c39081620001e88239608051818181610256015281816103a101528181610522015281816105b8015281816105fd0152818161069c01526108650152f35b60405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608490fd5b606460405162461bcd60e51b815260206004820152602060248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152fd5b600080fd5b634e487b7160e01b600052604160045260246000fd5b51906001600160a01b03821682036200017057565b600080546001600160a01b039283166001600160a01b03198216811783559216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a356fe6080604052600436101561001257600080fd5b6000803560e01c80632b62122b14610d1e57806346b89c5414610cec5780634d77e96b14610ca6578063523252b614610b1c578063715018a614610a9e5780638da5cb5b14610a6b578063bc197c8114610300578063e0bd74511461021a578063f23a6e61146101a65763f2fde38b1461008b57600080fd5b346101a35760206003193601126101a3576100a4610fd7565b6100ac61104b565b73ffffffffffffffffffffffffffffffffffffffff80911690811561011f57600054827fffffffffffffffffffffffff0000000000000000000000000000000000000000821617600055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a380f35b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152fd5b80fd5b50346101a35760a06003193601126101a3576101c0610fd7565b506101c9610ffa565b5060843567ffffffffffffffff8111610216576101ea90369060040161101d565b505060046040517f881e14df000000000000000000000000000000000000000000000000000000008152fd5b5080fd5b50346101a35760606003193601126101a35780610235610fd7565b61023d61104b565b73ffffffffffffffffffffffffffffffffffffffff90817f00000000000000000000000000000000000000000000000000000000000000001691823b156102fb5760a484928360405195869485937f731133e900000000000000000000000000000000000000000000000000000000855216600484015260243560248401526044356044840152608060648401528160848401525af180156102f0576102e05750f35b6102e990611115565b6101a35780f35b6040513d84823e3d90fd5b505050fd5b50346101a35760a06003193601126101a35761031a610fd7565b50610323610ffa565b60443567ffffffffffffffff811161070757610343903690600401610fa6565b9060643567ffffffffffffffff8111610a6757610364903690600401610fa6565b91909260843567ffffffffffffffff811161099a5761038790369060040161101d565b73ffffffffffffffffffffffffffffffffffffffff9791977f00000000000000000000000000000000000000000000000000000000000000001633036104695787602091810103126101a357838214801590610a5f575b610a3557863581526001602052604081209586546103fb81611312565b97610409604051998a611129565b8189528352602080842084918a015b838310610a0857505050508287510361046957815b87518110156104b657610440818961132a565b515161044d82868861125d565b3514801590610493575b6104695761046490611201565b61042d565b60046040517feabaac30000000000000000000000000000000000000000000000000000000008152fd5b5060206104a0828a61132a565b5101516104ae82888a61125d565b351415610457565b5095509593928435875260026020526040872080546104d481611312565b916104e26040519384611129565b81835289526020808a208a9184015b8383106109db57505050508051908161072d575b50509086929173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163b156107295761058c9461059e9160405196879586957f20ec271b0000000000000000000000000000000000000000000000000000000087526040600488015260448701916112d5565b916003198584030160248601526112d5565b03818373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af1801561071e5761070b575b5073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163b156107075773ffffffffffffffffffffffffffffffffffffffff604051927f731133e90000000000000000000000000000000000000000000000000000000084521660048301523560248201526001604482015260806064820152816084820152818160a4818373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af180156102f0576106f3575b60206040517fbc197c81000000000000000000000000000000000000000000000000000000008152f35b6106fd8291611115565b6101a357806106c9565b8280fd5b61071790939193611115565b91386105e5565b6040513d86823e3d90fd5b8380fd5b947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0610778610762849b95969a979994611312565b9a6107706040519c8d611129565b808c52611312565b013660208b0137610789865161133e565b96835b87518110156107dc576107d79073ffffffffffffffffffffffffffffffffffffffff88166107ba828e61132a565b526107c5818a61132a565b51516107d1828c61132a565b52611201565b61078c565b50919398969280969891936040519889917f4e1273f400000000000000000000000000000000000000000000000000000000835260448301604060048501528251809152602060648501930190855b8181106109a9575050508161084c9160031985809503016024850152610f0c565b038173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa96871561099e5786976108e1575b50855b88518110156108ce576108ab818961132a565b5160206108b8838c61132a565b51015111610469576108c990611201565b610898565b5094979396509194509290918638610505565b9096503d908187823e6108f48282611129565b602081838101031261099a5780519167ffffffffffffffff831161099657808201601f84840101121561099657828201519161092f83611312565b9361093d6040519586611129565b8385526020850192820160208560051b838501010111610992579190602083820101925b60208560051b8284010101841061097e5750505050509538610895565b602080809486518152019401939250610961565b8980fd5b8780fd5b8680fd5b6040513d88823e3d90fd5b825173ffffffffffffffffffffffffffffffffffffffff1685528c96508d95506020948501949092019160010161082b565b600260206001926040516109ee816110ca565b8554815284860154838201528152019201920191906104f1565b60026020600192604051610a1b816110ca565b855481528486015483820152815201920192019190610418565b60046040517f9d89020a000000000000000000000000000000000000000000000000000000008152fd5b5081156103de565b8480fd5b50346101a357806003193601126101a35773ffffffffffffffffffffffffffffffffffffffff6020915416604051908152f35b50346101a357806003193601126101a357610ab761104b565b8073ffffffffffffffffffffffffffffffffffffffff81547fffffffffffffffffffffffff000000000000000000000000000000000000000081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b50346101a35760a06003193601126101a35767ffffffffffffffff9060043560243583811161070757610b53903690600401610fa6565b9093604435818111610a6757610b6d903690600401610fa6565b909260643583811161099a57610b87903690600401610fa6565b91909360843590811161099657610ba2903690600401610fa6565b989095610bad61104b565b848314801590610c9c575b610a3557878952600191602095838752610bd460408c2061116a565b898b52600294858852610be960408d2061116a565b8a8c5b8d838210610c545796505050505050505b828110610c08578780f35b610c4f90878952828552610c4a8a60408b20610c3184610c29818a8d61125d565b35938c61125d565b3560405192610c3f846110ca565b83528883015261126d565b611201565b610bfd565b604081610c9594610c4a9352898d5220610c6f83868961125d565b3590610c7c84888b61125d565b3560405192610c8a846110ca565b83528d83015261126d565b8b90610bec565b5089841415610bb8565b50346101a357610cb536610f40565b919081526001602052604081209081548310156101a3576040610cd88484610f5b565b506001815491015482519182526020820152f35b50346101a357610cfb36610f40565b919081526002602052604081209081548310156101a3576040610cd88484610f5b565b50346101a357602090816003193601126101a3576004359081815260019283815260408220908154610d4f81611312565b92610d5d6040519485611129565b81845284528184208490878486015b85858510610ee157505050505050815193610d868561133e565b94610d908161133e565b93855b828110610eb65750505083526002948582526040842095865490610db682611312565b97610dc4604051998a611129565b8289528652838620869085808b015b858410610e8a5750505050505050845191610ded8361133e565b92610df78161133e565b945b818110610e5257610e2587610e4e88610e4089610e328a8a60405198899860808a5260808a0190610f0c565b9188830390890152610f0c565b908582036040870152610f0c565b908382036060850152610f0c565b0390f35b80610e60610e85928a61132a565b5151610e6c828861132a565b5284610e78828b61132a565b5101516107d1828961132a565b610df9565b86918591604051610e9a816110ca565b8554815284860154838201528152019201920191908690610dd3565b80610ec4610edc928461132a565b5151610ed0828b61132a565b5285610e78828561132a565b610d93565b600291604051610ef0816110ca565b8554815284860154838201528152019201920191908890610d6c565b90815180825260208080930193019160005b828110610f2c575050505090565b835185529381019392810192600101610f1e565b6003196040910112610f56576004359060243590565b600080fd5b8054821015610f775760005260206000209060011b0190600090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9181601f84011215610f565782359167ffffffffffffffff8311610f56576020808501948460051b010111610f5657565b6004359073ffffffffffffffffffffffffffffffffffffffff82168203610f5657565b6024359073ffffffffffffffffffffffffffffffffffffffff82168203610f5657565b9181601f84011215610f565782359167ffffffffffffffff8311610f565760208381860195010111610f5657565b73ffffffffffffffffffffffffffffffffffffffff60005416330361106c57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602060248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152fd5b6040810190811067ffffffffffffffff8211176110e657604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b67ffffffffffffffff81116110e657604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176110e657604052565b8054906000908181558261117d57505050565b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831683036111d45781526020812091600190811b8301925b8381106111c35750505050565b8083600292558383820155016111b6565b6024827f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461122e5760010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b9190811015610f775760051b0190565b8054680100000000000000008110156110e65761128f91600182018155610f5b565b9190916112a6576020816001925184550151910155565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b90918281527f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8311610f565760209260051b809284830137010190565b67ffffffffffffffff81116110e65760051b60200190565b8051821015610f775760209160051b010190565b9061134882611312565b6113556040519182611129565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06113838294611312565b019060203691013756fea2646970667358221220e05e72b0445495a783c20876929eb1e988a711cb23d87315ddd8b079c0852a7264736f6c6343000813003300000000000000000000000064d9f9d527abe2a1c1ce3fada98601c4ac5bfdd2000000000000000000000000d2efbb2f18bfe3d265b26d2ace83400a65335a07
Deployed Bytecode
0x6080604052600436101561001257600080fd5b6000803560e01c80632b62122b14610d1e57806346b89c5414610cec5780634d77e96b14610ca6578063523252b614610b1c578063715018a614610a9e5780638da5cb5b14610a6b578063bc197c8114610300578063e0bd74511461021a578063f23a6e61146101a65763f2fde38b1461008b57600080fd5b346101a35760206003193601126101a3576100a4610fd7565b6100ac61104b565b73ffffffffffffffffffffffffffffffffffffffff80911690811561011f57600054827fffffffffffffffffffffffff0000000000000000000000000000000000000000821617600055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a380f35b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152fd5b80fd5b50346101a35760a06003193601126101a3576101c0610fd7565b506101c9610ffa565b5060843567ffffffffffffffff8111610216576101ea90369060040161101d565b505060046040517f881e14df000000000000000000000000000000000000000000000000000000008152fd5b5080fd5b50346101a35760606003193601126101a35780610235610fd7565b61023d61104b565b73ffffffffffffffffffffffffffffffffffffffff90817f00000000000000000000000064d9f9d527abe2a1c1ce3fada98601c4ac5bfdd21691823b156102fb5760a484928360405195869485937f731133e900000000000000000000000000000000000000000000000000000000855216600484015260243560248401526044356044840152608060648401528160848401525af180156102f0576102e05750f35b6102e990611115565b6101a35780f35b6040513d84823e3d90fd5b505050fd5b50346101a35760a06003193601126101a35761031a610fd7565b50610323610ffa565b60443567ffffffffffffffff811161070757610343903690600401610fa6565b9060643567ffffffffffffffff8111610a6757610364903690600401610fa6565b91909260843567ffffffffffffffff811161099a5761038790369060040161101d565b73ffffffffffffffffffffffffffffffffffffffff9791977f00000000000000000000000064d9f9d527abe2a1c1ce3fada98601c4ac5bfdd21633036104695787602091810103126101a357838214801590610a5f575b610a3557863581526001602052604081209586546103fb81611312565b97610409604051998a611129565b8189528352602080842084918a015b838310610a0857505050508287510361046957815b87518110156104b657610440818961132a565b515161044d82868861125d565b3514801590610493575b6104695761046490611201565b61042d565b60046040517feabaac30000000000000000000000000000000000000000000000000000000008152fd5b5060206104a0828a61132a565b5101516104ae82888a61125d565b351415610457565b5095509593928435875260026020526040872080546104d481611312565b916104e26040519384611129565b81835289526020808a208a9184015b8383106109db57505050508051908161072d575b50509086929173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000064d9f9d527abe2a1c1ce3fada98601c4ac5bfdd2163b156107295761058c9461059e9160405196879586957f20ec271b0000000000000000000000000000000000000000000000000000000087526040600488015260448701916112d5565b916003198584030160248601526112d5565b03818373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000064d9f9d527abe2a1c1ce3fada98601c4ac5bfdd2165af1801561071e5761070b575b5073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000064d9f9d527abe2a1c1ce3fada98601c4ac5bfdd2163b156107075773ffffffffffffffffffffffffffffffffffffffff604051927f731133e90000000000000000000000000000000000000000000000000000000084521660048301523560248201526001604482015260806064820152816084820152818160a4818373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000064d9f9d527abe2a1c1ce3fada98601c4ac5bfdd2165af180156102f0576106f3575b60206040517fbc197c81000000000000000000000000000000000000000000000000000000008152f35b6106fd8291611115565b6101a357806106c9565b8280fd5b61071790939193611115565b91386105e5565b6040513d86823e3d90fd5b8380fd5b947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0610778610762849b95969a979994611312565b9a6107706040519c8d611129565b808c52611312565b013660208b0137610789865161133e565b96835b87518110156107dc576107d79073ffffffffffffffffffffffffffffffffffffffff88166107ba828e61132a565b526107c5818a61132a565b51516107d1828c61132a565b52611201565b61078c565b50919398969280969891936040519889917f4e1273f400000000000000000000000000000000000000000000000000000000835260448301604060048501528251809152602060648501930190855b8181106109a9575050508161084c9160031985809503016024850152610f0c565b038173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000064d9f9d527abe2a1c1ce3fada98601c4ac5bfdd2165afa96871561099e5786976108e1575b50855b88518110156108ce576108ab818961132a565b5160206108b8838c61132a565b51015111610469576108c990611201565b610898565b5094979396509194509290918638610505565b9096503d908187823e6108f48282611129565b602081838101031261099a5780519167ffffffffffffffff831161099657808201601f84840101121561099657828201519161092f83611312565b9361093d6040519586611129565b8385526020850192820160208560051b838501010111610992579190602083820101925b60208560051b8284010101841061097e5750505050509538610895565b602080809486518152019401939250610961565b8980fd5b8780fd5b8680fd5b6040513d88823e3d90fd5b825173ffffffffffffffffffffffffffffffffffffffff1685528c96508d95506020948501949092019160010161082b565b600260206001926040516109ee816110ca565b8554815284860154838201528152019201920191906104f1565b60026020600192604051610a1b816110ca565b855481528486015483820152815201920192019190610418565b60046040517f9d89020a000000000000000000000000000000000000000000000000000000008152fd5b5081156103de565b8480fd5b50346101a357806003193601126101a35773ffffffffffffffffffffffffffffffffffffffff6020915416604051908152f35b50346101a357806003193601126101a357610ab761104b565b8073ffffffffffffffffffffffffffffffffffffffff81547fffffffffffffffffffffffff000000000000000000000000000000000000000081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b50346101a35760a06003193601126101a35767ffffffffffffffff9060043560243583811161070757610b53903690600401610fa6565b9093604435818111610a6757610b6d903690600401610fa6565b909260643583811161099a57610b87903690600401610fa6565b91909360843590811161099657610ba2903690600401610fa6565b989095610bad61104b565b848314801590610c9c575b610a3557878952600191602095838752610bd460408c2061116a565b898b52600294858852610be960408d2061116a565b8a8c5b8d838210610c545796505050505050505b828110610c08578780f35b610c4f90878952828552610c4a8a60408b20610c3184610c29818a8d61125d565b35938c61125d565b3560405192610c3f846110ca565b83528883015261126d565b611201565b610bfd565b604081610c9594610c4a9352898d5220610c6f83868961125d565b3590610c7c84888b61125d565b3560405192610c8a846110ca565b83528d83015261126d565b8b90610bec565b5089841415610bb8565b50346101a357610cb536610f40565b919081526001602052604081209081548310156101a3576040610cd88484610f5b565b506001815491015482519182526020820152f35b50346101a357610cfb36610f40565b919081526002602052604081209081548310156101a3576040610cd88484610f5b565b50346101a357602090816003193601126101a3576004359081815260019283815260408220908154610d4f81611312565b92610d5d6040519485611129565b81845284528184208490878486015b85858510610ee157505050505050815193610d868561133e565b94610d908161133e565b93855b828110610eb65750505083526002948582526040842095865490610db682611312565b97610dc4604051998a611129565b8289528652838620869085808b015b858410610e8a5750505050505050845191610ded8361133e565b92610df78161133e565b945b818110610e5257610e2587610e4e88610e4089610e328a8a60405198899860808a5260808a0190610f0c565b9188830390890152610f0c565b908582036040870152610f0c565b908382036060850152610f0c565b0390f35b80610e60610e85928a61132a565b5151610e6c828861132a565b5284610e78828b61132a565b5101516107d1828961132a565b610df9565b86918591604051610e9a816110ca565b8554815284860154838201528152019201920191908690610dd3565b80610ec4610edc928461132a565b5151610ed0828b61132a565b5285610e78828561132a565b610d93565b600291604051610ef0816110ca565b8554815284860154838201528152019201920191908890610d6c565b90815180825260208080930193019160005b828110610f2c575050505090565b835185529381019392810192600101610f1e565b6003196040910112610f56576004359060243590565b600080fd5b8054821015610f775760005260206000209060011b0190600090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9181601f84011215610f565782359167ffffffffffffffff8311610f56576020808501948460051b010111610f5657565b6004359073ffffffffffffffffffffffffffffffffffffffff82168203610f5657565b6024359073ffffffffffffffffffffffffffffffffffffffff82168203610f5657565b9181601f84011215610f565782359167ffffffffffffffff8311610f565760208381860195010111610f5657565b73ffffffffffffffffffffffffffffffffffffffff60005416330361106c57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602060248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152fd5b6040810190811067ffffffffffffffff8211176110e657604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b67ffffffffffffffff81116110e657604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176110e657604052565b8054906000908181558261117d57505050565b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831683036111d45781526020812091600190811b8301925b8381106111c35750505050565b8083600292558383820155016111b6565b6024827f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461122e5760010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b9190811015610f775760051b0190565b8054680100000000000000008110156110e65761128f91600182018155610f5b565b9190916112a6576020816001925184550151910155565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b90918281527f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8311610f565760209260051b809284830137010190565b67ffffffffffffffff81116110e65760051b60200190565b8051821015610f775760209160051b010190565b9061134882611312565b6113556040519182611129565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06113838294611312565b019060203691013756fea2646970667358221220e05e72b0445495a783c20876929eb1e988a711cb23d87315ddd8b079c0852a7264736f6c63430008130033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000064d9f9d527abe2a1c1ce3fada98601c4ac5bfdd2000000000000000000000000d2efbb2f18bfe3d265b26d2ace83400a65335a07
-----Decoded View---------------
Arg [0] : items (address): 0x64D9f9d527abe2a1C1ce3FaDa98601C4aC5BfDd2
Arg [1] : owner_ (address): 0xD2eFbb2f18bfE3D265b26D2ACe83400A65335a07
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 00000000000000000000000064d9f9d527abe2a1c1ce3fada98601c4ac5bfdd2
Arg [1] : 000000000000000000000000d2efbb2f18bfe3d265b26d2ace83400a65335a07
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ 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.