Selling a NFT is not as easy as buying a NFT. If we wanted to purchase a NFT, we can purchase a floor-priced one from Opensea or LooksRare instantaneously. However, selling a NFT would take a longer time to be matched with a buyer. Fractionalizing NFTs into ERC-20 tokens, representing the floor price and trading over AMMs, allows users to obtain liquidity immediately. Let me walk through the user experience: a NFT owner, Bob, wants to sell a CryptoPunk immediately at the floor price. Bob deposits CryptoPunk into a vault and receive 1 rPUNK token. The rPUNK token trades at the floor price of CryptoPunk, so Bob can trade the whole or parts of the rPUNK token for liquidity in our DEX — a fork of Uniswap V2. To redeem back the NFT, Bob must purchase back the 1 rPUNK token from the DEX and bid the 1 rPUNK token (and some ETH) to retrieve the NFT. The bidding will be live for 48 hours. If the bid is successful, the NFT is retrieved back to Bob.
The liquidity providers are incentivized to provide liquidity with their NFTs, as they become productive assets, accruing trading fees. The liquidity providers receive a fee from Minting and Redeeming rPUNK token, as well as the trading fees (0.25%) accrued from the DEX and a percentage (1-2%) of the bid. We expect the APY for stakers to be higher than a traditional DEX because mint, redeem, and bidding are major revenue sources for the protocol, not offered by the traditional ones.
Renaissance Labs has designed fNFT ownership to be as analogous as possible to fractional ownership of the underlying NFT. Thus, fNFT holders will govern the sale of the underlying fNFT as well as proportionally receive any profits from sale or external utility (e.g. airdrops received by the underlying NFT). We expect community governance to rise over each NFT collection.
Deployment on the Testnet was fickle. The function, createVault, was not operable on Testnet, when it worked with local deployment. We re-deployed on the Testnet multiple times and re-integrated, but did not work as intended. We suspected an issue with the Testnet and deployed straight to the Mainnet. The contract integrations worked via Mainnet. Fetching NFT data was a difficult task, since there’s no standardized and decentralized service to aggregate all NFT data. We used Moralis’ API to fetch NFTs in an user’s wallet. Though it’s a centralized service, it’s much more reliable and reduced significant part of the development to focus on the actual product.