Developers & API › Chains and addresses › The addresses file

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.

Version
1.2
Updated
2026-10-14
Source
Public addresses generator · External measurability implementation plan v1.2

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#

The two paths
PathWhat it answers
/addresses/index.jsonWhich 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>.jsonEverything deployed on that chain, by this platform, in this environment.
code
# 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#

The top-level keys, and what each answers
KeyWhat 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.
indexFromBlockThe floor below which nothing of ours exists on the chain. See chains and environments.
warnings[]What the generator could not resolve cleanly. See below.
conventionsThe 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.

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

Two things are missing on purpose
AbsentWhyWhere to get it instead
The rate cardThe 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 keysThe 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#

/addresses/<chainId>.json — top-level keys
FieldTypeMeaning
schemastring"thehood.addresses/1". Pin against it; the version is bumped on any breaking shape change.
chainIdnumberThe chain this file describes. The one numeric field that is a JSON number.
chainNamestring | nullnull for a chain the generator has no metadata for, which is recorded in warnings[] rather than failing the build.
environmentstring | nullThe calibration profile the deployment was made under — production, staging, dev, or local.
testnetboolean | nullWhether the chain is a testnet.
nativeCurrency{ name, symbol, decimals }The chain’s own currency. Every wei figure is denominated in it.
explorer{ name, url } | nullThe block explorer every explorerUrl in the file is built against.
rpcstring[]Public RPC endpoints for the chain, in preference order.
indexFromBlockdecimal stringThe floor below which nothing of this platform exists on the chain.
launchFactoryaddress | nullThe current factory. Every launch that exists was created by this address or by one in priorFactories[].
conventionsobjectThe encoding of amounts, block numbers, addresses and times, restated inside the file.
warningsstring[]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.

Fields on a contracts[] entry
FieldTypeMeaning
namestringThe Solidity contract name, which is also the name it is verified under on the explorer.
kindstringsingleton, or a clone family such as per-launch-clone.
sourcestringThe repository path of the Solidity file it was compiled from.
purposestring | nullWhat the contract is for, from its declared manifest.
abiPathstring | nullRoot-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.
addressaddressLowercase hex. Absent on a clone template.
recordstringThe deployment record file the address was read from, e.g. launchpad-4663.json.
recordFieldstringThe key within that record. Together with record it makes the address traceable to the deploy that wrote it.
deployRunBlockdecimal stringThe 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.
explorerUrlstring | nullThe explorer’s address page. null where the chain has no known explorer.

treasuries[] and externalContracts[]#

Fields on a treasuries[] or externalContracts[] entry
FieldTypeMeaning
fieldstringThe deployment-record key, e.g. treasury, marketingTreasury, ethUsdFeed.
labelstringA human name — “Protocol treasury”, “Chainlink ETH/USD”.
notestringWhat it is for, and any constraint the deploy enforces on it.
addressaddressLowercase hex.
recordstringWhich deployment record it was read from.
explorerUrlstring | nullThe 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[]#

Fields on a thdBuckets[] entry
FieldTypeMeaning
bucketstringThe bucket key — traders, creators, kolsReferrers, liquidity, lpProviders, spoils, bdMarketing, ecosystemGrants, insuranceBackstop, team, settlers.
addressaddressThe destination contract holding that bucket’s share.
shareBpsnumber | nullThe bucket’s share of the total supply, in basis points. Immutable on the emission contract with no setter.
contractKindIsOneOfstring[]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[]#

The three history arrays
ArrayFieldsMeaning
priorFactories[]address, sources[], deployRunBlock | null, explorerUrlA 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 | nullA 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, calibrationThe deploy runs behind this file. More than one, because the launchpad and the prediction markets deploy separately.

A worked example#

code
{
  "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.