---
# System prepended metadata

title: NFTap Smart Contract

---

```solidity
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

interface INFTap {
    // Struct to hold NFT reference (collection address and token ID)
    struct NFT {
        address collectionAddress;
        uint256 tokenId;
    }

    // Event declarations
    event NFTListed(address indexed owner, address indexed collectionAddress, uint256 indexed tokenId, OfferLimitation limitation);
    event NFTDelisted(address indexed owner, address indexed collectionAddress, uint256 indexed tokenId);
    event OfferMade(address indexed from, NFT offeredNFT, NFT[10] targetNFTs);
    event OfferAccepted(address indexed from, NFT offeredNFT, NFT myNFT);
    event OfferRejected(address indexed owner, address indexed collectionAddress, uint256 tokenId);
    event OfferRevoked(address indexed from, NFT offeredNFT);

    // Enum for specifying offer limitations
    enum OfferLimitation {
        AnyNFT,
        VerifiedCollections,
        SpecificCollection
    }

    // Function to list an NFT for trading with offer limitations
    function listNFT(address collectionAddress, uint256 tokenId, OfferLimitation limitation) external;

    // Function to de-list an NFT from trading
    function delistNFT(address collectionAddress, uint256 tokenId) external;

    // Function to make an offer: offering one NFT for up to 10 different NFTs
    function makeOffer(
        NFT calldata myOfferedNFT, 
        NFT[10] calldata targetNFTs
    ) external;

    // Function to accept an offer, specifying both NFTs involved in the trade
    function acceptOffer(
        NFT calldata offeredNFT,
        NFT calldata myNFT
    ) external;

    // Function to reject all offers for my NFT
    function rejectAllOffers(NFT calldata myNFT) external;
    
    // Function to reject the offer for an NFT
    function rejectOffer(NFT calldata myNFT, NFT calldata offeredNFT) external;

    // Function to revoke an offer for an NFT
    function revokeOffer(NFT calldata offeredNFT) external;

    // Additional functions to retrieve listings and offers as needed
    // ...
}
```
