Discover more from Fungify NFT
The Trip: Part I
It's been a journey.
The spore of the Fungify concept germinated with a simple goal: an NFT index. This index would allow buyers to obtain NFT exposure while sellers would obtain liquidity in the form of tokens representing proportional ownership. It would be a single vault with a universal pricing mechanism, allowing any NFT accepted to be fractionalized. But NFT owners have an attachment to their assets; they represent their profiles, brands, and identities. A naïve NFT index can’t guarantee a claim on any individual asset. Placing an NFT in the vault means surrendering its individuality.
What if someone could place an NFT in the vault but guarantee their claim to it? Then they could access its liquidity without surrendering its individuality. We amended the index to allow depositors to pay a fee to guarantee redemption of their specific NFT — but the existence of ‘reserved’ NFTs within the vault means that liquidity for redemptions can’t always be guaranteed. Unless, that is, depositors reserving their NFT pay a fee. The depositors who haven’t reserved their NFT are providing liquidity for redemptions, so the fee must be directed towards them.
At this point, the astute reader might realize we are describing a lending protocol. Just like other lending protocols, payments from those demanding liquidity to those providing it should be governed by supply and demand. The time-tested solution to this is an algorithmic interest rate defined by a curve that maps interest rates to liquidity utilization. The higher the utilization, the higher the interest rates, incentivizing constant liquidity for redemptions.
It’s not enough to ensure constant liquidity through algorithmic interest rates. Allowing depositors to reserve their NFTs presents other challenges. When an NFT is reserved, it’s equivalent to the protocol writing a put, and the reserver purchasing it. If the expiration date of the put is indefinite, the protocol is guaranteed to lose over the long term. To solve this, the protocol can either limit the duration of the loan or implement margin calls. A margin call mechanism would require a way to update prices at a frequency proportional to the volatility of the collections. Generally, it’s more convenient for users that a protocol offer indefinite loans with margin calls than short duration puts.
Powered by Chainlink
The natural first choice for a price oracle is Chainlink. When the Cultivators began tending this protocol, an official Chainlink price feed did not exist. Indeed, even before starting to write this article there weren’t official Chainlink price feeds; there were centralized oracles making use of Chainlink’s infrastructure to reliably post prices on-chain (JPEG’d, NFTBank) — but not official feeds.
We wanted users to be able to take out loans instantly, in a single transaction and with low gas costs. Chainlink, which already facilities trillions of dollars in transaction value across the DeFi ecosystem, is able to provide NFT price data more effectively than any other oracle solution. Chainlink NFT Floor Pricing Feeds were created in collaboration with Coinbase Cloud. Other oracles ask the question, “What is the price right now?”. The Chainlink NFT Floor Feeds ask the question, “What price will 95% of sales be above in the next 24 hours?” The Chainlink feeds express a prediction of future liquidity. This prediction is continuously updated by a PID controller which changes prices in response to errors, allowing it to adapt to mistakes. This approach has been called adaptive percentile prediction. It provides conservative and risk-averse floor price estimates for NFT collections that eliminate extreme price outliers and are resistant to market manipulation.
The most important feature of Chainlink NFT Floor Pricing Feeds is the constant availability of on-chain prices. This enables margin calls and thereby the ability to offer indefinite-term loans.
The Hardest Part: Liquidations
An optimal liquidation system minimizes supply-side barriers to entry such as initial capital costs, domain expertise, and infrastructure. When barriers to entry are not aggressively minimized, this can lead to a concentration of intermediaries. Liquidators should consistently profit regardless of their initial capital, level of technical grounding, or the sophistication of their transaction infrastructure. On the demand side, the system should minimize the excess value borrowers surrender to liquidators.
Protocols have generally taken two approaches to this problem:
Pawn: the NFT collateral is absorbed by lenders (NFTFi, Arcade, Astaria, & others)
Selling: the NFT collateral is sold for the lender’s preferred denomination via auction (BendDAO, JPEG’d) or fixed-spread liquidations (Drops)
Hybrid: the NFT collateral is sold to the highest bidder or absorbed by a lender (Fungify)
Pawn-style lending protocols can impose significant upfront capital costs on lenders and by extension liquidators. Since the only thing being liquidated is an ostensibly indivisible NFT, this typically doesn’t allow for lenders to partially fill loans. Only lending protocols that natively fractionalize NFTs, like Fungify, can enable ownership of NFT collateral to be split among multiple lenders. This removes the upfront capital costs typically associated with pawn-style protocols. First generation peer-to-peer protocols (NFTFi, Arcade) also require some level of domain knowledge, which can exacerbate barriers to participation, but this has been solved by later entrants.
While pawn-style liquidations don’t impact the price when they occur, and to the benefit of lenders don’t cause liquidation cascades, they have the worst outcomes for borrowers. This is because pawn-style liquidations typically leave the borrower with nothing besides the loan principal once they occur. Selling tends to leave borrowers better off, with the liquidation buffer returning to the borrower; in this capacity, auctions outperform fixed-spread liquidations .
Selling collateral tends to create highly technical intermediaries who need to be compensated for their expertise, capital-carrying costs, and volatility risk. This can create counterproductive incentives when the liquidation buffer is nearly exhausted (Section [H08]). Selling off collateral can temporarily dry up liquidity, create liquidation cascades, and cause prices to discontinuously gap downwards. Behind the veil, liquidators must find individuals who want to ultimately hold the borrower’s collateral as an asset. The structural bottleneck is that NFTs have high initial capital requirements. Removing those initial capital requirements via fractionalization can greatly increase the pool of capital looking to hold NFTs.
Fungify extends liquidators the choice to either execute the highest bid or facilitate its sale to the index for a nominal flat fee scaled to gas prices. When the profit a liquidator can extract from bidding on the collateral is less than the flat fee, they are rationally incentivized to facilitate its sale to the index. This hybrid system maximizes the value returned to borrowers without creating liquidation cascades. The biggest weakness of pawn-style protocols is the barriers to entry for the lenders that double as liquidators, while the biggest weakness of selling-style protocols is the creation of intermediaries with counterproductive incentives. Fungify addresses both.
The index ($NFT) is the raison d’etre of the protocol, a market capitalization weighted basket of the most liquid NFT collections. There are two principal considerations when designing an index: conserving value and maintaining the index’s target asset weighting.
The conservation of value is an invariant that is preserved by minting and burning tokens in exact proportion to the underlying value deposited or withdrawn. To calculate the mint price of $NFT for assets being sold to the MarketVault, we use the formula:
It may seem straightforward to allow the burning of $NFT to follow the same formula, but there are complications. First, the Chainlink NFT Floor Price feeds provide a conservative estimate of the price, looking to predict the 5th quantile of sales in the next 24 hours. If the protocol accepted redemptions at such a price, it would consistently underprice the NFTs. A price feed for Ceiling Prices could solve this issue in theory, but it has yet to be developed.
A Ceiling Price feed is a hypothetical feed that predicts the highest sale prices of a collection of floor NFTs over a time period (e.g., 24 hours). Since bid-side liquidity tends to be thinner than ask side, and there are often parties with large collections of specific floor NFTs, the lower bound cost of attacking a Ceiling Price feed is likely much lower than the cost of attacking a Floor Price feed.
Burning of $NFT is done through the Random Redemption process, which doesn’t require any price oracle at the time of redemption. Each time an NFT enters the vault, its respective collection price is updated. A user submits $NFT sufficient to redeem the most expensive floor collection within the vault. A Chainlink VRF oracle produces a random number that corresponds to an NFT ID within the vault. If the value of the collection item received is less than the most expensive floor, the protocol dispenses the difference in $NFT.
These processes ensure that the index is minted and burned in proportion to the underlying value being deposited or withdrawn. However, conservation of value does not guarantee that the index will remain market cap weighted over time. To incentivize rebalancing, the index maintains a set of target weights that update each time there is a loan, sale, or redemption; when a sale occurs, the protocol escrows a portion of the $NFT for transactions that knock the index out of balance and pays these escrowed funds out to transactions that help rebalance the index.
If the index does not track its market cap weight targets, it becomes less desirable as a product for users. Broad exposure is more difficult to acquire and maintain than narrow exposure, so maintaining a diversity of assets is critical to the value proposition of the index. Dynamic spreads, besides serving to keep the index balanced, also increase the cost of attack in the case of an attempt to manipulate the price of a single collection.
The Fungify protocol, then, is an index fund that can lend itself out to create yield. A tokenized index fund created out of fungible assets wouldn’t have to lend itself out to create yield; the protocol could trivially invest the underlying. What does the protocol lose if it is reduced down to just the index functionality, making it little more than a value-proportional wrapper with a Chainlink feed? The ability to access liquidity from an NFT that a user doesn’t want to part with. Why not just go to a protocol that does only lending? The index induces rate-insensitive users to provide lending liquidity, making the rates more competitive; the use of $NFT as a unit of account for loans makes loss of the NFT via margin calls vastly less likely. Better rates and better margin calls. It’s the MakerDAO advantage: create a synthetic token that people actually want and get lending liquidity for free.
Join us on Discord.