aere-node/DEVNET.md

2.8 KiB

aere-devnet: AERE on your machine in one command

The same binary the nine mainnet validators run (the Besu fork with the AERE base-fee floor, the post-quantum message layers and the post-quantum precompiles), started as a local single-validator chain: chain id 28002, one block every 500 ms, ten funded accounts, every read AND debug API open (DEBUG, TRACE, TXPOOL). Nothing here connects to mainnet 2800: different chain id, different genesis, no peer-to-peer outside the container.

docker run --rm -p 8545:8545 -p 8546:8546 git.aere.network/aere-network/devnet:latest

Then point Hardhat, Foundry, MetaMask or cast at http://127.0.0.1:8545 (chain id 28002). web3_clientVersion returns the fleet's own version stamp, so you can see exactly which build you run.

Accounts

The ten accounts are derived from the public Hardhat test mnemonic (test test test test test test test test test test test junk, paths m/44'/60'/0'/0/{0..9}), 10,000 AERE each. Account #0 is also the validator. Anyone can derive these keys: never use them on a real network.

What is real and what is not

  • Real: the execution engine, the AERE base-fee floor fork, the post-quantum precompiles at 0x0AE1..0x0AE6 from genesis, debug_traceTransaction / trace_* on every block, 500 ms blocks.
  • Not real: consensus security. One validator, no Falcon registry, no post-quantum anchor, no post-quantum message enforcement (those need a registry of Falcon keys; the public testnet 28001 has all of that, this image deliberately does not). Empty blocks are still produced every 500 ms, so a long-running devnet grows its /data volume; use --rm or mount a volume you can delete.

Options

  • -v aere-devnet:/data persists the chain between runs.
  • -e AERE_DEVNET_LOG=DEBUG for verbose node logs.
  • Extra Besu flags can be appended after the image name.

How the image is built

From the fleet image's /opt/besu directory, copied unchanged onto a jlinked JRE 25 on Ubuntu 24.04 (about 300 MB). Every layer stays under 100 MB because the registry sits behind an edge that refuses larger uploads; the build script measures the layers and refuses to publish otherwise. Before publishing, the build starts the image, checks that blocks advance, sends a real transfer, and runs trace_transaction, debug_traceTransaction, trace_block and a call to the Falcon precompile on it.

Trace on the public read node

rpc2.aere.network also answers the read-only debug and trace methods (debug_traceTransaction, debug_traceBlockByNumber, debug_traceBlockByHash, debug_traceCall, debug_getRaw*, trace_transaction, trace_block, trace_call, trace_replayBlockTransactions). It is a full node with a 512-block state window, so traces are available for recent blocks; write-capable methods of those namespaces are refused at the edge.