How Posy works

Posy builds one transaction that buys several tokenized stocks at once, and sends it from your wallet to Uniswap's Universal Router on Robinhood Chain. It deploys no contract, runs no server that touches funds, and charges no fee. This page explains every step and names every contract involved.

Getting started

You need an EVM wallet (MetaMask, Rabby, Coinbase Wallet, Trust…) on Robinhood Chain. The app adds the network for you; by hand it is:

NetworkRobinhood Chain
Chain ID4663
RPChttps://rpc.mainnet.chain.robinhood.com
Gas tokenETH
Explorerhttps://robinhoodchain.blockscout.com

Bring ETH over from Ethereum with the canonical bridge (about ten minutes) or Relay (under a minute), as Robinhood's own docs describe. Then either pay for baskets in ETH directly, or swap some ETH for USDG in the app's Trade tab. Keep a little ETH for gas; a whole basket costs cents.

Buying a posy

  1. Pick. Choose a ready-made basket or build your own from every listed stock and fund, up to twelve names. Weights are percentages and must add up to 100%.
  2. Quote. Enter an amount. The amount is split by weight — the last leg takes the rounding, so the legs add up to exactly what you entered — and every leg is quoted on every one of its pools at the same block.
  3. Approve (paying USDG only). An ordinary ERC-20 approval of Permit2 for exactly the basket's cost. Skipped if an earlier approval still covers it.
  4. Sign (paying USDG only). A Permit2 permit letting the Universal Router take that amount once, within 30 minutes. Free, and skipped if an unexpired permit still covers it.
  5. Buy. Posy re-quotes every leg — you may have spent a minute in your wallet — simulates the transaction from your address, and only then asks you to send it. One transaction; every stock lands in your wallet.

Paying in ETH skips both the approval and the signature: the ETH goes in as the transaction's value, the router wraps it and sells it for USDG through the deepest WETH/USDG pool, and the legs spend that. Each leg is planned from the least the ETH is guaranteed to fetch, and anything it fetches above that floor comes back to you as USDG in the same transaction.

Routing

Robinhood Chain has two Uniswap deployments — v3 (one pool contract per pair and fee) and v4 (every pool inside one PoolManager) — and tokenized stocks trade on both. Which is deeper differs stock by stock: at the last scan of the listed stocks got their best $1,000 fill on v4, the rest on v3.

So Posy does not choose in advance. For each leg it asks Uniswap's own quoters — QuoterV2 for v3, V4Quoter for v4 — what that exact amount would receive from each candidate pool, and routes the leg to whichever pays most. The quoters simulate the real swap, so a quote includes the pool's fee and its price impact. All the quotes for a basket are one Multicall3 call, answered at one block.

Which pools are candidates is decided by tools/scan-markets.mjs, which reads every v3 USDG pool from the factory and every v4 USDG pool from the PoolManager's own Initialize events, then quotes each at a pinned block. v4 pools with a hook are never used: a hook runs its own code on every swap through it. A token is listed if its best pool fills a $1,000 buy and a $1,000 sell within 3%; a pool is kept as a route if it quotes within 5% of the best. The last scan listed tokens at block .

Minimums, and all-or-nothing

Every leg carries the least it will accept: its fresh quote less your slippage allowance (0.5% by default; 0.3% and 1% are one tap away). The Universal Router enforces it — a v3 leg reverts with V3TooLittleReceived, a v4 leg with V4TooLittleReceived. Because the whole basket is one transaction, one leg reverting reverts every leg: you never end up with half a basket. A leg whose quote costs more than 3% over the pool's mid price is refused before anything is signed.

Permit2 and approvals

The Universal Router takes tokens through Permit2, Uniswap's shared approval contract. Posy always approves Permit2 for the exact amount a trade spends, never an unlimited amount, and asks you to sign a permit naming the token, the amount, the spender (the Universal Router), a 30-minute expiry and a single-use nonce. When the trade lands, both the approval and the permit are used up.

A permit is bound to the address that signed it: someone who copies your signed transaction and sends it themselves is refused (InvalidSigner), and sending it twice is refused (InvalidNonce). Both were checked against the real contracts — see below.

Selling

In the Portfolio tab, tick any holdings — or all of them — and they are sold for USDG in one transaction. Each token needs its own exact approval of Permit2 the first time, then one signature covers them all (a Permit2 batch permit), and the router sells every one to whichever pool pays most. The same minimums apply.

Cash

USDG waiting for the next basket can sit in Steakhouse USDG, an ERC-4626 vault curated by Steakhouse Financial that lends on Morpho Blue. Deposits and withdrawals go straight from your wallet to the vault. Posy does not run it and takes nothing; the rate shown is measured from the vault's own share price.

Contracts

Everything Posy calls, all deployed by others and all live before Posy existed. Addresses come from the site's one config file and link to the explorer.

How it was tested

The file that builds every transaction, js/route.js, is the same file the page loads and the file a test suite runs. The suite forks Robinhood Chain, creates a brand-new wallet, and has it sign its own permits and send real transactions to the real Universal Router, Permit2, v3 pools and v4 PoolManager, reading every result back off the chain:

  • Loading the results…

Risks

  • What the tokens are. Robinhood's stock tokens are issued by Robinhood under its own terms, including who may hold them. Read them and check they apply to you.
  • Prices on and off the market. The pools trade around the clock, including when the stock market is closed; a pool's price can drift from the last close, and liquidity can be thin at those hours.
  • Price impact. Every leg shows what it costs over the pool's mid price before you buy. A large basket in a thin pool costs more; the app refuses a leg above 3%.
  • Contracts. Posy's transactions run on Uniswap's and Paxos's contracts, and the Cash tab on Morpho and Steakhouse's. Posy adds none of its own, but it cannot remove theirs.
  • Not advice. Posy is experimental software and nothing here is investment advice.