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

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

Creator ids

A creator's identity is derived, not assigned:

creatorId = keccak256(abi.encode(platformSentinel, accountId))

Creators are not onchain, so there is no contract to name. The address slot instead holds an ASCII sentinel identifying the platform — 0x…58 is X, 0x…545749544348 is TWITCH, 0x…596f7554756265 is YouTube — and the uint256 slot holds that platform's own stable account id.

The id, never the handle. All three platforms let people rename, and on X a freed handle can be claimed by somebody else entirely, so a token keyed to a handle would quietly come to mean a different person — while its name stays frozen on-chain forever. X and Twitch expose numeric ids (2455740283, 19571641); YouTube's is the UC… channel id, which is hashed into the uint256 slot.

This is the one place Creatorpad needs a live lookup where its predecessors did not: a profile URL carries only a handle, so there is no offline fallback. If the platform will not confirm the account, launching is blocked rather than freezing a guess.

Attestation

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

digest = keccak256(abi.encode(creatorId, 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 creator is called, not who may create it.

Fees

PoolFeeGoes to
Coin pool1%The coin's launcher, 100%
Creator pool1%Locked — nobody
CreatorpadNothing. There is no protocol fee.

What is permanent

  • Liquidity locks. Neither pool's LP can ever be withdrawn.
  • A creator token's name and symbol — set in its constructor, with no setter.
  • The one-token-per-creator 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.