Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Akula: the fastest Ethereum node ever built

Akula is a next-generation implementation of Ethereum protocol (“client”) written in Rust.

Akula (Акула) is pronounced as ah-koo-lah and stands for shark in Russian.

Key benefits:

Much lower disk footprint: <3TB for Ethereum mainnet archive node

Faster sync speed:

  • An archive full validation node can be bootstrapped in under 3 days.
  • Performance improvements allow to run even on HDD.

Crash resilience:

  • Forceful shutdown or power failure cannot damage Akula’s database.

Extremely fast and rich historical state API:

  • eth_call and Parity Trace API implemented
  • Out-of-the-box support for Otterscan: very-fast and privacy-friendly local block explorer.

gRPC alternative to web3 JSONRPC API

Here is how fast execution is: look at Mgas/s.

Network & consensus engine support

Akula supports the following networks out of the box:

  • Ethereum (“mainnet”) *
  • Sepolia *
  • Goerli * — deprecated, the network was shut down in 2024
  • Ropsten * — deprecated, the network was shut down in 2022
  • Rinkeby — deprecated, the network was shut down in 2023

Newer test networks (Holesky, Hoodi) are not supported: they were launched after Akula’s last release, so no chain specification for them ships with the client.

Additionally, users can join any other network, provided their own chain specification file, and if the network uses any of the following consensus engines:

  • Ethash
  • Ethereum beacon chain consensus *
  • Clique

Akula does not support any other EVM-based or EVM-like networks except as listed here.


[*] Requires running Lighthouse node instance pointed to Akula’s engine API RPC endpoint

Installation

Installation

NOTE: Unix-only

Akula only runs on Unix-based platforms (Linux, macOS). Do not expect any help for issues on Windows.

A prebuilt image is available on Docker Hub:

docker pull vorot93/akula:latest

This image (linux/amd64, ~288 MB) was published on 2022-11-30 and is currently the only ready-to-run build of Akula.

Building from source

Requirements:

  • libclang-dev
  • pkg-config

Install rustup from rustup.rs.

git clone https://github.com/akula-bft/akula

cd akula

cargo build --all --profile=production

You can find built binaries in target/production folder.

Known issue: source builds currently fail

cargo build does not complete on a fresh checkout. Cargo.toml pins several dependencies to forked git repositories that are no longer published, so the build stops at dependency resolution:

error: failed to load source for dependency `arrayvec`
Caused by:
  Unable to update https://github.com/vorot93/arrayvec?branch=pop-unchecked#9e430a94
Caused by:
  revision 9e430a94359435dfe8e21467f160708ebcc01226 not found

Fixing this means repointing each dead git dependency in Cargo.toml at an available crate or mirror. Until that work is done, use the Docker image above.

Running

  • akula is the main binary that runs as full node:
akula --datadir=<path to Akula database directory>

For Beacon-based networks (Ethereum, Sepolia, Goerli) you also need to run Lighthouse:

git clone https://github.com/sigp/lighthouse

cargo run --release --bin lighthouse -- beacon_node --execution-endpoints=http://127.0.0.1:8551 --execution-jwt=<path to Akula database directory>/jwt.hex --checkpoint-sync-url="https://mainnet.checkpoint.sigp.io" --purge-db
  • akula-rpc is the RPC daemon, which can provide JSONRPC and gRPC endpoints based on Akula’s database.

  • akula-sentry is the P2P node.

  • akula-toolbox provides various helper commands to check and manipulate Akula’s database. Please consult its help for more info:

akula-toolbox --help

RPC APIs

JSONRPC

Akula supports the following standard JSONRPC calls:

eth

  • eth_blockNumber
  • eth_chainId
  • eth_call
  • eth_estimateGas
  • eth_getBalance
  • eth_getBlockByHash
  • eth_getBlockByNumber
  • eth_getBlockTransactionCountByHash
  • eth_getBlockTransactionCountByNumber
  • eth_getCode
  • eth_getStorageAt
  • eth_getTransactionByHash
  • eth_getTransactionByBlockHashAndIndex
  • eth_getTransactionByBlockNumberAndIndex
  • eth_getTransactionCount
  • eth_getTransactionReceipt
  • eth_getUncleByBlockNumberAndIndex
  • eth_getUncleCountByBlockHash
  • eth_getUncleCountByBlockNumber
  • eth_syncing

net

  • net_listening
  • net_peerCount
  • net_version

trace

  • trace_call
  • trace_callMany
  • trace_rawTransaction
  • trace_replayBlockTransactions
  • trace_replayTransaction
  • trace_block
  • trace_filter

erigon

  • erigon_getHeaderByNumber

otterscan

  • ots_getApiLevel
  • ots_getInternalOperations
  • ots_searchTransactionsBefore
  • ots_searchTransactionsAfter
  • ots_getBlockDetails
  • ots_getBlockDetailsByHash
  • ots_getBlockTransactions
  • ots_hasCode
  • ots_getTransactionError
  • ots_getTransactionBySenderAndNonce
  • ots_getContractCreator

Please consult Ethereum Foundation docs for detailed description of each RPC call.

gRPC

In addition to standard JSONRPC APIs, Akula supports additional APIs resembling JSONRPC, but over gRPC protocol, served by default at port 7545.

Contributing and getting support

Contributing and getting support

Akula is open source and licensed under the GNU Affero General Public License v3. Contributions are welcome.

Getting support

For questions, bug reports and commercial licensing enquiries, email us at info@akula.app.

You can also follow development updates on X (@AkulaApp).

Sponsoring

Work on Akula is made possible by:

Gnosis Stateful Works 1inch Foundation