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
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
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
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
Zero Knowledge Light Client Implementation by Zpoken team.

zkp for chain state Prerecusites This project requires using the nightly Rust toolchain, which can be used by default in this way: rustup default nigh

Zpoken 40 Mar 6, 2023
Rust client to Opensea's APIs and Ethereum smart contracts

opensea.rs Rust bindings & CLI to the Opensea API and Contracts CLI Usage Run cargo r -- --help to get the top level help menu: opensea-cli 0.1.0 Choo

Georgios Konstantopoulos 226 Dec 27, 2022
The Fastest and most Advanced Ethereum Client

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

Jay Lee 6 Feb 17, 2022
Rust client to Seaport's APIs and Ethereum smart contracts(WIP)

Seaport-rs WIP - WORK IN PROGRESS. REFER TO https://github.com/Alcibiades-Capital/quay FOR PRODUCTION READY CODE I'm new to Rust and seek to be legend

Perelyn 21 Nov 29, 2022
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
Next-generation implementation of Ethereum protocol ("client") written in Rust, based on Erigon architecture.

?? 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
Ethereum JSON-RPC multi-transport client. Rust implementation of web3 library

Ethereum JSON-RPC multi-transport client. Rust implementation of web3 library. ENS address: rust-web3.eth

Tomasz Drwięga 1.2k Jan 8, 2023
An experimental fork of a16z's Helios Ethereum client which can run its network traffic over the Nym mixnet

Helios (Nym mixnet fork) Helios is a fully trustless, efficient, and portable Ethereum light client written in Rust. This fork of Helios includes nasc

Nym 4 Mar 3, 2023
A simple and secure rust command-line tool to protect your text by encrypting and decrypting it using the robust AES-256 algorithm.

Secret Keeper A simple and secure command-line tool to protect your text by encrypting and decrypting it using the robust AES-256 algorithm. Built wit

Kunal Bagaria 9 May 11, 2023
Foundry is a blazing fast, portable and modular toolkit for Ethereum application development written in Rust.

foundry Foundry is a blazing fast, portable and modular toolkit for Ethereum application development written in Rust. Foundry consists of: Forge: Ethe

Georgios Konstantopoulos 5.1k Jan 9, 2023
Rapid, reliable and robust template management

Rapid, reliable and robust template management

null 14 Apr 16, 2022
An efficient, robust, and generalized batch submission service for rollup stacks written in pure rust.

archon is an efficient, robust, and generalized batch submission service for rollup stacks written in pure rust. Note Archon is primarily tested again

refcell.eth 75 Apr 2, 2023
A low-level assembly language for the Ethereum Virtual Machine built in blazing-fast pure rust.

huff-rs • huff-rs is a Huff compiler built in rust. What is a Huff? Huff is a low-level programming language designed for developing highly optimized

Huff 276 Dec 31, 2022