Dandelion allows NFT creators and traders to set up secret and exclusive smart contract based auctions. Auction participation is only by invitation from the seller. The bids and the NFT are sealed until the auction is over.
Most NFT trades today happen through large and impersonal NFT marketplaces. Front-running bots snatch NFT drops, depriving community members of the joy in participating. The artistic NFT ecosystem is losing its sense of community. The connections between its members are what make it so special and give it its value. Dandelion empowers community artists and traders to embrace personal connections and to strengthen the ecosystem’s sense of community. The idea behind Dandelion is to imitate the real life phenomenon of exclusive art auctions as a smart contract. An NFT owner who wants to sell an NFT can create a smart contract with a binding commitment of the NFT. This promises the sale of the NFT without publicly revealing its contents. The seller invites potential buyers and reveals the commitment to them. The buyers then validate it against the commitment in the smart contract, and are able to view the NFT. Next, the buyers send sealed bids to the smart contract. After a predetermined time elapses, the auction closes. Buyer bids are revealed, and the seller transfers the NFT to the smart contract. Finally, the seller can withdraw the tokens swapped for the NFT, the winning bidder can withdraw the NFT and any excess tokens, and everyone else can withdraw their tokens. Dandelion also provides dedicated user interfaces for both the buyers and the seller. Using the interface, the seller can mint the NFT, initiate the auction and invite buyers. The buyers can bid on the NFT, reveal their bids and withdraw the tokens/NFT.
The project is based on the scaffold-eth blind auction template. The template provides React-based UI for the seller and buyers and a basic auction smart contract. We extended the template to upload the NFT to IPFS. After minting an NFT (if necessary), the seller can initiate the auction by deploying a smart contract using the UI (via React). We plan to update the smart contract to require a commitment of the NFT instead of the NFT. The commitment is the hash of the NFT address concatenated with a nonce. The nonce prevents “outsiders” from speculatively checking if the contract commits to a specific NFT. For example, an outsider can check if the contract commits to newly minted NFTs. When the seller is ready to proceed with an auction, they send invitations to all their allow-listed buyers via the Unlock protocol. This allows the auction participants to mint participation NFTs. An alternate implementation we considered involves the Lens protocol. The seller publishes a post announcing the auction. Auction participants collect the seller’s publication. As a precursor to collection, logic in the publication’s “collect module” verifies that the auction participants are allow-listed. Once the auction is live, bidders can participate using the associated Lens CollectNFT. In addition, when the smart contract is deployed, the seller’s react app will invoke XMTP to securely send the NFT address and the nonce to each buyer. In the future, we can perhaps change the cryptographic scheme we use to one where each buyer will be sent a slightly different nonce to deter anyone from leaking information about the NFT. At this stage, the buyers can view the NFT and submit sealed bids to the smart contract. The smart contract requires bidders to have a suitable Unlock NFT (or a Lens CollectNFT). Alternatively, instead of an invite-only auction, the smart contract can only use PolygonID/WorldCoin to disallow bots from bidding. After the bidding stage ends, all the buyers reveal their bids to the smart contract. The seller then reveals the nonce and sends the NFT to the smart contract. The smart contract verifies that the NFT matches the commitment, and finalises the auction by choosing the final buyer and purchase price. The contract can potentially notify all buyers that the auction has ended using the Push protocol. The winning bidder withdraws the NFT, the seller withdraws the tokens, and unsuccessful bidders withdraw their tokens.