Docs · how it works

Packs, tickets & slabs

Pons creator fees fill a sealed pack of real stock cards. When it is full, one holder is drawn and rips it open. Nobody pays to pull; holding is the only way to get tickets.

1What a pack is

A pack is a budget of ETH sealed inside the SlabVault contract on Robinhood Chain. When it is drawn it becomes five cards. Each card is a tier (common, rare, holo or chase), one tokenized stock from the current series, and an ETH value. Right after the draw the keeper buys exactly those stocks on Uniswap, so every card is backed 1:1 by real stock tokens sitting in the vault until its winner takes them.

  1. Fill. Creator fees flow into the vault and the pack pool rises live on the home page.
  2. Seal. At the pack target the keeper seals a pack: a hidden seed's hash, the Merkle root of the ticket list, and a reveal block a few L1 blocks ahead.
  3. Draw. After the reveal block, settlePack mixes the seed with that block's hash and draws the winning ticket and the five cards on-chain.
  4. Fill the cards. The keeper swaps each card's ETH into its stock in one transaction.
  5. Rip. The winner opens /rip/?pack=N, tears the pack and decides card by card: keep the stock or sell it back.

2How fees fill it

The token trades on Pons. Its creator fees (ETH) reach the vault either directly (the vault is the Pons fee recipient) or forwarded by the founder with a plain, public transfer. Anyone can call harvest(), which splits every new ETH:

WhereShareWhat it does
Pack pool90%fills the next pack
Infra10%server, RPC and keeper gas

A pack is sealed when the free pool reaches the pack target (0.02 ETH). Its budget is the whole free pool, capped at 0.5 ETH. There is no way to buy into a pack. If no fees arrive, no pack fills. Every fee-in and harvest is listed on the reserve.

3Tickets

Right before a pack is sealed, the server snapshots holders of and publishes the list as /api/pack/N/tickets.json, kept forever. Its Merkle root goes on-chain with the seal, so the list cannot change after the fact.

  • Eligible: at least 100,000 tokens (0.01% of the 1B supply). The vault, the Pons curve, hook and pool, and team wallets are excluded.
  • Hold multiplier: rises from 1.0× to 3.0× over 24 h since your wallet's last outgoing transfer (or its first receive). Any sell or send resets it to 1.0×.
  • Tickets = floor( min(balance, 1% of supply) × multiplier ), counted in whole tokens.
  • Cap: no wallet holds more than 10% of all tickets (re-applied until stable).
  • Ranges: wallets in ascending address order, each owns tickets start … end − 1. One ticket number is drawn per pack.

4The draw

Robinhood Chain has no Chainlink VRF, so SEALSLAB uses a commit → future block → settle draw that anyone can replay:

seal: commitment = keccak256(abi.encodePacked(uint64 id, bytes32 seed)) revealBlock = L1 block now + 1…20 settle: entropy = keccak256(abi.encodePacked(seed, blockhash(revealBlock), uint64 id)) ticket = uint256(entropy) % totalTickets winner = the wallet whose range holds ticket (proved with a Merkle proof)

The keeper commits the seed before anyone can know the reveal block's hash, and the contract rejects a seed that does not match. On Robinhood Chain block.number is the L1 block number (about 12 s) and a block hash is only readable for 256 L1 blocks. If the keeper does not settle in that window, anyone can call expirePack and the whole budget goes back to the pool.

What the keeper still controls, honestly: it could refuse to settle a draw it dislikes and let the pack expire. That never moves money to anyone; the budget simply returns to the pool and a new pack is sealed with a new seed. Every expiry is public on the reserve.

Verify any pack in your browser

5Tiers & odds

Each of the five cards rolls its own tier: roll = keccak256(entropy ‖ "tier" ‖ i) mod 10000. Odds and weights are constants in the contract.

TierOdds per cardRollWeightExample value*

* One card of that tier in a 0.02 ETH pack whose other four cards are common. The five values always add up to the whole budget.

The stock on each card is series[ keccak256(entropy ‖ "stock" ‖ i) mod series.length ]. The current series:

StockNameTokenPool fee
Loading…

Stock tokens are Robinhood's official tokenized stocks on Robinhood Chain (the vault only accepts the official token code) with a WETH pool on Uniswap V3. The pool fee is paid once when a card is filled and once more if it is sold back. The series changes only for future packs.

6Honest value

A pack is always worth its whole ETH budget at fill time. Tiers only decide how that budget is split across the five cards and which card shines:

value_i = budget × weight_i / Σweight (integer division, remainder to card 1)

So a chase card is big because the other four are smaller, not because value appears from nowhere. SEALSLAB never shows a "market value" above what was spent. After the fill, stock prices move and swaps have slippage and pool fees; the reserve shows the shares actually bought and every sell-back shows the ETH actually paid, as they are.

7Keep the stock or sell it back

Only the drawn wallet can act on its pack. Open /rip/?pack=N, connect that wallet on Robinhood Chain (4663), rip the pack, then per card:

  • Keep the stock (redeem): the card's shares move from the vault to your wallet. Keep all does the five in one transaction (redeemAll).
  • Sell back (sellBack): the vault swaps that card's shares to WETH on Uniswap at the pool price, unwraps it and sends ETH to you in the same transaction. The page quotes the price first and sets a 1% slippage limit by default.

There is no expiry: cards wait in the vault until you act. If the keeper has not bought a drawn pack's stock within an hour, the rip page lets you fill it yourself. Ripping is only the on-chain "opened" moment; it does not move anything. If an ETH push to your wallet ever fails, the amount is kept for you and pull() sends it. You pay only gas (a fraction of a cent on Robinhood Chain).

8Risks & disclosures

  • No purchase, fees only. Packs are funded only by Pons creator fees that actually arrive. Nobody can buy a pack, a pull or a ticket from SEALSLAB.
  • Tickets come from holding the token, with a public list per pack. Holding the token gives you a chance at a draw, nothing more; most holders are never drawn.
  • Not for US persons. Tokenized stocks may not be available in your jurisdiction. Check your local rules before you keep a card.
  • Stock tokens are not shares held at a broker. They follow Robinhood's tokenized stock terms, can be paused or restricted by their issuer, and their pool price can differ from the market.
  • Unaudited contracts. SlabVault is a single contract without proxy or upgrades, with a 48 h timelock on admin changes, but it has not been audited. Bugs can lose funds.
  • Prices move. A card's ETH value is fixed at fill time; what the stock is worth later is not. Sell-backs are subject to pool depth, fees and slippage.
  • Keeper risk. If the keeper stops, packs stop sealing. A drawn pack that is not filled within 1 hour can be filled by its winner (fillCards, quoted with a slippage limit). Budgets never leave the vault except as stock for the winner (fill) or back to the pool (expire).
  • Not financial advice. Nothing on this site is a recommendation to buy, hold or sell anything. Every pack's seed is committed on-chain before the draw.

9Addresses

Robinhood Chain (chain id 4663). Explorer: robinhoodchain.blockscout.com.

WhatAddress
Loading…

10FAQ

Do I need to do anything to enter?
No. Hold at least the minimum in a wallet you control. Each pack's ticket list is a snapshot taken right before it is sealed. Selling or sending resets your multiplier to 1.0×.
How do I know I was drawn?
The live log and the reserve show the winner of every pack. Paste your address into the ticket checker above or open your binder; drawn packs show up there with a rip link.
Can the team pick the winner?
No. The seed is committed before the reveal block exists, the ticket list root is committed at the same time, and the contract derives the winner from both plus the block hash. The only lever is refusing to settle, which returns the budget to the pool. Recompute any draw yourself.
Does a card ever expire?
No. Unredeemed cards stay as stock in the vault for their winner. The reserve shows stock held next to stock owed to winners.
Why tokenized stocks and not the token itself?
The point is that a card is something real: a share-backed token you can keep or turn into ETH at the pool price. Stray launched-token balances in the vault are burned by harvest().
Where is the contract address of the token?
It drops at launch and appears in the navbar, the footer and here. Only trust the address shown on this site and pinned on our X and Telegram.