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.
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.
-
01
Discover the chain
Fetch
/.well-known/programmable.json, select chain4663, then resolve its advertised manifest URL. -
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. -
03
Backfill, verify and follow
Read finalized Router logs from the manifest start block. Cross-check each launch through its token or pool lookup,
launchStampand, for address-based checks,stampProofat one canonical block.
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
launchStampandstampProofagreeLaunchKindV1.CustomGraph = 1at 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
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.
JSON
Platform discovery
/.well-known/programmable.json
JSON
Robinhood chain manifest
/api/v2/manifests/4663
JSON
Chain-qualified status
/api/v2/status?chainId=4663
YAML
Developer read API
/openapi/programmable-v2.yaml
ABI
Chain-neutral Router ABI
/abis/programmable-launch-stamp-router-v1.json
MD
Complete Router verification
Events, getters, finality and reorg handling
MD
Full terminal contract
Labels, feeds, market support and acceptance cases