Developer quickstart
Start a local validator network and make an Ethereum RPC request. Run node commands from your cpp-node checkout, not the documentation folder.
Prerequisites
The node requires GCC/G++ 16, CMake 4.4+, Ninja 1.11+, Conan 2, Git and OpenSSL 3. The C++ build uses C++26 and named modules. Apple's system g++ is Clang; use the versioned GNU compiler on macOS.
# macOS development dependencies
brew install gcc cmake ninja conan openssl@3
g++-16 --version
cmake --version
conan --version
If the current package manager does not provide the required versions, install a matching toolchain before continuing. The Linux build/container path is in the node's deploy/docker/Dockerfile.
Build the node
cmake --preset gcc16-release
cmake --build --preset gcc16-release --target \
joltzu_validator joltzu_local joltzu_keygen joltzu_dev_signer
On Apple Silicon, if an older selected assembler rejects stlur, prefix both configure and build commands with DEVELOPER_DIR=/Library/Developer/CommandLineTools, using an installed current Command Line Tools directory. See operator setup.
Initialize and start
# Set OPENSSL to your OpenSSL 3 executable. On Homebrew:
export OPENSSL="$(brew --prefix openssl@3)/bin/openssl"
tools/devnet.sh init build/devnet
tools/devnet.sh start build/devnet
The default network has four validators, development signers and an observer. Startup prints the observer URL, chain ID and funded development accounts. Expect http://127.0.0.1:30400 and chain ID 31337. The keys are public test fixtures.
Make your first RPC call
curl http://127.0.0.1:30400 \
-H 'Content-Type: application/json' \
--data '{"jsonrpc":"2.0","id":1,"method":"eth_chainId","params":[]}'
The chain-ID result is "0x7a69". Read the current height:
curl http://127.0.0.1:30400 \
-H 'Content-Type: application/json' \
--data '{"jsonrpc":"2.0","id":2,"method":"eth_blockNumber","params":[]}'
The default devnet suppresses empty blocks, so height can remain at zero until a transaction is committed. Continue with sending a transaction, deploying Solidity, or connecting a wallet. Existing applications should review Porting from other EVM chains.
Stop and resume
tools/devnet.sh status build/devnet
tools/devnet.sh stop build/devnet
# Resume the same chain and stores later:
tools/devnet.sh start build/devnet
Committed transactions add history while the devnet is running; idle periods need not advance the head. Stop it when finished. The optional tools/devnet.sh clean build/devnet command deletes that development network's state; use it only when you want to reset it.