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

Related tags

Concurrency ethereum
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 6, 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
Red Light, Green Light is a traditional Korean children's game, popularised by the Squid Game TV series.

Red Light, Green Light Red Light, Green Light is a traditional Korean children's game, popularised by the Squid Game TV series. This project is the di

Cedric Chee 1 Jan 10, 2022
Ethereum (and Ethereum like) indexer using P2P message to fetch blocks and transactions

Ethereum P2P indexer This project is an indexer for Ethereum and Ethereum forks. It takes advantage of the ETH (Ethereum Wire Protocol) to fetch block

null 5 Nov 10, 2023
Substreams development kit for Ethereum chains, contains Firehose Block model and helpers as well as utilities for Ethereum ABI encoding/decoding.

Substreams Ethereum Substreams development kit for Ethereum chains, contains Rust Firehose Block model and helpers as well as utilities for Ethereum A

StreamingFast 15 Oct 25, 2022
Solana Foundation stake bot used on the Solana Testnet and Mainnet-Beta

Effortlessly Manage Cluster Stakes The testnet and mainnet-beta clusters currently have a large population of validators that need to be staked by a c

Solana Foundation 113 Dec 29, 2022
Marinde Anchor-Based, first on mainnet, liquid-staking-program and mSOL->SOL swap pool

marinade-anchor Marinade-finance liquid staking program for the Solana blockchain Audits & Code Review Kudelski Security: https://marinade.finance/Kud

Marinade.Finance 42 Dec 11, 2022
A fast & light weight Discord Client made with love using the Rust programming language.

LemonCord A fast & light-weight Discord Client written in Rust using the wry crate. Features Fast, light-weight, easy to use. 100% Open sourced. No su

Lemon Rose 5 Jan 30, 2023
weggli is a fast and robust semantic search tool for C and C++ codebases. It is designed to help security researchers identify interesting functionality in large codebases.

weggli Introduction weggli is a fast and robust semantic search tool for C and C++ codebases. It is designed to help security researchers identify int

Google Project Zero 2k Jan 5, 2023
Robust and Fast tokenizations alignment library for Rust and Python

Robust and Fast tokenizations alignment library for Rust and Python Demo: demo Rust document: docs.rs Blog post: How to calculate the alignment betwee

Explosion 157 Dec 28, 2022
Robust and Fast tokenizations alignment library for Rust and Python

Robust and Fast tokenizations alignment library for Rust and Python

Yohei Tamura 14 Dec 10, 2022
A fast and robust MLOps tool for managing data and pipelines

xvc A Fast and Robust MLOps Swiss-Army Knife in Rust ⌛ When to use xvc? Machine Learning Engineers: When you manage large quantities of unstructured d

Emre Sahin 6 Dec 15, 2022
Fast and robust e-mail parsing library for Rust

mail-parser mail-parser is an e-mail parsing library written in Rust that fully conforms to the Internet Message Format standard (RFC 5322), the Multi

Stalwart Labs 158 Jan 1, 2023