Docs

How a deal works

Parley lets two people swap Robinhood Chain stock tokens and dollars (USDG) directly: one makes a deal that names the other, the other accepts, and every item on both sides moves in that one transaction. It is a web page that builds transactions for your wallet to send. It deploys no contract, holds nothing and charges no fee: every deal is an ordinary order in Seaport 1.6, the audited exchange protocol behind OpenSea, which was already live on Robinhood Chain.

Every transaction comes from one module, js/deal.js, and the tests run that same file against the live chain. What is tested is what is sent.

The order

A deal is a Seaport order with these fields:

  • offerer — the maker. offer — one to four ERC-20 items the maker gives: Robinhood stock tokens or USDG, each a fixed amount (startAmount = endAmount).
  • consideration — one to four items the other side gives, every one paid to the maker.
  • orderType = FULL_RESTRICTED (2): the whole deal or none of it, and restricted to its zone.
  • zone = the other person's wallet address. That is the lock (next section).
  • startTime / endTime — a minute ago, and the expiry the maker chose (one hour to thirty days). No conduit, no zone hash, no fee.

Amounts are what you typed: shares for a stock, converted to the token's raw units with its own uiMultiplier (Robinhood's stock tokens scale for splits and dividends) and rounded down, so a deal never promises more than you typed; dollars for USDG (6 decimals).

The lock

Seaport checks a restricted order's zone before any transfer, unless the caller is the zone itself. When anyone else tries to fill it, Seaport calls authorizeOrder on the zone and requires a magic value back. A person's wallet has no code to answer with, so Seaport refuses with InvalidRestrictedOrder. The named person calls Seaport themselves, is the zone, and is let through.

So a deal can be accepted by exactly one wallet, and there is no list, contract or server that says so — only the order's own zone field, which the maker signs into the order by posting it. The private property checks it on the live chain, and checks the control: the same terms without the lock let the stranger straight in.

Seaport also lets the zone cancel the order. For Parley that means the named person can decline a deal on chain.

Post, accept, cancel

Post

The maker calls Seaport.validate([order]). Seaport skips the signature when the caller is the offerer, marks the order valid, and emits OrderValidated with every field of the order. That event is the deal's only record: the link carries the order's hash and the block it was posted in, and the page reads that one block back. The Your deals page reads every OrderValidated from Seaport since Parley went live and keeps the ones naming your wallet.

Accept

The named person calls Seaport.fulfillOrder(order, 0). Seaport pulls every consideration item from them to the maker and every offer item from the maker to them, in one transaction. If either wallet is short of anything, or has not approved it, the whole transaction reverts and nothing moves.

Cancel or decline

Either the maker or the named person calls Seaport.cancel([order]). Anyone else is refused with CannotCancelOrder. A maker who bumps their Seaport counter (incrementCounter) cancels every order they ever made at once; the page recomputes each deal's hash under the current counter and shows those as cancelled too.

A deal expires at exactly its endTime: Seaport accepts it while startTime ≤ now < endTime. The page uses the chain's clock, not yours.

Approvals

Seaport pulls tokens at the moment a deal is accepted, so both people approve Seaport for what they give. Parley asks for exactly the amount — never an unlimited approval — with one exception worth knowing: an approval replaces the previous one, so when you post a second deal giving the same stock, Parley approves what both deals need together. Otherwise accepting either deal would use up the allowance and leave the other unacceptable. The allowance property proves both halves of that on the live chain.

Prices

A deal can be any price the two of you agree. Parley only shows what each side is worth so you both know. Stocks are valued at Robinhood's own Chainlink-style price feed for that stock (26 of the 42 have one), per share times the token's multiplier; a stock without a feed, or whose feed is more than four days old, is valued at its deepest Uniswap pool's mid price, and the page says which. USDG is a dollar.

What the pools charge

The reason to trade directly. For every stock, what it costs to sell (and to buy) a given dollar amount through its cheapest Uniswap v3 fee tier, measured with Uniswap's own QuoterV2 against that pool's own mid price, at block 75,883,037, 29 Sep 2026. "—" means the pools cannot fill that size at all.

Sell $10,0000.60%median cost
Sell $25,0001.12%median cost
Swap $25,0002.17%median, sell one + buy another
Sell $100,0002.34%median, 33 of 42 can fill it
StockSell $1kSell $10kSell $25kSell $100kBuy $25k
NVDA NVIDIA567147
SPCX SpaceX58133613
CRCL Circle Internet Group31426116658
MU Micron Technology31426015860
QQQ Invesco QQQ58123312
GOOGL Alphabet59165920
USO United States Oil Fund3033386438
COST Costco31405412654
MSFT Microsoft3136459245
AMZN Amazon3034397639
AMC AMC Entertainment38113255769227
MSTR Strategy103126174435165
Show all 42 stocks
GLD SPDR Gold Trust59165615
HIMS Hims & Hers Health30333816537
SPY SPDR S&P 500 ETF59156619
LLY Eli Lilly6173512936
TSLA Tesla19457023464
DJT Trump Media & Technology102117147337142
META Meta Platforms31446423762
SGOV iShares 0–3 Month Treasury567157
DELL Dell103134194577184
AAPL Apple6132921925
AVGO Broadcom401262661000456
INTC Intel3363115495110
AMD AMD3469136524127
RDDT Reddit102124159387128
TSM TSMC1081792811258309
NET Cloudflare33621092302800
GME GameStop7296227683
MRNA Moderna3810922426344966
SLV iShares Silver Trust3360133408484
QUBT Quantum Computing361032324326197
PLTR Palantir3266148464185
NFLX Netflix3360132—106
SNDK Sandisk119324753—627
ASML ASML Holding156396703——
TTWO Take-Two Interactive3472215—136
RBLX Roblox371291252—194
JNJ Johnson & Johnson35862246—175
RIVN Rivian Automotive812422566—325
USAR USA Rare Earth73———308
NU Nu75———473

Costs are in basis points (1 bp = 0.01%) and include the pool's fee and the price impact of the size. A direct Parley deal pays neither; it pays gas, and the price is whatever the two of you agreed.

How it is tested

The property suite (tools/test.mjs) runs js/deal.js — the page's own builder, reader, approvals, status and prices — against Robinhood Chain's live state through eth_simulateV1, with three wallets funded by state override: a maker, the person the deal names, and a stranger. Nothing is broadcast. Expected values are computed in the test from raw balances, Transfer logs, Seaport's own answers and the feeds read directly, never by asking the module.

The last run: 10/10 properties and 159 checks passed against live state at block 75,904,363 (29 Sep 2026).

PropertyWhat the last run showedChecks
seaportversion 1.6; byte-identical to 3 other chains' Seaport outside the chain id and domain separator14
swap10.5 AAPL + 2 TSLA for 3 NVDA + $150.25: all four items moved to the unit, in 267,511 gas27
privatea stranger is refused with InvalidRestrictedOrder; the same terms without the lock let them in; the named person gets in11
cancela stranger gets CannotCancelOrder; the maker cancels and the counterparty declines; cancelled, declined and counter-voided deals are refused and read as cancelled22
expiryopen one second before endTime; expired, and refused with InvalidTime, at exactly endTime8
oncethe second accept is refused with OrderAlreadyFilled, even with allowance and stock to spare7
allowancethe second approval is sized for both deals and both are accepted; without that, the first is refused (ERC20InsufficientAllowance)18
readya short counterparty and an emptied maker are both named by the page and both refused by the chain19
reader11 dishonest shapes are hidden, 7 bad deals are never built, links round-trip21
prices4 stocks priced from Robinhood's feeds, 3 from their pools, each equal to a reading taken here; a deal's two sides sum exactly12

Then a sabotage sweep (tools/sabotage.mjs) plants 26 bugs, one at a time, in a copy of js/deal.js — a lock naming the wrong person, an order anyone can fill, shares rounded up, an approval that forgets another deal, a cancelled deal read as open, a feed price used per raw unit — and requires the property named for each one to fail. 26/26 were caught.

The browser run: 8/8 journeys (41 checks) clicked through the real pages in Chrome with three test wallets — a maker, the person the deal names and a stranger — against a private copy of the live chain (29 Sep 2026).

Addresses

Every contract Parley calls. None is Parley's.

Seaport 1.60x0000000000000068F116a894984e2DB1123eB395
USDG (Global Dollar, Paxos)0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168
Uniswap QuoterV2 (front-page quotes)0x33e885eD0Ec9bF04EcfB19341582aADCb4c8A9E7
Multicall3 (reads)0xcA11bde05977b3631167028862bE2a173976CA11
Robinhood stock tokens42 — see the table above

Seaport's runtime on Robinhood Chain is compared byte for byte with the same address on Ethereum by the seaport property: identical except the two immutables it is built with (the chain id and the EIP-712 domain separator).

Risks

  • A deal is a promise to Seaport, not escrow. Your stocks stay in your wallet until acceptance. If you move them away or lower the approval, the deal simply cannot be accepted until you put them back — both pages say so.
  • The price is yours. Parley shows each side at Robinhood's prices, but it does not stop either of you agreeing a bad deal. Read both sides before you post or accept.
  • Approvals outlast deals. Cancelling a deal does not lower the approval you gave Seaport for it. Lower it from your wallet if you do not intend to post again.
  • Seaport and the stock tokens. Parley relies on Seaport 1.6 and Robinhood's token contracts behaving as they do today. Robinhood can pause its stock tokens, block addresses and scale balances; a paused token cannot be traded here either.
  • Not audited as a product. Parley's own code is a web page; it has not been audited. Its tests are published above, including the bugs they were built to catch.