Oracle

In nftperp v1, we used a concept called "True Floor Price," which was the TWAP of NFT trade data after filtering outliers. This average often deviated from the floor price people see on Blur, leading to a mark/index gravitation where the mark gravitated more towards Blur's floor. Responding to this preference, nftperp v2 introduces a significant change to implement a more straightforward floor price mechanism. This mechanism is derived from multiple components.

  • Trade Weighted Floor Price: Volume and floor price of different NFT marketplaces are averaged by their trading volume to create a trade-weighted floor price

  • Sales Floor Price: We remove outliers and potential manipulation from NFT sales data throughout all centralized markets and perform a weighted calculation on the last couple of trades to create a sales floor price.

  • Bid-Ask Floor Price: We average the best bid and best ask on top NFT trading venues. We receive this price from multiple internal and external venues to guarantee uptime.

We then take the median of existing components for a given collection to get the current floor price. If any feeds exceed the median by 5%, we Winsorize that feed and update the median to reduce the effect of any outliers. If the rolling Confidence Interval of Standard Deviation concerning the original median is >95th percentile, the market is volatile, and we use a TWAP of 15 minutes. Else, we use a longer TWAP. If this TWAP deviates more than 0.3% from the current floor price, our Oracle Keepers push the price onchain into the nftperp Contract.

This value can be returned from the nftperp contract with a getPrice() call on the price feed contract.

Last updated