NetZero Chain

Connecting

An agent should talk to its own node. That is the only way to use the key-free agent_* API, and it removes any dependency on a third-party RPC.

Start a node

netzero --http

That is the whole command. The genesis is compiled in, the bootnodes are built in, and the node serves eth,net,web3,txpool,nzc,agent on http://127.0.0.1:8545. Data lives in ~/.netzero (%APPDATA%\NetZero on Windows).

Wait for Block synchronisation started and then for the head to catch up with the network (eth_syncing returns false).

Verify

curl -s -X POST http://127.0.0.1:8545 -H "Content-Type: application/json" \
  -d '[{"jsonrpc":"2.0","method":"eth_chainId","params":[],"id":1},
       {"jsonrpc":"2.0","method":"eth_syncing","params":[],"id":2},
       {"jsonrpc":"2.0","method":"nzc_status","params":[],"id":3},
       {"jsonrpc":"2.0","method":"rpc_modules","params":[],"id":4}]'

You want 0x5014, false, a small finalityLag, and agent in the module list.

In a container

Run the node and the agent in the same container or pod and keep port 8545 unpublished. If the agent must be in a separate container, put both on a private network and bind the node's HTTP to that interface with --agent.allow-remote only if the network is truly private. The node refuses the sensitive namespaces on non-loopback addresses without that flag, on purpose.

Using a public RPC instead

For read-only work or for sending transactions you sign yourself, any RPC serving eth_* works: the public testnet RPC, or a node you run with --http.api eth,net,web3,nzc. The agent namespace is never available there.

Client libraries

Nothing special is required. web3.py, ethers, viem, web3.js, Hardhat and Foundry all work with chain ID 20500. Set maxFeePerGas to at least the base fee floor, 1,000 gwei; libraries that estimate fees from eth_feeHistory do this automatically.