Convert Figma logo to code with AI

openethereum logoopenethereum

(deprecated) The fast, light, and robust client for the Ethereum mainnet.

1,638
360
1,638
155

Top Related Projects

Go implementation of the Ethereum protocol

Substrate: The platform for blockchain innovators

1,616

An enterprise-grade Java-based, Apache 2.0 licensed Ethereum client https://wiki.hyperledger.org/display/besu

2,323

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:

  1. Clone the repository:

    git clone https://github.com/openethereum/openethereum.git
    cd openethereum
    
  2. Build the project (requires Rust and cargo):

    cargo build --release --features final
    
  3. 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.

1,616

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.

2,323

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 Figma logo designs to code with AI

Visual Copilot

Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.

Try Visual Copilot

README

OpenEthereum

Fast and feature-rich multi-network Ethereum client.

» Download the latest release «

GPL licensed Build Status Discord chat

Table of Contents

  1. Description
  2. Technical Overview
  3. Building
    3.1 Building Dependencies
    3.2 Building from Source Code
    3.3 Starting OpenEthereum
  4. Testing
  5. Documentation
  6. Toolchain
  7. Contributing
  8. 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, and cmake 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 the msvc 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:

  1. Copy ./scripts/openethereum.service to your systemd user directory (usually ~/.config/systemd/user).
  2. Copy release to bin folder, write sudo install ./target/release/openethereum /usr/bin/openethereum
  3. 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):

Package List

  • 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 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

CODE_OF_CONDUCT

8. License

LICENSE