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_calland 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.
Docker (recommended)
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
akulais 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-rpcis the RPC daemon, which can provide JSONRPC and gRPC endpoints based on Akula’s database. -
akula-sentryis the P2P node. -
akula-toolboxprovides 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_blockNumbereth_chainIdeth_calleth_estimateGaseth_getBalanceeth_getBlockByHasheth_getBlockByNumbereth_getBlockTransactionCountByHasheth_getBlockTransactionCountByNumbereth_getCodeeth_getStorageAteth_getTransactionByHasheth_getTransactionByBlockHashAndIndexeth_getTransactionByBlockNumberAndIndexeth_getTransactionCounteth_getTransactionReceipteth_getUncleByBlockNumberAndIndexeth_getUncleCountByBlockHasheth_getUncleCountByBlockNumbereth_syncing
net
net_listeningnet_peerCountnet_version
trace
trace_calltrace_callManytrace_rawTransactiontrace_replayBlockTransactionstrace_replayTransactiontrace_blocktrace_filter
erigon
erigon_getHeaderByNumber
otterscan
ots_getApiLevelots_getInternalOperationsots_searchTransactionsBeforeots_searchTransactionsAfterots_getBlockDetailsots_getBlockDetailsByHashots_getBlockTransactionsots_hasCodeots_getTransactionErrorots_getTransactionBySenderAndNonceots_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: