How RNFT works

A token's creator fees are routed to an on-chain vault, and any NFT holder can burn their item for an exact pro-rata share of it. This page covers every mechanic behind that: the fee routing, the vault math, the full launch to redeem lifecycle, and why it's fully non-custodial.

01 · START

Overview

RNFT is an NFT protocol built on top of pons.family (Robinhood Chain). Every token launched through it arrives with a generated NFT collection attached, and the trading fees that token earns become that collection's redeemable floor -- a balance of ETH that any holder can withdraw their share of, at any time, by burning their NFT.

Nothing about that sentence is a promise. It is a consequence of where the fees are pointed on-chain, and of arithmetic that a holder can check for themselves. The rest of this page explains both, in order.

THE INPUT

Trading fees

pons.family creator fees on every buy and sell

THE STORE

A collection vault

set as fee wallet at launch; immutable on V1

THE EXIT

Burn to redeem

vault / circulating, paid in ETH

02 · START

The core mechanic

pons.family accrues creator fees to a fee wallet address set at token creation time. That is the entire hinge of this design. Most launchpads set the fee wallet to the deployer's personal wallet. RNFT sets it to the collection's vault contract.

Trader
pons.family pool
Fee Locker
Collection Vault
NFT Holder

The two highlighted stages are the ones nobody can redirect; everything left of them is ordinary trading, everything right of them is arithmetic.

Because the fee wallet is set at token creation and is immutable on V1, the destination of the fee stream is fixed the moment the token exists. The deployer cannot change it afterwards. Neither can RNFT. The only account that can ever claim from the fee locker is the vault itself, which is why sweeping is safe to leave open to anybody.

WHY THIS IS THE WHOLE DESIGN

Every other property of the protocol falls out of this one choice. The floor is real because the ETH is really there. The floor rises because trading really accrues fees. Sweeping is permissionless because the money has nowhere else it could go.

03 · START

Lifecycle

  1. Creator deploys vault + collection via the RNFT factory
  2. Creator launches token on pons.family with vault as fee wallet
  3. Trading begins; 70% of swap fees flow to the vault as WETH + tokens
  4. Anyone calls sweep() to credit new WETH to the internal balance (5% protocol fee deducted)
  5. Users burn tokens to mint NFTs from the collection
  6. Each NFT's redeemable value = vault balance / circulating NFTs
  7. Any holder burns their NFT to atomically receive their share

04 · MECHANICS

The vault

RNFTVault is a Solidity contract deployed per collection. It receives WETH and token fees passively from the pons.family fee locker (via Uniswap V3 collect()). It tracks its balance using internal accounting, not address(this).balance.

The sweep()function reads the actual WETH balance, subtracts what's already accounted for, deducts the protocol fee from the new amount, and credits the remainder to the internal balance. This is the only way WETH enters the redeemable pool.

function _sweep() internal {
    uint256 actualWETH = IERC20(weth).balanceOf(address(this));
    uint256 totalAccountedFor = _internalWETHBalance + _accruedProtocolFees;

    if (actualWETH > totalAccountedFor) {
        uint256 newWETH = actualWETH - totalAccountedFor;
        uint256 protocolCut = (newWETH * protocolFeeBps) / 10000;
        _accruedProtocolFees += protocolCut;
        _internalWETHBalance += (newWETH - protocolCut);
    }
}

The creator can withdraw accumulated tokens (the paired token, not WETH) via withdrawTokens(). They cannot withdraw WETH. The protocol fee recipient can withdraw accrued protocol fees. The redeemable pool is untouchable by anyone except NFT holders burning their NFTs.

05 · MECHANICS

Backed floor math

The backed floor price is:

backedFloor = internalWETHBalance / totalSupply

internalWETHBalance is the WETH credited by sweeps minus WETH paid out by redemptions. totalSupply is the number of NFTs currently in circulation (minted minus burned). Both are on-chain values anyone can read.

Division rounds down (Solidity default). This means each redeemer gets slightly less than exact; the dust stays in the vault and benefits remaining holders. Over many redemptions, this dust accumulates -- the last redeemer always gets everything remaining.

06 · MECHANICS

The invariant

Redeeming preserves the floor for everyone else. If the vault holds V and there are c NFTs circulating, each worth V/c:

Before: floor = V / c

One holder redeems: receives V/c, vault now has V - V/c = V(c-1)/c

After: floor = [V(c-1)/c] / (c-1) = V/c

The floor is unchanged. In practice it may tick up by a few wei due to rounding, but it never decreases from redemption. This is mathematically guaranteed by the pro-rata formula.

07 · MECHANICS

Premium & discount

NFTs can trade on secondary markets at prices above or below the backed floor.

  • Premium: market price > floor. Normal for popular collections. The premium reflects art value, community, or speculation beyond the guaranteed redemption.
  • Discount: market price < floor. Creates an arbitrage: buy the NFT cheaply, burn it, receive more ETH than you paid. This self-corrects because arbitrageurs close the gap.

08 · MECHANICS

Fees

  • pons.family split: 70% of swap fees go to the fee wallet (the vault), 30% to the pons.family protocol. 1% fee on every trade.
  • RNFT protocol fee: 5% of newly swept WETH. Deducted on each sweep() call. Capped at 20% max. Configurable per vault at deployment.
  • Effective rate: of every 1 ETH in swap fees, 0.70 goes to the vault, 0.035 (5% of 0.70) goes to the RNFT protocol, leaving 0.665 for NFT holders.

09 · FLOWS

Launching

  1. Go to the Launch page and fill in: token address, mint price, max supply, name, symbol
  2. Click "Deploy Collection" and confirm the transaction
  3. The factory deploys two contracts: RNFTVault and RNFTCollection
  4. Copy the vault address from the success screen
  5. On pons.family, set the vault address as your token's fee wallet
  6. Trading fees now flow to your vault automatically

10 · FLOWS

Minting

Minting burns a fixed amount of the paired token. No ETH enters the vault from minting. The tokens are transferred to the dead address (0x...dEaD) and permanently destroyed.

This is intentional: the vault is funded exclusively by trading fees, not by mint proceeds. Minting is a supply sink for the token, which may increase trading activity and therefore fees.

MINT DILUTION

Each new mint increases totalSupply without adding WETH, so the floor per NFT decreases. Once the collection is minted out (max supply reached), no further dilution is possible and the floor can only increase as fees accumulate.

11 · FLOWS

Sweeping

sweep()is permissionless. Anyone can call it. It reads the vault's actual WETH balance, compares it to what's already accounted for, and credits the difference (minus the protocol fee) to the internal balance.

Sweep is called automatically on every mint and redeem. The keeper bot also calls it periodically to keep the displayed floor price current between user interactions.

12 · FLOWS

Redeeming

Burning an NFT pays out internalWETHBalance / totalSupply in WETH to the holder. This happens in one atomic transaction:

  1. sweep() is called to credit any pending WETH
  2. Payout is calculated (rounds down)
  3. The NFT is burned (totalSupply decreases)
  4. WETH is transferred from vault to the holder

No server signature is needed. No custodian approves it. The contract enforces it. This is the key improvement over PNFT's v1, which requires server-side redemption.

13 · REFERENCE

Worked example

# Setup

mint_price = 1000 tokens

max_supply = 10

protocol_fee = 5%

# Alice and Bob mint

Alice burns 1000 tokens -> NFT #1

Bob burns 1000 tokens -> NFT #2

supply = 2, vault = 0 ETH, floor = 0

# Trading generates 10 ETH in fees

vault receives 10 ETH (WETH)

sweep(): protocol takes 0.5 ETH (5%), internal = 9.5 ETH

floor = 9.5 / 2 = 4.75 ETH per NFT

# Alice redeems

Alice burns NFT #1, receives 4.75 ETH

vault internal = 4.75 ETH, supply = 1

floor = 4.75 / 1 = 4.75 ETH (unchanged!)

# More fees arrive: 3 ETH

sweep(): protocol takes 0.15 ETH, internal += 2.85

vault internal = 7.60 ETH, supply = 1

floor = 7.60 ETH

# Bob redeems

Bob burns NFT #2, receives 7.60 ETH

vault = 0, supply = 0

# Accounting check

Total in: 13 ETH fees

Protocol: 0.65 ETH

Alice: 4.75 ETH

Bob: 7.60 ETH

Sum: 13.00 ETH ✓

14 · REFERENCE

Architecture

RNFTFactory
RNFTVault
RNFTCollection

Factory deploys vault + collection pairs. Vault holds WETH and tracks the floor. Collection is ERC-721 with mint (burn tokens) and redeem (burn NFT, receive ETH).

RNFTFactoryDeploys pairs, registry, protocol fee config
RNFTVaultFee wallet, sweep accounting, payRedemption, swapTokensToWETH
RNFTCollectionERC-721 Enumerable, mint (burn tokens), redeem (burn NFT)

15 · REFERENCE

Trust model

What is trustless vs what requires trust:

Fully on-chain (trustless)

  • Fee accrual (enforced by pons.family)
  • Sweep accounting (anyone can call, math is public)
  • Redemption (atomic burn + pay, no server signature)
  • Floor calculation (read-only view function)
  • Protocol fee cap (max 20%, enforced in constructor)

Requires trust

  • Token-to-WETH swaps (owner-only, could set bad slippage)
  • Art generation (off-chain, IPFS pinning)
  • Frontend availability (can always interact via contract directly)

VS PNFT

PNFT v1 requires a server-held master secret for redemption. Vault keypairs are derived from that secret. Redemption is executed server-side. RNFT has no server component for any financial operation. Every ETH movement is an on-chain transaction the user signs.

16 · REFERENCE

Glossary

Backed floor
The minimum ETH value of an NFT, calculated as vault balance divided by circulating supply.
Sweep
The act of crediting newly arrived WETH to the vault's internal balance. Permissionless.
Redeem
Burning an NFT to receive its pro-rata share of the vault's WETH.
Dead address
0x000...dEaD. Tokens sent here are permanently destroyed. Used for mint burns.
Fee locker
The pons.family contract that holds locked Uniswap V3 LP positions and routes fees to the fee wallet.
Fee wallet
The address that receives 70% of trading fees. Set at token launch. For RNFT collections, this is the vault contract.
Internal balance
The vault's tracked WETH available for redemptions. Updated by sweep(), decreased by redemptions.
Protocol fee
5% of newly swept WETH, taken by the RNFT protocol. Separate from the redeemable pool.
Mint price
The fixed number of tokens burned to mint one NFT. Set at collection creation.

17 · REFERENCE

FAQ

Can the creator steal the vault's ETH?

No. The creator can withdraw accumulated tokens (the paired token) but not WETH. The WETH is only accessible via NFT redemption or protocol fee withdrawal.

What happens if nobody sweeps?

The WETH sits in the vault's ERC-20 balance but isn't counted toward the floor until sweep() is called. Sweep is called automatically on every mint and redeem, so the floor updates whenever anyone interacts.

Can I redeem if the floor is 0?

Yes. The transaction succeeds but pays out 0 ETH. Your NFT is still burned.

What if someone sends WETH directly to the vault?

It inflates the floor for all holders. The sender loses the WETH, holders benefit. This is a donation, not an exploit.

Is the code audited?

The contracts have 56 passing tests including fuzz tests and reentrancy tests. No formal audit has been conducted yet. The contracts are verified on Blockscout.

What chain is this on?

Robinhood Chain, an Arbitrum Orbit L2 (chain ID 4663 mainnet, 46630 testnet). Gas fees are very low.