运行以太坊客户端

如果你有时间和资源,你应该尝试运行一个完整的节点,即使只是为了更多地了解这个过程。在接下来的几节中,我们将下载,编译和运行以太坊客户Go-Ethereum(Geth)和Parity。这需要熟悉在操作系统上使用命令行界面。无论你选择将它们作为完整节点,作为testnet节点还是作为本地私有区块链的客户端运行,都值得安装这些客户端。

完整节点的硬件要求

在我们开始之前,你应该确保你有一台具有足够资源的计算机来运行以太坊完整节点。你将需要至少80GB的磁盘空间来存储以太坊区块链的完整副本。如果你还想在以太坊测试网上运行完整节点,则至少需要额外的15GB。下载80GB的区块链数据可能需要很长时间,因此建议你使用快速的Internet连接。

同步以太坊区块链是非常密集的输入输出(I / O)。最好有一个固态硬盘(SSD)。如果你有机械硬盘驱动器(HDD),则至少需要8GB的RAM能用作缓存。否则,你可能会发现你的系统速度太慢,无法完全保持同步。

最低要求:

  • 2核心CPU。

  • 固态硬盘(SSD),至少80GB可用空间。

  • 最小4GB内存,如果你使用HDD而不是SSD,则至少8GB。

  • 8+ MBit/sec下载速度的互联网。

这些是同步基于以太坊的区块链的完整(但已修剪)副本的最低要求。

在编写本文时(2018年4月),Parity代码库的资源往往更轻,如果你使用有限的硬件运行,那么使用Parity可能会看到最好的结果。

如果你想在合理的时间内同步并存储我们在本书中讨论的所有开发工具,库,客户端和区块链,你将需要一台功能更强大的计算机。

推荐规格:

  • 4个以上核心的快速CPU。

  • 16GB+ RAM。

  • 至少有500GB可用空间的快速SSD。

  • 25+ MBit/sec下载速度的互联网。

很难预测区块链的大小会增加多快,以及何时需要更多的磁盘空间,所以建议你在开始同步之前检查区块链的最新大小。

以太坊: https://bitinfocharts.com/ethereum/

以太坊经典: https://bitinfocharts.com/ethereum%20classic/

构建和运行客户端(节点)的软件要求

本节介绍Geth和Parity客户端软件。并假设你正在使用类Unix的命令行环境。这些示例显示了在运行Bash shell(命令行执行环境)的Ubuntu Linux操作系统上输入的输出和命令。

通常,每个区块链都有自己的Geth版本,而Parity支持多个以太坊区块链(Ethereum,Ethereum Classic,Ellaism,Expanse,Musicoin)。

在我们开始之前,我们可能需要满足一些先决条件。如果你从未在你当前使用的计算机上进行任何软件开发,则可能需要安装一些基本工具。对于以下示例,你需要安装 git,源代码管理系统; Golang,Go编程语言和标准库; 和Rust,一种系统编程语言。

可以按照以下说明安装Git: https://git-scm.com/

可以按照以下说明安装Go: https://golang.org/

Note

Geth的要求各不相同,但如果你坚持使用Go版本1.10或更高版本,你应该能够编译你想要的任何版本的Geth。当然,你应该总是参考你选择的Geth的文档。

如果安装在你的操作系统上的Golang版本或者从系统的软件包管理器中获得的版本远远早于1.10,请将其删除并从golang.org安装最新版本。

Rust可以按照以下说明进行安装: https://www.rustup.rs/

Note

Parity需要Rust版本1.24或更高版本。

Parity还需要一些软件库,例如OpenSSL和libudev。要在Linux(Debian)兼容系统上安装,请执行以下操作:

  1. $ sudo apt-get install openssl libssl-dev libudev-dev

对于其他操作系统,请使用操作系统的软件包管理器或遵循Wiki说明(https://github.com/paritytech/parity/wiki/Setup)来安装所需的库。

现在你已经安装了 git,golang,rust 和必要的库,让我们开始工作吧!

Parity

Parity是完整节点以太坊客户端和DApp浏览器的实现。Parity是由Rust从头开始编写的,系统编程语言是为了构建一个模块化,安全和可扩展的以太坊客户端。Parity由英国公司Parity Tech开发,并以GPLv3开源许可证发布。

Note

披露:本书的作者之一Gavin Wood是Parity Tech的创始人,并撰写了大部分Parity客户端。Parity代表了约28%的以太坊客户端。

要安装Parity,你可以使用Rust包管理器+cargo+或从GitHub下载源代码。软件包管理器也下载源代码,所以两种选择之间没有太大区别。在下一节中,我们将向你展示如何自己下载和编译Parity。

安装 Parity

Parity Wiki提供了在不同环境和容器中构建Parity的说明:

https://github.com/paritytech/parity/wiki/Setup

我们将从源代码构建奇偶校验。这假定你已经使用 rustup 安装了Rust(见 构建和运行客户端(节点)的软件要求)。

首先,让我们从GitHub获取源代码:

  1. $ git clone https://github.com/paritytech/parity

现在,我们转到+parity+目录并使用+cargo+构建可执行文件:

  1. $ cd parity
  2. $ cargo build

如果一切顺利,你应该看到如下所示的内容:

  1. $ cargo build
  2. Updating git repository `https://github.com/paritytech/js-precompiled.git`
  3. Downloading log v0.3.7
  4. Downloading isatty v0.1.1
  5. Downloading regex v0.2.1
  6. [...]
  7. Compiling parity-ipfs-api v1.7.0
  8. Compiling parity-rpc v1.7.0
  9. Compiling parity-rpc-client v1.4.0
  10. Compiling rpc-cli v1.4.0 (file:///home/aantonop/Dev/parity/rpc_cli)
  11. Finished dev [unoptimized + debuginfo] target(s) in 479.12 secs
  12. $

让我们通过调用+—version+选项来运行+parity+以查看它是否已安装:

  1. $ parity --version
  2. Parity
  3. version Parity/v1.7.0-unstable-02edc95-20170623/x86_64-linux-gnu/rustc1.18.0
  4. Copyright 2015, 2016, 2017 Parity Technologies (UK) Ltd
  5. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
  6. This is free software: you are free to change and redistribute it.
  7. There is NO WARRANTY, to the extent permitted by law.
  8. By Wood/Paronyan/Kotewicz/Drwięga/Volf
  9. Habermeier/Czaban/Greeff/Gotchac/Redmann
  10. $

现在已安装了Parity,我们可以同步区块链并开始使用一些基本的命令行选项。

Go-Ethereum (Geth)

Geth是Go语言实现的,它被积极开发并被视为以太坊客户端的“官方”实现。通常情况下,每个基于以太坊的区块链都会有自己的Geth实现。如果你正在运行Geth,那么你需要确保使用以下某个存储库链接为区块链获取正确的版本。

版本库链接

Ethereum: https://github.com/ethereum/go-ethereum (or https://geth.ethereum.org/)

Ethereum Classic: https://github.com/ethereumproject/go-ethereum

Ellaism: https://github.com/ellaism/go-ellaism

Expanse: https://github.com/expanse-org/go-expanse

Musicoin: https://github.com/Musicoin/go-musicoin

Ubiq: https://github.com/ubiq/go-ubiq

Note

你也可以跳过这些说明并为你选择的平台安装预编译的二进制文件。预编译的版本安装起来更容易,可以在上面版本库的“版本”部分找到。但是,你可以通过自己下载和编译软件来了解更多信息。

克隆存储库

我们的第一步是克隆git仓库,以获得源代码的副本。

要创建此存储库的本地克隆,请使用 git 命令,如下所示,在你的主目录或用于开发的任何目录下:

  1. $ git clone <Repository Link>

在将存储库复制到本地系统时,你应该看到进度报告:

  1. Cloning into 'go-ethereum'...
  2. remote: Counting objects: 62587, done.
  3. remote: Compressing objects: 100% (26/26), done.
  4. remote: Total 62587 (delta 10), reused 13 (delta 4), pack-reused 62557
  5. Receiving objects: 100% (62587/62587), 84.51 MiB | 1.40 MiB/s, done.
  6. Resolving deltas: 100% (41554/41554), done.
  7. Checking connectivity... done.

现在我们有了Geth的本地副本,我们可以为我们的平台编译一个可执行文件。

从源代码构建Geth

要构建Geth,切换到下载源代码的目录并使用 make 命令:

  1. $ cd go-ethereum
  2. $ make geth

如果一切顺利,你将看到Go编译器构建每个组件,直到它生成+ geth +可执行文件:

  1. build/env.sh go run build/ci.go install ./cmd/geth
  2. >>> /usr/local/go/bin/go install -ldflags -X main.gitCommit=58a1e13e6dd7f52a1d5e67bee47d23fd6cfdee5c -v ./cmd/geth
  3. github.com/ethereum/go-ethereum/common/hexutil
  4. github.com/ethereum/go-ethereum/common/math
  5. github.com/ethereum/go-ethereum/crypto/sha3
  6. github.com/ethereum/go-ethereum/rlp
  7. github.com/ethereum/go-ethereum/crypto/secp256k1
  8. github.com/ethereum/go-ethereum/common
  9. [...]
  10. github.com/ethereum/go-ethereum/cmd/utils
  11. github.com/ethereum/go-ethereum/cmd/geth
  12. Done building.
  13. Run "build/bin/geth" to launch geth.
  14. $

让我们在停止并更改它的配置之前运行 geth 以确保它工作:

  1. $ ./build/bin/geth version
  2. Geth
  3. Version: 1.6.6-unstable
  4. Git Commit: 58a1e13e6dd7f52a1d5e67bee47d23fd6cfdee5c
  5. Architecture: amd64
  6. Protocol Versions: [63 62]
  7. Network Id: 1
  8. Go Version: go1.8.3
  9. Operating System: linux
  10. GOPATH=/usr/local/src/gocode/
  11. GOROOT=/usr/local/go

你的 geth version 命令可能会稍微不同,但你应该看到类似上面的版本报告。

最后,我们可能希望将 geth 命令复制到操作系统的应用程序目录(或命令行执行路径上的目录)。在Linux上,我们使用以下命令:

  1. $ sudo cp ./build/bin/geth /usr/local/bin

先不要开始运行 geth,因为它会以“缓慢的方式”开始将区块链同步,这将花费太长的时间(几周)。基于以太坊的区块链首次同步 解释了以太坊区块链的初始同步带来的挑战。