Skip to Content
ReferenceManifest (wharfnet.json)

Manifest Reference — wharfnet.json

When wharfnet up boots a localnet it writes a machine-readable manifest to .wharfnet/wharfnet.json. This is the single source of truth for a running network — RPC URLs, chain IDs, funded accounts, pre-deployed tokens, and explorer URLs. The testkit library and wharfnet status --json both read it; your own scripts and agents should too, instead of hard-coding endpoints.

The manifest is written atomically (temp file + rename), so a concurrent reader never sees a truncated file.

Top-level shape

{ "version": "0.1", "project": "wharfnet", "chains": [ /* ChainEntry, one per running chain */ ] }
FieldTypeDescription
versionstringManifest schema version ("0.1").
projectstringCompose project name ("wharfnet").
chainsarrayOne ChainEntry per booted chain, in topology order.

ChainEntry

FieldTypeAlways present?Description
namestringChain name, e.g. "anvil-1".
kindstringevm, starknet, solana, bitcoin, litecoin, or zksync.
rpcstringHTTP JSON-RPC URL. For UTXO chains it embeds dev credentials (http://wharfnet:wharfnet@…).
wsstringonly when distinctWebSocket RPC URL, present only when it’s on a different port than HTTP (Solana: HTTP port + 1). Omitted otherwise.
chain_idstringChain identifier as a string — decimal for EVM/zkSync ("31337"), a felt for Starknet, "localnet" for Solana, "regtest" for UTXO.
accountsarrayFunded dev Account objects.
tokensarray✅ (may be empty)Pre-deployed test Tokens.
contractsarray✅ (may be empty)Canonical infra Contracts (Multicall3, Permit2, CREATE2 deployer).
forkstringonly when forkingRedacted description of the fork source (host + pinned block); the RPC key is never recorded. Omitted otherwise.
explorerstringonly when bootedBundled block-explorer URL. Omitted with --bare or where the chain has no explorer.

Account

{ "address": "0xf39F…2266", "private_key": "0xac09…ff80", "balance": "10000 ETH" }
FieldTypeDescription
addressstringAccount address.
private_keystringSpendable key. For UTXO chains this is a note like "(spendable via node wallet 'wharfnet')" — regtest descriptor wallets don’t export raw keys.
balancestringHuman-readable starting balance, e.g. "10000 ETH", "50 BTC".

Token

{ "symbol": "USDC", "name": "USD Coin", "address": "0x5FbD…0aa3", "decimals": 6 }
FieldTypeDescription
symbolstringTicker, e.g. "USDC".
namestringFull token name.
addressstringDeterministic on-chain address (EVM/Starknet) or mint (Solana).
decimalsintegerToken decimals.

Contract

{ "name": "Multicall3", "address": "0xcA11…CA11" }

Canonical infra deployed at its real, chain-agnostic address, so tooling that hard-codes it just works.

Full example

{ "version": "0.1", "project": "wharfnet", "chains": [ { "name": "anvil-1", "kind": "evm", "rpc": "http://127.0.0.1:8545", "chain_id": "31337", "accounts": [ { "address": "0xf39F…2266", "private_key": "0xac09…ff80", "balance": "10000 ETH" } ], "tokens": [ { "symbol": "USDC", "name": "USD Coin", "address": "0x5FbD…0aa3", "decimals": 6 } ], "contracts": [ { "name": "Multicall3", "address": "0xcA11…CA11" } ], "explorer": "http://127.0.0.1:5100" } ] }

status --json

wharfnet status --json wraps the manifest with a top-level running flag:

{ "running": true, "project": "wharfnet", "chains": [ /* ChainEntry[] */ ] }

Each entry uses the exact ChainEntry schema above. When nothing is running the output is still valid JSON: { "running": false, "project": null, "chains": [] }.

Last updated on