Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
ERC721Wrapper
Compiler Version
v0.8.19+commit.7dd6d404
Optimization Enabled:
Yes with 100 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: BUSL-1.1 pragma solidity 0.8.19; import {IERC721} from "@openzeppelin/contracts/token/ERC721/IERC721.sol"; import {INftWrapper} from "../../interfaces/INftWrapper.sol"; /** * @title ERC721Wrapper * @author NFTfi * @dev Provides logic to transfer ERC721 */ contract ERC721Wrapper is INftWrapper { /** * @dev Transfers ERC721 `_nftId` handled by the contract `_nftContract` from `_sender` to `_recipient` * * @param _sender - The current owner of the ERC721 * @param _recipient - The new owner of the ERC721 * @param _nftContract - ERC721 contract * @param _nftId - ERC721 id * * @return true if successfully transferred, false otherwise */ function transferNFT( address _sender, address _recipient, address _nftContract, uint256 _nftId ) external override returns (bool) { IERC721(_nftContract).safeTransferFrom(_sender, _recipient, _nftId); return true; } function approveNFT(address to, address nftContract, uint256 tokenId) external override returns (bool) { IERC721(nftContract).approve(to, tokenId); return true; } function isOwner(address _owner, address _nftContract, uint256 _tokenId) external view override returns (bool) { return IERC721(_nftContract).ownerOf(_tokenId) == _owner; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.9.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 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); }
// 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: BUSL-1.1 pragma solidity 0.8.19; /** * @title INftTypeRegistry * @author NFTfi * @dev Interface for NFT Wrappers. */ interface INftWrapper { function transferNFT(address from, address to, address nftContract, uint256 tokenId) external returns (bool); function approveNFT(address to, address nftContract, uint256 tokenId) external returns (bool); function isOwner(address owner, address nftContract, uint256 tokenId) external view returns (bool); }
{ "metadata": { "bytecodeHash": "none", "useLiteralContent": true }, "optimizer": { "enabled": true, "runs": 100 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"address","name":"nftContract","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approveNFT","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_nftContract","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_sender","type":"address"},{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"address","name":"_nftContract","type":"address"},{"internalType":"uint256","name":"_nftId","type":"uint256"}],"name":"transferNFT","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b506102e4806100206000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80637336aaf014610046578063b03066711461006d578063f370e8c514610080575b600080fd5b610059610054366004610221565b610093565b604051901515815260200160405180910390f35b61005961007b366004610262565b610103565b61005961008e366004610221565b61017c565b60405163095ea7b360e01b81526001600160a01b038481166004830152602482018390526000919084169063095ea7b390604401600060405180830381600087803b1580156100e157600080fd5b505af11580156100f5573d6000803e3d6000fd5b506001979650505050505050565b604051632142170760e11b81526001600160a01b038581166004830152848116602483015260448201839052600091908416906342842e0e90606401600060405180830381600087803b15801561015957600080fd5b505af115801561016d573d6000803e3d6000fd5b50600198975050505050505050565b6000836001600160a01b0316836001600160a01b0316636352211e846040518263ffffffff1660e01b81526004016101b691815260200190565b602060405180830381865afa1580156101d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101f791906102b3565b6001600160a01b031614949350505050565b6001600160a01b038116811461021e57600080fd5b50565b60008060006060848603121561023657600080fd5b833561024181610209565b9250602084013561025181610209565b929592945050506040919091013590565b6000806000806080858703121561027857600080fd5b843561028381610209565b9350602085013561029381610209565b925060408501356102a381610209565b9396929550929360600135925050565b6000602082840312156102c557600080fd5b81516102d081610209565b939250505056fea164736f6c6343000813000a
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100415760003560e01c80637336aaf014610046578063b03066711461006d578063f370e8c514610080575b600080fd5b610059610054366004610221565b610093565b604051901515815260200160405180910390f35b61005961007b366004610262565b610103565b61005961008e366004610221565b61017c565b60405163095ea7b360e01b81526001600160a01b038481166004830152602482018390526000919084169063095ea7b390604401600060405180830381600087803b1580156100e157600080fd5b505af11580156100f5573d6000803e3d6000fd5b506001979650505050505050565b604051632142170760e11b81526001600160a01b038581166004830152848116602483015260448201839052600091908416906342842e0e90606401600060405180830381600087803b15801561015957600080fd5b505af115801561016d573d6000803e3d6000fd5b50600198975050505050505050565b6000836001600160a01b0316836001600160a01b0316636352211e846040518263ffffffff1660e01b81526004016101b691815260200190565b602060405180830381865afa1580156101d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101f791906102b3565b6001600160a01b031614949350505050565b6001600160a01b038116811461021e57600080fd5b50565b60008060006060848603121561023657600080fd5b833561024181610209565b9250602084013561025181610209565b929592945050506040919091013590565b6000806000806080858703121561027857600080fd5b843561028381610209565b9350602085013561029381610209565b925060408501356102a381610209565b9396929550929360600135925050565b6000602082840312156102c557600080fd5b81516102d081610209565b939250505056fea164736f6c6343000813000a
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 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.