Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

106 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Clawd Marketplace Solana Robinhood Chain Permissionless launch First launchpad token live wCLAWD full-supply live pin Blockscout

Animated: First FunPump community token is live — Clawd / CLAWD on Robinhood mainnet 4663

🚀 FunPump factory is live (RH 4663)

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 / CLAWDpumpClawdfun / PUMPCLAWDFUN.

First community token (historical)

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

Not Solana $CLAWD / wCLAWD — community bonding-curve ERC-20 only.

Journey: agent browser → trade → bridge → explorer → NOXA launches

🦀 FunPump

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

ERC-8004 Agent Forge registries (live)

The Agent Forge now supports two distinct, wallet-owned identity paths:

  • Robinhood Chain / EVM: /agent-forge/robinhood prepares a zero-value register(agentURI) call and the user's injected EVM wallet signs it.
  • Solana: /agent-forge retains 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.

Live singleton suite — deployed 2026-07-19

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=0xf1A30080F5dA64Ab0456F3ADC06DfD8FC9d2fDB3

Implementation: 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.

Bridge / wCLAWD (operator quick facts)

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.

Chrome extension + Dynamic WaaS (live hosts)

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 story — how we got here

CLAWD companion

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:

  1. Trade terminal — Jupiter / Pump / agent hot-wallet paths on Solana
  2. Official Clawd Wallet — Solana-native multi-chain identity (SIWS + Dynamic MPC), stables, portfolio
  3. CLAWD ↔ wCLAWD bridge — lock on Solana, mint ERC-20 on RH, burn back
  4. Relayer — watches both chains, drives bridgeMint / custody release
  5. Marketplace shell — Trade · Wallet · Launch · Bridge · Explorer · Stocks under one nav
  6. FunPump launches — anyone opens a bonding-curve token via /launch (createToken on FunPump V2/V3 factories)
  7. NOXA Fun–style integrator model — separate path: standard ERC-20s + V3 pools for bots/routers
  8. Clawd North Mini — world's first Clawd agent on OpenRouter cohere/north-mini-code:free with streamed reasoning (docs) · Chrome extension + adapter at smolana-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
Loading

Animated Solana → Relayer → Robinhood Chain flow

That motion is the product pitch: agents and humans settle under one roof, not five disconnected tabs.


🏟️ Marketplace under one roof

Surface Route What ships
Trade /trade Solana SPL · Jupiter · Pump · agent trades
North Mini /north-mini Free Clawd coding agentcohere/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.


🚀 Launch a token (anyone can) — FunPump rails

Users can launch on Robinhood Chain from /launch (public — no $CLAWD login). Connect an EVM wallet with ETH on 4663.

FunPump product identity (on-chain)

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.

Rail 1 — FunPump V2 (bonding curve → Uniswap V2)

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

Rail 2 — NOXA Fun · Uniswap V3 (instant pool)

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.

Rail 3 — FunPump V3 (bonding curve → Uniswap V3 graduate)

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.


👛 Official Clawd Wallet

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
Loading

What you get on /wallet

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

Chains (Solana always first)

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

Identity: better-auth + SIWS

Piece Location / endpoint
Server src/lib/auth.tsorganization, dash, siws() from better-auth-solana
Client src/lib/auth-client.tssiwsClient() + 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:

  1. Sign-In With Solana — connect wallet → sign SIWS challenge → better-auth session
  2. Email/OAuth — classic better-auth, then SIWS-link the connected wallet
  3. Soft link EVM/BTC addresses via POST /api/clawd-wallet/link (session required)

Auth setup detail: docs/auth-setup.md.

Dynamic embedded wallets (MPC)

Topic Detail
Package surface Dynamic JS SDK (@dynamic-labs-sdk/*) — Solana extension registered first
Threshold CLAWD_WALLET_MPC_THRESHOLD2-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.

Stablecoins + Fireblocks Flow

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.

Wallet API surface

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.

Wallet env (from .env.example)

# 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 Bearer

Wallet quick start

npm 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 tests

Operator checklist

  1. npm run auth:migrate against Postgres
  2. Dynamic dashboard: embedded wallets, SOL/EVM/BTC, allowed origins
  3. Connect Solana on /wallet or /loginSign in with Solana
  4. (Optional) enable Fireblocks Flow + set settle destinations for USDC deposits

📜 Contracts, roles, and real transactions

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

Notable on-chain story beats

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.


🚀 NOXA Fun–style launches (integrator notes)

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.

Discover

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
);

Verify genuine launches

function getLaunchedToken(address token) external view returns (LaunchedToken memory);
// require exists == true
// or: token.launchFactory() == knownFactory

Trade + pool

token.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.number is 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_KEYx-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/.

Unichain (chain 130 / 1301)

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.

Uniswap AI skills (agents)

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 --yes

LLM 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_link
  • POST ?endpoint=check_approval|quote|swap
  • POST ?endpoint=lp/check_approval|lp/create|lp/create_classic|lp/increase|lp/decrease|lp/claim_fees|lp/pool_info
  • POST ?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 --help
sequenceDiagram
  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
Loading

⚡ Quick start

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

🤖 Agents + humans

  • Humans — launch tokens: open /launch (public) → connect EVM wallet → createToken — no $CLAWD login
  • Humans — trade / portfolio: SIWS or email session → wallet-signed Solana swaps, bridge deposit/redeem, /wallet portfolio
  • 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

🔐 Trust (short version)

  • CLAWD bridge is a custom lock-mint relayer, not Wormhole/LayerZero. Compromised BRIDGE_ROLE or 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.

🔒 Frontend and secret boundary

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:

  • .gitignore prevents local credentials and generated state from entering Git.
  • .vercelignore keeps standalone services, caches, local configuration, and credential-file formats out of Vercel uploads.
  • .dockerignore keeps 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.ts checks source literals, public-env URL handling, and both deployment ignore files.
  • src/lib/security/secrets.ts rejects 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.

Fast local verification

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 compilation

The 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.

📚 More docs

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 injectnpm 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.

Releases

Packages

Used by

Contributors

Languages