Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 1,023 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Batch Transfer | 18491539 | 501 days ago | IN | 0 ETH | 0.00212402 | ||||
Batch Transfer | 18461496 | 505 days ago | IN | 0 ETH | 0.00105021 | ||||
Batch Transfer | 18180687 | 544 days ago | IN | 0 ETH | 0.00124137 | ||||
Batch Transfer | 18097709 | 556 days ago | IN | 0 ETH | 0.00099382 | ||||
Batch Transfer | 18097708 | 556 days ago | IN | 0 ETH | 0.00104538 | ||||
Batch Transfer | 18045940 | 563 days ago | IN | 0 ETH | 0.0012582 | ||||
Batch Transfer | 18045929 | 563 days ago | IN | 0 ETH | 0.00108584 | ||||
Batch Transfer | 17964276 | 575 days ago | IN | 0 ETH | 0.00267321 | ||||
Batch Transfer | 17904347 | 583 days ago | IN | 0 ETH | 0.00138484 | ||||
Batch Transfer | 17904346 | 583 days ago | IN | 0 ETH | 0.00124116 | ||||
Batch Transfer | 17895013 | 584 days ago | IN | 0 ETH | 0.00175965 | ||||
Batch Transfer | 17895012 | 584 days ago | IN | 0 ETH | 0.00199497 | ||||
Batch Transfer | 17885842 | 586 days ago | IN | 0 ETH | 0.00496267 | ||||
Batch Transfer | 17879511 | 587 days ago | IN | 0 ETH | 0.00216917 | ||||
Batch Transfer | 17879510 | 587 days ago | IN | 0 ETH | 0.00230484 | ||||
Batch Transfer | 17872448 | 588 days ago | IN | 0 ETH | 0.00315146 | ||||
Batch Transfer | 17872447 | 588 days ago | IN | 0 ETH | 0.00307669 | ||||
Batch Transfer | 17872438 | 588 days ago | IN | 0 ETH | 0.00269774 | ||||
Batch Transfer | 17872437 | 588 days ago | IN | 0 ETH | 0.00304336 | ||||
Batch Transfer | 17865341 | 589 days ago | IN | 0 ETH | 0.00292481 | ||||
Batch Transfer | 17865340 | 589 days ago | IN | 0 ETH | 0.00318816 | ||||
Batch Transfer | 17865325 | 589 days ago | IN | 0 ETH | 0.00319408 | ||||
Batch Transfer | 17865324 | 589 days ago | IN | 0 ETH | 0.0033986 | ||||
Batch Transfer | 17865088 | 589 days ago | IN | 0 ETH | 0.00323623 | ||||
Batch Transfer | 17844849 | 591 days ago | IN | 0 ETH | 0.0005928 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
BoredBoxBatchSender
Compiler Version
v0.8.11+commit.d7f03943
Optimization Enabled:
Yes with 10000 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT // vim: textwidth=119 pragma solidity 0.8.11; import { IERC721 } from "@openzeppelin/contracts/token/ERC721/IERC721.sol"; import { IERC721Receiver } from "@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol"; import { IERC721Metadata } from "@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol"; import { IERC1155 } from "@openzeppelin/contracts/token/ERC1155/IERC1155.sol"; import { IERC1155Receiver } from "@openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol"; import { ERC165Checker } from "@openzeppelin/contracts/utils/introspection/ERC165Checker.sol"; import { IBoredBoxBatchSender_Functions } from "./interfaces/IBoredBoxBatchSender.sol"; /// @title Contract for sending ERC721 and/or ERC1155 assets en masse /// @author S0AndS0 /// @custom:link https://boredbox.io/ contract BoredBoxBatchSender is IBoredBoxBatchSender_Functions { /// Mapping account to authorized state mapping(address => bool) public isAuthorized; /// Mapping `boxTokenId` to `contractAddress` _claimed state /// @dev See {IBoredBoxBatchSender_Functions-claimed} mapping(uint256 => mapping(address => uint256)) internal _claimed; /// @dev See {ERC165Checker-supportsInterface} ///> 0x80ac58cd bytes4 constant _ERC721_CONTRACT = type(IERC721).interfaceId; /// @dev See {ERC165Checker-supportsInterface} ///> 0xd9b67a26 bytes4 constant _ERC1155_CONTRACT = type(IERC1155).interfaceId; /// @dev See {IERC721Receiver-onERC721Received} /// /// ```javascript /// web3.eth.abi.encodeFunctionSignature('onERC721Received(address,address,uint256,bytes)') /// //> 0x150b7a02 /// ``` /// /// address operator /// address from /// uint256 tokenId /// bytes calldata data bytes4 constant _ERC721_RECEIVER = bytes4(keccak256("onERC721Received(address,address,uint256,bytes)")); /// @dev See {IERC1155Receiver-onERC1155Received} /// /// ```javascript /// web3.eth.abi.encodeFunctionSignature('onERC1155Received(address,address,uint256,uint256,bytes)') /// //> 0xf23a6e61 /// ``` /// /// address operator /// address from /// uint256 id /// uint256 value /// bytes calldata data bytes4 constant _ERC1155_RECEIVER = bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)")); /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ /* ↑ Storage ↑ */ /* ↓ Modifiers and constructor ↓ */ /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ modifier onlyAuthorized() { require(isAuthorized[msg.sender], "Not authorized"); _; } /// constructor(address owner) { isAuthorized[owner] = true; } /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ /* ↑ Modifiers and constructor ↑ */ /* ↓ off-chain external ↓ */ /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ /// @dev See {IBoredBoxBatchSender_Functions-batchTransfer} function batchTransfer( address tokenContract, uint256[] calldata boxes, uint256[] calldata tokenIds, address[] calldata recipients ) external payable onlyAuthorized { uint256 boxes_length = boxes.length; require(boxes_length > 0, "Insufficient boxes provided"); require( boxes_length == tokenIds.length && boxes_length == recipients.length, "Length missmatch between; boxes, tokenIds, and/or recipients" ); if (ERC165Checker.supportsInterface(tokenContract, _ERC721_CONTRACT)) { uint256 box; uint256 tokenId; for (uint256 i; i < boxes_length; ) { box = boxes[i]; if (_claimed[box][tokenContract] == 0) { tokenId = tokenIds[i]; IERC721(tokenContract).transferFrom(msg.sender, recipients[i], tokenId); _claimed[box][tokenContract] = ++tokenId; } unchecked { ++i; } } } else if (ERC165Checker.supportsInterface(tokenContract, _ERC1155_CONTRACT)) { uint256 box; uint256 tokenId; for (uint256 i; i < boxes_length; ) { box = boxes[i]; if (_claimed[box][tokenContract] == 0) { tokenId = tokenIds[i]; IERC1155(tokenContract).safeTransferFrom(msg.sender, recipients[i], tokenId, 1, ""); _claimed[box][tokenContract] = ++tokenId; } unchecked { ++i; } } } else { revert("Failed to recognize tokenContract"); } } /// function setAuthorized(address key, bool value) external payable onlyAuthorized { isAuthorized[key] = value; } /// @dev See {IBoredBoxBatchSender_Functions-withdraw} function withdraw(address payable to, uint256 amount) external payable onlyAuthorized { (bool success, ) = to.call{ value: amount }(""); require(success, "Transfer failed"); } /// @dev See {IBoredBoxBatchSender_Functions-canRecieve} function canReceive(address to) external pure returns (uint256) { uint256 result; if (IERC721Receiver(to).onERC721Received.selector == _ERC721_RECEIVER) { result += 1; } if (IERC1155Receiver(to).onERC1155Received.selector == _ERC1155_RECEIVER) { result += 2; } return result; } /// @dev See {IBoredBoxBatchSender_Functions-claimed} function claimed(uint256 box, address tokenContract) external view returns (uint256) { uint256 tokenId = _claimed[box][tokenContract]; require(tokenId > 0, "Not claimed"); return --tokenId; } }
// SPDX-License-Identifier: MIT // vim: textwidth=119 pragma solidity 0.8.11; /// interface IBoredBoxBatchSender_Functions { /// Transfer many tokens from contract to many recipients /// @param tokenContract Address to smart contract with tokens /// @param boxes Array of BoredBoxNFT token IDs /// @param tokenIds Array of numbers for token IDs to transfer from `tokenContracts` /// @param recipients Array of addresses to receive `tokenIds` assets /// @custom:throw "Not authorized" /// @custom:throw "Insufficient boxes provided" /// @custom:throw "Length missmatch between; boxes, tokenIds, and/or recipients" /// @custom:throw "Failed to recognize tokenContract" function batchTransfer( address tokenContract, uint256[] calldata boxes, uint256[] calldata tokenIds, address[] calldata recipients ) external payable; /// @param key Address to set `value` within `isAuthorized` mapping /// @param value Boolean state to set for given `key` within `isAuthorized` mapping /// @custom:throw "Not authorized" function setAuthorized(address key, bool value) external payable; /// Send amount of Ether from `this.balance` to some address /// @custom:throw "Not authorized" /// @custom:throw "Transfer failed" function withdraw(address payable to, uint256 amount) external payable; /// @param to Address to check for ERC721Receiver and onERC1155Receiver compatibility /// @return what receiver(s) are implemented for `to` address /// - `0` if not compatible /// - `1` if compatible with ERC721Receiver only /// - `2` if compatible with ERC1155Receiver only /// - `3` if compatible with both ERC721Receiver and ERC1155Receiver function canReceive(address to) external view returns (uint256); /// @param box BoredBoxNFT Token ID /// @param tokenContract Address to ERC{721,1155} contract /// @custom:throw "Not claimed" function claimed(uint256 box, address tokenContract) external view returns (uint256); } /// interface IBoredBoxBatchSender_Variables { /// @param account Address to check if authorized /// @return authorized Boolean authorization status function isAuthorized(address account) external view returns (bool authorized); } /* For external callers */ interface IBoredBoxBatchSender is IBoredBoxBatchSender_Variables, IBoredBoxBatchSender_Functions { }
// 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 IERC165 { /** * @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); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Checker.sol) pragma solidity ^0.8.0; import "./IERC165.sol"; /** * @dev Library used to query support of an interface declared via {IERC165}. * * Note that these functions return the actual result of the query: they do not * `revert` if an interface is not supported. It is up to the caller to decide * what to do in these cases. */ library ERC165Checker { // As per the EIP-165 spec, no interface should ever match 0xffffffff bytes4 private constant _INTERFACE_ID_INVALID = 0xffffffff; /** * @dev Returns true if `account` supports the {IERC165} interface, */ function supportsERC165(address account) internal view returns (bool) { // Any contract that implements ERC165 must explicitly indicate support of // InterfaceId_ERC165 and explicitly indicate non-support of InterfaceId_Invalid return _supportsERC165Interface(account, type(IERC165).interfaceId) && !_supportsERC165Interface(account, _INTERFACE_ID_INVALID); } /** * @dev Returns true if `account` supports the interface defined by * `interfaceId`. Support for {IERC165} itself is queried automatically. * * See {IERC165-supportsInterface}. */ function supportsInterface(address account, bytes4 interfaceId) internal view returns (bool) { // query support of both ERC165 as per the spec and support of _interfaceId return supportsERC165(account) && _supportsERC165Interface(account, interfaceId); } /** * @dev Returns a boolean array where each value corresponds to the * interfaces passed in and whether they're supported or not. This allows * you to batch check interfaces for a contract where your expectation * is that some interfaces may not be supported. * * See {IERC165-supportsInterface}. * * _Available since v3.4._ */ function getSupportedInterfaces(address account, bytes4[] memory interfaceIds) internal view returns (bool[] memory) { // an array of booleans corresponding to interfaceIds and whether they're supported or not bool[] memory interfaceIdsSupported = new bool[](interfaceIds.length); // query support of ERC165 itself if (supportsERC165(account)) { // query support of each interface in interfaceIds for (uint256 i = 0; i < interfaceIds.length; i++) { interfaceIdsSupported[i] = _supportsERC165Interface(account, interfaceIds[i]); } } return interfaceIdsSupported; } /** * @dev Returns true if `account` supports all the interfaces defined in * `interfaceIds`. Support for {IERC165} itself is queried automatically. * * Batch-querying can lead to gas savings by skipping repeated checks for * {IERC165} support. * * See {IERC165-supportsInterface}. */ function supportsAllInterfaces(address account, bytes4[] memory interfaceIds) internal view returns (bool) { // query support of ERC165 itself if (!supportsERC165(account)) { return false; } // query support of each interface in _interfaceIds for (uint256 i = 0; i < interfaceIds.length; i++) { if (!_supportsERC165Interface(account, interfaceIds[i])) { return false; } } // all interfaces supported return true; } /** * @notice Query if a contract implements an interface, does not check ERC165 support * @param account The address of the contract to query for support of an interface * @param interfaceId The interface identifier, as specified in ERC-165 * @return true if the contract at account indicates support of the interface with * identifier interfaceId, false otherwise * @dev Assumes that account contains a contract that supports ERC165, otherwise * the behavior of this method is undefined. This precondition can be checked * with {supportsERC165}. * Interface identification is specified in ERC-165. */ function _supportsERC165Interface(address account, bytes4 interfaceId) private view returns (bool) { bytes memory encodedParams = abi.encodeWithSelector(IERC165.supportsInterface.selector, interfaceId); (bool success, bytes memory result) = account.staticcall{gas: 30000}(encodedParams); if (result.length < 32) return false; return success && abi.decode(result, (bool)); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; import "../IERC721.sol"; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; import "../../utils/introspection/IERC165.sol"; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC1155/IERC1155Receiver.sol) pragma solidity ^0.8.0; import "../../utils/introspection/IERC165.sol"; /** * @dev _Available since v3.1._ */ interface IERC1155Receiver is IERC165 { /** * @dev Handles the receipt of a single ERC1155 token type. This function is * called at the end of a `safeTransferFrom` after the balance has been updated. * * NOTE: To accept the transfer, this must return * `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` * (i.e. 0xf23a6e61, or its own function selector). * * @param operator The address which initiated the transfer (i.e. msg.sender) * @param from The address which previously owned the token * @param id The ID of the token being transferred * @param value The amount of tokens being transferred * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed */ function onERC1155Received( address operator, address from, uint256 id, uint256 value, bytes calldata data ) external returns (bytes4); /** * @dev Handles the receipt of a multiple ERC1155 token types. This function * is called at the end of a `safeBatchTransferFrom` after the balances have * been updated. * * NOTE: To accept the transfer(s), this must return * `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` * (i.e. 0xbc197c81, or its own function selector). * * @param operator The address which initiated the batch transfer (i.e. msg.sender) * @param from The address which previously owned the token * @param ids An array containing ids of each token being transferred (order and length must match values array) * @param values An array containing amounts of each token being transferred (order and length must match ids array) * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed */ function onERC1155BatchReceived( address operator, address from, uint256[] calldata ids, uint256[] calldata values, bytes calldata data ) external returns (bytes4); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC1155/IERC1155.sol) pragma solidity ^0.8.0; import "../../utils/introspection/IERC165.sol"; /** * @dev Required interface of an ERC1155 compliant contract, as defined in the * https://eips.ethereum.org/EIPS/eip-1155[EIP]. * * _Available since v3.1._ */ interface IERC1155 is IERC165 { /** * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`. */ event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value); /** * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all * transfers. */ event TransferBatch( address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values ); /** * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to * `approved`. */ event ApprovalForAll(address indexed account, address indexed operator, bool approved); /** * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI. * * If an {URI} event was emitted for `id`, the standard * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value * returned by {IERC1155MetadataURI-uri}. */ event URI(string value, uint256 indexed id); /** * @dev Returns the amount of tokens of token type `id` owned by `account`. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) external view returns (uint256); /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory); /** * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`, * * Emits an {ApprovalForAll} event. * * Requirements: * * - `operator` cannot be the caller. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns true if `operator` is approved to transfer ``account``'s tokens. * * See {setApprovalForAll}. */ function isApprovedForAll(address account, address operator) external view returns (bool); /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes calldata data ) external; /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function safeBatchTransferFrom( address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data ) external; }
{ "remappings": [], "optimizer": { "enabled": true, "runs": 10000 }, "evmVersion": "london", "libraries": {}, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"tokenContract","type":"address"},{"internalType":"uint256[]","name":"boxes","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"},{"internalType":"address[]","name":"recipients","type":"address[]"}],"name":"batchTransfer","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"canReceive","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"box","type":"uint256"},{"internalType":"address","name":"tokenContract","type":"address"}],"name":"claimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isAuthorized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"key","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAuthorized","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address payable","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b50604051610fec380380610fec83398101604081905261002f91610056565b6001600160a01b03166000908152602081905260409020805460ff19166001179055610086565b60006020828403121561006857600080fd5b81516001600160a01b038116811461007f57600080fd5b9392505050565b610f57806100956000396000f3fe6080604052600436106100655760003560e01c806390d370ba1161004357806390d370ba146100c5578063f3fef3a3146100e5578063fe9fbb80146100f857600080fd5b8063120aa8771461006a5780632e324dcf1461009d578063711bf9b2146100b2575b600080fd5b34801561007657600080fd5b5061008a610085366004610c37565b610138565b6040519081526020015b60405180910390f35b6100b06100ab366004610cb3565b6101e7565b005b6100b06100c0366004610d6e565b61081d565b3480156100d157600080fd5b5061008a6100e0366004610d9c565b6108ec565b6100b06100f3366004610db9565b61090e565b34801561010457600080fd5b50610128610113366004610d9c565b60006020819052908152604090205460ff1681565b6040519015158152602001610094565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff85168452909152812054806101d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f4e6f7420636c61696d656400000000000000000000000000000000000000000060448201526064015b60405180910390fd5b6101dd81610e14565b9150505b92915050565b3360009081526020819052604090205460ff16610260576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4e6f7420617574686f72697a656400000000000000000000000000000000000060448201526064016101cb565b84806102c8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f496e73756666696369656e7420626f7865732070726f7669646564000000000060448201526064016101cb565b80841480156102d657508082145b610362576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603c60248201527f4c656e677468206d6973736d61746368206265747765656e3b20626f7865732c60448201527f20746f6b656e4964732c20616e642f6f7220726563697069656e74730000000060648201526084016101cb565b61038c887f80ac58cd00000000000000000000000000000000000000000000000000000000610a56565b156105705760008060005b83811015610568578989828181106103b1576103b1610e49565b9050602002013592506001600084815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600014156105605787878281811061042557610425610e49565b9050602002013591508a73ffffffffffffffffffffffffffffffffffffffff166323b872dd3388888581811061045d5761045d610e49565b90506020020160208101906104729190610d9c565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff92831660048201529116602482015260448101859052606401600060405180830381600087803b1580156104e657600080fd5b505af11580156104fa573d6000803e3d6000fd5b505050508161050890610e78565b9150816001600085815260200190815260200160002060008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600101610397565b505050610813565b61059a887fd9b67a2600000000000000000000000000000000000000000000000000000000610a56565b1561078b5760008060005b83811015610568578989828181106105bf576105bf610e49565b9050602002013592506001600084815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600014156107835787878281811061063357610633610e49565b9050602002013591508a73ffffffffffffffffffffffffffffffffffffffff1663f242432a3388888581811061066b5761066b610e49565b90506020020160208101906106809190610d9c565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604481018590526001606482015260a06084820152600060a482015260c401600060405180830381600087803b15801561070957600080fd5b505af115801561071d573d6000803e3d6000fd5b505050508161072b90610e78565b9150816001600085815260200190815260200160002060008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001016105a5565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4661696c656420746f207265636f676e697a6520746f6b656e436f6e7472616360448201527f740000000000000000000000000000000000000000000000000000000000000060648201526084016101cb565b5050505050505050565b3360009081526020819052604090205460ff16610896576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4e6f7420617574686f72697a656400000000000000000000000000000000000060448201526064016101cb565b73ffffffffffffffffffffffffffffffffffffffff91909116600090815260208190526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b6000806108fa600182610eb1565b9050610907600282610eb1565b9392505050565b3360009081526020819052604090205460ff16610987576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4e6f7420617574686f72697a656400000000000000000000000000000000000060448201526064016101cb565b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d80600081146109e1576040519150601f19603f3d011682016040523d82523d6000602084013e6109e6565b606091505b5050905080610a51576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f5472616e73666572206661696c6564000000000000000000000000000000000060448201526064016101cb565b505050565b6000610a6183610a72565b801561090757506109078383610ad6565b6000610a9e827f01ffc9a700000000000000000000000000000000000000000000000000000000610ad6565b80156101e15750610acf827fffffffff00000000000000000000000000000000000000000000000000000000610ad6565b1592915050565b604080517fffffffff00000000000000000000000000000000000000000000000000000000831660248083019190915282518083039091018152604490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a7000000000000000000000000000000000000000000000000000000001790529051600091908290819073ffffffffffffffffffffffffffffffffffffffff87169061753090610b90908690610ec9565b6000604051808303818686fa925050503d8060008114610bcc576040519150601f19603f3d011682016040523d82523d6000602084013e610bd1565b606091505b5091509150602081511015610bec57600093505050506101e1565b818015610c08575080806020019051810190610c089190610f04565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff81168114610c3457600080fd5b50565b60008060408385031215610c4a57600080fd5b823591506020830135610c5c81610c12565b809150509250929050565b60008083601f840112610c7957600080fd5b50813567ffffffffffffffff811115610c9157600080fd5b6020830191508360208260051b8501011115610cac57600080fd5b9250929050565b60008060008060008060006080888a031215610cce57600080fd5b8735610cd981610c12565b9650602088013567ffffffffffffffff80821115610cf657600080fd5b610d028b838c01610c67565b909850965060408a0135915080821115610d1b57600080fd5b610d278b838c01610c67565b909650945060608a0135915080821115610d4057600080fd5b50610d4d8a828b01610c67565b989b979a50959850939692959293505050565b8015158114610c3457600080fd5b60008060408385031215610d8157600080fd5b8235610d8c81610c12565b91506020830135610c5c81610d60565b600060208284031215610dae57600080fd5b813561090781610c12565b60008060408385031215610dcc57600080fd5b8235610dd781610c12565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600081610e2357610e23610de5565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415610eaa57610eaa610de5565b5060010190565b60008219821115610ec457610ec4610de5565b500190565b6000825160005b81811015610eea5760208186018101518583015201610ed0565b81811115610ef9576000828501525b509190910192915050565b600060208284031215610f1657600080fd5b815161090781610d6056fea264697066735822122098172db9bdce6c98359e10bf282b6bd74e0e4cc76e5c3d9040e4e8bcb9b6481a64736f6c634300080b0033000000000000000000000000935a6162f6830ed6b67715194a2702c5b4f8d115
Deployed Bytecode
0x6080604052600436106100655760003560e01c806390d370ba1161004357806390d370ba146100c5578063f3fef3a3146100e5578063fe9fbb80146100f857600080fd5b8063120aa8771461006a5780632e324dcf1461009d578063711bf9b2146100b2575b600080fd5b34801561007657600080fd5b5061008a610085366004610c37565b610138565b6040519081526020015b60405180910390f35b6100b06100ab366004610cb3565b6101e7565b005b6100b06100c0366004610d6e565b61081d565b3480156100d157600080fd5b5061008a6100e0366004610d9c565b6108ec565b6100b06100f3366004610db9565b61090e565b34801561010457600080fd5b50610128610113366004610d9c565b60006020819052908152604090205460ff1681565b6040519015158152602001610094565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff85168452909152812054806101d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f4e6f7420636c61696d656400000000000000000000000000000000000000000060448201526064015b60405180910390fd5b6101dd81610e14565b9150505b92915050565b3360009081526020819052604090205460ff16610260576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4e6f7420617574686f72697a656400000000000000000000000000000000000060448201526064016101cb565b84806102c8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f496e73756666696369656e7420626f7865732070726f7669646564000000000060448201526064016101cb565b80841480156102d657508082145b610362576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603c60248201527f4c656e677468206d6973736d61746368206265747765656e3b20626f7865732c60448201527f20746f6b656e4964732c20616e642f6f7220726563697069656e74730000000060648201526084016101cb565b61038c887f80ac58cd00000000000000000000000000000000000000000000000000000000610a56565b156105705760008060005b83811015610568578989828181106103b1576103b1610e49565b9050602002013592506001600084815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600014156105605787878281811061042557610425610e49565b9050602002013591508a73ffffffffffffffffffffffffffffffffffffffff166323b872dd3388888581811061045d5761045d610e49565b90506020020160208101906104729190610d9c565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff92831660048201529116602482015260448101859052606401600060405180830381600087803b1580156104e657600080fd5b505af11580156104fa573d6000803e3d6000fd5b505050508161050890610e78565b9150816001600085815260200190815260200160002060008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600101610397565b505050610813565b61059a887fd9b67a2600000000000000000000000000000000000000000000000000000000610a56565b1561078b5760008060005b83811015610568578989828181106105bf576105bf610e49565b9050602002013592506001600084815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600014156107835787878281811061063357610633610e49565b9050602002013591508a73ffffffffffffffffffffffffffffffffffffffff1663f242432a3388888581811061066b5761066b610e49565b90506020020160208101906106809190610d9c565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604481018590526001606482015260a06084820152600060a482015260c401600060405180830381600087803b15801561070957600080fd5b505af115801561071d573d6000803e3d6000fd5b505050508161072b90610e78565b9150816001600085815260200190815260200160002060008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001016105a5565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4661696c656420746f207265636f676e697a6520746f6b656e436f6e7472616360448201527f740000000000000000000000000000000000000000000000000000000000000060648201526084016101cb565b5050505050505050565b3360009081526020819052604090205460ff16610896576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4e6f7420617574686f72697a656400000000000000000000000000000000000060448201526064016101cb565b73ffffffffffffffffffffffffffffffffffffffff91909116600090815260208190526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b6000806108fa600182610eb1565b9050610907600282610eb1565b9392505050565b3360009081526020819052604090205460ff16610987576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4e6f7420617574686f72697a656400000000000000000000000000000000000060448201526064016101cb565b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d80600081146109e1576040519150601f19603f3d011682016040523d82523d6000602084013e6109e6565b606091505b5050905080610a51576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f5472616e73666572206661696c6564000000000000000000000000000000000060448201526064016101cb565b505050565b6000610a6183610a72565b801561090757506109078383610ad6565b6000610a9e827f01ffc9a700000000000000000000000000000000000000000000000000000000610ad6565b80156101e15750610acf827fffffffff00000000000000000000000000000000000000000000000000000000610ad6565b1592915050565b604080517fffffffff00000000000000000000000000000000000000000000000000000000831660248083019190915282518083039091018152604490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a7000000000000000000000000000000000000000000000000000000001790529051600091908290819073ffffffffffffffffffffffffffffffffffffffff87169061753090610b90908690610ec9565b6000604051808303818686fa925050503d8060008114610bcc576040519150601f19603f3d011682016040523d82523d6000602084013e610bd1565b606091505b5091509150602081511015610bec57600093505050506101e1565b818015610c08575080806020019051810190610c089190610f04565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff81168114610c3457600080fd5b50565b60008060408385031215610c4a57600080fd5b823591506020830135610c5c81610c12565b809150509250929050565b60008083601f840112610c7957600080fd5b50813567ffffffffffffffff811115610c9157600080fd5b6020830191508360208260051b8501011115610cac57600080fd5b9250929050565b60008060008060008060006080888a031215610cce57600080fd5b8735610cd981610c12565b9650602088013567ffffffffffffffff80821115610cf657600080fd5b610d028b838c01610c67565b909850965060408a0135915080821115610d1b57600080fd5b610d278b838c01610c67565b909650945060608a0135915080821115610d4057600080fd5b50610d4d8a828b01610c67565b989b979a50959850939692959293505050565b8015158114610c3457600080fd5b60008060408385031215610d8157600080fd5b8235610d8c81610c12565b91506020830135610c5c81610d60565b600060208284031215610dae57600080fd5b813561090781610c12565b60008060408385031215610dcc57600080fd5b8235610dd781610c12565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600081610e2357610e23610de5565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415610eaa57610eaa610de5565b5060010190565b60008219821115610ec457610ec4610de5565b500190565b6000825160005b81811015610eea5760208186018101518583015201610ed0565b81811115610ef9576000828501525b509190910192915050565b600060208284031215610f1657600080fd5b815161090781610d6056fea264697066735822122098172db9bdce6c98359e10bf282b6bd74e0e4cc76e5c3d9040e4e8bcb9b6481a64736f6c634300080b0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000935a6162f6830ed6b67715194a2702c5b4f8d115
-----Decoded View---------------
Arg [0] : owner (address): 0x935A6162F6830ED6b67715194a2702C5b4F8D115
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000935a6162f6830ed6b67715194a2702c5b4f8d115
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 35 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ 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.