Skip to main content

Asks V1.1

Sell an NFT at a specific asking price#

The Asks Module allows anyone to sell an ERC-721 NFT for a specific asking price. You can view all of the Ask V1.1 Module contract code in this GitHub Repo.

Contract Addresses#

Mainnet Deployments#

Ethereum - 10x6170B3C3A54C3d8c854934cBC314eD479b2B29A3
Polygon - 1370x3634e984Ba0373Cfa178986FD19F03ba4dD8E469

Testnet Deployments#

Goerli - 50xd8be3E8A8648c4547F06E607174BAC36f5684756
Mumbai - 800010xCe6cEf2A9028e1C3B21647ae3B4251038109f42a

Ask Structure#

An ask can be created by an owner or approved operator for any ERC-721 token. There can only be one ask open at a time for a given NFT. If an NFT is transferred to a new address the ask created by the previous address becomes invalid. However, if the NFT were to be transferred back to the address that created the ask it would be valid again.

  • seller: The owner or approved address for an NFT
  • sellerFundsRecipient: The address to send funds to once the NFT is sold
  • askCurrency: ERC-20 token to accept, or address(0) for ETH
  • findersFeeBps: The bps of the sale amount to be sent to the referrer of the sale
  • askPrice: The sale price
struct Ask {  address seller;  address sellerFundsRecipient;   address askCurrency;  uint16 findersFeeBps;  uint256 askPrice;}

Finders Fee#

The Finders Fee is the amount offered to the party that helped match the buyer to the NFT. For example, a user creates an ask for one of the NFTs in their wallet. If a finders fee was specified, then the interface that helped match the NFT to the buyer could be entitled to that amount. Note that the Finders Fee is only charged if a buyer fills the ask on an NFT.

Honoring Royalties#

Whenever an ask is filled, the Ask V1 Module respects any royalties in this Royalty Registry created by Manifold. If your NFT contract doesn't currently support royalties, the owner address of an NFT contract is able to manually set the royalty in the registry.

To calculate the percentage of a Royalty you can call getRoyaltyView on the Royalty engine with the token contract address, token id, and a value of 1e18 (1 ETH in wei) to get the splits and calculate the percentages based on the response.



A public mapping that returns an ask given an NFT token contract address and tokenId. Note that there can only ever be one ask open for an NFT at a time.

mapping(address => mapping(uint256 => Ask)) public askForNFT



Puts an NFT up for sale at a specific asking price.

  • Can be created by either the owner or approved operator of an NFT.
  • The ask currency can be any ERC-20 token or the address(0) for ETH.
  • createAsk will overwrite if there was a previous open ask.
function createAsk(  address _tokenContract,  uint256 _tokenId,  uint256 _askPrice,  address _askCurrency,  address _sellerFundsRecipient,  uint16 _findersFeeBps)


Updates the information for a specific ask.

function setAskPrice(  address _tokenContract,  uint256 _tokenId,  uint256 _askPrice,  address _askCurrency) 


Cancels an ask for an NFT by either the owner or an approved operator.

function cancelAsk(address _tokenContract, uint256 _tokenId)


Transfers the NFT to the buyer and sends the funds to the recipients. If no finder address is provided or no Finders Fee is set, then you can submit the finder as the 0 address which will send all the funds to the seller.

function fillAsk(    address _tokenContract,    uint256 _tokenId,    address _fillCurrency,    uint256 _fillAmount,    address _finder) 

All the source code for the Asks V1.1 contract can be found here.