Docs
Gangway lets you buy Robinhood Chain Stock Tokens with money that sits on another chain, and sell them back to that chain. It joins two things that already work: Relay, a cross-chain bridge that supports Robinhood Chain, and a small router on Robinhood Chain that buys Stock Tokens on their Uniswap pools inside a band of the Chainlink price.
Overview
A buy is two legs in one flow. Leg 1: Relay moves your USDC or native coin from the chain you pay on into USDG on Robinhood Chain, delivered to your own address. Leg 2: the Gangway router swaps that USDG for the stock you picked. A sell is the same, backwards. The app runs both legs and shows a timeline; you confirm each step in your wallet.
Chains and coins
| Base | USDC or ETH |
| Arbitrum | USDC or ETH |
| Ethereum | USDC or ETH |
| Optimism | USDC or ETH |
| BNB Chain | USDC or BNB |
| Polygon | USDC or POL |
On the Robinhood Chain side: the 27 Stock Tokens and ETFs that have a Chainlink feed, from NVDA and TSLA to SPY, QQQ and GLD.
Leg 1: the bridge
The app asks Relay for a quote: from your coin on the chosen chain to USDG on Robinhood Chain, recipient your own address. The quote shows how much USDG arrives and roughly how long it takes, usually a few seconds. Relay returns the transactions to sign: for USDC an approval (once) and a deposit, for a native coin just the deposit. You sign them on the chain you pay from; the app then polls Relay until the transfer is filled on Robinhood Chain.
Gangway's site forwards the quote and status calls to Relay's public API. It never holds the funds and never signs for you.
Gas on arrival
A fresh wallet on Robinhood Chain has no ETH to pay for the buy. When your ETH balance there is under 0.00002, the app asks Relay to top up gas: part of the transfer arrives as a little ETH, enough for the buy and a few more transactions.
Leg 2: the buy
Once the USDG is in your wallet, the app reads exactly how much arrived and offers the buy. You sign one EIP-2612 permit for that exact amount and one transaction: swapWithPermit(USDG, stock, amount, minOut, 0, you, …). No approval stays open afterwards.
The Chainlink floor
The router reads the Chainlink price of the stock on chain and sets the minimum out from it, 1.5% under by default. If the pool would fill further away, the transaction reverts and your USDG stays in your wallet. This protects against thin pools, stale pools after the market closes, and sandwiches. quote(tokenIn, tokenOut, amountIn, slip) returns the fair amount and that floor.
Selling back
On the sell tab you pick the stock, the amount and the chain to receive USDC on. Leg 1 sells the stock for USDG through the router, at the same Chainlink floor. Leg 2 asks Relay for a quote from USDG on Robinhood Chain to USDC on your chosen chain, and you sign the deposit on Robinhood Chain. The USDC arrives at your own address on the other chain.
If a leg stops
- Bridge not filled: Relay refunds to your wallet on the chain you paid from.
- Buy reverted (pool too far from Chainlink, or you rejected the prompt): the USDG is already in your wallet on Robinhood Chain. Buy again later from the app, or send it back with the sell tab.
- Page closed mid-way: nothing is lost; the USDG or the stock is in your wallet. Open the app and continue with the next leg.
Fees
| Relay | the bridge cost shown in the quote, a few cents on $100 |
| Gangway router | 0.1% of the USDG side |
| Pool | the Uniswap pool fee of the stock, 0.05% to 0.3% |
| Gas | on the chain you pay from, plus under a cent on Robinhood Chain |
Who holds what
You do, at every step. Relay delivers to your address; the router sends the stock straight to your address in the same transaction it buys it. Gangway keeps no balances and no deposit addresses.
For bots
// 1. Relay: USDC on Base -> USDG on Robinhood Chain, to yourself
POST https://api.relay.link/quote
{ "user": me, "recipient": me, "originChainId": 8453, "destinationChainId": 4663,
"originCurrency": "0x8335…2913", "destinationCurrency": "0x5fc5…d168",
"amount": "100000000", "tradeType": "EXACT_INPUT", "topupGas": true }
// sign the returned steps, poll the check endpoint until "success"
// 2. Gangway router on Robinhood Chain
const [, floor] = await client.readContract({ address: ROUTER, abi, functionName: "quote", args: [USDG, NVDA, got, 0] });
await wallet.writeContract({ address: ROUTER, abi, functionName: "swap", args: [USDG, NVDA, got, floor, 0, me] });
Owner limits
The owner of the router can list Stock Tokens and set their pool routes, change the price adapter, set the band cap (up to 5%) and the fee (up to 0.5%). There is no function that moves a trader's tokens anywhere except through a swap that passes the Chainlink check.
Risks
- Relay is a separate service with its own contracts and solvers.
- Stock Token prices follow the market and the pools can be thin; the floor refuses bad fills but cannot remove market risk.
- The router is unaudited.
Token
The Gangway token launches on pons. Its address will be listed here and on the home page.
Contracts
| Gangway router | opening soon |
| USDG | 0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168 |
Gangway