> ## Documentation Index
> Fetch the complete documentation index at: https://docs.windrose.market/llms.txt
> Use this file to discover all available pages before exploring further.

# Chain notes

> What is different about Arc and Robinhood Chain, and what the contracts and services do about it.

The contracts are plain Cancun-EVM Solidity, but the two chains Windrose runs on each have rules that shaped the code and that integrators hit quickly. Everything below is also encoded in `packages/abis/chains.json`, the registry every process reads (see [ABIs and the chain registry](/protocol/integrate/abis-and-registry)).

## Arc (5042 mainnet, 5042002 testnet)

Circle's L1: proof-of-authority validators, USDC as the gas token, 0.5 s blocks with instant finality.

| Fact                                                                                                                                                                                                                                | Consequence                                                                                                                                                                                                                                                         |
| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **USDC is the gas token.** The native balance is an 18-decimal view of the same balance the ERC-20 at `0x3600000000000000000000000000000000000000` exposes with 6 decimals (divide by `1e12`). There is no wrapped gas token.       | Contracts only ever handle the 6-decimal ERC-20 and read `decimals()` from the token rather than assuming. Oracle update fees (Pyth) are paid in native value, so `msg.value` is 18-decimal USDC. Every payable entry point refunds excess value.                   |
| **20 gwei minimum base fee.** Transactions bidding less are silently dropped, never mined. Priority fee should be 0 or 1 gwei.                                                                                                      | The registry pins `maxFeeGwei: 25`, `priorityGwei: 1`, `minBaseFeeGwei: 20`; the web app spreads these into every write and mentions the floor under transaction buttons; deploy scripts pass `--with-gas-price 20gwei --priority-gas-price 1gwei`.                 |
| **0.5 s blocks, instant finality.** Timestamps can repeat.                                                                                                                                                                          | Deadlines are timestamps (the app uses now + 10 minutes). Nothing depends on block numbers or confirmations. `Buy`, `Sell` and `Swap` events are final as soon as they land.                                                                                        |
| **Protocol-level USDC blocklist.** Any transfer touching a blocklisted address reverts, and the revert consumes gas without a receipt.                                                                                              | Fees and creator rewards are pull-claimed (`claimCreatorFees`, `sweepProtocolFees`, `claimProtocolFees`, `LiquidityLocker.collect`), never pushed inside a trade. The only pushes are to `msg.sender` (refunds, sale proceeds), which can only fail for the caller. |
| **`PREVRANDAO` is always 0.** Blob transactions are rejected. EIP-7702 and EIP-7708 (native transfer logs) are live. Transfers to `address(0)` or precompiles revert.                                                               | No contract uses randomness. Graduation burns leftover tokens to `0x000000000000000000000000000000000000dEaD`, not `address(0)`.                                                                                                                                    |
| **Native USDC is a precompile.** Standard `anvil` and `forge script` cannot simulate it.                                                                                                                                            | Unit tests use mock ERC-20s. Anything that moves USDC on Arc is sent with `cast` or a wallet, never `forge script`; the deploy script only deploys. Arc's own `arc-anvil` / `arc-forge` ship for Linux and macOS only.                                              |
| **RPC limits.** `rpc.testnet.arc.io` rate-limits topic-filtered `eth_getLogs` almost immediately; the public mirrors cap a query at about 2,000 logs and 20 addresses.                                                              | The indexer uses the mirrors in `rpcs` (Blockdaemon, dRPC, thirdweb) with `ethGetLogsBlockRange: 50` and `maxLogAddresses: 20` (vault filters are chunked).                                                                                                         |
| **Uniswap v4** is deployed on Arc mainnet (official addresses in the registry) but not on the testnet.                                                                                                                              | The testnet deployment includes the launchpad's own PoolManager, PositionManager, StateView and Quoter.                                                                                                                                                             |
| **Oracles.** Pyth is on the testnet only and its FX data needs a paid Hermes key; Chainlink has seven free FX push feeds on mainnet (EUR, JPY, CAD, AUD, MXN, BRL, KRW); no FX feed covers most of the sixty currencies.            | The registry points at `KeeperFxOracle`. `PythFxOracle` (testnet) and `ChainlinkFxOracle` adapters are ready for currencies that have feeds.                                                                                                                        |
| **Faucet.** [https://faucet.circle.com](https://faucet.circle.com) gives 20 USDC per address every 2 hours (also EURC). A full deployment costs about 4.5 USDC of gas.                                                              |                                                                                                                                                                                                                                                                     |
| **Explorer.** Blockscout at [https://explorer.testnet.arc.io](https://explorer.testnet.arc.io) and [https://explorer.arc.io](https://explorer.arc.io), verifier URL `<explorer>/api/`. The public verifier rate-limits submissions. |                                                                                                                                                                                                                                                                     |

EURC is registered as the EUR quote asset on Arc (`0x89B5…D72a` on the testnet, `0xbEf5…21c1` on mainnet). A tier-1 quote asset that is not the dollar can only be traded with that asset itself: the router has no dollar-to-EURC route and reverts with `UseQuoteAsset`.

## Robinhood Chain (4663 mainnet, 46630 testnet)

An Arbitrum Orbit L2 (ArbOS 61, Nitro 3.12) with ETH gas, permissionless deployment and Cancun opcodes (`TSTORE`, `TLOAD`, `MCOPY`) verified by execution.

| Fact                                                                                                                                                                                                                                                                                                                                                                                                      | Consequence                                                                                                                                                                                                                                                                                                           |
| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **ETH gas.** Base fee about 0.02 to 0.06 gwei on mainnet, 0.01 gwei on the testnet, no floor.                                                                                                                                                                                                                                                                                                             | The registry pins `maxFeeGwei: 0.5` / `priorityGwei: 0` (mainnet) and `0.05` / `0` (testnet); deploy scripts let forge estimate.                                                                                                                                                                                      |
| **The dollar is USDG** (Paxos) at `0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168`, 6 decimals. There is no native Circle USDC and no CCTP; bridged USDC has negligible supply.                                                                                                                                                                                                                               | The deployment file's `usdc` field holds USDG and `usdcSymbol` is `"USDG"`; the app says "USDG" wherever it names the dollar. On the testnet there is no dollar with a faucet, so the deployment includes a mintable test USDG (`mint(address,uint256)` open to anyone; the app offers "Get test USDG").              |
| **Official Uniswap v4** at the addresses in the registry; the PoolManager is shared by every pool on the chain.                                                                                                                                                                                                                                                                                           | Graduations use the official PositionManager. The indexer runs with `INDEX_POOL_SWAPS=false` on mainnet because the shared PoolManager would deliver every swap on the chain; post-graduation prices come from `StateView.getSlot0`. The testnet has no official deployment, so the launchpad deployed its own there. |
| **No FX price feeds.** Chainlink has stock, crypto and USDG/USD feeds but no FX pairs; Stork covers a few majors by subscription; no Pyth.                                                                                                                                                                                                                                                                | `KeeperFxOracle` is the only rate source. Its trust model is described in [Oracles](/protocol/contracts/oracles).                                                                                                                                                                                                     |
| **EURC** exists as a bridged token (`0x6975…740B`) with a tiny supply.                                                                                                                                                                                                                                                                                                                                    | EUR is not registered on Robinhood Chain; the deploy script only registers it when `EURC=<address>` is passed.                                                                                                                                                                                                        |
| **Permit2, Multicall3, the CREATE2 deployer and EntryPoint v0.7** are at their canonical addresses on both networks.                                                                                                                                                                                                                                                                                      | `0x000000000022D473030F116dDEE9F6B43aC78BA3` (Permit2) is used by the PositionManager and the factory; Multicall3 is probed at runtime by the app.                                                                                                                                                                    |
| **RPC limits.** The official public RPC caps `eth_getLogs` at 10,000 logs and answers 429 after a burst; it and publicnode keep no archive state. dRPC (`robinhood.drpc.org`, `robinhood-testnet.drpc.org`) is the public archive endpoint and caps `eth_getLogs` at 100 blocks on its free plan; thirdweb's testnet endpoint rejects server IPs without a client id; Alchemy's free tier caps 10 blocks. | The indexer needs archive state (it reads contracts at the event block), so it runs against dRPC with `ETH_GETLOGS_BLOCK_RANGE=100`, or a keyed Alchemy/QuickNode endpoint. `ethGetLogsBlockRange` defaults to 1000 in the registry; `maxLogAddresses` is 60.                                                         |
| **Explorers.** Blockscout at [https://robinhoodchain.blockscout.com](https://robinhoodchain.blockscout.com) and [https://explorer.testnet.chain.robinhood.com](https://explorer.testnet.chain.robinhood.com) (verifier URL `<explorer>/api/`); Etherscan mirrors mainnet at [https://robin.etherscan.io](https://robin.etherscan.io).                                                                     | `scripts/verify.sh` verifies every contract on Blockscout after a deployment.                                                                                                                                                                                                                                         |
| **Faucets (testnet ETH).** [https://faucet.quicknode.com/robinhood/testnet](https://faucet.quicknode.com/robinhood/testnet) (no requirements), Alchemy (0.1 ETH per day, needs a mainnet balance), the official wallet-only faucet.                                                                                                                                                                       |                                                                                                                                                                                                                                                                                                                       |
| **Terms of use.** No allowlist or KYC to deploy. The "Robinhood" and "Robinhood Chain" marks may not be used in product or token names or in fundraising without consent; "Built on Robinhood Chain" is allowed.                                                                                                                                                                                          | Never put "Robinhood" in a launch's name or symbol. The chain name shown in the app comes from the registry entry, not from a brand string.                                                                                                                                                                           |

## What both chains share

* Cancun EVM: the contracts and Uniswap v4 are compiled for `evm_version = "cancun"`, and `BondingCurve` uses OpenZeppelin's `ReentrancyGuardTransient` (transient storage). A chain must execute `TSTORE`/`TLOAD` and `MCOPY` before the launchpad can run on it; check by executing, not by reading documentation.
* Solidity 0.8.26, optimiser on (200 runs), no `via_ir` for the launchpad's own code. The Uniswap v4 PoolManager and PositionManager only fit under the size limit with `via_ir`, so they use separate compiler profiles (`v4core`, `posm`).
* Permit2 at the canonical address, used by the PositionManager when the curve seeds a pool (the curve approves Permit2 for one hour and revokes the allowance in the same transaction).

## Adding a chain

A new chain needs a Cancun EVM, a 6-decimal dollar (or a testnet mock), Permit2, either an official Uniswap v4 deployment or none (the deploy script deploys its own), and an FX price source. The full checklist, the registry fields and the deploy steps are in [Add a chain](/operate/add-a-chain).
