Robinhood Chain · eip155:4663

Index Programmable Custom launches.

This is the official integration contract for terminals, scanners and market-data platforms. Integrate once, follow the chain manifest, and recognize future launches from the canonical Programmable Router without pinning an address in your client.

Integration contract published · runtime activation pending

Public contract

One identity. No heuristic labels.

Every recognized Custom hook can have different code, permissions, token contracts and pool behavior. The public identity remains stable because it comes from the canonical launch stamp, not from those implementation details.

platformId programmable Stable platform namespace
category custom The only category for Custom hooks
publicLabel Programmable Custom Recommended terminal display label
provenance Canonical Router stamp Chain + Router + launch ID

Integration

Follow the manifest, not a copied address.

The Robinhood lane is already discoverable. Your implementation can ship now and begin ingestion automatically after the official manifest publishes complete live trust roots.

  1. 01

    Discover the chain

    Fetch /.well-known/programmable.json, select chain 4663, then resolve its advertised manifest URL.

  2. 02

    Require complete live roots

    Do not scan while the Router is planned. Require a live Router, non-null address and start block, runtime hash, finality policy, ABI hash and finalized canary evidence.

  3. 03

    Backfill, verify and follow

    Read finalized Router logs from the manifest start block. Cross-check each launch through its token or pool lookup, launchStamp and, for address-based checks, stampProof at one canonical block.

Activation gate
async function getLiveRobinhoodRouter() {
  const manifestUrl =
    "https://developers.programmable.family/api/v2/manifests/4663";
  const response = await fetch(manifestUrl);
  if (!response.ok) throw new Error(`Manifest returned ${response.status}`);

  const manifest = await response.json();
  const router = manifest.launchStampRouter;
  const routerIsLive =
    manifest.chainId === 4663 &&
    manifest.caip2 === "eip155:4663" &&
    router?.status === "live" &&
    /^0x[0-9a-f]{40}$/i.test(router.address ?? "") &&
    /^[0-9]+$/.test(router.startBlock ?? "") &&
    /^0x[0-9a-f]{64}$/i.test(router.runtimeCodeHash ?? "") &&
    router.abiUrl &&
    router.abiSha256 &&
    router.canaryEvidence &&
    router.finalityConfirmations;

  // A published integration contract is not the same as a live Router.
  return routerIsLive ? router : null;
}

const router = await getLiveRobinhoodRouter();
if (router) {
  // Backfill the exact Router from startBlock, then verify every stamp.
}

Verification

Accept only a consistent stamp.

A launch qualifies only when the onchain evidence and the current manifest agree at the same canonical block.

Accept

  • Exact manifest Router emitter and published event topic
  • Router runtime, ABI bytes and immutable bindings match
  • Token or PoolManager + PoolId lookup returns a nonzero launch ID
  • launchStamp and stampProof agree
  • LaunchKindV1.CustomGraph = 1 at the finalized boundary

Reject or keep indeterminate

  • The same event topic emitted by another address
  • A hook or pool that exists without a canonical stamp
  • Classification copied from metadata, an API or a provider name
  • A timeout, chain mismatch, pruned block or inconsistent proof
  • An empty planned feed treated as proof that no launch exists
Router Planned
Hosted read model Planned
Custom Launch API V4 Planned

Reading the current chain manifest…

Resources

Use the canonical files directly.

These URLs are stable integration entry points. Refresh discovery and the manifest instead of copying deployment values into your code.