NFT Oracle
Last updated
Last updated
NFTCall aggregate NFT floor prices from multiple leading marketplaces and submit them to our oracle contracts on deployed chains.
These floor prices will be used to calculate option premiums in the Black-Scholes formula and as reference prices in the options settlement.
Therefore, upholding the efficiency of the platform requires a secure decentralized oracle solution to accurately price the NFTs. However, due to their unique non-fungibility, the nature of NFT liquidity (or often lack thereof) is different from fungible ERC20 tokens, so additional consideration was required.
Due to the high cost of some existing oracle infrastructures such as Chainlink, we decided to build our own oracle. And we keep the floor prices and volatility trustworthy and secure with following strategies:
Collecting data from multiple NFT marketplaces (Opensea, LooksRare, X2Y2).
Removing extreme outliers such as 0 or error data.
Removing possible outliers by calculating a reasonable range based on the standard deviation.
Calculating the average of the filtered data and submit it to the oracle contract.
All NFT price data is sourced from multiple NFT marketplace by directly monitoring their floor price APIs. The price data will be updated every 2 hours, but when the off-chain floor price data moves more than deviation threshold, an update will be triggered immediately to write a new price into our oracle smart contract.
We have integrated the following NFT marketplaces into our data sources:
Marketplace | Regular Update Period | Trigger Deviation Threshold |
---|---|---|
First we collect data from some of the most trustworthy NFT marketplaces (Opensea, Blur, LooksRare, X2Y2). And we monitor the price changes from their official NFT floor price API.
To ensure the NFT marketplace data is correct, Zero or other error data will be removed from the calculation.
Next, we remove prices that falls outside the reasonable range. We assume the prices from different marketplaces conform to the normal distribution during a particular time period, which means they should not have wide swings at a checkpoint, so the range is calculated using the standard deviation. Prices that falls outside 1.5X standard deviation will be considered as outliers and removed from the calculation.
Then, we calculate the weighted average of the filtered data using a 24-hour trading volume and submit it to the oracle contract.
Contract | Address |
---|---|
Contract | Address |
---|---|
Opensea
2 hours
1%
Blur
2 hours
1%
LooksRare
2 hours
1%
X2Y2
2 hours
1%
Oracle
TBD
Oracle