Docs

Five contracts, about 350 lines. Everything below is on-chain and verifiable.

Chain

NetworkRobinhood Chain (Arbitrum Orbit L2)
Chain id4663
RPChttps://rpc.mainnet.chain.robinhood.com
WETH0x0Bd7D308f8E1639FAb988df18A8011f41EAcAD73
Uniswap V3 factory0x1f7d7550B1b028f7571E69A784071F0205FD2EfA

Note the Uniswap factory is not at the canonical 0x1F98431c… address on this chain — that address holds an unrelated contract, as do the canonical SwapRouter and position manager addresses. The factory above was identified by its bytecode and by the fact that it hosts the pools for genuine first-party Robinhood tokens.

Contracts

Registry0x6F39d42Ab4FA695BEC3492C8E441DBDcbe9E9081
Factory0xb6E19d02e318e04B23B0831c17afEde1D4d88beE
Locker0xB3275eaDD776C5A94Be899Ac06eB0F2AC6c1e792
  • RealpadRegistry — one house, one token. spawnHouse is permissionless given a valid attestation and reverts HouseExists() on a repeat. It deploys the token itself, so no wallet is ever its deployer.
  • RealpadFactorylaunch opens a coin pool quoted in the house token; launchUniswap opens a WETH-quoted one instead. Both spawn the house token first if it does not exist.
  • RealpadLocker — holds every LP position permanently. Coin-pool fees are claimable by the coin's creator; house-pool fees are locked and claimable by nobody. Its registrar set is frozen at deploy.
  • PoolSeeder — shared pool creation and single-sided mint.
  • RealpadToken — fixed-supply ERC-20, 1,000,000,000 with 18 decimals, minted once. No owner, no mint, no tax.

House ids

A house's identity is derived, not assigned:

houseId = keccak256(abi.encode(sourceSentinel, propertyId))

Houses are not NFTs, so there is no contract to name. The address slot instead holds a sentinel identifying the listing site — 0x…52454446494e spells REDFIN in ASCII — and the uint256 slot holds that site's own property id, which is the number at the end of the URL: redfin.com/TX/Austin/7101-Sungate-Dr-78731/home/31281584.

Everything frozen on-chain is parsed from the URL itself rather than fetched. That is deliberate: Redfin's per-property API returns 403 to everyone, so a design that needed a live lookup to name a house would stop working the moment that upstream moved. The indexed catalog only adds the photo and the price.

Attestation

House metadata is signed by Realpad's resolver so a house's on-chain identity cannot be spoofed. The registry recovers the signer and rejects anything else:

digest = keccak256(abi.encode(houseId, name, symbol, uri))
signature = EIP-191 personal_sign(digest)   // by the attestor key

Spawning stays permissionless — anyone holding a valid attestation can trigger it. The signature constrains what a house is called, not who may create it.

Fees

PoolFeeGoes to
Coin pool1%The coin's creator, 100%
House pool1%Locked — nobody
RealpadNothing. There is no protocol fee.

What is permanent

  • Liquidity locks. Neither pool's LP can ever be withdrawn.
  • A house token's name and symbol — set in its constructor, with no setter.
  • The one-token-per-house mapping. A second spawn reverts.
  • The locker's registrar set, frozen during deployment.

A single-sided mint leaves a few thousand wei of tick-rounding dust in the registry (roughly 4e-24 of supply). It is unreachable and nothing depends on it.