Docs

How MERGER works

The book, the desk, receipts, the rail, the pool and Holder Rewards, with the source behind each number and the steps to check it yourself.

Updated 2026-09-30. Measured figures carry the date they were read.

The book

The same share trades as five to nine tokens from different issuers (issuer registries read 2026-09-28 UTC). TSLA has a Robinhood Stock Token, xStocks TSLAx, Ondo TSLAon, Binance TSLAB, Coinbase TSLAc and a Dinari token, plus a long tail. The book reads five of those issuers, Robinhood, xStocks, Ondo, Binance bStocks and Coinbase, for each share they issue, and leaves Dinari and the long tail out. Each underlying gets one view: a reference price, each of those tokens set against it in USD per share, and the gap in basis points.

Each issuer's token is a separate claim, with its own terms, custody and legal form. The book lines them up by the share they track. It never presents two issuers' tokens as one thing you can swap one for one.

Where each row comes from

ReferenceChainlink feeds, read with latestRoundData across several public RPCs: on Robinhood Chain where one exists; gold and ZEC use Chainlink feeds the row links. A feed priced from DEX pool state never counts, so GLD, whose Robinhood Chain feed is one, shows its reference as unread.
Route rowsStock Tokens from the Robinhood registry, matched by contract address, each priced from the cheapest Uniswap v3 or v4 pool on Robinhood Chain for a 1,000 USD order.
Reference rowsxStocks, Ondo, Binance bStocks and Coinbase, named by issuer, each priced from its deepest DexScreener pool. A token whose deepest pool holds under 10,000 USD stays unread.
BackingThe reserve ratio an issuer publishes, with its age and a link, where one exists: xStocks publishes one. "stated" means the issuer says the token is backed and publishes no figure the book can read. The book does not check it.
MultipliersEach issuer's own source: Robinhood currentMultiplier, the xStocks multiplier API, Ondo sValue, bStocks uiMultiplier() and the Coinbase multiplier API.
GoldPAXG and XAUT against Chainlink XAU/USD.
ZECThe Binance and Kraken order-book mids, the Coinbase Exchange last trade and the 1Click token price.
Event pairKalshi and Polymarket on the Fed decision at the October 2026 meeting, matched by hand. You can compare the two prices; the desk never routes them.

Robinhood's own share has no row, as Robinhood Chain's terms (section 5.7(l)) require. The book reads Stock Tokens from the registry by address, so a look-alike with a borrowed ticker never enters it. On 2026-09-28 UTC DexScreener listed a fake TSLA on Robinhood Chain at 0xb3a8316f2F1828f25E0b43cE9B3D2302FcC7d455, with invented liquidity.

Normalisation by multiplier

Issuers fold dividends into a multiplier, so over time one token stands for a little more than one share. Robinhood and xStocks call it currentMultiplier; Ondo calls it sValue, shares per token. A venue that quotes per token prints a higher price than a venue that quotes per share, even when both sit at parity.

The book divides each per-token price by its issuer's multiplier to reach USD per share. It records for each token and venue whether the venue quotes per token or per share, so it divides once. A multiplier the book cannot read makes the row unread; it never assumes 1.0.

Worked example: SPY, read 2026-09-28 00:47 UTC
Chainlink RHSPY / USD on Robinhood Chain (prices the Robinhood token)771.21
Robinhood multiplier1.001718
Reference, USD per SPY share771.21 ÷ 1.001718 = 769.89
Ondo SPYon, DEX price per token777.36
Ondo sValue1.009473
SPYon, USD per share777.36 ÷ 1.009473 = 770.07
SPYon against the reference+2.3 bps

Compared raw, SPYon would look 97 bps rich. The multiplier accounts for all but 2.3 of those bps. Kraken's SPYx book runs the other way: it quotes per share, 769.53, which sits −4.7 bps from the reference as printed. Dividing that price by the xStocks multiplier (1.005715) would report a false −61 bps.

Row states

live
The source answered within its freshness limit. The row shows its numbers, its source link and its age.
stale
The source answered, but the reading is older than the limit for its class, or its market is closed. The row keeps the number next to its age and the reason. The book never picks a stale row as the best route, and a best route set against a stale reference is marked stale.
unread
The source did not answer, or answered with something the book could not check. Every number in the row stays empty. The book never fills the gap with zero or an older value.

Chainlink's equity feeds on Robinhood Chain update on a 24-hour heartbeat or a 0.5 percent move, and follow a market schedule of 24 hours a day, five days a week (Chainlink feed directory read 2026-09-28 UTC). A price 20 hours old can sit inside that heartbeat, so the book sets its own freshness limit per class. Outside market hours it marks a stock feed stale and gives "market closed" as the reason.

Route rows and the best route

Route rows are Stock Tokens the desk can buy on Robinhood Chain. For each one the book asks Uniswap's quoters on chain 4663 what a 1,000 USD order costs: QuoterV2 for v3 pools and V4Quoter for v4 pools. The cost reads in basis points, pool fee included. The best route is the cheapest live route row whose deepest pool, as DexScreener reports it, holds at least 10,000 USD. A row under that floor, or with no liquidity read, is never best. The book names the best route's pool: version, fee tier and hook. A v4 pool with a hook counts when that hook sits on MERGER's allowlist.

Reference rows show other issuers for comparison. The desk cannot buy them, and their numbers never feed a trade.

The desk

The desk runs in your browser. It creates a one-time position account, funds it from shielded ZEC through the rail, buys your basket on Robinhood Chain and sends the proceeds back to a fresh shielded address. Your browser signs every transaction. No MERGER server holds a key or your funds.

Steps

  1. Pick a basket. Choose up to five Stock Tokens from the book's route rows, give each a whole percentage so they add up to 100, and enter a ZEC amount.
  2. Create or unlock the position account. Your browser generates the key, encrypts it under your passphrase as a standard v3 keystore (scrypt) and keeps it on this device. Save the keystore file. Opening the account takes the passphrase and the keystore (the saved file, or this browser's copy). Lose either and the account is gone unless you revealed the key and wrote it down; nobody, MERGER included, can recover it.
  3. Give two fresh u1 addresses from your wallet: one for refunds, one for the exit. The desk accepts a mainnet u1 with an Orchard receiver and no transparent receiver. It refuses t1, tex1, zs1 and testnet addresses.
  4. Quote. A dry quote shows what the rail offers. The live quote runs when you click. Before the desk shows the one-time t1 deposit address, it checks that the rail echoed your recipient and refund address.
  5. Pay from your wallet: Zodl, Zingo, Zkool, Vizor or Cake. Scan the QR code, a single-recipient ZIP 321 request, or paste the copied request, or the address and the exact amount, into your wallet. Send before the time shown.
  6. Wait for the credit. The desk polls the rail until ETH reaches the position account. Credit follows 5 confirmations on Zcash: 3 to 12 minutes after the payment was mined across 12 deposits measured on 2026-09-28 UTC (how it was measured).
  7. Buy each leg. For every swap the desk checks that the chain is 4663, simulates the transaction, sets a minimum out from the simulation and a deadline, then signs. A reverted swap shows "Reverted on chain" and stops the flow.
  8. Check the holdings. The desk reads each leg's balance from the chain and can hand the mix to a receipt as percentages and a size band.
  9. Exit. Sell each leg to USDG, quote USDG to ZEC with your exit u1, send the USDG to the rail's deposit address and wait. ZEC lands in Ironwood about 140 seconds after the deposit confirms, by the time estimate the rail's exit quotes carried on 2026-09-28 UTC.

Limits

  • A basket holds up to five legs.
  • A fund takes 0.01 to 5 ZEC. ZEC into ETH on Robinhood Chain quoted up to about 5 ZEC, and larger orders failed (read 2026-09-28 UTC), so the desk stops at 5.
  • MERGER's own floor is 0.01 ZEC on every rail leg: at least that much in on a fund, and at least that much out on an exit. It sits above the bridge connector's, which strands deposits below 0.001 ZEC with no refund path. A route can set a higher floor of its own, and then the dry quote refuses the amount.
  • Exits from native ETH failed above about 1,000 USD, while exits from USDG quoted up to 50,000 USD (read 2026-09-28 UTC). The desk exits through USDG.

Fees

The desk reads the rail's fee from the quote the rail echoes back, and shows it before you send. Keyless quotes echoed 20 bps, and 1 bp on stablecoin routes (read 2026-09-28 UTC). MERGER adds no fee of its own: its share of each quote is 0 bps. Uniswap pool fees sit inside the swap quote.

Gas

A swap on Robinhood Chain cost about 0.005 to 0.012 USD in gas. That range comes from 15 recent Uniswap swaps, 14 through the Universal Router and one through SwapRouter02, which used 101,642 to 229,529 gas at about 0.02 gwei, priced at 2,668 USD per ETH (receipts read 2026-09-28 UTC). An account holding USDG and no ETH cannot pay for any transaction, because no public paymaster accepted USDG (checked 2026-09-28 UTC). The desk keeps an ETH reserve on the position account for gas, and it uses one gas figure for both the reserve and the limit it signs.

Stock Tokens are not offered to US persons and are restricted in Canada, the UK and Switzerland. That rule is yours to keep: do not use the desk where it applies to you.

Receipts

A receipt is a page at /r/ plus a random id, with its own card on X. It shows a position as a mix, with a size band if you add one, never as an amount.

What a receipt stores

MixUp to five symbols from the book, each with a whole percentage from 1 to 100, adding up to 100.
Size bandOptional and off by default: under 1k, 1k to 10k, 10k to 100k, or over 100k USD.
DateBy default the week you made the receipt, stored as the UTC date of its Monday and shown as "Week of". You can pick the exact UTC day instead.
ProofYour X handle, if you proved it with a post. Never an address: the server refuses a receipt that names one, the position account included.

Each detail you add makes a receipt easier to match to one account on Robinhood Chain. The week with no size band gives the least away.

The server checks every field against those lists and stores them, with whether the date is a week or a day. A proven handle adds the id of the X post and the UTC day of the proof, and a marker under that post id holds the receipt id and the day, so one post cannot prove two receipts. The server stores nothing else about a receipt. A receipt has no free-text field, so no visitor can write words onto a card. The id is 16 random bytes and the link carries no secret, so you can put a receipt link in a public post.

Proof levels

Self-reported
The default. The card shows the mix you entered or the desk handed over. Nobody checked it.
Handle proven by post
MERGER gives you a one-time code. You post it from your X account, and MERGER reads that post through X's public oEmbed endpoint and takes the handle from the post's author, never from anything you type. One post proves one receipt. The proof shows who made the receipt; the mix stays self-reported.

What a card never shows

An address of any kind, a transaction id, an exact amount or an exact time. The card draws from the stored record and ignores any text in a link. A screenshot of a card proves nothing on its own: the page at /r/ is the record.

The rail

NEAR Intents 1Click moves value between ZEC and Robinhood Chain in both directions, keyless, in public mode. MERGER's server calls it for you, pins every asset by id and checks every answer. NEAR Intents added Robinhood Chain on 2026-09-22 (source).

  • Pinned assets. 1Click listed five assets with the symbol ZEC (token list read 2026-09-28 UTC), so MERGER never looks one up by symbol. It uses ZEC nep141:zec.omft.near, ETH on Robinhood Chain nep141:hood.omft.near and USDG nep141:hood-0x5fc5360d0400a0fd4f2af552add042d716f1d168.omft.near.
  • Dry, then live. A dry quote shows the price and issues no deposit address. A live quote runs when you click and issues a fresh deposit address.
  • Echo check. The rail echoes the recipient and refund address it will pay. If either differs from what MERGER sent, or the echo is missing, MERGER refuses the quote and shows no deposit address.
  • Deadlines. Send before the deadline in your request. The rail's own quote deadline fell 72 hours later on quotes read 2026-09-28 UTC, and marks when the deposit address goes cold; funds sent after it can be lost.
  • Refunds. On a fund, a failed or short deposit goes back to your refund u1, and so does any excess on a successful swap. On an exit the refund address is the position account, so USDG comes back there. The rail keeps its refund fee from each refund: 0.00032 ZEC from a ZEC deposit and 0.075 USDG from a USDG one (quotes read 2026-09-28 UTC). The operator may handle a refund by hand, which can take days, and its terms carry no obligation to refund (1Click terms, section 12.4).
  • Rate limit. 20 quotes per visitor per 10 minutes, counted against a keyed hash of the IP address and charged when the rail answered.

1Click publishes the recipient and refund address of every quote to anyone holding its deposit address (status endpoint probed 2026-09-28 UTC). Read what stays public.

The pool

$MERRGER bonded on the Pons launch curve, and Pons opened its graduation pool on Uniswap v4 on Robinhood Chain at 2026-09-30 14:30 UTC, in block 76,588,298. The pool pairs native ETH with the MERGER contract at 0x1dFd9c22B6C37AFa6332E784D860159876575877. The pool page reads that pool through /api/pool and shows each figure with its source and age. This chapter says where each figure comes from and how to check it.

The graduation pool, verified on chain 2026-09-30
Pool id0x50a86eb185892bc3523610dc726c030872d106017514944e5fb37ce2e439fba6
ChainRobinhood Chain, chain id 4663
ProtocolUniswap v4: one pool inside the PoolManager at 0x8366a39cc670b4001a1121b8f6a443a643e40951, addressed by its id
PairNative ETH as currency0, $MERRGER as currency1, 18 decimals each
CreatedBlock 76,588,298, 2026-09-30 14:30 UTC

What /api/pool reads, and from where

Pool keyThe fee tier, tick spacing and hook come from the pool's Initialize log on the PoolManager in block 76,588,298, read once and kept, because a v4 pool key never changes.
PricegetSlot0 on Uniswap's StateView at 0xf3334192d15450cdd385c8b70e03f9a6bd9e673b, keyed by the pool id. sqrtPriceX96 squared, divided by 2192, gives currency1 per currency0: $MERRGER per ETH. The ETH price of one $MERRGER is the inverse. Both tokens carry 18 decimals, so no decimal shift applies.
Active liquiditygetLiquidity on the same StateView, in the pool's own units, read in the same batch. A pool that fails to answer it is not read at all.
USDThe Chainlink ETH / USD feed on Robinhood Chain at 0x78F3556b67E17Df817D51Ef5a990cDaF09E8d3A9, read with latestRoundData, multiplied by the ETH price. The feed follows the book's rule: live up to an hour old, stale up to its 24-hour heartbeat plus 5 minutes, unread beyond. A USD figure is as fresh as the older of its two inputs, so a stale feed makes the USD price stale while the ETH price stays live.
Liquidity and 24 h volume in USDDexScreener's token-pairs/v1 answer for the contract, filtered to the graduation pool id. A pair under any other id never counts.
Supply and burnttotalSupply on the token contract, and balanceOf the dead address 0x000000000000000000000000000000000000dEaD as the burnt amount. Circulating supply is total minus burnt.
Fully diluted valueTotal supply multiplied by the USD price; value after burns uses the circulating supply. Both stay absent while the USD price is.

The chain read and the DexScreener read run side by side, and each keeps its own age. When one fails, the other still refreshes, and the failed one keeps its last reading with its age growing until it turns unread. The reader tries at most once every 30 seconds.

States

live
The chain answered within the last 90 seconds. The price, the supply and the pool key show with their age. DexScreener's figures carry their own state on the same limit.
stale
The last good chain read is between 90 seconds and 10 minutes old, or the feed behind the USD figure is older than an hour. The number stays next to its age and the reason.
unread
No chain read has succeeded for 10 minutes, or the feed passed its heartbeat plus 5 minutes. Every number behind that source stays empty. The page never fills the gap with zero or an older value.

The dust pools

Four other Uniswap pools of the same pair existed on 2026-09-30, each holding under 3 USD (DexScreener, read 2026-09-30 UTC). A price from a pool that thin moves on a dollar. The pool page shows the graduation pool alone and reads no number from the others; /api/pool counts them and sums their liquidity as dust, so you can see how little sits there.

The desk

The desk lists $MERRGER as a leg of its own, bought from native ETH through this pool. The desk shows whether that leg is on.

Verify it yourself

  • The pool on DexScreener. dexscreener.com/robinhood/ followed by the pool id shows the same pair, its liquidity and its 24 h volume. Set its price in ETH against the ETH price on the pool page.
  • The Initialize log. Open the PoolManager's logs on the explorer and find the Initialize event in block 76,588,298 whose id topic is the pool id. It names currency0 as the zero address, which is native ETH, and currency1 as the MERGER contract, with the fee, tick spacing and hook the pool page prints.
  • The token. The contract on the explorer shows the total supply and the holders. The dead address's balance is the burnt figure.
  • The price. Call getSlot0 with the pool id on the StateView at 0xf3334192d15450cdd385c8b70e03f9a6bd9e673b through any RPC for chain 4663. Square sqrtPriceX96 and divide by 2192: that is $MERRGER per ETH, and one over it is the ETH price the page shows.

Holder rewards

Holder Rewards are ETH in a rewards wallet, the vault, which an engine pays out once a day to the twenty $MERRGER holders with the most weight. Weight is amount times a multiplier for holding time. Every cycle writes a public receipt, and the vault page shows the wallet and each receipt. The token itself carries no yield, no dividend and no share of fees; the rewards are separate from it, and funding is discretionary and can stop.

One cycle

  1. Snapshot. The engine picks a block and reads every $MERRGER balance at that block from the token's Transfer logs.
  2. Lots. For each holder it keeps every inbound transfer as a lot with its block time. An outbound transfer spends the oldest lots before the newer ones, so selling resets the clock for what moved and leaves the rest at its age.
  3. Weight. Each lot weighs its amount times the multiplier for its age. A holder's weight is the sum of its lots.
  4. Rank. The twenty heaviest holders make the cycle. The addresses under who never ranks are left out before ranking.
  5. Budget. The budget follows a rule: a fixed amount of ETH per cycle, or a percentage of the wallet balance, under a cap per cycle and a cap per address. The rule on 2026-09-30 is 28 percent of the vault balance per cycle, at most 50 ETH per cycle and at most 20 ETH per address. A share under the dust floor is skipped. What a cap or the floor holds back stays in the wallet.
  6. Pay. Each of the twenty receives the budget times its weight over the sum of the twenty weights, up to the per-address cap, as one ETH transfer from the rewards wallet.
  7. Receipt. The engine writes a receipt for the cycle: the block, the rule it ran under, every balance in the snapshot with its weight, and for each of the twenty the payout and the transaction hash.

The weight

The multiplier ladder, by the age of a lot
Day 0 to 61.0x
Day 7 to 291.5x
Day 30 on2.0x

weight = sum over lots of (amount × multiplier of the lot's age)

payout = min(budget × weight ÷ sum of the twenty weights, cap per address)

Age counts from the block the lot arrived in. A purchase through the pool arrives as a Transfer from the PoolManager, so it counts from that block. A transfer between two wallets you own spends lots from the sender and opens a fresh lot in the receiver, at age zero.

Worked example

The figures below are an example with round numbers, chosen to show the arithmetic. They come from no cycle and no wallet. Suppose the budget for a cycle is 5.6 ETH, the per-address cap is 20 ETH, and the twenty weights add up to 100,000,000. Three of the twenty:

Example: weight and payout
Holder A: 10,000,000 held 45 days10,000,000 × 2.0 = 20,000,000, so 5.6 × 20,000,000 ÷ 100,000,000 = 1.12 ETH
Holder B: 10,000,000 held 10 days10,000,000 × 1.5 = 15,000,000, so 5.6 × 15,000,000 ÷ 100,000,000 = 0.84 ETH
Holder C: 30,000,000 held 3 days30,000,000 × 1.0 = 30,000,000, so 5.6 × 30,000,000 ÷ 100,000,000 = 1.68 ETH

Holder C holds three times what A holds and weighs one and a half times as much. The multiplier does that, and it keeps doing it until C's lot reaches day 7, then day 30.

Example: a sale under FIFO
Bought6,000,000 bought 40 days ago, then 4,000,000 bought 20 days ago
Sold5,000,000, spent from the older lot
Lots left1,000,000 aged 40 days at 2.0x, and 4,000,000 aged 20 days at 1.5x
Weight1,000,000 × 2.0 + 4,000,000 × 1.5 = 8,000,000

The sale took 5,000,000 from the 6,000,000 bought earlier, so that lot shrank and kept its age. The later lot was untouched.

Who never ranks

The engine drops these addresses before ranking: the dead address 0x000000000000000000000000000000000000dEaD and the zero address; the Uniswap v4 PoolManager 0x8366a39cc670b4001a1121b8f6a443a643e40951, which holds the graduation pool's $MERRGER; the Pons factory 0x7ed598bcef8bd9edd8c97a195c6d13f40801ec7e and the launch curve contract; the launch wallet 0x8bec20aef535bdb8eba8b06d5268a4cf95baa2a3; and the rewards wallet itself, whose address is on the vault page.

Limits

  • Discretion. Funding is discretionary and can stop. A cycle can pay zero.
  • Estimate. Holding time comes from Transfer logs, read in chunks from public RPCs. A log the engine could not read at cycle time can make a lot younger than it is. The receipt is the record of what was paid.
  • Recomputed. The twenty are ranked again from a fresh snapshot every cycle. A place in one cycle gives no claim on the next.
  • Off-site. The engine runs off-site and holds the rewards wallet key. No MERGER server holds that key. When the engine is off, no cycle runs.
  • No contract. Payouts are plain ETH transfers from a wallet. Nothing is locked, and nothing enforces a cycle.

Verify it yourself

  • The receipt. Open the vault page, pick a cycle and open its receipt. It names the block it snapshotted, the rule it ran under, and for each payout the holder, the amount in ETH and the transaction hash.
  • The transfer. Open that hash on the explorer. The sender is the rewards wallet named on the vault page, the receiver is the holder in the receipt and the value is the payout.
  • The balance. Call balanceOf on the token contract for a holder at the receipt's block, through any RPC for chain 4663 (eth_call takes a block number), and set it against the balance in the receipt.
  • The age. On the explorer, open the token's transfers filtered to that holder and read them from the oldest. Spend each outbound transfer against the oldest lots and the lots left are the ones the receipt weighed.
  • The sum. Add the twenty payouts. They come to at most the cycle's budget and at most the cycle cap.

Verify it yourself

A Stock Token against the registry

Open the Robinhood registry, find the symbol and copy its contractAddress. Open that address on the explorer and check the name and symbol. A live route row in the book links the pool it quoted, on the explorer or on DexScreener: one of that pool's two tokens must be that same address. A token missing from the registry is not a Stock Token, whatever its ticker says.

A reference price

Every book row links its source. For a Chainlink feed on Robinhood Chain, find the pair in the Chainlink directory for Robinhood Chain and read its proxy on the explorer. The gold and ZEC references are Chainlink feeds outside that directory: follow the link on the row.

A rail quote

Anyone holding a deposit address can read its record at 1click.chaindefuser.com/v0/status?depositAddress= followed by the address. You see the same record a stranger would.

The Ironwood figures

ironwood.live serves the shielded supply and turnstile figures the privacy page shows.

Where this page and the chain disagree, believe the chain.

Sources

Live on this site: the merged book, the rail quote and receipts, each read from the source it names. $MERRGER: contract 0x1dFd9c22B6C37AFa6332E784D860159876575877 on Robinhood Chain.