Documentation

Fake World AssetsHow it works

A fully onchain protocol where deposited NFTs, each backed by depositor ETH, become positions others acquire at random.

Fake World Assets is a fully onchain, randomized NFT acquisition protocol. Depositors list NFTs together with committed ETH backing, similar to a Uniswap V2 pair. That backing sets each position's selection weight and funds an irrevocable standing bid from the depositor to reacquire the NFT. Anyone can pay the pool-derived acquisition price to receive one randomly selected NFT position, and that price is derived entirely from the value of the assets in the pool. Positions are tracked in a Fenwick tree, so the pool can hold up to ~4 billion positions at once without raising the gas cost to acquire1. Positions are selected with Chainlink VRF, so selection is provably fair and can't be influenced.

Risk: depositing provides liquidity to the protocol and carries risk of loss. Your NFT can be selected earlier than its weight-implied average, ending its earnings before fees have time to compound, so you can come out behind the cut you expected. FWA rewards have no guaranteed value.
  • Acquire one randomly selected NFT position from the pool. You're far more likely to receive a lightly-backed one.
  • After allocation, choose: keep the NFT, or accept the depositor's standing bid and sell the NFT back for most of its ETH backing (in ETH, or as the FWA token). You can never keep both.
  • Deposit an NFT plus ETH backing to provide liquidity and earn a share of every acquisition fee, plus FWA rewards.
  • FWA is the reward token that pays both sides for showing up early and ties the protocol's revenue to buy pressure.

The protocol has three roles: depositors provide liquidity by pairing NFTs with ETH backing, purchasers pay the acquisition price to receive a randomly selected position that may be higher-backed than the price they paid, and the protocol earns bounded fees from the spread between NFT value, ETH backing, and participant choices.

Use the menu to dig into any part.

Technical breakdownonchain

  1. 1.
    Each active position contributes an inverse-value weight to totalWeight, tracked in a Fenwick tree (binary indexed tree). Deposits add weight, withdrawals remove it, and an acquisition maps randomWords[0] % totalWeight onto a prefix sum, then walks a fixed depth-32 path (_selectSlot) to the selected position. That gives 2^32 slots (about 4.29 billion) while every selection performs the same 32-step search, so selection gas does not grow with the number of active positions.