openethereum
(deprecated) The fast, light, and robust client for the Ethereum mainnet.
Top Related Projects
Go implementation of the Ethereum protocol
Substrate: The platform for blockchain innovators
An enterprise-grade Java-based, Apache 2.0 licensed Ethereum client https://wiki.hyperledger.org/display/besu
A Python implementation of the Ethereum Virtual Machine
DEPRECATED! Java implementation of the Ethereum yellowpaper. For JSON-RPC and other client features check Ethereum Harmony
Quick Overview
OpenEthereum is an open-source Ethereum client written in Rust. It was formerly known as Parity Ethereum and was developed by Parity Technologies. The project aims to provide a fast, secure, and modular Ethereum client implementation.
Pros
- High performance and efficiency due to Rust implementation
- Modular architecture allowing for easy customization and extension
- Advanced features like warp sync for faster blockchain synchronization
- Strong focus on security and reliability
Cons
- Development has been discontinued, with the last release in July 2021
- Limited ongoing support and updates compared to more active Ethereum clients
- Potential compatibility issues with future Ethereum upgrades
- Steeper learning curve for developers not familiar with Rust
Code Examples
As OpenEthereum is an Ethereum client implementation and not a code library, there are no specific code examples to provide. The project is typically used as a full node or for running Ethereum-based applications.
Getting Started
Since OpenEthereum is no longer actively maintained, it's not recommended for new users to start with this client. However, for those interested in exploring the codebase or running an existing installation, you can follow these steps:
-
Clone the repository:
git clone https://github.com/openethereum/openethereum.git cd openethereum
-
Build the project (requires Rust and cargo):
cargo build --release --features final
-
Run OpenEthereum:
./target/release/openethereum
Please note that using OpenEthereum for production environments or critical applications is not advised due to its discontinued status. Consider using actively maintained Ethereum clients like Geth or Nethermind instead.
Competitor Comparisons
Go implementation of the Ethereum protocol
Pros of go-ethereum
- More active development and larger community support
- Better performance and scalability for large-scale Ethereum networks
- Extensive documentation and wider adoption in production environments
Cons of go-ethereum
- Higher resource requirements for running a full node
- Steeper learning curve for developers new to Go programming language
- Less flexibility in customization compared to OpenEthereum
Code Comparison
go-ethereum:
func (s *Ethereum) Start() error {
if err := s.startEthService(); err != nil {
return err
}
return nil
}
OpenEthereum:
pub fn start(&self) -> Result<(), Error> {
self.start_network()?;
self.start_rpc()?;
Ok(())
}
The code snippets show the start functions for both clients. go-ethereum uses Go's error handling pattern, while OpenEthereum uses Rust's Result type for error handling. OpenEthereum's implementation appears more modular, separating network and RPC startup.
Both repositories are Ethereum clients, but go-ethereum is the official Go implementation, while OpenEthereum (formerly Parity Ethereum) is written in Rust. go-ethereum is more widely used and has better long-term support, while OpenEthereum offers better customization options and is favored for private networks. The choice between them depends on specific project requirements, development expertise, and desired features.
Substrate: The platform for blockchain innovators
Pros of Substrate
- More flexible and customizable blockchain framework
- Supports multiple consensus mechanisms and runtime upgrades
- Active development and community support
Cons of Substrate
- Steeper learning curve due to its complexity
- Requires more resources to run and maintain
Code Comparison
OpenEthereum (Rust):
pub fn execute_transaction(
&mut self,
t: &SignedTransaction,
header: &Header,
last_hashes: &LastHashes,
engine: &Engine,
) -> Result<Executed, Error> {
// Transaction execution logic
}
Substrate (Rust):
pub fn execute_transaction(
&self,
uxt: <Block as BlockT>::Extrinsic,
) -> TransactionValidity {
// Transaction execution logic
}
The code snippets show differences in transaction execution approaches. OpenEthereum focuses on Ethereum-specific parameters, while Substrate offers a more generic implementation suitable for various blockchain architectures.
Substrate provides a more flexible framework for building custom blockchains, supporting multiple consensus mechanisms and runtime upgrades. However, it has a steeper learning curve due to its complexity. OpenEthereum, being Ethereum-specific, offers a more straightforward approach for Ethereum-compatible chains but with less customization options.
An enterprise-grade Java-based, Apache 2.0 licensed Ethereum client https://wiki.hyperledger.org/display/besu
Pros of Besu
- More active development and regular updates
- Better support for enterprise features and permissioned networks
- Stronger focus on interoperability with other Hyperledger projects
Cons of Besu
- Potentially higher resource requirements for running nodes
- Steeper learning curve for developers new to the Hyperledger ecosystem
Code Comparison
OpenEthereum (Rust):
pub fn verify_transaction(tx: &SignedTransaction) -> Result<(), Error> {
let sender = tx.sender();
let nonce = self.state.nonce(&sender)?;
if tx.nonce < nonce {
return Err(Error::InvalidNonce);
}
// ... more verification logic
}
Besu (Java):
public void verifyTransaction(Transaction tx) throws InvalidTransactionException {
Address sender = tx.getSender();
long nonce = worldState.getNonce(sender);
if (tx.getNonce() < nonce) {
throw new InvalidTransactionException("Invalid nonce");
}
// ... more verification logic
}
Both implementations perform similar transaction verification, but OpenEthereum uses Rust's Result type for error handling, while Besu uses Java exceptions.
A Python implementation of the Ethereum Virtual Machine
Pros of py-evm
- Written in Python, making it more accessible for developers familiar with the language
- Designed as a modular and extensible implementation, allowing for easier customization
- Includes a built-in test suite for thorough validation of EVM behavior
Cons of py-evm
- Generally slower performance compared to Rust-based implementations like OpenEthereum
- Less mature and battle-tested in production environments
- Smaller community and ecosystem support compared to more established clients
Code Comparison
OpenEthereum (Rust):
pub fn execute(&mut self, gas: &U256) -> Result<GasLeft, Error> {
let mut subgas = gas.clone();
let mut gas_cost = GasCost::from(0);
loop {
let position = self.reader.position();
py-evm (Python):
def execute(self, message: Message) -> Tuple[BaseState, ComputationResult]:
computation = self.state.get_computation(message)
result = self.state.apply_computation(computation)
self.state.validate_transaction(message)
The code snippets demonstrate the core execution functions in both implementations. OpenEthereum's Rust code focuses on gas management, while py-evm's Python code emphasizes high-level transaction processing and state management.
DEPRECATED! Java implementation of the Ethereum yellowpaper. For JSON-RPC and other client features check Ethereum Harmony
Pros of EthereumJ
- Written in Java, providing better integration with existing Java ecosystems and tools
- More extensive documentation and tutorials available
- Supports light client mode for resource-constrained devices
Cons of EthereumJ
- Generally slower performance compared to Rust-based implementations
- Less active development and community support
- May lag behind in implementing the latest Ethereum protocol updates
Code Comparison
OpenEthereum (Rust):
pub fn verify_block_basic(&self, header: &Header, body: &[Vec<u8>]) -> Result<(), Error> {
// Block verification logic
}
EthereumJ (Java):
public class BlockHeader {
public boolean isValid() {
// Block header validation logic
}
}
Both implementations provide methods for block verification, but OpenEthereum's approach is more functional and modular, while EthereumJ uses an object-oriented style typical of Java projects.
OpenEthereum, being written in Rust, offers better performance and memory safety. It has more active development and is generally considered more up-to-date with the latest Ethereum protocol changes. However, EthereumJ's Java-based implementation may be more accessible for developers already familiar with Java and its ecosystem.
Convert
designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual CopilotREADME
OpenEthereum
Fast and feature-rich multi-network Ethereum client.
» Download the latest release «
Table of Contents
- Description
- Technical Overview
- Building
3.1 Building Dependencies
3.2 Building from Source Code
3.3 Starting OpenEthereum - Testing
- Documentation
- Toolchain
- Contributing
- License
1. Description
Built for mission-critical use: Miners, service providers, and exchanges need fast synchronisation and maximum uptime. OpenEthereum provides the core infrastructure essential for speedy and reliable services.
- Clean, modular codebase for easy customisation
- Advanced CLI-based client
- Minimal memory and storage footprint
- Synchronise in hours, not days with Warp Sync
- Modular for light integration into your service or product
2. Technical Overview
OpenEthereum's goal is to be the fastest, lightest, and most secure Ethereum client. We are developing OpenEthereum using the Rust programming language. OpenEthereum is licensed under the GPLv3 and can be used for all your Ethereum needs.
By default, OpenEthereum runs a JSON-RPC HTTP server on port :8545
and a Web-Sockets server on port :8546
. This is fully configurable and supports a number of APIs.
If you run into problems while using OpenEthereum, check out the old wiki for documentation, feel free to file an issue in this repository, or hop on our Discord chat room to ask a question. We are glad to help!
You can download OpenEthereum's latest release at the releases page or follow the instructions below to build from source. Read the CHANGELOG.md for a list of all changes between different versions.
3. Building
3.1 Build Dependencies
OpenEthereum requires latest stable Rust version to build.
We recommend installing Rust through rustup. If you don't already have rustup
, you can install it like this:
-
Linux:
$ curl https://sh.rustup.rs -sSf | sh
OpenEthereum also requires
clang
(>= 9.0),clang++
,pkg-config
,file
,make
, andcmake
packages to be installed. -
OSX:
$ curl https://sh.rustup.rs -sSf | sh
clang
is required. It comes with Xcode command line tools or can be installed with homebrew. -
Windows: Make sure you have Visual Studio 2015 with C++ support installed. Next, download and run the
rustup
installer from https://static.rust-lang.org/rustup/dist/x86_64-pc-windows-msvc/rustup-init.exe, start "VS2015 x64 Native Tools Command Prompt", and use the following command to install and set up themsvc
toolchain:$ rustup default stable-x86_64-pc-windows-msvc
Once you have rustup
installed, then you need to install:
Make sure that these binaries are in your PATH
. After that, you should be able to build OpenEthereum from source.
3.2 Build from Source Code
# download OpenEthereum code
$ git clone https://github.com/openethereum/openethereum
$ cd openethereum
# build in release mode
$ cargo build --release --features final
This produces an executable in the ./target/release
subdirectory.
Note: if cargo fails to parse manifest try:
$ ~/.cargo/bin/cargo build --release
Note, when compiling a crate and you receive errors, it's in most cases your outdated version of Rust, or some of your crates have to be recompiled. Cleaning the repository will most likely solve the issue if you are on the latest stable version of Rust, try:
$ cargo clean
This always compiles the latest nightly builds. If you want to build stable, do a
$ git checkout stable
3.3 Starting OpenEthereum
Manually
To start OpenEthereum manually, just run
$ ./target/release/openethereum
so OpenEthereum begins syncing the Ethereum blockchain.
Using systemd
service file
To start OpenEthereum as a regular user using systemd
init:
- Copy
./scripts/openethereum.service
to yoursystemd
user directory (usually~/.config/systemd/user
). - Copy release to bin folder, write
sudo install ./target/release/openethereum /usr/bin/openethereum
- To configure OpenEthereum, see our wiki for details.
4. Testing
Download the required test files: git submodule update --init --recursive
. You can run tests with the following commands:
-
All packages
cargo test --all
-
Specific package
cargo test --package <spec>
Replace <spec>
with one of the packages from the package list (e.g. cargo test --package evmbin
).
You can show your logs in the test output by passing --nocapture
(i.e. cargo test --package evmbin -- --nocapture
)
5. Documentation
Be sure to check out our wiki for more information.
Viewing documentation for OpenEthereum packages
You can generate documentation for OpenEthereum Rust packages that automatically opens in your web browser using rustdoc with Cargo (of the The Rustdoc Book), by running the the following commands:
-
All packages
cargo doc --document-private-items --open
-
Specific package
cargo doc --package <spec> -- --document-private-items --open
Use--document-private-items
to also view private documentation and --no-deps
to exclude building documentation for dependencies.
Replacing <spec>
with one of the following from the details section below (i.e. cargo doc --package openethereum --open
):
- OpenEthereum Client Application
openethereum
- OpenEthereum Account Management, Key Management Tool, and Keys Generator
ethcore-accounts, ethkey-cli, ethstore, ethstore-cli
- OpenEthereum Chain Specification
chainspec
- OpenEthereum CLI Signer Tool & RPC Client
cli-signer parity-rpc-client
- OpenEthereum Ethash & ProgPoW Implementations
ethash
- EthCore Library
ethcore
- OpenEthereum Blockchain Database, Test Generator, Configuration,
Caching, Importing Blocks, and Block Information
ethcore-blockchain
- OpenEthereum Contract Calls and Blockchain Service & Registry Information
ethcore-call-contract
- OpenEthereum Database Access & Utilities, Database Cache Manager
ethcore-db
- OpenEthereum Virtual Machine (EVM) Rust Implementation
evm
- OpenEthereum Light Client Implementation
ethcore-light
- Smart Contract based Node Filter, Manage Permissions of Network Connections
node-filter
- OpenEthereum Client & Network Service Creation & Registration with the I/O Subsystem
ethcore-service
- OpenEthereum Blockchain Synchronization
ethcore-sync
- OpenEthereum Common Types
common-types
- OpenEthereum Virtual Machines (VM) Support Library
vm
- OpenEthereum WASM Interpreter
wasm
- OpenEthereum WASM Test Runner
pwasm-run-test
- OpenEthereum EVM Implementation
evmbin
- OpenEthereum JSON Deserialization
ethjson
- OpenEthereum State Machine Generalization for Consensus Engines
parity-machine
- OpenEthereum Blockchain Database, Test Generator, Configuration,
Caching, Importing Blocks, and Block Information
- OpenEthereum Miner Interface
ethcore-miner parity-local-store price-info ethcore-stratum using_queue
- OpenEthereum Logger Implementation
ethcore-logger
- OpenEthereum JSON-RPC Servers
parity-rpc
- OpenEthereum Updater Service
parity-updater parity-hash-fetch
- OpenEthereum Core Libraries (
util
)accounts-bloom blooms-db dir eip-712 fake-fetch fastmap fetch ethcore-io journaldb keccak-hasher len-caching-lock memory-cache memzero migration-rocksdb ethcore-network ethcore-network-devp2p panic_hook patricia-trie-ethereum registrar rlp_compress stats time-utils triehash-ethereum unexpected parity-version
6. Toolchain
In addition to the OpenEthereum client, there are additional tools in this repository available:
- evmbin - OpenEthereum EVM Implementation.
- ethstore - OpenEthereum Key Management.
- ethkey - OpenEthereum Keys Generator.
The following tools are available in a separate repository:
- ethabi - OpenEthereum Encoding of Function Calls. Docs here
- whisper - OpenEthereum Whisper-v2 PoC Implementation.
7. Contributing
An introduction has been provided in the "So You Want to be a Core Developer" presentation slides by Hernando Castano. Additional guidelines are provided in CONTRIBUTING.
Contributor Code of Conduct
8. License
Top Related Projects
Go implementation of the Ethereum protocol
Substrate: The platform for blockchain innovators
An enterprise-grade Java-based, Apache 2.0 licensed Ethereum client https://wiki.hyperledger.org/display/besu
A Python implementation of the Ethereum Virtual Machine
DEPRECATED! Java implementation of the Ethereum yellowpaper. For JSON-RPC and other client features check Ethereum Harmony
Convert
designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual Copilot