Skip to main content

Session — stage 0, asset pairing

Closed 13 Sep 2026. What a token can be paired against. Research, then build, behind two checkpoints, both passed. Project state is in notes/STATUS.md; the durable research is in notes/references/reality-rtokens.md and robinhood-stock-tokens.md.

Done

  • Research: a smart contract can hold a Bitget rToken, conditionally. No allowlist; the gates are a sanctions list, freezes, a pause and an upgradeable beacon. Proved on chain and on a fork. The catch: rTokens rebase balanceOf on splits and zero it on delisting, so a raw rToken breaks the curve and a v4 pool. Every tokenised stock on Arbitrum does some version of this.
  • Robinhood Chain for comparison: its stock tokens never move balanceOf, only a UI multiplier, which is why par pairs them raw. Stock-quoted launches are ~1% of par's volume.
  • Built:
    • check-boundaries in make check and CI — the core and src/assets never import each other.
    • IQuoteSource and LaunchFactory.quoteSource — unregistered quotes are asked of a source.
    • BasketFactory — weights in bps against reference units, one basket per composition, a USDT payout slot, enabled and curated flags.
  • Proved: StockPairing.fork.t.sol runs real rNVDA through a basket, through Reality's own split and pause, and through BasketFactory with real USDT0. BasketLaunch.t.sol runs a composed, curated basket end to end locally. make check 145/145, make test-fork 11/11.
  • FEATURES.md stage 0: single stock ✔, composed basket ✔, curated basket ✔.

Decided — do not relitigate

  • D18 — a token whose balanceOf rebases is never a quote, only a pro-rata wrapper of it. The developer's call: adapt to Bitget, do not wait for them to change the token.
  • D19 — stage 0 lives behind the quote seam and is enforced by check-boundaries, because the developer expects to return to pairing.
  • D20 — the quote-source seam. The one deliberate core crossing, so pairing never needs another.
  • D21 — one basket per composition (answers O13, flagged as likely to change; the factory is upgradeable for that reason) and reference-unit sizing, which enforces D14's 10% floor without an oracle.
  • Pauses and weekends make a basket's pool price stale, not its books. Accepted as market risk; a live price would need an oracle. The interface should say "market closed".
  • Dividends are parked by the developer. O18 stays open.

Still open in this thread

  • FEATURES.md stage 3 still lists "a restricted quote asset graduates through a permissioned pool". The research says rTokens do not need it. The developer has not said whether to drop it.
  • Multi-stock baskets are proved with mocks only; real rTokens one at a time.
  • Nothing wires BasketFactory into a deployment. Deploy.s.sol knows neither it nor setQuoteSource.
  • Questions for Bitget are in reality-rtokens.md, now optional rather than blocking.