Asks V1.1
#
Sell an NFT at a specific asking priceThe 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 DeploymentsNetwork | Address |
---|---|
Ethereum - 1 | 0x6170B3C3A54C3d8c854934cBC314eD479b2B29A3 |
Polygon - 137 | 0x3634e984Ba0373Cfa178986FD19F03ba4dD8E469 |
#
Testnet DeploymentsNetwork | Address |
---|---|
Goerli - 5 | 0xd8be3E8A8648c4547F06E607174BAC36f5684756 |
Mumbai - 80001 | 0xCe6cEf2A9028e1C3B21647ae3B4251038109f42a |
#
Ask StructureAn 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 NFTsellerFundsRecipient
: The address to send funds to once the NFT is soldaskCurrency
: ERC-20 token to accept, or address(0) for ETHfindersFeeBps
: The bps of the sale amount to be sent to the referrer of the saleaskPrice
: The sale price
struct Ask { address seller; address sellerFundsRecipient; address askCurrency; uint16 findersFeeBps; uint256 askPrice;}
#
Finders FeeThe 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 RoyaltiesWhenever 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.
#
Storage#
askForNFTA 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
#
Functions#
createAskPuts 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 theaddress(0)
for ETH. createAsk
will overwrite if there was a previous openask
.
function createAsk( address _tokenContract, uint256 _tokenId, uint256 _askPrice, address _askCurrency, address _sellerFundsRecipient, uint16 _findersFeeBps)
#
setAskPriceUpdates the information for a specific ask
.
function setAskPrice( address _tokenContract, uint256 _tokenId, uint256 _askPrice, address _askCurrency)
#
cancelAskCancels an ask
for an NFT by either the owner or an approved operator.
function cancelAsk(address _tokenContract, uint256 _tokenId)
#
fillAskTransfers 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.