Addresses
The addresses file
One generated JSON file per chain naming every contract, treasury, prior factory and index floor an integrator needs, and every field in it.
One JSON file per chain, generated at build from the deployment records and served from this origin. It is the first thing every integration needs — a decoded-contract submission, a TVL adapter, an indexer’s start block or an independent analyst all begin with “give us the addresses, the deploy block and the ABI”.
It is regenerated ahead of every build and every dev server, so the served copy cannot be the stale one, and it is never committed. If this documentation and the file disagree, the file is right.
Fetching it#
| Path | What it answers |
|---|---|
/addresses/index.json | Which chains this origin serves, with the chain name, the environment and the path to each file. Start here if you do not already know the chain id. |
/addresses/<chainId>.json | Everything deployed on that chain, by this platform, in this environment. |
# What does this origin serve?
curl -s <origin>/addresses/index.json
{
"schema": "thehood.addresses/1",
"files": [
{ "chainId": 4663, "chainName": "Robinhood Chain", "environment": "production",
"path": "/addresses/4663.json" }
]
}schema is the string to pin against. It is "thehood.addresses/1" today and its version is bumped on any breaking shape change, so a consumer that checks it will notice a break rather than silently reading a field that moved.
What is in it#
| Key | What it is for |
|---|---|
contracts[] | Every singleton this platform deployed on the chain, with its address, purpose, ABI path, deploy-run block and explorer link. |
cloneTemplates[] | Contract families with no fixed address — one exists per launch, per market or per THD bucket. Named with their ABI so their logs can be decoded. More. |
treasuries[] | Payout destinations — where value comes to rest. Following the money to a wallet is the point of an external audit of a fee model, so they are published. |
externalContracts[] | Contracts read but not written by this platform: the Chainlink feed a USD figure is priced through, and the Uniswap V4 PoolManager, PositionManager and Permit2. |
thdBuckets[] | The eleven THD emission destinations with their share in basis points, where a THD deployment exists on the chain. |
priorFactories[] | Superseded launch factories. Every one has to be indexed. See below. |
notDeployed[] | A named contract that is absent from this chain, with the reason. An answer, not a silence. |
deploymentRecords[] | Which deploy runs produced this file, each with its block, time and calibration profile. |
indexFromBlock | The floor below which nothing of ours exists on the chain. See chains and environments. |
warnings[] | What the generator could not resolve cleanly. See below. |
conventions | The encoding of every numeric field in the file, stated in the file so a consumer who did not read this page still finds out. |
Every field of every entry is listed on the field reference.
Prior factories#
priorFactories[] is assembled from three places, because the history is written in three and no one of them is complete: a built-in list in the app’s configuration (which carries the oldest mainnet factories, and no blocks), the retired deployment records (the only source carrying a block), and the environment’s configured prior-factory list. Each entry names its sources[] so you can see which of the three answered.
# Every factory an index has to read, current first
curl -s <origin>/addresses/4663.json \
| jq '[.launchFactory] + [.priorFactories[].address]'What it deliberately does not carry#
| Absent | Why | Where to get it instead |
|---|---|---|
| The rate card | The PricingRules prices, tradeFeeBps, the fee shares and the graduation ladder are all settable on chain. A build-time copy goes stale the first time one is changed, and it goes stale silently — the file would keep serving a confident number for a rate that moved last week. launchFeeWei moves with the USD oracle on top of that, so even a same-day copy of it is stale. | A live read from the contract that holds it. |
| Operational keys | The keeper and attestor addresses are not payout destinations, and a list of addresses is read as a list of things to look at. Nothing is hidden by their absence. | The contracts that hold them, on chain. |
Warnings, published rather than logged#
warnings[] carries anything the generator could not resolve cleanly — an unknown chain id with no explorer links, a contract published without an ABI, or the app being pointed at a different factory from the one the deployment record names. It is in the file rather than only in a build log because the disagreement then becomes visible from outside, to the person consuming the addresses, and not only to whoever has the logs.
An empty warnings[] is the normal state. A non-empty one is worth reading before trusting anything else in the file.
Top level#
| Field | Type | Meaning |
|---|---|---|
schema | string | "thehood.addresses/1". Pin against it; the version is bumped on any breaking shape change. |
chainId | number | The chain this file describes. The one numeric field that is a JSON number. |
chainName | string | null | null for a chain the generator has no metadata for, which is recorded in warnings[] rather than failing the build. |
environment | string | null | The calibration profile the deployment was made under — production, staging, dev, or local. |
testnet | boolean | null | Whether the chain is a testnet. |
nativeCurrency | { name, symbol, decimals } | The chain’s own currency. Every wei figure is denominated in it. |
explorer | { name, url } | null | The block explorer every explorerUrl in the file is built against. |
rpc | string[] | Public RPC endpoints for the chain, in preference order. |
indexFromBlock | decimal string | The floor below which nothing of this platform exists on the chain. |
launchFactory | address | null | The current factory. Every launch that exists was created by this address or by one in priorFactories[]. |
conventions | object | The encoding of amounts, block numbers, addresses and times, restated inside the file. |
warnings | string[] | What the generator could not resolve cleanly. Usually empty. |
contracts[] and cloneTemplates[]#
contracts[] holds the singletons: one address each, on this chain, in this environment. cloneTemplates[] holds the families that have no fixed address, carrying the same fields minus the address and its block, plus deployedAtRuntime: true.
| Field | Type | Meaning |
|---|---|---|
name | string | The Solidity contract name, which is also the name it is verified under on the explorer. |
kind | string | singleton, or a clone family such as per-launch-clone. |
source | string | The repository path of the Solidity file it was compiled from. |
purpose | string | null | What the contract is for, from its declared manifest. |
abiPath | string | null | Root-relative path to the ABI on this origin, e.g. /abis/LaunchFactory.json. null means the ABI is not served, which is also recorded as a warning. |
address | address | Lowercase hex. Absent on a clone template. |
record | string | The deployment record file the address was read from, e.g. launchpad-4663.json. |
recordField | string | The key within that record. Together with record it makes the address traceable to the deploy that wrote it. |
deployRunBlock | decimal string | The block the deploy run recorded. Safe as an indexing floor for that contract; see the caveat below. |
deployRunAt | { unix, iso } | When the deploy run happened. Unix seconds as a decimal string, ISO-8601 UTC. |
explorerUrl | string | null | The explorer’s address page. null where the chain has no known explorer. |
treasuries[] and externalContracts[]#
| Field | Type | Meaning |
|---|---|---|
field | string | The deployment-record key, e.g. treasury, marketingTreasury, ethUsdFeed. |
label | string | A human name — “Protocol treasury”, “Chainlink ETH/USD”. |
note | string | What it is for, and any constraint the deploy enforces on it. |
address | address | Lowercase hex. |
record | string | Which deployment record it was read from. |
explorerUrl | string | null | The explorer’s address page. |
Only destinations appear in treasuries[] — places value comes to rest. A keeper key is readable on chain from the contract that holds it and is not published here. externalContracts[] is the inverse: addresses this platform reads but did not deploy, published because a USD-denominated figure cannot be reproduced without naming the same price feed, and a pool cannot be found without the PoolManager it was opened on.
thdBuckets[]#
| Field | Type | Meaning |
|---|---|---|
bucket | string | The bucket key — traders, creators, kolsReferrers, liquidity, lpProviders, spoils, bdMarketing, ecosystemGrants, insuranceBackstop, team, settlers. |
address | address | The destination contract holding that bucket’s share. |
shareBps | number | null | The bucket’s share of the total supply, in basis points. Immutable on the emission contract with no setter. |
contractKindIsOneOf | string[] | The destination type is chosen per bucket at deploy time and the record does not say which, so the file publishes the candidate set rather than a guess. Read the contract to settle it. |
A shareBps read on chain that disagrees with the file means the file describes a different deployment, not drift — the eleven shares are immutable and have no setter. See THD and the fee meter.
priorFactories[], notDeployed[], deploymentRecords[]#
| Array | Fields | Meaning |
|---|---|---|
priorFactories[] | address, sources[], deployRunBlock | null, explorerUrl | A superseded factory. sources[] names which of the three inputs knew about it; deployRunBlock is null for a factory known only to the built-in list. |
notDeployed[] | name, reason, record | null | A contract the platform has, absent from this chain, with the reason in plain words — no record for the environment, a record predating the contract, a field explicitly recording a zero address, or a contract whose source exists and which no deploy script has ever written a record for. record is null for that last one, because there is no record to name. |
deploymentRecords[] | record, deployRunBlock, deployRunAt, calibration | The deploy runs behind this file. More than one, because the launchpad and the prediction markets deploy separately. |
A worked example#
{
"name": "<ContractName>",
"kind": "singleton",
"source": "contracts/src/<area>/<ContractName>.sol",
"purpose": "<what the contract does>",
"abiPath": "/abis/<ContractName>.json",
"address": "0x…",
"record": "<record>-<chainId>.json",
"recordField": "<recordKey>",
"deployRunBlock": "<block>",
"deployRunAt": { "unix": "<seconds>", "iso": "<ISO-8601>" },
"explorerUrl": "…/address/0x…"
}The address is elided here on purpose: this page is a schema, and an address copied into documentation is a mirror that will one day disagree with the deployment it claims to describe. Read every address from the file.