Rare World Assets Fun (RWA) is a loss-to-earn NFT gacha on Solana. Deposit an NFT with SOL backing; anyone can pull one listing at random, weighted inversely to its backing. The puller keeps the NFT or sells it back to the depositor. Either way, being pulled earns you $RWAF.

RWA is a faithful Solana port of fwa.fun (“Rare World Assets Fun”). Same mechanics, audited-identical math — Fake → Real. Custody is native: a Solana program PDA holds the NFT. No bridge, no peg.

Start here

How it works

Every listing is an NFT plus a chosen amount of escrowed SOL — its backing. That backing does two things at once: it sets how often the listing gets pulled (inversely — more backing, pulled less), and it funds an irrevocable standing bid the depositor uses to buy the NFT back.

Deposit. List a Solana NFT and lock some SOL as backing (minimum 0.01 SOL). The program PDA escrows both. Your backing sets your selection weight and funds your standing bid.
Someone pulls. A purchaser pays an expected-value–priced acquisition fee for one random draw. One listing is selected in proportion to its weight (lightly-backed listings win more often).
Keep or sell back. The purchaser either keeps the NFT (you get your backing back, minus a 1% settlement fee) or sells it back to you at ~85% of backing (you get your NFT back).
Earn $RWAF. Getting pulled is the “loss” that earns. Depositors stream $RWAF continuously by √backing; purchasers earn from daily pots. It's loss-to-earn.

The core idea. A purchaser can never keep both the NFT and the SOL — the two outcomes are mutually exclusive, and each listing's backing is escrowed per-listing and only ever settles that listing. The program is always solvent: any un-pulled listing is fully withdrawable by its depositor.

Start here

Deployments

RWA runs as an Anchor program on Solana with a web app front-end. Custody, draws and settlement are on-chain; the app reads live market data and drives the wallet.

NetworkStatusNotes
Solana DevnetLive / testingFree airdrop SOL. Future-slot commit-reveal draw (un-grindable). No real value.
Solana MainnetPlannedGated on Switchboard VRF for the draw and the $RWAF token launch (see below).
Before mainnet value: the draw upgrades from future-slot commit-reveal to Switchboard VRF. Commit-reveal is un-grindable and fine for devnet, but a validator can still influence a slot hash — VRF closes that for real money. The integration seam is already in place.

The $RWAF token launches single-sided (tokens only, no seed capital) via a bonding curve that graduates to a Raydium pool — exactly like FWA's one-sided Uniswap-v4 seed. Buys are blocked during emission (earn-only); the protocol buys via a price-capped buyback-and-burn. 30% of supply is reserved to the emission vault PDA. See $RWAF & emission.

Using the protocol

Positions & weighting

A position (listing) is your NFT plus its backing. Selection weight is inverse to backing — the whole point of the design:

// weight is inversely proportional to backing
weight(backing) = 1e24 / backing

Because weight = NUM / backing, a lightly-backed listing has high weight and gets pulled often; a richly-backed listing has low weight and gets pulled rarely. If you want to be left alone, back heavily. If you want the loss-to-earn flow, back lightly.

  • Minimum backing is 0.01 SOL — a floor that stops dust deposits from crashing the pool's price and enables sybil / emission farming.
  • Raise or lower your backing to reprice your weight. Raising can also seize the Crown; lowering forfeits it.
  • Withdraw any time your listing hasn't been pulled — you get 100% of your escrowed backing back.
Fresh deposits made while a draw is pending enter a FIFO staging queue and only become selectable after an activation delay — so a deposit can never react to an in-flight random word.
Using the protocol

Pricing & allocation

The price of a pull

An acquisition is priced at the pool's expected value times a protocol surcharge. Expected value is the weighted average of backings:

EV = Σ(weightᵢ · backingᵢ) / Σweightᵢ
// with inverse weights this reduces to the HARMONIC MEAN of backings

acquisitionFee = EV · (10000 + surchargeBps) / 10000 // default surcharge = 10%

Since weightᵢ · backingᵢ ≈ NUM is roughly constant, EV collapses to the harmonic mean of the backings. That means a pool full of richly-backed listings prices cheaper — correctly reflecting that a pull is far more likely to land a lightly-backed listing. The 10% surcharge on top is the protocol/depositor/emission spread.

The draw — provably fair & un-grindable

Selection is a weighted walk over active listings, resolved by a single 256-bit random word reduced modulo the total weight:

target = randomWord mod Σweight
// walk cumulative weights until target lands in a listing's segment

On devnet the word is a future Solana slot hash under a commit-reveal scheme: the acquisition commits to a slot that hasn't happened yet, then reveals against that slot's hash. Because the entropy is fixed before it exists, a purchaser can't grind for a favorable outcome, and given the same active set and slot hash everyone recomputes the identical winner. On mainnet this becomes Switchboard VRF.

Anti-snipe / fair-draw completeness. The draw is bound so it can't be selectively completed against a favorable subset — the full active set at commit is the set the word resolves over. Combined with the staging queue and a draw the buyer can't force, this closes the snipe surface.

Using the protocol

Collections

Any Solana NFT can be deposited — the program is collection-agnostic and simply escrows the mint you list. The app surfaces featured, high-volume collections to concentrate liquidity and make pools more legible, but you are never restricted to them.

  • Deposit standard Metaplex NFTs; the PDA takes native custody of the exact mint.
  • The wallet NFT picker (via Helius) lists what you hold so you can deposit in a click.
  • Pull odds are per-listing (by weight), not per-collection — a rarer collection doesn't change the draw math, only its backing does.
Using the protocol

Settlement

After a listing is allocated to a purchaser, exactly one of two terminal outcomes settles it. The purchaser chooses within the settlement window.

🎴Keep

Purchaser keeps the NFT. The escrowed backing returns to the depositor minus a 1% settlement fee. NFT → purchaser, SOL → depositor.

↩️Sell back

Purchaser accepts the depositor's standing bid at the 85% sell-back rate → purchaser; the settlement discount is retained by the protocol (or shared among depositors when retained-to-protocol is off). The NFT goes back to the depositor. The listing leaves the pool.

OutcomeNFT goes toSOL split
KeepPurchaserDepositor gets backing − 1% (fee → protocol)
Sell backDepositorPurchaser gets 85% (settlement discount retained by protocol)

Assets never lock

Settlement is bounded by a liveness ladder so nothing can be stranded:

  1. Settlement window — the purchaser chooses keep or sell-back.
  2. Depositor reclaim — if the purchaser doesn't act, the depositor can reclaim.
  3. Permissionless finalize — after that, anyone can finalize the settlement, so a passive party can never lock an asset.
Each listing's backing is escrowed per-listing and only ever settles that listing. There is no shared pot to drain — the program is always solvent.
Using the protocol

Rarity

Listings carry a rarity tier for display and flavor. Rarer tiers are less likely to be pulled — consistent with the draw, since desirable listings tend to be backed more heavily (lower weight, pulled rarely).

Common Uncommon Rare Epic Legendary

Rarity is presentational — the on-chain draw is driven purely by weight (i.e. backing). A Legendary you want to keep should be backed heavily so it's rarely pulled; a Common you're happy to churn for $RWAF can be backed at the floor.

Rewards & fees

Fees & protocol revenue

Protocol revenue is bounded and never touches your escrowed backing. Every fee is routed to the platform fee wallet:

FeeRateWhen
Owner acquisition fee1%Owner's cut of each pull's acquisition fee — taken from the surcharge, so the buyer's price is unchanged
Owner settlement fee1%Skimmed from the backing return when a purchaser keeps the NFT
Settlement discount85% (80–95%)On a sell-back, the purchaser gets the settlement-discount % of backing — default 85%, owner-tunable within FWA's 80–95% band; retained by the protocol (or shared among depositors when retained-to-protocol is off)
Crown tithe5%The top-deposit reward's slice of each acquisition fee (crownShareBps)
Trading fee1%On $RWAF buys & sells once the token is live — routed to the fee wallet

The rest of each acquisition fee is shared among depositors through a dividend accumulator. Critically, each active listing earns a flat, equal share — a dust-backed listing earns the same per-pull fee dividend as a whale-backed one:

feeShare(listing) = 1 // flat, per active listing (equal split)
accFeePerShare += pot · SCALE / Σ feeShare
earned = feeShare · (accFeePerShare − feeDebt) / SCALE

Equal fee shares keep small deposits attractive and raise the capital cost of sybil fee-farming (a thousand tiny listings each still earn just one flat share). The size incentive lives elsewhere — in the Crown and $RWAF emission, both √backing-weighted.

Rewards & fees

Top deposit reward — the Crown

A single king-of-the-hill slot tracks the highest committed backing. Whoever holds the Crown accrues a share of every acquisition fee into a visible, growing pot.

  • The Crown earns 5% of each acquisition fee (crownShareBps = 500) into its pot.
  • To seize it, a new deposit or a raise must clear the current top by the crown threshold (10%): newBacking · 10000 > topBacking · (10000 + 1000).
  • The pot settles to the holder's credit when their listing is allocated, withdrawn, or taken over.
  • Reducing your own backing (withdraw or a lower re-price) forfeits the Crown.

Richly-backed listings also have low weight, so the Crown holder is pulled rarely and tends to hold the slot longer — compounding the reward for the highest-committed backers. It's the counterweight to the flat fee shares.

Rewards & fees

$RWAF & emission

$RWAF is a fixed 1,000,000,000 supply SPL token (8 decimals) — the same supply as FWA. Emission is distribution from a reserved vault, not minting. Exactly like FWA: 30% of supply is emitted over the first 15 days1% per day to depositors (√-backing weighted, claimable anytime) and 1% per day to purchasers (equal share per pull, claimable after each day closes).

Mech 2 — Depositors

15% of supply, streamed continuously over 15 days, weighted by √backing. You earn every second you're in the pool. The clock pauses when the pool is empty. Claimable any time.

Mech 3 — Purchasers

15% of supply as 15 daily pots (1% of supply/day), each split pro-rata by that day's pull count (not fees). Claimable after the day closes.

Mech 1 — Cold-gap surcharge → token

A dynamic slice of each pull's surcharge is routed to give the buyer $RWAF. The slice follows a cold-gap curve: pulls within ~1 min of the last one send 0% to the buyer (all to depositors); after ~60 min of silence, 100% goes to the buyer — rewarding whoever revives a cold pool. This is fee-funded extra buy pressure, not part of the 30% bucket.

Supply & buckets

ParameterValue
Total supply21,000,000 $RWAF (fixed)
Emission window15 days
Depositor bucket15% of supply (√backing stream)
Purchaser bucket15% of supply (daily pots by pull count)
Per day, per side1% of supply
Cold-gap bandhot ≤ 60s → 0% · cold ≥ 3600s → 100%

Launch — single-sided, no seed capital (FWA parity)

Exactly like FWA: the pool is seeded single-sided with tokens only — the team puts up zero SOL for liquidity. The owner sets the opening price; buyers bring the SOL, pulling $RWAF out and pushing the price up. On Solana this is an internal bonding curve that graduates to a Raydium pool once emission ends. 30% is reserved to the emission vault, 20% to the snapshot claim, and the remainder seeds the curve/market.

No-buy-during-emission (FWA's gate): during the 15-day emission, external buys are blocked — the only way to get $RWAF is to earn it (deposit/pull) or take a payout as tokens. Sells stay open. The protocol itself is the only buyer: revenue funds a buyback (price-capped ~10%) that buys $RWAF and routes it 40% to depositors / 40% to purchasers / 20% burned — a deflationary buyback-and-burn, exactly like FWA. Once an acquisition-driven floor exists, the market opens.
Controls & safety

Safety

Native Solana custody — no bridge, no peg. A Solana program PDA holds the NFT directly. There is no wrapped asset, no cross-chain bridge and no peg to trust. Settlement is on-chain and each listing's backing is escrowed independently, so the program is always solvent and un-pulled listings are always withdrawable.

  • Fair-draw completeness (anti-snipe). The draw is bound to the full active set committed at request time — it can't be selectively completed against a favorable subset.
  • Commit-reveal randomness. The entropy (a future slot hash) is fixed before it exists, so a purchaser can't grind the outcome; anyone can independently recompute the winner.
  • Staging queue + activation delay. Deposits made during a pending draw can't react to an in-flight random word.
  • Min-backing floor. Blocks dust deposits that would crater EV and enable sybil / emission farming.
  • Liveness ladder. Settlement window → depositor reclaim → permissionless finalize means assets never lock.
  • Audited, identical to FWA. Same math and defenses as fwa.fun, ported faithfully to Solana.
Before mainnet value: the draw upgrades to Switchboard VRF. Devnet's future-slot commit-reveal is un-grindable but a validator can still influence a slot hash; VRF removes that residual for real money.
Controls & safety

Parameters

All economic parameters are owner-configurable at initialization / update. Defaults:

ParameterDefaultMeaning
Surcharge10%Spread on top of EV for the acquisition fee
Owner fee1%Protocol cut of each acquisition fee
Settlement fee1%Skim from backing when a purchaser keeps
Sell-back85%Share of backing paid to the purchaser on a sell-back — the settlement discount is retained by the protocol
Crown share1%Acquisition-fee share accruing to the Crown pot
Crown threshold10%Margin a new backing must clear the top by to seize the Crown
Min backing0.01 SOLFloor per listing (anti-dust / anti-sybil)
These map directly to the on-chain constants: inverse-weight numerator 1e24, accumulator scale 1e18, and the BPS-denominated fee/threshold values above.
Controls & safety

Roles

Depositor

Lists an NFT with SOL backing. Sets weight, funds the standing bid, earns flat fee dividends + √backing $RWAF stream, can hold the Crown. Withdrawable until pulled.

Purchaser

Pays the EV-priced fee for a random pull. Chooses keep or sell-back. Earns daily-pot $RWAF by pull count, plus the cold-gap surcharge slice.

Protocol (owner)

Initializes the pool, sets parameters, and receives revenue at the fee wallet (1% acquisition fee + 1% keep-settlement fee + the sell-back settlement discount + the 5% Crown tithe). Cannot touch escrowed backing or stranded assets — those are protected by per-listing escrow and the permissionless finalize path.

Open the RWA app →