Toolkit
- LIVE
- every mode has run for real and its output is committed
- BUILDING
- the code works and has been run, but something in its README is still missing
Five blck-* modules and one shared crate. Each entry states what the module does, the verified chain facts it depends on, its limits, and where it sends transactions. Status words are literal: LIVE means every mode has run for real and produced committed output. BUILDING means the code works and has been run, but something named in its README is still missing.
BLCK targets mainnet, chain 4663. There is no rehearsal network in the picture, so every tool that sends is guarded: it refuses unless you pass an explicit command line flag and set an environment variable, and rehearsal happens against a local fork of mainnet state rather than against a public test chain.
blck-probe, LIVE
All subcommands have run: rpc, feed, and blocks on both networks, and send on mainnet (eight zero-value self-transfers, all included). Results are committed under benchmarks/data. keygen prints a throwaway address and writes nothing.
What it does. A CLI that measures where your latency goes on Robinhood Chain. Read-only modes time the JSON-RPC endpoints and the sequencer feed and need no funds. Send mode signs a transaction, posts it to the dedicated sequencer submission endpoint, and times it until it appears on the feed and then in a block. Output is JSON stamped with region and timestamp so runs from different regions compare directly, shaped by the schema at benchmarks/schema/probe-result.schema.json; scripts/check-probe-output.sh checks every committed file against it.
Chain facts it depends on.
- Sequencer feed is public:
wss://feed.mainnet.chain.robinhood.com. Plain WebSocket, JSON messages with a sequence number and a base64l2Msg. - Dedicated submission endpoint:
https://sequencer.mainnet.chain.robinhood.com. Acceptseth_sendRawTransaction, rejects reads. - Official HTTP RPC is rate limited and returns HTTP 403 to the default Python urllib user agent. Send a normal user agent.
- No first-party WebSocket RPC. Public third-party wss endpoints exist (PublicNode on both networks, dRPC on mainnet).
eth_maxPriorityFeePerGasreturns 0. There is no priority fee to tune; send mode only needs maxFeePerGas to clear the basefee (0.02 gwei floor).
Limits.
- The sequencer region is inferred (AWS us-east-2, Ohio) from DNS and an external monitor, not published. Any distance-to-sequencer number is relative to an inferred target.
- The configured max block speed is not published. The probe reports measured intervals only.
- Send mode needs a funded key you control, and it spends real ETH. The first runs used a dedicated key holding a small balance.
blck-probe keygenprints a throwaway address (the key only with --show-key) and writes nothing: you paste the key into the gitignored.envyourself. - Every committed run so far is from one vantage point (Dubai, residential connection). A number from one path is a sample of that path, not a property of the chain, until more regions report.
Where it sends. Send mode takes the network explicitly. Mainnet is refused unless both the command line flag and BLCK_ALLOW_MAINNET=1 are set, and it needs a funded key you control.
blck-sim, BUILDING
What exists today: the harness forks state over RPC and runs candidate transactions on revm, and its output for a QuoterV2 quote is byte-identical to eth_call at the same pinned block. The Solidity executor has 32 offline tests and 5 fork tests against the real mainnet pools, all passing. Nothing is deployed, and blck-sim is not yet wired into blck-arb.
What it does. A revm simulation harness for chain 4663, plus a Solidity atomic executor in contracts/ with Foundry tests. Because there is no mempool and arrival order is final, the decision to send has to be made before sending. blck-sim forks state, runs the candidate transaction, and reports revert, gas, and balance deltas so the framework above it can decide.
Chain facts it depends on.
- EVM-compatible Nitro execution, ArbOS 61. Standard revm plus the Arbitrum precompiles (ArbSys, ArbGasInfo).
- L2 basefee floor 0.02 gwei from
ArbGasInfo.getMinimumGasPrice. ArbGasInfo.getL1BaseFeeEstimatereturns 0 on mainnet. Reason unknown. This directly affects the gas model and is an open question.- Uniswap v2, v3, and v4 are all deployed, with UniversalRouter and Permit2 shared. Addresses are in STATUS.md section 4 and in blck-common.
Limits.
- Nothing runs yet.
- The L1 fee component of the gas model is unresolved until the getL1BaseFeeEstimate question is answered.
- The ArbOS 61 transaction filtering precompile at
0x74is reported configured on this chain and has not been probed. It is not modelled. - A simulation that passes says nothing about whether you arrive first.
Where it sends. Nowhere on its own. Foundry tests exercise it against a fork of mainnet state, which reads the real pools and sends nothing. Deploying it to mainnet is a separate, deliberate step.
blck-arb, BUILDING
What exists today: venue discovery, per-block state reads, two-venue and triangular route search with exact integer arithmetic, gas pricing, and executor calldata built as a dry run. Live mode exits with an error and does nothing. A 120 second run found no opportunity above threshold, and the reason is the finding: one search round took 236 seconds against the rate-limited public RPC while the chain produced about 2,400 blocks.
What it does. A reference cross-pool arbitrage framework in Rust using alloy. Paper mode first: it reads the feed and onchain state, computes candidate paths across Uniswap v2, v3, and v4 pools, and logs what it would have sent with the simulated result. Live mode routes through the atomic executor. It is a reference, not a product: the point is a correct, readable pipeline from state change to signed transaction that you fork and make faster.
Chain facts it depends on.
- Uniswap v3: Factory, SwapRouter02, QuoterV2, NonfungiblePositionManager. Example pool NVDA/USDG 0.05%.
- Uniswap v4: PoolManager, V4Quoter, StateView, PositionManager. Largest v4 deployment by volume share.
- Uniswap v2: Factory, Router02. Shared: UniversalRouter, Permit2.
- Quote assets: USDG (Paxos, 6 decimals, the primary stablecoin) and WETH. Bridged USDC is tiny.
- Morpho Blue is the lending venue and the liquidation surface. There is no Aave or Compound on the chain.
- Other DEXs are live per DefiLlama (PancakeSwap v2/v3, Ramses, Fables, SushiSwap v3, Curve, Ekubo). Rialto, a prop AMM for stock tokens, launched 2026-07-02. None of their addresses have been fetched; they will be before any is added.
Limits.
- Paper mode first. No profit numbers exist and none will be published unless they come from a real run.
- FCFS means simulated profit is not realized profit. Whoever arrives first takes the opportunity.
- No official private submission path exists. Ordo's third-party auction RPC is not integrated.
- Liquidation paths through Morpho Blue are in scope as the liquidation surface but are not designed yet.
Where it sends. Nowhere in this milestone. Paper mode reads mainnet state, computes routes, builds the calldata it would have sent, and logs it. Live mode is refused by the binary until it is implemented behind the same double guard blck-probe uses.
blck-sniper, BUILDING
What exists today: both watch paths, a decoder for Pons V1 and V2 and Uniswap v3 and v4 launch events against topics verified on chain, and a dry-run entry builder that reads live curve state and encodes entries for all three venues. The Uniswap v4 encoding was decoded from a real swap rather than guessed, and a test rebuilds that transaction's calldata byte for byte. A 10,000 block backfill decoded 73 Pons V2 launches with nothing unrecognised. It never signs and never sends.
What it does. A launchpad sniping reference targeting Pons-style factories. It watches factory events, builds the buy, and submits through the sequencer endpoint. On a FCFS chain the main variable is the time between the launch event on the feed and your signed transaction reaching the sequencer. Launchpad rules bound what that buys you.
Chain facts it depends on.
- Pons V2 (live since 2026-08-03): LaunchFactory, LaunchAndBuy router, MemeHook, GraduationExecutor. Bonding curve with
CurveBuyandCurveSellevents, fixed 1e9 supply, 5/7 sold on the curve, graduates into a Uniswap v4 pool with a hook and permanently locked liquidity. - Pons V1 (live since 2026-07-13): token deploys straight into a locked Uniswap v3 WETH pool at 1% fee, with 2-block launch protection, 5% max holding, and 5.5% max buy.
- GMGN is the largest retail sniping bot by volume. That is the competition.
Limits.
- Documented launch rules (Pons V1's 2-block protection, 5% max holding, 5.5% max buy) bound what speed buys. The reference respects them; it does not try to route around them.
- Other launchpads (Pools.trade, LONG, NOXA Fun, StonkBrokers) are known to exist. Addresses not fetched, not supported.
Where it sends. Nowhere in this milestone. It watches, decodes, and prints the entry calldata it would have sent.
blck-gaps, LIVE
What exists today: a read-only snapshot that prices stock tokens on Uniswap v3 against Chainlink and Robinhood's own quote, applies the ERC-8056 multiplier to make them comparable, and flags gaps that survive price impact. With the US market closed the onchain price tracked Robinhood's quote within single-digit basis points while drifting from Chainlink as the feed aged.
What it does. Read-only research into price gaps on Robinhood Stock Tokens. It records onchain pool prices against Robinhood's REST bid and ask and the state of the Chainlink feed, and looks at what happens when the oracle is closed and the pool is not. It produces data and analysis. It does not trade.
Chain facts it depends on.
- 194 active tickers, ERC-20 with 18 decimals, ERC-8056
uiMultiplier(), upgradeable beacon proxies with pause and blocklist controls, freely transferable. Examples: NVDA, AAPL, TSLA, MSFT, SPY, QQQ. - REST:
/rhj/assetsand/rhj/prices/{SYMBOL}with bid, ask, isTradingHalt, dailyTradingVolume. - Chainlink per-asset feeds (heartbeat 86400 s, deviation 0.5%). US equity streams run 24/5 and report Closed on weekends, so onchain weekend prices have no oracle anchor. That is the core thesis.
- Primary mint and burn are only by KYB'd Authorized Participants, Monday 02:00 CET to Saturday 02:00 CET. Not offered to US, UK, Canada, Switzerland, or UAE persons at the offering level.
Limits.
- Read-only. It never sends, in this milestone or any other, until execution is a stated goal.
- The tool records gaps. It does not tell you whether you may trade them, and the mint and burn leg is AP-only.
- No published audit of the blocklist semantics or role holders on the token beacons was found. Open question.
Where it sends. Nowhere. It reads mainnet.
blck-common, shared
Verified chain constants and contract addresses used by every module. The network definition for 4663 with HTTP RPC, WebSocket RPC, sequencer submission endpoint, feed, and explorer. The basefee floor and the 345600 second force-inclusion delay as constants. Precompile addresses. Every contract address that returned bytecode on 2026-09-16, grouped by protocol. Addresses seen only in press or third-party writeups are excluded on purpose. Lookup by chain id or by name.
Conventions
- Rust where performance matters. Solidity for the executor. Foundry for contract tests.
blck-*naming everywhere.- MIT license, one LICENSE file, applies to every package.
- One README per crate stating capability and limits honestly. A README that overstates, or is missing, is a defect.
- All secrets and endpoints via environment variables.
.envis gitignored. Copy.env.example. - Mainnet only. Anything that sends is guarded by an explicit flag plus an environment variable, and rehearses against a local fork.
- No em dashes in anything user-facing. Linted.
- Benchmarks directory takes real probe results only, with region and timestamp.