This is a brief overview of Duin.fun
Duin.fun is an anonymous NFT marketplace that allows you to own NFTs without revealing your identity or current bids on your NFT.
It does not create or manage any wallet, private data or secrets for you.
keccak256(ownerAddress || ownerSecret) = ownershipSecret
keccak256(ownershipSecret || tokenId) = commitment₁
hash(commitment₁, commitment₂, ..., commitmentₙ) = merkleRoot
All the commitments together form the leaves of a Merkle tree
keccak256(bidderAddress || bidderSecret) = bidSecret
keccak256(bidSecret || commitment) = bidNullifier
(bidNullifier, amount, addressSent) = bid
Bids are stored on chain but the NFT for which the bid was placed is not revealed.
In order for the owner to accept your bid, you need to share the bidSecret with them.
If a bid is made on your NFT, you can transfer the NFT to the bidder and the bid amount to any address of your choice.
Private Inputs: ownerAddress, ownerSecret, tokenId, bidSecret, receiverAddress
Public Outputs: bidNullifier, bidSecret, tokenNullifier
The admin will check the following:
1. keccak256(ownerAddress || ownerSecret) = ownershipSecret
2. keccak256(ownerSecret || tokenId) = commitment
3. commitment belongs to the merkle tree
4. keccak256(bidSecret || commitment) = bidNullifier
5. keccak256(ownerAddress || ownerSecret || commitment) = tokenNullifier
If tokenNullifier is not used before in a past transaction
and If bidNullifier has not been withdrawn or used before
A new commitment is minted to the bidder's address, and bid amount is transferred to the receiver address.
The Admin runs inside a TEE and its integrity can be verified.
In order for the owner to accept your bid, you need to share the bidSecret with them.
Losing access to your secret means losing access to your NFT as well as potentially any bids you might have placed.
Roadmap: