On-chain factory name: name() = "FunPump" · symbol() = "FUNPUMP" · product() = "funpump.ai"
| Rail | Contract | Address |
|---|---|---|
| V2 (curve → Uniswap V2) | FunPumpLaunchpad |
0xCeE76e508Ee97b1f78Dd39a24eD4e5C867157698 |
| V3 (curve → Uniswap V3) | FunPumpLaunchpadV3 |
0x27f27F998fdBa2a38C136Bb3E7a8BA43155798Cd |
Token branding (every createToken): base name/symbol in → on-chain pump+base+fun / PUMP+BASE+FUN (symbol ≤16; base truncated if needed).
Example: base Clawd / CLAWD → pumpClawdfun / PUMPCLAWDFUN.
Permissionless Clawd / CLAWD was the first token on the pre-FunPump 9950 factory (Robinhood mainnet 4663). Still tradeable; feeds keep reading previous factories.
| Token | 0x45c299F0cAe47f3AF6762D7838E6F8D9035d96f0 |
| Name / symbol | Clawd / CLAWD (pre-branding factory — not pump…fun) |
| Create tx | 0x6031e266…9438 |
| Factory (historical) | 0x52603DC0…59C4 (99.5%; allTokens(0) = this token) |
| Creator | 0x2552Bdb6…4317 |
| Supply | 1B (held on factory curve; no dev-buy) |
| Trade | /launch/0x45c299F0cAe47f3AF6762D7838E6F8D9035d96f0 |
Verification / source
- Active FunPump
cfg().creatorFeeShareBps= 9950;name()= FunPump - New launches:
NEXT_PUBLIC_LAUNCHPAD_ADDRESS/NEXT_PUBLIC_LAUNCHPAD_V3_ADDRESS→ FunPump addresses above - Contracts:
bridge/contracts/src/FunPumpLaunchpad.sol·FunPumpLaunchpadV3.sol
Compat re-exports:BondingCurveLaunchpad.sol/BondingCurveLaunchpadV3.sol→ FunPump types - Catalog:
src/lib/evm/launchpad-launches.ts· pins:src/lib/evm/robinhood-chain.ts
Not Solana
$CLAWD/ wCLAWD — community bonding-curve ERC-20 only.
One roof for humans, agents, Solana SPL, Official Clawd Wallet, Robinhood Chain, stocks, permissionless token launches, and a fail-closed CLAWD bridge.
Yes — users can launch tokens on FunPump. Open /launch, connect any EVM wallet with ETH on Robinhood Chain, and call the live FunPump factory (name() = "FunPump"). New tokens get pump…fun / PUMP…FUN branding on-chain. No $CLAWD login. No allowlist. See § Launch a token below.
Production: funpump.ai · Launch (public): funpump.ai/launch · Wallet: funpump.ai/wallet · North Mini: funpump.ai/north-mini · Chrome extension marketing: extension.funpump.ai/extension · Bridge deep-dive: bridge/README.md · Relayer: bridge/relayer/README.md · Relayer status board: clawd-bridge-relayer.fly.dev/status · Session changelog: docs/updates.md · Auth / SIWS: docs/auth-setup.md · Production readiness: docs/PRODUCTION_READINESS.md
The Agent Forge now supports two distinct, wallet-owned identity paths:
- Robinhood Chain / EVM:
/agent-forge/robinhoodprepares a zero-valueregister(agentURI)call and the user's injected EVM wallet signs it. - Solana:
/agent-forgeretains the Metaplex Agent Identity mint flow.
Robinhood registration is non-custodial. The browser never receives
RH_RPC_URL or a private key. Server APIs check the configured registry's
runtime bytecode, prepare bounded ERC-8004 calldata, verify the emitted
Registered event through canonical RPC state, and provide Blockscout links.
Testnet is the UI default; mainnet requires an explicit confirmation.
| Network | Contract | Address | Deployment transaction | Source status |
|---|---|---|---|---|
| Mainnet 4663 | Identity | 0x70361a37…Fc950 |
0x7ac254c7…13fa6 |
Blockscout verified |
| Mainnet 4663 | Reputation | 0x8a4154a6…628Ff |
0x04c7048b…ca179 |
Runtime + constructor linkage verified by RPC; Blockscout source publication pending |
| Mainnet 4663 | Validation | 0x020d0530…b073b |
0xfbd83784…a6db0 |
Blockscout verified |
| Testnet 46630 | Identity | 0xf1A30080…2fDB3 |
0xffeaef94…4cd4d |
Blockscout verified |
| Testnet 46630 | Reputation | 0x2137528b…b1570 |
0xfd92b029…03a7e |
Runtime + constructor linkage verified by RPC; Blockscout source publication pending |
| Testnet 46630 | Validation | 0x4126217a…2eefd |
0xe21f7501…7bab6 |
Blockscout verified |
Both deployments used the guarded Foundry target
DeployCheshireAgentRegistries: dry-run first, fixed chain-ID probe, exact
chain-specific broadcast confirmation, a quota-backed mainnet RPC, and the
configured audit-artifact digest. The three CREATE transactions succeeded on
mainnet block 14150372 and testnet blocks 91559343–91559344.
Canonical runtime checks:
| Contract | Runtime bytes | Mainnet runtime code hash |
|---|---|---|
| Identity | 7,667 | 0x1c3c472c561bd5f45b9056fe4716aa57d60fd4d06eef9e8616c926ed744d2aa3 |
| Reputation | 7,882 | 0xb145a0e76b834446b001d83fb4657c22d53c150983c8076eae8845d484e28a63 |
| Validation | 4,186 | 0x9193febb5cb157a71f4043e9cdd3e21bfcb982229ba04669be6a696621a11c89 |
The reputation and validation contracts both return the identity address for
their immutable getIdentityRegistry() link on each network. Identity tokens
are chain-scoped: registering on both networks creates two separate identities,
not a bridge or a single cross-chain token.
Server deployment configuration:
RH_RPC_URL=<quota-backed Robinhood mainnet RPC>
RH_RPC_URL_TESTNET=https://rpc.testnet.chain.robinhood.com
RH_AGENT_IDENTITY_REGISTRY=0x70361a37951d66F8C44Cfb45873DF2Ba8b9Fc950
RH_AGENT_IDENTITY_REGISTRY_TESTNET=0xf1A30080F5dA64Ab0456F3ADC06DfD8FC9d2fDB3Implementation: src/lib/agents/robinhood-forge.ts ·
src/components/agents/robinhood-agent-forge.tsx ·
src/app/api/robinhood/agents/ ·
deployment sources in ../cheshire-terminal/packages/robinhood-deploy and the
open-source robinhood-agents package.
| Item | Value |
|---|---|
| Bridge UI | funpump.ai/bridge · bridge.funpump.ai |
| Live status API | GET /api/bridge/status (trafficEnabled, ready, online, limits) |
| Relayer status board | clawd-bridge-relayer.fly.dev/status |
| Traffic env | NEXT_PUBLIC_BRIDGE_TRAFFIC_ENABLED=true (server + preferred client build); UI also honors live trafficEnabled from the status API |
| wCLAWD live pin | 0xFB4aC48725436Ad2D8079968d55f2a2e8A17cd62 (full-supply cutover) |
| Wallet inspector | Robinhood Wallet inspector (RhWalletPanel) at the top of /bridge |
| Zero-service / DFlow | clawd-zero-service.fly.dev · prod quote origin https://quote-api.dflow.net (API key server-side only) |
| Changelog detail | docs/updates.md · 2026-07-18 — Bridge traffic UI, Rh wallet inspector, relayer RPC, zero-service DFlow |
Deep docs: bridge/README.md · bridge/relayer/README.md.
| Surface | URL / path |
|---|---|
| Clawd Wallet + North Mini marketing | extension.funpump.ai/extension |
| Extension app health / North Mini API | extension.funpump.ai/api/health · POST /api/north-mini |
| Same-origin WaaS gateway (browser) | https://extension.funpump.ai/api/waas → set NEXT_PUBLIC_DYNAMIC_WAAS_URL |
| Dynamic WaaS custody service | clawd-dynamic-waas.fly.dev/health |
| Adapter package + CWS assets | smolana-wallet-adapter/ · store listing in chrome-extension/store/ |
| Full session notes | docs/updates.md · section 2026-07-17–18 — Clawd Wallet + North Mini |
The main app includes a draggable CLAWD companion. Its default Auto route
uses the allowlisted inference mesh first and falls back to the existing
server-side OpenRouter proxy; either provider can also be pinned in the UI.
Conversation history and launcher position stay in browser storage, while
provider credentials remain server-side. The integration reuses
/api/free/chat and /api/openrouter/chat, including their existing model
admission, quotas, rate limits, and entitlement checks.
Run npm run test:clawd-companion for the focused integration tests.
We started with a Solana-native AI agent browser: chat, browse, trade SPL, run bots. Then Robinhood Chain (EVM L2, 4663 mainnet / 46630 testnet) opened a new surface — stocks narrative, RH explorer, launchpads — but $CLAWD was still pure Solana Token-2022.
So we built the thing that makes the whole product feel liquid across venues:
- Trade terminal — Jupiter / Pump / agent hot-wallet paths on Solana
- Official Clawd Wallet — Solana-native multi-chain identity (SIWS + Dynamic MPC), stables, portfolio
- CLAWD ↔ wCLAWD bridge — lock on Solana, mint ERC-20 on RH, burn back
- Relayer — watches both chains, drives
bridgeMint/ custody release - Marketplace shell — Trade · Wallet · Launch · Bridge · Explorer · Stocks under one nav
- FunPump launches — anyone opens a bonding-curve token via
/launch(createTokenon FunPump V2/V3 factories) - NOXA Fun–style integrator model — separate path: standard ERC-20s + V3 pools for bots/routers
- Clawd North Mini — world's first Clawd agent on OpenRouter
cohere/north-mini-code:freewith streamed reasoning (docs) · Chrome extension + adapter atsmolana-wallet-adapter/· public marketing extension.funpump.ai/extension · notes in docs/updates.md
flowchart LR
subgraph SOL["◎ Solana"]
A["$CLAWD SPL<br/>8cHz…pump"]
C["Custody ATA<br/>J71iKk…"]
T["Trade / Agents"]
end
subgraph REL["⚡ Relayer"]
R["poll deposits + burns<br/>cursor + nonces"]
end
subgraph RH["🟩 Robinhood Chain 4663"]
W["wCLAWD full-supply ERC-20<br/>0xFB4aC4…17cd62<br/>live pin"]
L["FunPump factory<br/>name=FunPump<br/>anyone createToken"]
E["Blockscout explorer"]
end
U["Users / agents"] -->|EVM wallet + RH ETH| L
A -->|lock + 0x memo| C
C --> R
R -->|bridgeMint| W
W -->|bridgeBurn| R
R -->|release CLAWD| A
T --- A
W --- E
L --- E
That motion is the product pitch: agents and humans settle under one roof, not five disconnected tabs.
| Surface | Route | What ships |
|---|---|---|
| Trade | /trade |
Solana SPL · Jupiter · Pump · agent trades |
| North Mini | /north-mini |
Free Clawd coding agent — cohere/north-mini-code:free + reasoning stream · animated README |
| Wallet | /wallet |
Official Clawd Wallet — multi-chain identity, portfolio, stables, SIWS |
| Launch | /launch |
Anyone can create a token on RH mainnet — bonding curve + buy/sell · public page (no $CLAWD gate) |
| Bridge | /bridge · bridge.funpump.ai |
Relayer via /api/bridge/status (live trafficEnabled + ready) · public board fly.dev/status · env NEXT_PUBLIC_BRIDGE_TRAFFIC_ENABLED · RhWalletPanel at top · notes in docs/updates.md |
| Explorer | /explorer |
RH blocks/txs · Blockscout PRO · verify UI |
| Stocks | /stocks |
Off-chain equities chat under the same shell |
Cross-links live in the Marketplace rail so you never dead-end after a bridge or launch.
Users can launch on Robinhood Chain from /launch (public — no $CLAWD login). Connect an EVM wallet with ETH on 4663.
| Field | Value |
|---|---|
| Factory product name | name() → FunPump |
| Factory symbol | symbol() → FUNPUMP |
| Product host | product() → funpump.ai |
| Creator fee share | 9950 bps (99.5% of collected fees) |
| Token branding | Every launch: name starts with pump, ends with fun; symbol starts with PUMP, ends with FUN (≤16 chars) |
| Solidity | FunPumpLaunchpad / FunPumpLaunchpadV3 under bridge/contracts/src/ |
| Env pins | NEXT_PUBLIC_LAUNCHPAD_ADDRESS · NEXT_PUBLIC_LAUNCHPAD_V3_ADDRESS |
Pass a base name/symbol in the UI/API (e.g. Clawd / CLAWD). The factory mints the branded form.
| Model | Fixed-supply ERC-20 + bonding curve (createToken) |
| Trade | Factory buy/sell until ~2.864 ETH, then graduate to Uniswap V2 (LP burned) |
| Active FunPump factory | 0xCeE76e508Ee97b1f78Dd39a24eD4e5C867157698 · deploy 0x8fed1eee…1293 |
| Historical (read-only) | Pre-FunPump 9950: 0x52603DC0…59C4 · branding-preview: 0x0aD675Ce…2205 · legacy 50%: 0x3f60…C322 |
| First live token (historical factory) | Clawd / CLAWD 0x45c299…96f0 on 0x52603… · no dev-buy |
| UI / API | /launch?rail=curve · GET /api/launchpad/tokens · src/lib/evm/launchpad-launches.ts · skill rh-bonded-launch |
| Model | Standard ERC-20 + V3 pool in the launch tx (launchToken) — no curve |
| Trade | SwapRouter02 / bots; success popup gives CA + pool + DexScreener + NOXA Fun links |
| Factory | 0xD9eC2db5…FCcB |
| V3 stack | Factory 0x1f7d7550… · PM 0x73991a25… · Router 0xCaf681a6… · WETH 0x0Bd7D308… |
| UI / API | /launch?rail=noxa · /launch/[token]?rail=noxa · GET /api/launchpad/noxa |
| Note | On-chain launchEnabled() may be false (factory paused). UI shows status + links to fun.noxa.fi/rh. |
| Model | Same bonding-curve UX as Rail 1, but graduation seeds a Uniswap V3 pool (V3PoolBootstrap) |
| Active FunPump V3 factory | 0x27f27F998fdBa2a38C136Bb3E7a8BA43155798Cd · deploy 0x13eee6cf…f08f · name()=FunPump |
| Historical V3 | Branding-preview: 0x341b0b7A…B31A · pre-branding: 0x565dcaAA…4a4B |
| Agent / Telegram API | GET /api/launchpad/v3 · POST /api/launchpad/v3/prepare · POST /api/launchpad/v3/submit · GET /api/launchpad/v3/token |
| Skill | .agents/skills/rh-launchpad-v3/SKILL.md |
| Docs | docs/v3-pool-from-launch.md · bridge/contracts/README.md |
/launch?rail=curve → FunPumpLaunchpad.createToken → curve → Uniswap V2
/launch?rail=noxa → NOXA Fun.launchToken → Uniswap V3 pool (instant)
agents / Telegram → FunPumpLaunchpadV3.createToken → curve → Uniswap V3
# Bot/agent: prepare unsigned createToken against FunPump V3, then sign + submit
curl -sS -X POST https://funpump.ai/api/launchpad/v3/prepare \
-H 'content-type: application/json' \
-d '{"name":"Agent Coin","symbol":"AGT","devBuyEth":"0"}'
# Response includes brandedName / brandedSymbol preview (pump…fun / PUMP…FUN)None of these rails are the Solana $CLAWD peg — that is /bridge → wCLAWD.
Deep dive: funpump/README.md · docs/hood.md · bridge/contracts.
Route: /wallet · Identity: better-auth + Sign-In With Solana (SIWS) · Embedded MPC: Dynamic · Solana-native by default
The Official Clawd Wallet is the multi-chain home for humans and agents under the same roof: Solana first, plus EVM / Robinhood Chain, Bitcoin, stablecoin settlement, and portfolio data powered by SolanaTracker / Birdeye / OpenRouter.
flowchart TB
subgraph ID["🔐 Identity"]
BA["better-auth<br/>email · OAuth · session cookie"]
SIWS["better-auth-solana<br/>SIWS /api/auth/siws/*"]
end
subgraph CHAINS["⛓ Chains · Solana native"]
SOL["◎ Solana<br/>Clawd · Phantom · Solflare"]
EVM["EVM + Robinhood 4663/46630"]
BTC["Bitcoin · Dynamic BIP-340"]
end
subgraph EMB["🧩 Embedded MPC"]
DYN["Dynamic WaaS<br/>SOL → EVM → BTC"]
MPC["2-of-2 TSS default<br/>optional 2-of-3"]
end
subgraph DATA["📡 Data + AI"]
HEL["SolanaTracker RPC / WSS"]
BE["Birdeye prices"]
OR["OpenRouter assistant"]
end
subgraph $["💵 Stables"]
USDC["USDC primary · SOL first"]
FLOW["Fireblocks Flow settle-to-USDC"]
end
BA --> SIWS
SIWS --> SOL
SOL --> DYN
EVM --> DYN
BTC --> DYN
DYN --> MPC
HEL --> SOL
BE --> USDC
OR --> ID
FLOW --> USDC
USDC --> SOL
USDC --> EVM
| Panel | Behavior |
|---|---|
| Better Auth · SIWS | Email/password (or OAuth), Sign in with Solana, SIWS-link wallet, Dynamic pre-gen |
| Connectors | Solana (Clawd extension / Phantom / Solflare) · injected EVM for Robinhood Chain |
| Stablecoins | USDC/USDT registry · portfolio sum · create Fireblocks Flow deposit/payment |
| Portfolio | Multi-chain balances (SolanaTracker RPC + RH RPC + Birdeye pricing) |
| Wallet assistant | OpenRouter-grounded Q&A on the loaded portfolio |
| Family | Role | Notes |
|---|---|---|
| Solana | Native / primary | Wallet-adapter + Clawd extension; WaaS chain SOL |
| EVM | Ethereum, Base, L2s | Dynamic EVM root; injected MetaMask/Rabby for RH |
| Robinhood Chain | 4663 / 46630 |
Same EVM key; switch chain from wallet UI |
| Bitcoin | Embedded BIP-340 | Dynamic BTC WaaS when enabled in dashboard |
| Piece | Location / endpoint |
|---|---|
| Server | src/lib/auth.ts — organization, dash, siws() from better-auth-solana |
| Client | src/lib/auth-client.ts — siwsClient() + src/lib/auth-siws.ts helpers |
| SIWS routes | POST /api/auth/siws/nonce · verify · link |
| Session | Cookie via GET /api/auth/get-session |
Linked fields on user |
solanaAddress, evmAddress, bitcoinAddress |
| SIWS table | solanaWallet (address unique, isPrimary, userId) |
Flows:
- Sign-In With Solana — connect wallet → sign SIWS challenge → better-auth session
- Email/OAuth — classic better-auth, then SIWS-link the connected wallet
- Soft link EVM/BTC addresses via
POST /api/clawd-wallet/link(session required)
Auth setup detail: docs/auth-setup.md.
| Topic | Detail |
|---|---|
| Package surface | Dynamic JS SDK (@dynamic-labs-sdk/*) — Solana extension registered first |
| Threshold | CLAWD_WALLET_MPC_THRESHOLD → 2-of-2 (default) or 2-of-3 |
| Pre-gen | POST /api/clawd-wallet/pregen — uses signed-in email when present |
| Client env | NEXT_PUBLIC_DYNAMIC_ENVIRONMENT_ID |
| Server env | DYNAMIC_API_KEY (WaaS create + Flow) |
| CSP | frame-src allows app.dynamicauth.com / app.dynamic.xyz |
Dashboard: enable Embedded Wallets, chains Solana + EVM + Bitcoin, and Allowed Origins for localhost + production.
Settlement preference (Solana USDC first):
| Priority | Asset | Chain |
|---|---|---|
| 0 | USDC | Solana (EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v) |
| 1 | USDT | Solana |
| 2 | USDC | Base |
| 3 | USDC | Ethereum |
| 4 | USDT | Ethereum |
| 5 | USDC | Robinhood (only if CLAWD_WALLET_RH_USDC_ADDRESS is set) |
Fireblocks Flow (Dynamic enterprise) settles deposits/payments/withdrawals into configured USDC destinations:
| Endpoint | Auth | Purpose |
|---|---|---|
GET /api/clawd-wallet/stablecoins |
Public | Registry + Flow readiness |
POST /api/clawd-wallet/flow |
better-auth session (or service Bearer) | Create payment / deposit / withdraw |
GET /api/clawd-wallet/flow/[id] |
Public read | Poll status |
POST /api/clawd-wallet/flow/[id] |
Session token from attach-source | source · quote · prepare · broadcast · cancel |
Settlement destinations: CLAWD_WALLET_SETTLE_SOL (falls back to CLAWD_TREASURY) and optional CLAWD_WALLET_SETTLE_EVM. Flow memos include betterAuthUserId / email for reconciliation.
| Method | Path | Auth | Role |
|---|---|---|---|
GET |
/api/clawd-wallet/config |
Optional session | Readiness flags (no secrets) |
GET |
/api/clawd-wallet/me |
Optional | Session + linked addresses |
POST |
/api/clawd-wallet/link |
Required | Persist SOL/EVM/BTC on user |
POST |
/api/clawd-wallet/portfolio |
Public | Helius + RH balances + Birdeye prices |
POST |
/api/clawd-wallet/assistant |
Public (rate-limited) | OpenRouter portfolio Q&A |
POST |
/api/clawd-wallet/pregen |
Required | Dynamic WaaS pre-gen |
POST |
/api/clawd-wallet/flow |
Required | Stablecoin Flow create |
GET/POST |
/api/clawd-wallet/flow/[id] |
Mixed | Flow steps / poll |
POST |
/api/solana/rpc |
Same-origin | Proxied Solana RPC (SolanaTracker first; failover enabled) |
Code: src/lib/clawd-wallet/*, src/components/wallet/*, src/context/clawd-wallet-provider.tsx, src/context/dynamic-wallet-provider.tsx.
# Identity (better-auth)
DATABASE_URL=
BETTER_AUTH_SECRET=
BETTER_AUTH_URL=https://funpump.ai
NEXT_PUBLIC_APP_URL=https://funpump.ai
# BETTER_AUTH_SIWS_DOMAIN=funpump.ai # optional SIWS hostname override
# Solana data (server-only; never NEXT_PUBLIC_)
SOLANA_TRACKER_SECURE_RPC_URL= # dedicated primary RPC
SOLANA_TRACKER_RPC_URL= # regular Tracker fallback
SOLANA_TRACKER_WSS_URL=
SOLANA_TRACKER_API_KEY= # RPC credential when URL is not pre-signed
SOLANATRACKER_API_KEY= # Data API x-api-key
SOLANA_TRACKER_SECURE_DATA_URL= # dedicated primary Data API
SOLANATRACKER_DATA_URL=https://data.solanatracker.io # regular fallback
# Optional Helius-only DAS fallback:
HELIUS_RPC_URL=
HELIUS_API_KEY=
BIRDEYE_API_KEY= # price/market fallback + OHLCV/search/liquidity
BIRDEYE_WSS_URL=
# AI assistant
OPENROUTER_API_KEY=
# Dynamic MPC + Flow
NEXT_PUBLIC_DYNAMIC_ENVIRONMENT_ID=
DYNAMIC_API_KEY= # WaaS + flow.write
CLAWD_WALLET_MPC_THRESHOLD=2-of-2
CLAWD_WALLET_SETTLE_SOL= # USDC landing address (Solana)
CLAWD_WALLET_SETTLE_EVM= # optional EVM destination
CLAWD_WALLET_RH_USDC_ADDRESS= # optional RH USDC
CLAWD_WALLET_PREGEN_SECRET= # optional service Bearer
CLAWD_WALLET_FLOW_SECRET= # optional service Bearernpm install --legacy-peer-deps
cp .env.example .env.local
# Fill DATABASE_URL, BETTER_AUTH_SECRET, SolanaTracker vars, OPENROUTER_API_KEY, Dynamic ids…
npm run auth:migrate # user.* wallet columns + solanaWallet table
npm run test:smoke:solana # secure Tracker RPC/WSS/Data + Birdeye price fallback
npm run test:smoke:birdeye # price/OHLCV/search/meme/liquidity/network sweep
npm run dev # → http://localhost:3000/wallet
npm run test:clawd-wallet # adapter + wallet unit testsOperator checklist
npm run auth:migrateagainst Postgres- Dynamic dashboard: embedded wallets, SOL/EVM/BTC, allowed origins
- Connect Solana on
/walletor/login→ Sign in with Solana - (Optional) enable Fireblocks Flow + set settle destinations for USDC deposits
These facts match funpump/README.md and src/lib/evm/robinhood-chain.ts — no invented TVL.
| Asset / role | Address | Links |
|---|---|---|
| $CLAWD mint (Solana) | 8cHzQHUS2s2h8TzCmfqPKYiM4dSt4roa3n7MyRLApump |
Solscan |
WrappedCLAWD full-supply (wCLAWD, live) |
0xFB4aC48725436Ad2D8079968d55f2a2e8A17cd62 |
Verified mainnet contract · supply limits match Solana $CLAWD · testnet: 0x998a…8e0B |
WrappedCLAWD vNext (historical) |
0xb4f5B98a6DF552e9842092afD82b3427BA74Ea93 |
Pre full-supply cutover — do not route new bridge traffic |
| Admin Safe (2-of-2) | 0x6e64f6a8e1afee243B6cee6D0957d9A344039E5a |
same deterministic Safe on 4663 + 46630 |
BRIDGE_ROLE (relayer EVM) |
0x0d7b25825Bf8b932a7475c9a53eD1c7018E813c1 |
only minter of wCLAWD |
| Solana custody | J71iKkZELmqqTdwZH3nNE7vnbm657JLXW4vovB1obYga |
locks real $CLAWD |
FunPump V2 (name()=FunPump, anyone may createToken) |
0xCeE76e508Ee97b1f78Dd39a24eD4e5C867157698 |
Blockscout · FUNPUMP · token pump…fun branding · 99.5% creator share · powers public /launch |
| FunPump V3 (curve → Uniswap V3) | 0x27f27F998fdBa2a38C136Bb3E7a8BA43155798Cd |
Blockscout · same FunPump identity · agent API /api/launchpad/v3 |
| Chain IDs | 4663 mainnet · 46630 testnet |
RH RPC + Blockscout |
| Beat | Detail |
|---|---|
| First custody deposit | Solana tx 3xmuPkiNVw2f8…wcgn — memo was "history" (invalid for auto-mint) |
| Manual bridgeMint recovery | 6,942 wCLAWD minted 1:1 to relayer address after audit of that deposit |
| Legacy supply (historical incident) | 6,942 wCLAWD was minted on the legacy 0x9F9a…4EB9 deployment; vNext launched with zero supply and reserves the old custody balance during cutover |
| Full-supply cutover (2026-07-17) | Live mainnet pin is 0xFB4aC48725436Ad2D8079968d55f2a2e8A17cd62 (max mint/burn/window = full Solana $CLAWD supply). Historical vNext 0xb4f5…Ea93 is superseded. |
| Source verification | Full-supply WrappedCLAWD is verified on Blockscout; deployment initcode, runtime hash, roles, limits, and receipt were independently matched |
| Chain-domain separation | Mainnet live is 0xFB4a…cd62; historical mainnet vNext is 0xb4f5…Ea93; testnet vNext is 0x998a…8e0B. The same numeric 0x998a… is only historical v1 on mainnet. |
Full trust model, gotchas, and how to run the relayer: bridge/README.md · bridge/relayer/README.md.
Live Fly topology: one signer Machine (journal + mint/release) plus optional standby health replicas — never scale the signer group above 1. Status board: https://clawd-bridge-relayer.fly.dev/status.
Wallet connect (Reown AppKit): set NEXT_PUBLIC_REOWN_PROJECT_ID or REOWN_PROJECT_ID — see src/lib/reown/README.md.
Frozen deployment inputs and the verified outcome (live full-supply): CUTOVER-STATUS-2026-07-17-FULLSUPPLY · mainnet receipt. Historical vNext cutover only: CUTOVER-STATUS-2026-07-15.
On Robinhood-class stacks (including NOXA Fun launches), tokens are standard ERC-20s with real Uniswap V3–style pools from the launch transaction — no custom AMM migration step. If you already integrate Uniswap V3 routers/quoters (or a V3 fork like NOXA DEX), you already trade these tokens.
Filter factory logs for TokenLaunched (or backfill from factory deploy block):
event TokenLaunched(
address indexed token,
address indexed deployer,
address indexed dexFactory,
address pairToken,
address pool,
uint256 dexId,
uint256 launchConfigId,
uint256 positionId,
uint256 restrictionsEndBlock,
uint256 initialBuyAmount
);function getLaunchedToken(address token) external view returns (LaunchedToken memory);
// require exists == true
// or: token.launchFactory() == knownFactorytoken.liquidityPool() // V3 pool
token.pairToken() // WETH / USDC / etc.
token.poolFee() // e.g. 10000 = 1%Public swaps start the block after launch. While
launchBlock < block.number <= restrictionEndBlock
respect maxWalletLimit / maxTxLimit or transfers revert (LaunchBlockBuyBlocked, MaxWalletExceeded, MaxTxExceeded). After the window, pure ERC-20.
Arbitrum Orbit / Robinhood:
block.numberis L1 height — evaluate restriction windows against L1 block numbers.
In this repo today:
| Surface | What it does |
|---|---|
/robinhood |
Live Blockscout market surface + NOXA Fun integrator guide + multi-DEX / Fun contract tables (SSR) |
GET/POST /api/uniswap |
Server-only proxy for Uniswap Trading + LP APIs (UNISWAP_API_KEY → x-api-key; never NEXT_PUBLIC_) with approval, quote, routing-aware swap, LP transaction validation, and custom-link builders |
src/lib/noxa/catalog.ts |
Machine-readable NOXA DEX V3 + Fun launchpad addresses by chain ID |
RH FunPump V2 0xCeE76e…7698 / V3 0x27f27F…98Cd |
User-facing permissionless launches — see § Launch a token |
Treat the NOXA Fun surface as the integrator model for V3-from-launch tokens and bots.
End-user “I want to launch a token” = /launch (bonding curve), not NOXA Fun.
Clawd’s CLAWD peg remains the bridge path in bridge/.
Developer catalog at /unichain and src/lib/evm/unichain.ts:
| Network | Chain ID | Public RPC (rate-limited) | Explorer |
|---|---|---|---|
| Unichain Mainnet | 130 | https://mainnet.unichain.org |
uniscan.xyz |
| Unichain Sepolia | 1301 | https://sepolia.unichain.org |
sepolia.uniscan.xyz |
Includes public RPC supported/unsupported method lists, bridges, cross-chain protocols, indexers, wallets, and wallet “Add Network” JSON. Self-host: Uniswap/unichain-node. Uniswap Wallet: enable Testnet mode for Sepolia.
Official Uniswap agent skills are installed under .agents/skills/ (from Uniswap/uniswap-ai):
swap-integration, swap-planner, liquidity-planner, viem-integration, v4-security-foundations, v4-sdk-integration, lp-integration, pay-with-any-token, dca-bot, index-bot, copy-trade, configurator, deployer, and related plugins.
# Re-install / update
npx skills add Uniswap/uniswap-ai --yesLLM context files: llms.txt · llms-full.txt
FunPump wiring: browser/agent code calls /api/uniswap, never the
Uniswap API hosts directly. Trading and LP requests receive the server-only
UNISWAP_API_KEY; Launchpad planning is contract-only and does not use the key.
The route exposes:
GET ?endpoint=status|swap_link|add_v2_link|remove_link|launchpad_status|launch_auction_linkPOST ?endpoint=check_approval|quote|swapPOST ?endpoint=lp/check_approval|lp/create|lp/create_classic|lp/increase|lp/decrease|lp/claim_fees|lp/pool_infoPOST ?endpoint=launchpad/validate|launchpad/create_token|launchpad/migrate
For swaps, pass the complete quote response back as quoteResponse plus an
optional Permit2 signature. The server strips null permit fields, sends
permitData only for CLASSIC signed routes, omits it for UniswapX, and validates
all returned calldata before it reaches a signer. LP callers must always perform
lp/check_approval first and sign each returned wrapper’s .transaction field.
No endpoint broadcasts transactions.
Liquidity Launchpad helpers validate supported v1/v2 deployments, CCA strategy
and immutable migration parameters (migrationBlock, sweepBlock, pool fee,
tick spacing, auction split, recipients, and uint128 amounts). They return only
unsigned createToken or migrate calldata. For a newly created token, use the
official Launchpad flow or atomically multicall createToken and
distributeToken with payerIsUser=false; never leave newly minted tokens in
LiquidityLauncher. Validate every auction contract and its immutable
parameters before bidding, and request a fresh wallet confirmation before any
approval, bid, launch, migration, or sweep transaction.
Fireblocks operators can use scripts/uniswap_fireblocks.py. It reads
UNISWAP_API_KEY, FIREBLOCKS_API_KEY, and FIREBLOCKS_API_SECRET from the
environment, is dry-run by default, and requires an interactive confirmation
before every approval or swap that spends gas/funds.
python3 -m venv .venv-fireblocks
.venv-fireblocks/bin/pip install -r scripts/requirements-uniswap-fireblocks.txt
.venv-fireblocks/bin/python scripts/uniswap_fireblocks.py --helpsequenceDiagram
participant Dev as Bot / App
participant F as LauncherFactory
participant T as ERC-20 Token
participant P as V3 Pool
Dev->>F: watch TokenLaunched
F-->>Dev: token, pool, restrictionsEndBlock
Dev->>F: getLaunchedToken(token)
F-->>Dev: exists, poolFee, positionId
Note over Dev,P: wait until block > launchBlock
Dev->>P: SwapRouter / QuoterV2
Note over T: after restrictionEndBlock<br/>no max wallet / max tx
npm install --legacy-peer-deps
cp .env.example .env.local # add keys (never commit)
npm run dev # → http://localhost:3000
# Bridge contracts + relayer
cd bridge/contracts && forge test
cd ../relayer && npm test && npm start # needs RH + Solana env
# Verify a contract on Blockscout (RH instance)
npm run verify:blockscout -- --status --network mainnet \
--address 0xFB4aC48725436Ad2D8079968d55f2a2e8A17cd62| Service | Notes |
|---|---|
| Frontend | Next.js 15 on Vercel |
| Official Clawd Wallet | /wallet — SIWS, Dynamic MPC, portfolio, stables (see section above) |
| Bridge relayer | Fly clawd-bridge-relayer — sole signer + optional standby health Machines; board /status |
| Reown AppKit | NEXT_PUBLIC_REOWN_PROJECT_ID / REOWN_PROJECT_ID; npm run test:reown |
| Blockscout PRO | Server proxy /api/blockscout (explorer enrich) |
| Contract verify | Instance API + /api/blockscout/verify + explorer UI |
- Humans — launch tokens: open
/launch(public) → connect EVM wallet →createToken— no$CLAWDlogin - Humans — trade / portfolio: SIWS or email session → wallet-signed Solana swaps, bridge deposit/redeem,
/walletportfolio - Agents: server trade actions (
agentJupiterTradeAction, Pump, Raptor) with risk caps; service Bearers for Flow/pre-gen when needed - Same roof: shell nav + marketplace rail — Launch sits next to Trade / Wallet / Bridge / Explorer
- Knowledge inject (harness): drop files into
knowledge/(or pass extra paths) →npm run knowledge:inject(node scripts/knowledge-inject.mjs) → writes.grok/rules/knowledge-inject.md(auto-loaded project rules / system instructions). Supports md/txt/json/jsonl/pdf/images; empty runs refuse to overwrite a prior inject. Full guide: knowledge/README.md · session notes: docs/updates.md
- CLAWD bridge is a custom lock-mint relayer, not Wormhole/LayerZero. Compromised
BRIDGE_ROLEor custody keys can mint or steal. Harden with multisigs before large TVL. Only one Fly signer may hold the journal — scale extra capacity as standby only. Details: bridge/README.md · bridge/relayer/README.md. - Official Clawd Wallet: better-auth sessions gate Flow/pre-gen; SIWS cryptographically binds Solana addresses; Dynamic MPC never exposes full keys in the browser; API keys (SolanaTracker, Helius DAS, Birdeye, Dynamic, OpenRouter) stay server-only.
The browser is an untrusted public client. Anything named NEXT_PUBLIC_*, any
literal imported by a Client Component, and every public API response must be
assumed visible to users. API keys, signing material, service credentials,
custody wallets, and credential-bearing RPC URLs belong only in server runtime
environment variables.
| Data | Browser-safe? | Correct location |
|---|---|---|
| Public chain IDs, contract addresses, OAuth application IDs | Yes | NEXT_PUBLIC_* when a Client Component needs them |
| Convex deployment URL | Yes | NEXT_PUBLIC_CONVEX_URL (the URL is not authorization) |
| API keys, OAuth client secrets, private keys, mnemonics, bearer tokens | No | Server-only environment variables |
| SolanaTracker, Helius, or other metered RPC URLs containing a key | No | Server-only; access through /api/solana/rpc |
| Admin/bypass decisions | No | Enforce in server routes; client flags are display hints only |
Chainlink display-only reference prices are read from Ethereum mainnet through
the server-only ETHEREUM_RPC_URL (or legacy ETH_RPC_URL) setting. They never
fall back to the generic RPC_URL, because that deployment key is reserved for
Solana. If neither Ethereum-specific setting is present, the reader uses the
public Cloudflare Ethereum endpoint and still fails closed on stale or invalid
rounds.
Deployment boundaries are defense in depth:
.gitignoreprevents local credentials and generated state from entering Git..vercelignorekeeps standalone services, caches, local configuration, and credential-file formats out of Vercel uploads..dockerignorekeeps those same credential formats out of the Docker build context, where they could otherwise be copied into an image layer.scripts/secrets-hygiene-unit.test.tschecks source literals, public-env URL handling, and both deployment ignore files.src/lib/security/secrets.tsrejects credential-bearing values before they are intentionally returned to a client.
Do not put a secret in NEXT_PUBLIC_* and do not rely on hiding a value in a
minified bundle. If a credential was ever present in a browser bundle, Git
history, deployment upload, or image layer, rotate it; removing the file is not
enough.
Use the narrow checks while iterating, then the full checks before deployment:
npm run test:secrets # quickest exposure regression check
npm run typecheck # TypeScript boundary and API contract check
npm run lint # application source lint
npm run test:unit # server/API/security regression suite
npm run build # production Next.js compilationThe root Next.js deployment does not require the independent apps excluded by
.vercelignore, which keeps uploads smaller and avoids sending unrelated local
workspaces. zk-primitives is the exception: the root TypeScript aliases import
its source directly, so its source remains in the deployment context while its
build artifacts stay excluded.
| Doc | Topic |
|---|---|
| This README · Official Clawd Wallet | Multi-chain wallet, SIWS, Dynamic, stables, APIs, env |
| docs/auth-setup.md | better-auth, SIWS, org seed, wallet pairing |
| knowledge/README.md | Knowledge base + one-shot inject — npm run knowledge:inject → .grok/rules/knowledge-inject.md (harness system instructions); multi-format upload; safe re-runs |
| docs/updates.md | Session / operator changelog |
| bridge/README.md | Contracts, txs, relayer hosts, cutover |
| bridge/relayer/README.md | Sole-signer + standby scale, status board, tests |
| src/lib/reown/README.md | Reown AppKit projectId, hooks, env |
| bridge/contracts/src/FunPumpLaunchpad.sol | FunPump V2 factory (name()=FunPump, createToken, buy/sell) |
| bridge/contracts/src/FunPumpLaunchpadV3.sol | FunPump V3 factory (curve → Uniswap V3 graduate) |
| bridge/contracts/src/interfaces/ILaunchpad.sol | Launchpad interface (createToken, buy/sell, events) |
| bridge/contracts/src/libraries/FunPumpBranding.sol | On-chain pump…fun / PUMP…FUN token branding |
| docs/hood.md | Robinhood saga — bridge bugs + public /launch |
| docs/launchagent.md | Parallel handoff — port RH launches into Cheshire Terminal (client/ · server/) |
| .agents/skills/rh-bonded-launch/SKILL.md | Agent skill — any agent can launch (or guide launch) on /launch |
| /contracts | Testnet-first Grok Contract Studio: generate, compile, wallet-deploy, create artwork, and verify on Blockscout |
| Robinhood contracts | Foundry, Hardhat, Blockscout, key safety, and Arbitrum Nitro messaging |
| docs/ARCHITECTURE.md | Broader system architecture (if present) |
Built for people who want Solana speed, a real multi-chain wallet, EVM reach, and permissionless token launches on Robinhood Chain — without leaving the terminal.