The Edges
The edges on a strict FCFS chain, venue by venue, and which BLCK module covers each one.
Robinhood Chain orders transactions by arrival time at a single sequencer. There is no public mempool: txpool_content, txpool_status, and eth_newPendingTransactionFilter all return method-not-found on both networks. There is no priority fee: eth_maxPriorityFeePerGas returns 0, and the official docs say raising your fee will not move you ahead of transactions already queued. There is no Timeboost and no priority auction: a raw capture of 789 feed messages showed blockMetadata: null on every one, and the timeboost_ and auctioneer_ RPC namespaces are absent.
So the edge set is narrower than on an auction chain, and more physical. You either arrive first with the right transaction already built, or you find a mispricing that nobody has to race for. Every edge below is one of those two.
One framing note. BLCK calls the discipline sequencer-edge engineering, not "MEV on Robinhood", because the discipline survives a rule change and the label does not. Timeboost is live on Arbitrum One and the ArbitrumDAO has voted to move Arbitrum One to Priority Gas Auctions. Nothing equivalent is announced for Robinhood Chain. If it ever lands, a bid becomes a second variable next to arrival time. The measurement, simulation, and execution tooling stays the same. Each section below says what would change for that edge.
Edge A: latency
Mechanism
One sequencer, ordering by arrival. The only variable you control is the time from your decision to the sequencer's ingress accepting your bytes. Blocks are produced roughly every 100 ms when there is traffic: a 60 second mainnet sample gave 621 blocks in 60.6 s, mean 97.7 ms. Nitro only produces a block when there are transactions, so per-second block counts in that sample ranged from 2 to 44. The configured max-block-speed is not published.
Region
DNS for sequencer.mainnet.chain.robinhood.com resolves to 3.136.74.196, 3.141.111.43, and 3.142.9.34. All three sit inside the AWS us-east-2 (Ohio) EC2 range. Glassnode's latency monitor independently places the sequencer in us-east-2. Robinhood has not published a region. Treat us-east-2 as an inference, and place hardware against the inference with that caveat in mind. blck-probe records an operator-supplied region label (BLCK_PROBE_REGION) in each output file. Runs without a label are marked unspecified. Only labeled runs get committed to benchmarks/data.
Connection reuse
A fresh TCP and TLS handshake on every send is wasted time on a 100 ms chain. Hold a warm connection to the submit endpoint and send on it. Reconnect in the background, never on the hot path. The same goes for the feed socket: one long-lived WebSocket, reconnect logic off the hot path, and a gap detector on sequenceNumber so you know when you missed messages rather than guessing.
Endpoint choice
Three kinds of endpoint exist, and they are not interchangeable.
| Endpoint | What it is for | What we know |
|---|---|---|
| https://sequencer.mainnet.chain.robinhood.com | Submission only | Rejects reads: eth_chainId returns -32601. It exists for eth_sendRawTransaction. |
| https://rpc.mainnet.chain.robinhood.com | Official reads | Rate limited. Returns HTTP 403 to the default Python urllib user agent. |
| Third-party RPCs (publicnode, dRPC, blxrbdn, Pocket, Ordo, keyed providers) | Reads, and sends if you route through them | Adds their hop in front of the sequencer's. |
Whether a send through the official RPC reaches the same ingress with the same delay as the dedicated submit endpoint is not measured yet. blck-probe send mode exists to answer that.
Ordo (ordofi.network) runs a private RPC with sealed-bid 200 ms backrun auctions and a searcher SDK. It is a third party with no disclosed Robinhood agreement. The sequencer underneath stays FCFS. There is no official private submission path from Robinhood or Alchemy.
Read the feed, do not poll blocks
The sequencer feed is public at wss://feed.mainnet.chain.robinhood.com. It carries what the sequencer has ordered. How far ahead of block RPC it runs, if at all, is what blck-probe measures. First runs from Dubai put the feed within a few milliseconds of PublicNode's newHeads at the median (p95 20 to 40 ms); the feed's intrinsic lead needs a vantage point near the sequencer. On connect from this machine, 5 messages arrived within about 2 s. Each message carries a sequenceNumber and a base64 l2Msg that you decode yourself (see The Stack).
Polling eth_blockNumber against a chain with no fixed block cadence gives you a jittery clock and a stale view. Subscribing to newHeads on a third-party WebSocket RPC is better but still downstream of the sequencer. The feed is the public view of ordering that does not go through a block RPC; whether it is earlier is unmeasured.
One caveat that matters for latency reasoning: the feed hosts CNAME to customer-origin.offchainlabs.com behind Cloudflare, so there is at least one proxy hop in front of the feed origin. Whether that origin is the sequencer host is not known. Feed-versus-RPC delay is therefore a number to measure, not one to assume.
Spam and duplicate sends, and what they cost
Two habits people bring from other chains.
Fan-out: sending the same signed transaction to several endpoints at once. Same nonce, so at most one copy is included and the rest are rejected. What the sequencer does with duplicates beyond that (rate limit, drop, penalize the source) is not published. Not measured. TODO (owner): decide whether a duplicate-send test joins blck-probe send mode. It would spend real gas on every copy that lands.
Spray: sending many distinct transactions in the hope that one arrives first. Every one that lands pays gas, reverts included. The L2 basefee floor is 0.02 gwei and the observed mainnet basefee was about 0.066 gwei on 2026-09-15, so the per-transaction cost is small. The real costs are nonce management under a 100 ms clock, rate limits on the official RPC, and whatever reputation the sequencer operator keeps that you cannot see. No number here claims how much spraying helps. Measure it.
Module
blck-probe (Milestone 2, live). Read-only modes need no funds: RPC round trip, feed-versus-RPC delay, block cadence. Send mode measures inclusion delay and needs a funded key; the first runs were made on mainnet from Dubai: acknowledgement at about 314 ms, feed echo at about 351 ms, receipt visible at about 755 ms, medians of eight. Output goes into benchmarks/data with region and timestamp, validated against benchmarks/schema/probe-result.schema.json by scripts/check-probe-output.sh. Only real runs get committed; eight read-only runs from Dubai are there now.
If a priority auction lands
Arrival time keeps deciding order within whatever lane is not auctioned. The probe numbers stay valid. The strategy layer gains a bid input. Nothing on this page has to be rewritten except the sentence that says there is no auction.
Edge B: cross-pool arbitrage
Mechanism
Under FCFS the first transaction sequenced after a divergence takes it. Nobody can outbid you for the position, and you cannot outbid anyone. This is edge A applied to a price signal.
Venues (mainnet, bytecode verified 2026-09-16)
| Venue | Addresses | Notes |
|---|---|---|
| Uniswap v3 | Factory 0x1f7d7550b1b028f7571e69a784071f0205fd2efa, SwapRouter02 0xcaf681a66d020601342297493863e78c959e5cb2, QuoterV2 0x33e885ed0ec9bf04ecfb19341582aadcb4c8a9e7, NonfungiblePositionManager 0x73991a25c818bf1f1128deaab1492d45638de0d3 | Example pool NVDA/USDG 0.05% at 0xd4eb21209c4d6093f80b5b84f5c45cc093ea14a3. DefiLlama 24 h volume about 842M USD. |
| Uniswap v4 | PoolManager 0x8366a39cc670b4001a1121b8f6a443a643e40951, V4Quoter 0x8dc178efb8111bb0973dd9d722ebeff267c98f94, StateView 0xf3334192d15450cdd385c8b70e03f9a6bd9e673b, PositionManager 0x58daec3116aae6d93017baaea7749052e8a04fa7 | Largest v4 deployment by volume share. |
| Uniswap v2 | Factory 0x8bceaa40b9acdfaedf85adf4ff01f5ad6517937f, Router02 0x89e5db8b5aa49aa85ac63f691524311aeb649eba | |
| Shared | UniversalRouter 0x8876789976decbfcbbbe364623c63652db8c0904, Permit2 0x000000000022D473030F116dDEE9F6B43aC78BA3 |
Also live per DefiLlama, addresses not yet fetched (open question Q12): PancakeSwap v2 and v3, Ramses, Fables, SushiSwap v3, Curve, Ekubo, and a long tail of forks. Rialto is a proprietary AMM for stock tokens, launched 2026-07-02. Aggregators 1inch and 0x are present. Lighter runs its own separate execution environment, not the L2 transaction path, so it is not a venue for an atomic L2 arb.
Pairs
The quote assets are USDG (Paxos, 6 decimals, about 697M supply, the primary stablecoin on the chain) and WETH at 0x0Bd7D308f8E1639FAb988df18A8011f41EAcAD73. Bridged USDC at 0x80e0e24718dbfcad49ecaa6f1e6c89a190586ca8 is tiny, about 331K. Ethena USDe circulates, about 324M, via a non-canonical route.
The base assets that matter are the 194 Robinhood Stock Tokens: ERC-20 with 18 decimals, plus an ERC-8056 uiMultiplier(). Read the multiplier before doing price math across venues. TODO (owner): confirm the uiMultiplier semantics against the ERC-8056 spec and the stock-token docs before blck-arb quotes anything.
Execution
Atomic single-call. The contracts/ Foundry project is where AtomicArbExecutor lands at Milestone 3 (planned, not written yet): both legs in one call, a profit check at the end, revert if it fails. A revert still pays gas, so the sim step is not optional. blck-sim (Milestone 3) will run the candidate transaction with revm against forked state before anything is signed.
Paper mode first. blck-arb (Milestone 4) logs what it would have sent and what the simulator said, and sends nothing. Rehearsal runs against a fork of mainnet state in blck-sim, which is the only environment that has the real v2, v3, and v4 pools, USDG, and the stock tokens in one place.
Module
blck-arb, backed by blck-sim and contracts/.
If a priority auction lands
The divergence is still there. Whether you take it becomes a question of latency plus what you are willing to bid, and the sim has to price the bid into the profit check.
Edge C: liquidations
Mechanism
Under FCFS with no mempool, you cannot see the oracle update before it is sequenced. So the race is pure reaction: see the oracle update on the feed, decode it, simulate the liquidation, send. Edge A again.
Venue
Morpho Blue at 0x9D53d5E3bd5E8d4Cbfa6DB1ca238AEA02E651010, with AdaptiveCurveIRM at 0x2BD3d5965B26B51814AC95127B2b80dD6CcC0fa1 and a ChainlinkOracleV2 Factory at 0xB7c16F6F8cF531447Bf27Ca7220f981E79C9cdF2. TVL about 531M USD, the largest protocol on the chain. It powers Robinhood Earn through Steakhouse-curated USDG vaults. This is the liquidation surface.
There is no Aave and no Compound deployment on the chain. Small lenders exist (Longbow, Ripe, TermMax, others). None of them is enumerated yet.
Oracles
Chainlink per-asset feeds, heartbeat 86400 s, deviation 0.5%. Verified examples: RHNVDA/USD at 0x379EC4f7C378F34a1B47E4F3cbeBCbAC3E8E9F15 and ETH/USD at 0x78F3556b67E17Df817D51Ef5a990cDaF09E8d3A9. A ChainlinkOracleV2 Factory sits in Morpho's own deployment list for the chain, which points to Morpho markets here pricing through oracles built on those feeds. Which markets use which feed is not verified yet.
A 0.5% deviation trigger means updates cluster around price moves, and each update is a candidate liquidation trigger. Chainlink US equity streams run 24/5 and report Closed on weekends. What a Morpho market collateralized by a stock token does across a weekend with no fresh oracle answer is an open question, and one that matters before anyone runs a liquidator here.
TODO (owner): enumerate the live Morpho Blue markets on chain 4663, their collateral and loan assets, and which oracle each one uses. Without that list this section cannot say which positions are even in scope.
Module
No dedicated liquidation module is on the milestone list. The piece that applies is blck-sim: fork state, replay an oracle update, check which positions cross the threshold, price the call. The feed decoder from blck-probe supplies the trigger. TODO (owner): decide whether a liquidation module joins the roadmap after Milestone 5.
If a priority auction lands
Today the first reaction wins. Under an auction the reaction still has to be first among non-bidders, and the discount has to cover the bid.
Edge D: launch sniping
Mechanism
Under FCFS it is a latency race to the sequencer with a pre-built transaction, at whatever cap the launchpad enforces. There is no way to bid for position.
Pons V1 (live since 2026-07-13)
Factory 0xA5aAb3F0c6EeadF30Ef1D3Eb997108E976351feB. A token deploys straight into a locked Uniswap v3 WETH pool at a 1% fee. Launch protection runs for 2 blocks with a 5% max holding and a 5.5% max buy. At the measured cadence 2 blocks is on the order of 200 ms, though block production depends on traffic. Whether the buy cap is per transaction or cumulative is not in the verified record. Either way the race is to be first in the first block with a buy at the cap. The window then ends. What happens to the caps after it ends is not in the verified record either. TODO (owner): confirm both against docs.ponsfamily.com.
Pons V2 (live since 2026-08-03)
LaunchFactory 0x7ed598bcef8bd9edd8c97a195c6d13f40801ec7e, LaunchAndBuy router 0xe33e9e479df8802cb0866d5d05258bec4cf62948, MemeHook 0xe5e702641ea86f4ae6cc3cdaed2b886f976be044, GraduationExecutor 0xc7819b64a1daecd7ec19856d026cb14efbd89046.
A bonding curve. Fixed 1e9 supply, 5/7 sold on the curve. The curve emits CurveBuy and CurveSell events. The token graduates into a Uniswap v4 pool with a hook and permanently locked liquidity. What triggers graduation is not in the verified record.
That gives two moments. First, the launch itself. A LaunchAndBuy router is listed; if it does what the name says, the creator's first buy is atomic with the deploy and there is no gap to snipe at launch, only the curve after it. TODO (owner): confirm against docs.ponsfamily.com. Second, graduation. A GraduationExecutor and a MemeHook are deployed; the names suggest the executor moves liquidity into v4 and the hook is attached to the new pool. Neither is confirmed, and what the hook does to early swaps is not in the verified record. TODO (owner): read both contracts before blck-sniper targets graduation.
Other launchpads
Pools.trade (pools.xyz, from Uniswap Labs), LONG (stock-paired launches), NOXA Fun, StonkBrokers, and many smaller ones. Addresses not yet fetched.
The competition
GMGN is the largest retail sniping bot by volume. What infrastructure sits behind it, and how many co-located competitors are racing, is not in the verified record: a chain with no mempool does not show you who else is there. Open question.
Module
blck-sniper (Milestone 5). It will watch the feed for Pons V1 factory deploys, Pons V2 LaunchFactory events, CurveBuy and CurveSell, and graduation, decode them, simulate through blck-sim, and send through the submit endpoint. Pons V2 graduates into a Uniswap v4 pool, so a fork of mainnet state is where an entry can be rehearsed against the real factories and the real hook.
If a priority auction lands
Launch sniping becomes bid-versus-bid for the first block. The feed decoding and the pre-built transaction are still required. The cap arithmetic (5% holding, 5.5% buy on V1) does not change.
Edge E: stock-token gaps
The facts
194 active tickers. ERC-20 with 18 decimals and an ERC-8056 uiMultiplier(). Upgradeable beacon proxies with pause and blocklist controls. Freely transferable to any wallet, no allowlist. Verified examples: NVDA 0xd0601CE157Db5bdC3162BbaC2a2C8aF5320D9EEC, AAPL 0xaF3D76f1834A1d425780943C99Ea8A608f8a93f9, TSLA 0x322F0929c4625eD5bAd873c95208D54E1c003b2d, MSFT 0xe93237C50D904957Cf27E7B1133b510C669c2e74, SPY 0x117cc2133c37B721F49dE2A7a74833232B3B4C0C, QQQ 0xD5f3879160bc7c32ebb4dC785F8a4F505888de68.
Primary mint and burn happen only through KYB'd Authorized Participants, and only in a Monday 02:00 CET to Saturday 02:00 CET window.
Chainlink per-asset feeds (RHNVDA/USD above; heartbeat 86400 s, deviation 0.5%). Chainlink US equity streams run 24/5 and report Closed on weekends.
Onchain, the tokens trade whenever a DEX pool has liquidity, which is every hour of the week.
Four clocks
That is four clocks that do not line up: the US regular session, the 24/5 oracle, the AP mint and burn window, and the DEX that never closes.
On a weekend the oracle reports Closed, so there is no onchain reference price. The AP window is shut, so nobody can mint against the reference or burn into it. The DEX price is whatever the last trader paid. The working hypothesis is that weekend prices float on flow and news with no anchor, and reconverge on Monday when the oracle reopens and APs can arbitrage the primary market again. blck-gaps exists to measure that, not to assume it.
Mapping the CET window onto ET session boundaries across daylight-saving changes is a job for code, not prose. blck-gaps does the conversion; this page does not.
What blck-gaps tracks
Three prices per ticker, timestamped: the DEX price (the v3 NVDA/USDG pool first, v4 through StateView and V4Quoter next), the last Chainlink answer with its Closed flag, and the Robinhood price API at https://api.robinhood.com/rhj/prices/{SYMBOL} (bid, ask, isTradingHalt, dailyTradingVolume), with the ticker list from /rhj/assets. The output is a time series of the gap between DEX and reference, with session state attached.
Read-only. Execution is a later milestone and is not part of Milestone 5.
Restrictions and what this is
Robinhood Stock Tokens are not offered to US, UK, Canada, Switzerland, or UAE persons at the offering level. The beacon proxies carry pause and blocklist controls whose semantics and role holders are not published (open question Q10). A blocklisted or paused token does not trade, whatever the gap says.
BLCK is research tooling. It measures. It does not tell anyone to trade, and nothing in it is investment advice.
If a priority auction lands
The gap thesis is about clocks, not ordering. It is the one edge on this page that an auction does not touch until execution is added.
Summary
| Edge | Venue on chain | Module | State |
|---|---|---|---|
| Latency | Sequencer submit endpoint, sequencer feed, official and third-party RPC | blck-probe | Milestone 2, live; all modes have run |
| Cross-pool arbitrage | Uniswap v2, v3, v4; others pending addresses | blck-arb, blck-sim, contracts/ | Milestones 3 and 4, planned; paper mode first |
| Liquidations | Morpho Blue with Chainlink oracles | blck-sim; no dedicated module yet | Open |
| Launch sniping | Pons V1, Pons V2, others pending addresses | blck-sniper | Milestone 5; read-only watcher and dry-run builder |
| Stock-token gaps | Stock tokens vs Chainlink vs Robinhood price API | blck-gaps | Milestone 5, planned; read-only, mainnet |