Docs / Protocol

Contracts

Where the code runs, and what this build is pointed at.

Addresses

ContractAddress
Ride on Robinhood Chain (chain 4663)0xBb0cE13E5312A9FDf6ee70d5f583A4154e33df04
Uniswap v4 PoolManager, Robinhood Chain0x8366a39CC670B4001A1121B8F6A443A643e40951
Uniswap v4 StateView, Robinhood Chain0xF3334192D15450CdD385c8B70e03f9A6bD9E673b

The Ride contract talks to the PoolManager directly: it is its own router, and the pool it trades on is named in each ride's key. Native ETH is currency zero in v4, which is where the long tail on Robinhood Chain actually trades, so every ride is on an ETH/coin pool and nothing is ever wrapped. StateView is the read-only lens a keeper uses for the price reference it passes to sync.

Source: contracts/src/Ride.sol in the repository, Solidity 0.8.28, OpenZeppelin Ownable2Step and ReentrancyGuard, Uniswap v4-core.

Pointing the app

Everything the app reads comes from the chain; there is no backend. A build is pointed with environment variables:

web/.env.example
NEXT_PUBLIC_CHAIN_ID=4663
NEXT_PUBLIC_RPC_URL=https://rpc.mainnet.chain.robinhood.com
NEXT_PUBLIC_EXPLORER_URL=https://robinhoodchain.blockscout.com
NEXT_PUBLIC_RIDE=0x…
NEXT_PUBLIC_RIDE_DEPLOY_BLOCK=…
NEXT_PUBLIC_FOMO_PROFILE_URL=https://fomo.family/{handle}

With none set, the app uses whatever pnpm setup:local wrote to the local manifest, chain id included. With a chain set and no NEXT_PUBLIC_RIDE, it says so on every page instead of reading the zero address.

Local chain

For development, anvil stands in for the chain and a mock PoolManager stands in for Uniswap.

from the repository root
pnpm chain          # anvil on 127.0.0.1:8545
pnpm setup:local    # mock pool manager, three coins, the Ride contract, four demo rides
pnpm dev            # next dev; the Dev wallet is anvil account #0