Skip to main content
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).

Arc (5042 mainnet, 5042002 testnet)

Circle’s L1: proof-of-authority validators, USDC as the gas token, 0.5 s blocks with instant finality. 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.

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.