Skip to main content

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.