Changelog
Product updates and new capabilities. wharfnet is pre-1.0 and actively developed — the CLI and library surface may still change between releases.
Filter
Boot a subset of chains
wharfnet upandwharfnet composenow take chain selectors — a kind (evm) or a name (anvil-1), repeatable:wharfnet up evm solanaboots just those, and only their images are pulled.-x/--excludeskips chains (up -x bitcoin,litecoin), and$WHARFNET_CHAINSsets a default selection for CI.- No selector still boots the whole topology, so the default is unchanged. Selectors reuse the same kind-or-name model as
faucet/logs/chain control; unknown terms (or a selection that excludes everything) are rejected with the list of available chains.
Litecoin block explorer
- Litecoin chains now boot an ltc-rpc-explorer by default (
up --bareto skip), completing UTXO explorer parity with Bitcoin — a maintained Litecoin fork of btc-rpc-explorer with the same design (straight tolitecoindover RPC, no indexer/DB). Its URL is advertised in thestatus/manifest. - The image is pinned by digest (the fork ships only a rolling
latesttag) and is amd64-only, so it runs underlinux/amd64— emulated on arm64 hosts (slower to boot;up --bareskips it).
zkSync chain
- A zkSync chain (
zksync-1,:8011) now boots by default, running Matter Labs' [anvil-zksync](https://github.com/matter-labs/anvil-zksync) in-memory node (the EraVM analogue of Anvil) from a pinned image, at chain id260. Selectable viakind = "zksync"inwharfnet.toml. - anvil-zksync funds the standard Anvil test-mnemonic accounts (10,000 ETH each), recorded in the manifest. Its image ships no
cast, so chain control and the faucet drive the node over a dependency-free JSON-RPC client rather than exec-ing a CLI inside the container. zkSync chains are ephemeral for now —up --resumeboots them fresh (persistence is planned).
zkSync faucet, chain control & forking
- The unified
faucettops up native ETH additively via theanvil_setBalancecheat (decimal coins, or wei with--raw). There are no bundled test tokens yet — EraVM test tokens are planned — so--tokenaccepts onlyETH. - anvil-zksync implements the same
evm_*/anvil_*cheats as Anvil, sowharfnet zksyncmirrors the EVM verb set one-for-one —mine,increase-time,warp,impersonate, andsnapshot/revert(which Starknet/Solana have no analogue for). Forking a live zkSync network is supported viafork_url+fork_block(anvil-zksync'sforksubcommand).
Bitcoin & Litecoin chains
- Bitcoin (
bitcoin-1,:18443) and Litecoin (litecoin-1,:19443) now boot by default, each running its Core daemon in regtest from a pinned image (bitcoin/bitcoin:29,uphold/litecoin-core:0.21). Litecoin is a Bitcoin fork with an identical JSON-RPC, so both are served by oneUtxoEngine; selectable viakind = "bitcoin"/"litecoin"inwharfnet.toml. - At boot each chain creates a
wharfnetwallet and mines 101 blocks to it, so a coinbase matures and the address holds a spendable 50-coin balance — the UTXO analogue of the pre-funded EVM/Solana dev accounts. The RPC is published with fixed dev credentials (wharfnet:wharfnet) embedded in the manifest.
Bitcoin & Litecoin faucet & chain control
- The unified
faucetfunds native coin from the boot wallet and mines one block to confirm;--rawtreats the amount as satoshis. UTXO chains carry no test tokens, so only the native coin (BTC/LTC) is funded. wharfnet bitcoin mine <n>/wharfnet litecoin mine <n>produce blocks on demand (regtestgeneratetoaddress). Regtest is standalone, so there is no time-travel, snapshot, or forking analogue —fork_urlis rejected on load.
Bitcoin & Litecoin persistence & explorer
up --resumebind-mounts a per-chain datadir under.wharfnet/state/, so the whole chain (blocks, wallets, faucet sends) survivesdown→up --resume;up --resetwipes it, and a plainupstays ephemeral.- Bitcoin chains boot a btc-rpc-explorer by default (
up --bareto skip) — the UTXO analogue of Otterscan, talking straight tobitcoindover RPC with no indexer. A Litecoin explorer is planned (the published image is Bitcoin-only).
`status --json` for CI and scripts
wharfnet status --jsonemits a stable JSON document instead of the formatted report: a top-levelrunningflag, theprojectname, and achainsarray carrying the exact manifest schema (RPC URLs, chain IDs, accounts, tokens).- When nothing is running the output is still valid JSON (
running: false, emptychains), so a pipeline can branch on it without special-casing. The default human-readable output is unchanged.
Solana WebSocket RPC
- surfpool's WebSocket endpoint is now published on the HTTP RPC port
+ 1(solana-1→ws://127.0.0.1:8900), so subscriptions (slotSubscribe,logsSubscribe) andconfirmTransactionwork from the host. - Advertised via a new
wsfield in thestatus/manifest; clients like@solana/web3.jsderive the URL automatically.
Solana block explorer
- Every Solana chain now serves surfpool's built-in Studio UI, on by default and skipped by
up --bare, published on the chain's RPC port+ 10000(solana-1→http://127.0.0.1:18899).
Solana persistence
up --resume/up --resetnow cover Solana chains, each persisting to its ownsession-<chain>.sqlitesurfnet database via surfpool’s--db.- A resumed chain detects the SPL test tokens are already present and skips re-seeding, so it never clobbers your balances.
Solana forking
fork_urlnow works on Solana chains, booting them as a copy-on-read fork of a live network via surfpool’s--rpc-url.fork_blockis unsupported (surfpool has no fork-at-slot flag) and is rejected on load.
Solana faucet
- The unified
faucetcommand funds Solana addresses: native SOL throughrequestAirdrop, and the SPL test tokens through surfpool’ssurfnet_setTokenAccountcheat (the recipient needs no key). Additive, with--rawfor exact base units.
Solana test tokens
- Every Solana chain boots with standard SPL test tokens (USDC, WBTC) at fixed mint addresses, seeded onto the dev accounts via cheatcodes the moment the RPC is live — no program to deploy.
Solana chain control
wharfnet solana mine | increase-time | warp | pause-clock | resume-clockwrap surfpool’ssurfnet_*cheat RPC.mineadvances slots,warpis forward-only, andpause-clock/resume-clockgive step-by-step slot control.
Solana chains
- A
surfpoolchain (solana-1,:8899) now boots by default alongside the EVM and Starknet chains, with three deterministic dev accounts funded with 10,000 SOL each. Selectable viakind = "solana"inwharfnet.toml.
Faster multi-chain boot
upnow health-checks every chain concurrently, so boot waits on the slowest chain rather than the sum of them.
Fractional & raw faucet amounts
faucet <chain> <address> <amount>takes a decimalamount(e.g.1.5), scaled by the token’s decimals. Pass--rawto fund an exact base-unit integer.
`logs` command
wharfnet logs [chain] [--follow]streams container logs throughdocker compose logs— all services, or filtered by chain kind or name.
Starknet chains
- A
starknet-devnetchain (starknet-1,:5050) boots by default with deterministic predeployed accounts, the ETH/STRK fee tokens, and baked Cairo test tokens (USDC, WBTC, FEE, REB) at fixed addresses.
Starknet faucet, forking & control
- The unified
faucetfunds ETH/STRK and the Cairo test tokens via signed invokes on JSON-RPC 0.10. fork_url/fork_blockmirror a live Starknet network;wharfnet starknet mine | increase-time | warp | impersonatedrive a running chain.
Starknet persistence & explorer
up --resume/up --resetcover Starknet chains via a per-chain replay log.- starknet-devnet's built-in web UI explorer is served in-process at
/uion the chain's RPC port, on by default.
Mainnet forking
- Point a chain at a live RPC with
fork_url(and optionalfork_block) inwharfnet.tomland it boots as a fork via Anvil’s--fork-url.${VAR}keys are expanded from the environment and never recorded.
Canonical contracts & weird tokens
- Every EVM chain boots with Multicall3, Permit2, and the CREATE2 deployer at their real addresses, plus deliberately non-standard test tokens — fee-on-transfer (FEE), rebasing (REB), and no-return (NRT) — for integration testing.
EVM chain control & block explorer
wharfnet evm mine | increase-time | warp | impersonate | snapshot | revertwrap Anvil’s cheat RPCs.- An Otterscan explorer boots per EVM chain by default (
up --bareto skip) — no indexer, thanks to Anvil’s nativeots_*API.
Config file & persistent state
wharfnet.tomlcustomises the chain topology (name, port,chain_id,block_time); override the path with--configorWHARFNET_CONFIG.up --resume/up --resetkeep or wipe balances, txs, and deployments acrossdown.
Faucet & pre-deployed test tokens
- USDC and WBTC deploy at fixed addresses on every EVM chain, each with a public
mint. faucet <chain> <address> [amount] [--token SYMBOL]funds native ETH plus every token, or just one, with no private key.
First & second EVM chains
upboots a local Anvil chain (anvil-1,:8545, chainId31337) via Docker Compose and writes an endpoints manifest, with a second chain (anvil-2,:8546) for cross-chain tests.
CLI scaffold
- The Rust/
clapcommand surface (up,down,status,compose,faucet) that everything else builds on.
Last updated on