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

Overview

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

Comments
  • Slow blocks on archive OE node `dc-m3-large-x86-01` on Gnosis Chain

    Slow blocks on archive OE node `dc-m3-large-x86-01` on Gnosis Chain

    We have a quite powerful VM which holds the OE archive node for Gnosis Chain (displayed as dc-m3-large-x86-01 in https://dai-netstat.poa.network/). We noticed that its average block propagation time is about 700 ms when there is no load on the chain. It's 10x times slower than dc-c3-large-arm-0x nodes (working on Nethermind). We need to analyze the logs (attached to the corresponding Slack channel) which probably can be helpful to understand why there are such delays (maybe a lot of RPC requests?).

    opened by varasev 0
  • crates/accounts: fix conflicting lock orders

    crates/accounts: fix conflicting lock orders

    unlocked_secrets and unlocked are parking_lot::RwLock. In fn sign(), unlocked_secrets.read() -> password() -> unlocked.write(). https://github.com/openethereum/openethereum/blob/6a42062adf463f33699f9dd60926ef803687aabd/crates/accounts/src/lib.rs#L449-L455 https://github.com/openethereum/openethereum/blob/6a42062adf463f33699f9dd60926ef803687aabd/crates/accounts/src/lib.rs#L372-L373

    There are two other cases where unlocked is locked before unlocked_secrets. If they are concurrent with the above case, a deadlock may happen.

    1. https://github.com/openethereum/openethereum/blob/6a42062adf463f33699f9dd60926ef803687aabd/crates/accounts/src/lib.rs#L420-L422
    2. https://github.com/openethereum/openethereum/blob/6a42062adf463f33699f9dd60926ef803687aabd/crates/accounts/src/lib.rs#L343-L354

    The fix is to assign unlocked_secrets.read() to a variable secrets and explicitly drop it before calling password().

    opened by BurtonQin 0
  • concensus/miner: fix double read-lock of options

    concensus/miner: fix double read-lock of options

    options is parkingLot::RwLock.

    https://docs.rs/parking_lot/latest/parking_lot/type.RwLock.html

    Attempts to recursively acquire a read lock within a single thread may result in a deadlock.

    The fix locks once and reuses the results.

    opened by BurtonQin 0
  • The  binary file of

    The binary file of "openethereum" can't running

    • OpenEthereum version (>=3.1.0): 3.3.5
    • Operating system: Linux centOS7
    • Installation: one-line installer

    [centos]$ openethereum -h openethereum: /usr/lib64/libstdc++.so.6: version GLIBCXX_3.4.20' not found (required by openethereum) openethereum: /usr/lib64/libstdc++.so.6: versionCXXABI_1.3.8' not found (required by openethereum) openethereum: /usr/lib64/libstdc++.so.6: version GLIBCXX_3.4.21' not found (required by openethereum) openethereum: /usr/lib64/libc.so.6: versionGLIBC_2.18' not found (required by openethereum)

    opened by Sunmimy 1
  • Very few peer connections

    Very few peer connections

    After the PR (#607) which added the propagation of all transactions once they were imported into the transaction pool, some users noticed that the node started to lose its connections with other peers and could not synchronize blocks stably (#632, #346).

    This PR is intended to research the problem

    opened by rimrakhimov 0
  • Feature request: Sync in archive mode starting from a certain block

    Feature request: Sync in archive mode starting from a certain block

    For Ethereum Mainnet (and other supported chains) we need to have an ability to start syncing in archive mode beginning from a certain block which number is defined in the config. This assumes that the node should be synced from scratch as a full node, but at some point would switch to archive mode (like we'd activated --pruning=archive and --fat-db=true options).

    opened by varasev 0
Releases(v3.3.5)
Owner
OpenEthereum
The fast, light, and robust client for Ethereum-like networks.
OpenEthereum
Rust Ethereum 2.0 Client

Lighthouse: Ethereum 2.0 An open-source Ethereum 2.0 client, written in Rust and maintained by Sigma Prime. Documentation Overview Lighthouse is: Read

Sigma Prime 2.1k Jan 1, 2023
Custom Ethereum vanity address generator made in Rust

ethaddrgen Custom Ethereum address generator Get a shiny ethereum address and stand out from the crowd! Disclaimer: Do not use the private key shown i

Jakub Hlusička 153 Dec 27, 2022
Martinez is vNext Ethereum implementation written in pure Rust with Erigon architecture as design.

?? Martinez ?? Next-generation implementation of Ethereum protocol ("client") written in Rust, based on Erigon architecture. Why run Martinez? Look at

Arthur·Thomas 23 Jul 3, 2022
Coinbase pro client for Rust

Coinbase pro client for Rust Supports SYNC/ASYNC/Websocket-feed data support Features private and public API sync and async support websocket-feed sup

null 126 Dec 30, 2022
Reference client for NEAR Protocol

Reference implementation of NEAR Protocol About NEAR NEAR's purpose is to enable community-driven innovation to benefit people around the world. To ac

NEAR 2k Dec 29, 2022
The Parity Bitcoin client

The Parity Bitcoin client. Gitter Installing from source Installing the snap Running tests Going online Importing bitcoind database Command line inter

Parity Technologies 714 Dec 21, 2022
IBC modules and relayer - Formal specifications and Rust implementation

ibc-rs Rust implementation of the Inter-Blockchain Communication (IBC) protocol. This project comprises primarily four crates: The ibc crate defines t

Informal Systems 296 Jan 4, 2023
Diem’s mission is to build a trusted and innovative financial network that empowers people and businesses around the world.

Note to readers: On December 1, 2020, the Libra Association was renamed to Diem Association. The project repos are in the process of being migrated. A

Diem 16.7k Dec 29, 2022
The new, performant, and simplified version of Holochain on Rust (sometimes called Holochain RSM for Refactored State Model)

Holochain License: This repository contains the core Holochain libraries and binaries. This is the most recent and well maintained version of Holochai

Holochain 737 Dec 28, 2022
The Nervos CKB is a public permissionless blockchain, and the layer 1 of Nervos network.

Nervos CKB - The Common Knowledge Base master develop About CKB CKB is the layer 1 of Nervos Network, a public/permissionless blockchain. CKB uses Pro

Nervos Network 1k Dec 31, 2022
The Phala Network Blockchain, pRuntime and the bridge.

Phala Blockchain Phala Network is a TEE-Blockchain hybrid architecture implementing Confidential Contract. This repo includes: node/: the main blockch

Phala Network 313 Dec 20, 2022
rage is a simple, modern, and secure file encryption tool, using the age format

A simple, secure and modern encryption tool (and Rust library) with small explicit keys, no config options, and UNIX-style composability.

null 1.7k Jan 2, 2023
The fast, light, and robust client for the Ethereum mainnet.

OpenEthereum Fast and feature-rich multi-network Ethereum client. » Download the latest release « Table of Contents Description Technical Overview Bui

OpenEthereum 1.6k Jan 8, 2023
The fast, light, and robust client for the Ethereum mainnet.

OpenEthereum Fast and feature-rich multi-network Ethereum client. » Download the latest release « Table of Contents Description Technical Overview Bui

OpenEthereum 1.6k Dec 28, 2022
The fast, light, and robust client for Ethereum-like networks.

The Fastest and most Advanced Ethereum Client. » Download the latest release « Table of Contents Description Technical Overview Building 3.1 Building

OpenEthereum 6.7k Dec 24, 2022
Easy c̵̰͠r̵̛̠ö̴̪s̶̩̒s̵̭̀-t̶̲͝h̶̯̚r̵̺͐e̷̖̽ḁ̴̍d̶̖̔ ȓ̵͙ė̶͎ḟ̴͙e̸̖͛r̶̖͗ë̶̱́ṉ̵̒ĉ̷̥e̷͚̍ s̷̹͌h̷̲̉a̵̭͋r̷̫̊ḭ̵̊n̷̬͂g̵̦̃ f̶̻̊ơ̵̜ṟ̸̈́ R̵̞̋ù̵̺s̷̖̅ţ̸͗!̸̼͋

Rust S̵̓i̸̓n̵̉ I̴n̴f̶e̸r̵n̷a̴l mutability! Howdy, friendly Rust developer! Ever had a value get m̵̯̅ð̶͊v̴̮̾ê̴̼͘d away right under your nose just when

null 294 Dec 23, 2022
Avail-light is a data availability light client

avail-light Light client for the Avail blockchain Introduction avail-light is a data availability light client with the following functionalities: Lis

null 7 Apr 9, 2024
A crate for working with Ethereum beacon chain light client protocol messages. `no_std` friendly!

eth-lightclient-rs A crate for working with Ethereum beacon chain light client protocol messages. no_std friendly! !! For hacking and experimentation

Willem Olding 12 Jan 6, 2023
rust client libraries to deal with the current cardano mainnet (byron / cardano-sl)

Rust implementation of Cardano primitives, helpers, and related applications Cardano Rust is a modular toolbox of Cardano’s cryptographic primitives,

Input Output 275 Oct 9, 2022
rust client libraries to deal with the current cardano mainnet (byron / cardano-sl)

Rust implementation of Cardano primitives, helpers, and related applications Cardano Rust is a modular toolbox of Cardano’s cryptographic primitives,

Input Output 275 Oct 9, 2022