At Curio, we’re big fans of open standards, which is why we partnered with icy.tools, PROOF, and OpenSea to create OpenRarity, the first open-source rarity standard for the NFT ecosystem.

Prior to OpenRarity, every NFT tool used their own closed-source algorithm to determine rarity. Most tools, including Curio, developed their rarity algorithm based on rarity.tools Ranking Rarity article on Medium, which introduced the concept of a rarity score based on summing normalized trait probabilities. Unfortunately, rarity.tools never open-sourced their algorithm or provided an API, which meant each NFT tool had to develop their own algorithm.

This led to conflicting rarity ranks for the same collections across various platforms, causing confusion for NFT buyers and sellers. This was just one of the reasons we chose to pursue an open rarity standard. To learn more about OpenRarity and what motivated the initiative, check out the announcement on Mirror:

Introducing OpenRarity

Rarity on Curio

On Curio, you’ll see two types of rarity: OpenRarity and Legacy Rarity. Moving forward, most collections will show OpenRarity. For collections that were created before OpenRarity was released and have yet to opt-in to OpenRarity, we show Legacy Rarity.

OpenRarity

To learn more about OpenRarity and how it is calculated, check out the official OpenRarity website or GitHub repository.

Legacy Rarity

Legacy Rarity is Curio’s previous rarity formula that is based on the rarity.tools formula mentioned above. Stated briefly, this formula sums the normalized inverse probabilities of an NFT’s traits to determine the rarity score of an NFT in a collection. A trait’s inverse probability is normalized by the number of trait values available in a trait’s category.

Below is a breakdown of how we calculate the Legacy Rarity score that is presented on Curio.


Step 1: Calculate the Trait Probability Score for every trait in the collection

$Trait \space Probability \space Score = \bigg(1 \space \div \space \dfrac{number\space of\space items \space with \space trait \space value}{number \space of \space items \space in \space collection}\bigg)$

Step 2: Calculate the Trait Normalization Factor for every trait category in the collection

$Trait \space Normalization \space Factor = \dfrac{avg \space number \space of \space options \space in \space all \space trait \space categories}{number \space of \space options \space in \space trait \space category}$

Step 3: Calculate the Trait Rarity Score for every trait in the collection

$Trait \space Rarity \space Score = Trait \space Probability \space Score \space \times \space Trait \space Normalization \space Factor$

Step 4: Calculate the Legacy Rarity Score for every NFT in the collection

$Legacy \space Rarity \space Score = \sum \space Trait \space Rarity \space Scores \space for \space NFT$