Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
NFTBatchTransfer
Compiler Version
v0.8.19+commit.7dd6d404
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-09-20 */ // SPDX-License-Identifier: MIT pragma solidity 0.8.19; // OpenZeppelin Contracts (last updated v4.9.0) (token/ERC721/IERC721.sol) // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) /** * @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); } /** * @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 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: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC721 * or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must * understand this adds an external call which potentially creates a reentrancy vulnerability. * * 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); } /** * @title ICryptoPunksMarket * @author Unlockd * @notice Defines the basic interface to interact with PunksMarket. **/ interface ICryptoPunksMarket { function punkIndexToAddress(uint256 index) external view returns (address); } /** * @title NFTBatchTransfer * @dev This is a public contract in order to allow batch transfers of NFTs, * in a single transaction, reducing gas costs and improving efficiency. * It is designed to work with standard ERC721 contracts, as well as the CryptoPunks contract. * No events, use the ones from the ERC721 contract */ contract NFTBatchTransfer { /*////////////////////////////////////////////////////////////// ERRORS //////////////////////////////////////////////////////////////*/ error TransferFromFailed(); error BuyFailed(); error TransferFailed(); error NotOwner(); error CantReceiveETH(); error Fallback(); /*////////////////////////////////////////////////////////////// IMMUTABLES //////////////////////////////////////////////////////////////*/ // Immutable address for the CryptoPunks contract. This is set at deployment and cannot be altered afterwards. address public immutable punkContract; /*////////////////////////////////////////////////////////////// STRUCTS //////////////////////////////////////////////////////////////*/ // Struct to encapsulate information about an individual NFT transfer. // It holds the address of the ERC721 contract and the specific token ID to be transferred. struct NftTransfer { address contractAddress; uint256 tokenId; } /*////////////////////////////////////////////////////////////// INITIALIZATION //////////////////////////////////////////////////////////////*/ /** * @dev Constructor to set the initial state of the contract. * @param _punkContract The address of the CryptoPunks contract. */ constructor(address _punkContract) { punkContract = _punkContract; } /*////////////////////////////////////////////////////////////// Fallback and Receive Functions //////////////////////////////////////////////////////////////*/ // Explicitly reject any Ether sent to the contract fallback() external payable { revert Fallback(); } // Explicitly reject any Ether transfered to the contract receive() external payable { revert CantReceiveETH(); } /*////////////////////////////////////////////////////////////// LOGIC //////////////////////////////////////////////////////////////*/ /** * @dev Orchestrates a batch transfer of standard ERC721 NFTs. * @param nftTransfers An array of NftTransfer structs detailing the NFTs to be moved. * @param to The recipient's address. */ function batchTransferFrom( NftTransfer[] calldata nftTransfers, address to ) external payable { uint256 length = nftTransfers.length; // Iterate through each NFT in the array to facilitate the transfer. for (uint i = 0; i < length;) { address contractAddress = nftTransfers[i].contractAddress; uint256 tokenId = nftTransfers[i].tokenId; // Dynamically call the `transferFrom` function on the target ERC721 contract. (bool success, ) = contractAddress.call( abi.encodeWithSignature( "transferFrom(address,address,uint256)", msg.sender, to, tokenId ) ); // Check the transfer status. if (!success) { revert TransferFromFailed(); } // Use unchecked block to bypass overflow checks for efficiency. unchecked { i++; } } } /** * @dev Manages a batch transfer of NFTs, that allow the use of * CryptoPunks alongside other standard ERC721 NFTs. * @param nftTransfers An array of NftTransfer structs specifying the NFTs for transfer. * @param to The destination address for the NFTs. */ function batchPunkTransferFrom( NftTransfer[] calldata nftTransfers, address to ) external payable { uint256 length = nftTransfers.length; bool success; // Process batch transfers, differentiate between CryptoPunks and standard ERC721 tokens. for (uint i = 0; i < length;) { address contractAddr = nftTransfers[i].contractAddress; uint256 tokenId = nftTransfers[i].tokenId; // Check if the NFT is a CryptoPunk. if (contractAddr != punkContract) { // If it's not a CryptoPunk, use the standard ERC721 `transferFrom` function. (success, ) = contractAddr.call( abi.encodeWithSignature( "transferFrom(address,address,uint256)", msg.sender, to, tokenId ) ); } // If it's a CryptoPunk, use the CryptoPunksMarket contract to transfer the punk. else { // Verify OwnerShip if(ICryptoPunksMarket(punkContract).punkIndexToAddress(tokenId) != msg.sender) revert NotOwner(); // If it's a CryptoPunk, first the contract buy the punk to be allowed to transfer it. (success, ) = punkContract.call{value: 0}( abi.encodeWithSignature("buyPunk(uint256)", tokenId) ); // Check the buyPunk status if (!success) { revert BuyFailed(); } // Once the punk is owned by the contract, the transfer method is executed (success, ) = punkContract.call( abi.encodeWithSignature( "transferPunk(address,uint256)", to, tokenId ) ); // Check the transfer status. if (!success) { revert TransferFailed(); } } // Use unchecked block to bypass overflow checks for efficiency. unchecked { i++; } } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_punkContract","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"BuyFailed","type":"error"},{"inputs":[],"name":"CantReceiveETH","type":"error"},{"inputs":[],"name":"Fallback","type":"error"},{"inputs":[],"name":"NotOwner","type":"error"},{"inputs":[],"name":"TransferFailed","type":"error"},{"inputs":[],"name":"TransferFromFailed","type":"error"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"components":[{"internalType":"address","name":"contractAddress","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"internalType":"struct NFTBatchTransfer.NftTransfer[]","name":"nftTransfers","type":"tuple[]"},{"internalType":"address","name":"to","type":"address"}],"name":"batchPunkTransferFrom","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"contractAddress","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"internalType":"struct NFTBatchTransfer.NftTransfer[]","name":"nftTransfers","type":"tuple[]"},{"internalType":"address","name":"to","type":"address"}],"name":"batchTransferFrom","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"punkContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60a060405234801561001057600080fd5b506040516107cb3803806107cb83398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b6080516107256100a66000396000818160a901528181610273015281816103720152818161040601526104fa01526107256000f3fe6080604052600436106100385760003560e01c80631f58128e1461006f578063862f3c5c14610084578063f97e48ee1461009757610056565b366100565760405163abdfd30160e01b815260040160405180910390fd5b6040516314ad190f60e21b815260040160405180910390fd5b61008261007d3660046105e3565b6100e7565b005b6100826100923660046105e3565b610218565b3480156100a357600080fd5b506100cb7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200160405180910390f35b8160005b8181101561021157600085858381811061010757610107610669565b61011d926020604090920201908101915061067f565b9050600086868481811061013357610133610669565b604080513360248201526001600160a01b038a81166044830152602092909302949094010135606484018190529350600092908516915060840160408051601f198184030181529181526020820180516001600160e01b03166323b872dd60e01b179052516101a291906106a3565b6000604051808303816000865af19150503d80600081146101df576040519150601f19603f3d011682016040523d82523d6000602084013e6101e4565b606091505b505090508061020657604051631e4e7d0960e21b815260040160405180910390fd5b5050506001016100eb565b5050505050565b816000805b828110156105c357600086868381811061023957610239610669565b61024f926020604090920201908101915061067f565b9050600087878481811061026557610265610669565b9050604002016020013590507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614610352576040513360248201526001600160a01b0387811660448301526064820183905283169060840160408051601f198184030181529181526020820180516001600160e01b03166323b872dd60e01b1790525161030591906106a3565b6000604051808303816000865af19150503d8060008114610342576040519150601f19603f3d011682016040523d82523d6000602084013e610347565b606091505b5050809450506105b9565b604051630b02f02d60e31b81526004810182905233906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635817816890602401602060405180830381865afa1580156103b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103dd91906106d2565b6001600160a01b031614610404576040516330cd747160e01b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031660008260405160240161044391815260200190565b60408051601f198184030181529181526020820180516001600160e01b031663104c9fd360e31b1790525161047891906106a3565b60006040518083038185875af1925050503d80600081146104b5576040519150601f19603f3d011682016040523d82523d6000602084013e6104ba565b606091505b505080945050836104de5760405163632a71e160e11b815260040160405180910390fd5b6040516001600160a01b038781166024830152604482018390527f0000000000000000000000000000000000000000000000000000000000000000169060640160408051601f198184030181529181526020820180516001600160e01b03166322dca8bb60e21b1790525161055391906106a3565b6000604051808303816000865af19150503d8060008114610590576040519150601f19603f3d011682016040523d82523d6000602084013e610595565b606091505b505080945050836105b9576040516312171d8360e31b815260040160405180910390fd5b505060010161021d565b505050505050565b6001600160a01b03811681146105e057600080fd5b50565b6000806000604084860312156105f857600080fd5b833567ffffffffffffffff8082111561061057600080fd5b818601915086601f83011261062457600080fd5b81358181111561063357600080fd5b8760208260061b850101111561064857600080fd5b6020928301955093505084013561065e816105cb565b809150509250925092565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561069157600080fd5b813561069c816105cb565b9392505050565b6000825160005b818110156106c457602081860181015185830152016106aa565b506000920191825250919050565b6000602082840312156106e457600080fd5b815161069c816105cb56fea264697066735822122053851de2876355d5f677ee1b533a1a45029c9c696babd22c335977ba031b1ae564736f6c63430008130033000000000000000000000000b47e3cd837ddf8e4c57f05d70ab865de6e193bbb
Deployed Bytecode
0x6080604052600436106100385760003560e01c80631f58128e1461006f578063862f3c5c14610084578063f97e48ee1461009757610056565b366100565760405163abdfd30160e01b815260040160405180910390fd5b6040516314ad190f60e21b815260040160405180910390fd5b61008261007d3660046105e3565b6100e7565b005b6100826100923660046105e3565b610218565b3480156100a357600080fd5b506100cb7f000000000000000000000000b47e3cd837ddf8e4c57f05d70ab865de6e193bbb81565b6040516001600160a01b03909116815260200160405180910390f35b8160005b8181101561021157600085858381811061010757610107610669565b61011d926020604090920201908101915061067f565b9050600086868481811061013357610133610669565b604080513360248201526001600160a01b038a81166044830152602092909302949094010135606484018190529350600092908516915060840160408051601f198184030181529181526020820180516001600160e01b03166323b872dd60e01b179052516101a291906106a3565b6000604051808303816000865af19150503d80600081146101df576040519150601f19603f3d011682016040523d82523d6000602084013e6101e4565b606091505b505090508061020657604051631e4e7d0960e21b815260040160405180910390fd5b5050506001016100eb565b5050505050565b816000805b828110156105c357600086868381811061023957610239610669565b61024f926020604090920201908101915061067f565b9050600087878481811061026557610265610669565b9050604002016020013590507f000000000000000000000000b47e3cd837ddf8e4c57f05d70ab865de6e193bbb6001600160a01b0316826001600160a01b031614610352576040513360248201526001600160a01b0387811660448301526064820183905283169060840160408051601f198184030181529181526020820180516001600160e01b03166323b872dd60e01b1790525161030591906106a3565b6000604051808303816000865af19150503d8060008114610342576040519150601f19603f3d011682016040523d82523d6000602084013e610347565b606091505b5050809450506105b9565b604051630b02f02d60e31b81526004810182905233906001600160a01b037f000000000000000000000000b47e3cd837ddf8e4c57f05d70ab865de6e193bbb1690635817816890602401602060405180830381865afa1580156103b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103dd91906106d2565b6001600160a01b031614610404576040516330cd747160e01b815260040160405180910390fd5b7f000000000000000000000000b47e3cd837ddf8e4c57f05d70ab865de6e193bbb6001600160a01b031660008260405160240161044391815260200190565b60408051601f198184030181529181526020820180516001600160e01b031663104c9fd360e31b1790525161047891906106a3565b60006040518083038185875af1925050503d80600081146104b5576040519150601f19603f3d011682016040523d82523d6000602084013e6104ba565b606091505b505080945050836104de5760405163632a71e160e11b815260040160405180910390fd5b6040516001600160a01b038781166024830152604482018390527f000000000000000000000000b47e3cd837ddf8e4c57f05d70ab865de6e193bbb169060640160408051601f198184030181529181526020820180516001600160e01b03166322dca8bb60e21b1790525161055391906106a3565b6000604051808303816000865af19150503d8060008114610590576040519150601f19603f3d011682016040523d82523d6000602084013e610595565b606091505b505080945050836105b9576040516312171d8360e31b815260040160405180910390fd5b505060010161021d565b505050505050565b6001600160a01b03811681146105e057600080fd5b50565b6000806000604084860312156105f857600080fd5b833567ffffffffffffffff8082111561061057600080fd5b818601915086601f83011261062457600080fd5b81358181111561063357600080fd5b8760208260061b850101111561064857600080fd5b6020928301955093505084013561065e816105cb565b809150509250925092565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561069157600080fd5b813561069c816105cb565b9392505050565b6000825160005b818110156106c457602081860181015185830152016106aa565b506000920191825250919050565b6000602082840312156106e457600080fd5b815161069c816105cb56fea264697066735822122053851de2876355d5f677ee1b533a1a45029c9c696babd22c335977ba031b1ae564736f6c63430008130033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000b47e3cd837ddf8e4c57f05d70ab865de6e193bbb
-----Decoded View---------------
Arg [0] : _punkContract (address): 0xb47e3cd837dDF8e4c57F05d70Ab865de6e193BBB
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000b47e3cd837ddf8e4c57f05d70ab865de6e193bbb
Deployed Bytecode Sourcemap
6366:6215:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8389:16;;-1:-1:-1;;;8389:16:0;;;;;;;;;;;6366:6215;8255:10;;-1:-1:-1;;;8255:10:0;;;;;;;;;;;8815:1084;;;;;;:::i;:::-;;:::i;:::-;;10203:2375;;;;;;:::i;:::-;;:::i;7040:37::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1105:32:1;;;1087:51;;1075:2;1060:18;7040:37:0;;;;;;;8815:1084;8961:12;8944:14;9071:821;9092:6;9088:1;:10;9071:821;;;9116:23;9142:12;;9155:1;9142:15;;;;;;;:::i;:::-;:31;;;:15;;;;;:31;;;;-1:-1:-1;9142:31:0;:::i;:::-;9116:57;;9188:15;9206:12;;9219:1;9206:15;;;;;;;:::i;:::-;;9396:192;;9504:10;9396:192;;;1773:34:1;-1:-1:-1;;;;;1843:15:1;;;1823:18;;;1816:43;9206:23:0;:15;;;;;;;;:23;;1875:18:1;;;1868:34;;;9206:23:0;-1:-1:-1;9339:12:0;;9357:20;;;;-1:-1:-1;1708:18:1;;9396:192:0;;;-1:-1:-1;;9396:192:0;;;;;;;;;;;;;;-1:-1:-1;;;;;9396:192:0;-1:-1:-1;;;9396:192:0;;;9357:246;;;9396:192;9357:246;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9338:265;;;9668:7;9663:76;;9703:20;;-1:-1:-1;;;9703:20:0;;;;;;;;;;;9663:76;-1:-1:-1;;;9862:3:0;;9071:821;;;;8933:966;8815:1084;;;:::o;10203:2375::-;10353:12;10336:14;;10507:2064;10528:6;10524:1;:10;10507:2064;;;10552:20;10575:12;;10588:1;10575:15;;;;;;;:::i;:::-;:31;;;:15;;;;;:31;;;;-1:-1:-1;10575:31:0;:::i;:::-;10552:54;;10621:15;10639:12;;10652:1;10639:15;;;;;;;:::i;:::-;;;;;;:23;;;10621:41;;10749:12;-1:-1:-1;;;;;10733:28:0;:12;-1:-1:-1;;;;;10733:28:0;;10729:1687;;10931:212;;11047:10;10931:212;;;1773:34:1;-1:-1:-1;;;;;1843:15:1;;;1823:18;;;1816:43;1875:18;;;1868:34;;;10891:17:0;;;1708:18:1;;10931:212:0;;;-1:-1:-1;;10931:212:0;;;;;;;;;;;;;;-1:-1:-1;;;;;10931:212:0;-1:-1:-1;;;10931:212:0;;;10891:271;;;10931:212;10891:271;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10877:285;;;;;10729:1687;;;11353:60;;-1:-1:-1;;;11353:60:0;;;;;2476:25:1;;;11417:10:0;;-1:-1:-1;;;;;11372:12:0;11353:51;;;;2449:18:1;;11353:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;11353:74:0;;11350:118;;11458:10;;-1:-1:-1;;;11458:10:0;;;;;;;;;;;11350:118;11623:12;-1:-1:-1;;;;;11623:17:0;11648:1;11717:7;11673:52;;;;;;2476:25:1;;2464:2;2449:18;;2330:177;11673:52:0;;;;-1:-1:-1;;11673:52:0;;;;;;;;;;;;;;-1:-1:-1;;;;;11673:52:0;-1:-1:-1;;;11673:52:0;;;11623:121;;;11673:52;11623:121;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11609:135;;;;;11815:7;11810:75;;11854:11;;-1:-1:-1;;;11854:11:0;;;;;;;;;;;11810:75;12051:167;;-1:-1:-1;;;;;2960:32:1;;;12051:167:0;;;2942:51:1;3009:18;;;3002:34;;;12011:12:0;:17;;2915:18:1;;12051:167:0;;;-1:-1:-1;;12051:167:0;;;;;;;;;;;;;;-1:-1:-1;;;;;12051:167:0;-1:-1:-1;;;12051:167:0;;;12011:226;;;12051:167;12011:226;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11997:240;;;;;12326:7;12321:80;;12365:16;;-1:-1:-1;;;12365:16:0;;;;;;;;;;;12321:80;-1:-1:-1;;12540:3:0;;10507:2064;;;;10325:2253;;10203:2375;;;:::o;14:131:1:-;-1:-1:-1;;;;;89:31:1;;79:42;;69:70;;135:1;132;125:12;69:70;14:131;:::o;150:786::-;275:6;283;291;344:2;332:9;323:7;319:23;315:32;312:52;;;360:1;357;350:12;312:52;400:9;387:23;429:18;470:2;462:6;459:14;456:34;;;486:1;483;476:12;456:34;524:6;513:9;509:22;499:32;;569:7;562:4;558:2;554:13;550:27;540:55;;591:1;588;581:12;540:55;631:2;618:16;657:2;649:6;646:14;643:34;;;673:1;670;663:12;643:34;728:7;721:4;711:6;708:1;704:14;700:2;696:23;692:34;689:47;686:67;;;749:1;746;739:12;686:67;780:4;772:13;;;;-1:-1:-1;804:6:1;-1:-1:-1;;845:20:1;;832:34;875:31;832:34;875:31;:::i;:::-;925:5;915:15;;;150:786;;;;;:::o;1149:127::-;1210:10;1205:3;1201:20;1198:1;1191:31;1241:4;1238:1;1231:15;1265:4;1262:1;1255:15;1281:247;1340:6;1393:2;1381:9;1372:7;1368:23;1364:32;1361:52;;;1409:1;1406;1399:12;1361:52;1448:9;1435:23;1467:31;1492:5;1467:31;:::i;:::-;1517:5;1281:247;-1:-1:-1;;;1281:247:1:o;1913:412::-;2042:3;2080:6;2074:13;2105:1;2115:129;2129:6;2126:1;2123:13;2115:129;;;2227:4;2211:14;;;2207:25;;2201:32;2188:11;;;2181:53;2144:12;2115:129;;;-1:-1:-1;2299:1:1;2263:16;;2288:13;;;-1:-1:-1;2263:16:1;1913:412;-1:-1:-1;1913:412:1:o;2512:251::-;2582:6;2635:2;2623:9;2614:7;2610:23;2606:32;2603:52;;;2651:1;2648;2641:12;2603:52;2683:9;2677:16;2702:31;2727:5;2702:31;:::i
Swarm Source
ipfs://53851de2876355d5f677ee1b533a1a45029c9c696babd22c335977ba031b1ae5
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 31 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.