Skip to content

Latest commit

 

History

History
577 lines (389 loc) · 36.8 KB

03clients_cn.asciidoc

File metadata and controls

577 lines (389 loc) · 36.8 KB

以太坊客户

以太坊客户端是实现以太坊规范并通过点对点对等网络与其他以太坊客户端进行通信的软件应用程序。不同的以太坊客户端如果遵循参考规范和标准化的通信协议,就可以进行“互操作”。尽管这些不同的客户端由不同的团队以不同的编程语言实现,但它们都“说”相同的协议并遵循相同的规则。因此,它们都可以用于操作同一以太坊网络并与之交互。

以太坊是一个开源项目,所有主要客户的源代码都可以通过开源许可(例如LGPL v3.0)获得,可以免费下载和用于任何目的。 开源 意味着不仅仅是免费使用。这也意味着以太坊是由开放的志愿者社区开发的,任何人都可以修改。群众的眼睛是雪亮的,代码的贡献者越多意味着代码越可信。

以太坊的正式规范定义在“ 黄皮书”中(请参见 [references])。

这与比特币的情况不同,后者没有以任何正式的方式进行定义。比特币的“规范”是在实现比特币核心的情况下进行的参考总结,而以太坊的规范则是记录在结合了文字语言和数学语言(正式)规范的论文中。除了各种以太坊改进提案之外,此正式规范还定义了以太坊客户端的标准行为: 客户端 。随着重大变更的通过,《黄皮书》会定期更新: 以太坊

以太坊明确正式规范的好处是,以太坊客户端可以有许多独立开发但可互操作的软件。以太坊在网络上运行的实现多样性比其他任何区块链都要多,这通常被认为是一件好事。实际上,这已被证明是抵御网络攻击的绝佳方法,因为针对特定客户端的攻击只会对这一软件的开发人员感到困扰,而当他们修补漏洞时,其他客户端则正常运行,使得整个网络运行几乎不受影响 。

以太坊网络

现实世界中存在多种基于以太坊协议的网络,这些网络在很大程度上符合以太坊黄皮书中定义的正式规范,但可能之间互不相通。

在这些基于以太坊协议的网络中,有以太坊,以太坊经典,Ella,Expanse,Ubiq,Musicoin等。这些网络虽然在协议级别上大多兼容,但它们通常具有某些特性或属性,这些特性或属性要求以太坊客户端软件的维护者进行少量更改才能支持每个网络。因此,并非每个版本的以太坊客户端软件都可以运行所有基于以太坊的区块链。

当前,以太坊协议有以六种不同语言编写的六个主要实现:

  • Parity,用Rust语言编写

  • Geth,用Go语言编写

  • cpp-ethereum ,用C++语言编写

  • pyethereum,用Python语言编写

  • Mantis,用Scala语言编写

  • Harmony,用Java语言编写

在本节中,我们将介绍两个最常见的客户端,Parity和Geth。我们将指导如何使用每个客户端来设置节点,并探讨其某些命令行选项和应用程序编程接口(API)。

我应该运行完整节点吗?

区块链网络的健康,适应能力和抗审查性取决于拥有多少独立运行并在地理位置上分散的完整节点。每个完整节点可以帮助其他新节点获取区块数据以引导其操作,以及为运营方提供对所有交易和智能合约的权威且独立的验证。

但是,运行完整的节点需要硬件资源和带宽方面的巨大成本。完整的节点必须下载80–300 GB的数据(截至2020年1月,取决于客户端类型)并将其存储在本地硬盘中。随着新的交易和区块的添加,这种数据负担每天都会迅速增加。我们在<<requirements> >有关于此主题的更多信息。

在进行以太坊应用开发时无需在实时 主网 上运行的完整节点。你可以通过 测试网 节点(将连接到较小的公共测试区块链之一),本地专用区块链(如Ganache)或由服务提供商(如Infura)提供的基于云的以太坊客户端来完成几乎所有开发需要做的事情。

你还可以选择运行远程客户端,该客户端不存储区块链的本地副本或不验证区块和交易。这些客户端提供了钱包的功能,并且可以创建和广播交易。远程客户端可用于连接到现有网络,例如你自己的完整节点,公共区块链,公共或许可(权限证明)测试网或私有本地区块链。实际上,你可能会使用远程客户端(例如MetaMask,Emerald Wallet, MyEtherWallet 或MyCrypto)作为在所有不同节点选项之间进行切换的便捷方法。

术语”远程客户端“和”钱包“可以互换使用,尽管有一些差异。通常,除了钱包的交易功能外,远程客户端还提供API(例如web3.js API)。

不要混淆以太坊中的远程钱包与 轻客户端(类似于比特币中的简化付款验证客户端SPV)的概念。轻客户端们验证区块头并使用Merkle证明来验证区块链中是否包含交易并确定其效果,从而为它们提供与完整节点类似的安全级别。相反,以太坊远程客户端不验证区块头或交易。它们完全信任一个完整的客户端,使他们能够访问区块链,因此失去了重大的安全性和匿名性保证。你可以使用自己运行的完整客户端来缓解这些问题。

全节点的优缺点

选择运行全节点有助于你连接到的以太坊网络的运行,但也会带来一些轻度到中等的成本。让我们看一下一些优点和缺点。

优点:

  • 支持基于以太坊的网络的适应能力和审查阻力

  • 权威地验证所有交易

  • 无需中介即可与公共区块链上的任何智能合约进行互动

  • 无需中介即可直接将智能合约部署到公共区块链中

  • 可以离线查询(只读)区块链状态(账户,智能合约等)

  • 可以查询区块链而无需让第三方知道你正在阅读的信息

缺点:

  • 需要大量且不断增长的硬件和带宽资源

  • 首次启动时可能需要几天时间才能完全同步

  • 必须持续维护,升级并保持系统在线以保持同步

公共测试网的优缺点

是否选择运行一个完整的节点,您可能需要运行一个公共的测试网节点。让我们看一下使用公共测试网的一些优点和缺点。

优点:

  • 测试网络节点需要同步和存储少得多的数据-大约45 GB,具体取决于网络。

  • 一个测试网节点可以在几个小时内完全同步。

  • 部署合约或进行交易需要测试的以太币ether,它没有价值,可以从多个“水龙头”中免费获得。

  • 测试网是具有许多其他用户和合约的公共区块链,可以“实时”运行。

缺点:

  • 您不能在测试网上使用“真实”资金;它使用的是测试以太币。因此,您无法针对真正的对手测试安全性,因为没有任何风险。

  • 公共区块链的某些方面无法在测试网上进行实际测试。例如,尽管费用是发送交易所必需的,但是由于燃料gas是免费的,因此在测试网上无需考虑交易费用。此外,测试网不会像公共主网有时那样遇到网络拥塞。

本地区块链仿真的优缺点

对于测试需求而言,最好的选择是启动单实例私有区块链。 Ganache(以前称为 testrpc)是最受欢迎的本地区块链仿真程序之一,你可以与之互动而无需任何其他参与者。它具有公共测试网的许多优点和缺点,但也有一些区别。

优点:

  • 不用同步,磁盘上几乎没有数据;你自己挖第一个块

  • 无需获取测试以太币;你可以自己挖掘“奖励”,以用于测试。

  • 没有其他用户,只有你自己

  • 没有其他合约,只有你在启动区块链后部署的合约

缺点:

  • 没有其他用户意味着它的行为与公共区块链不同。在交易空间或通过顺序方面没有竞争 Transactions

  • 除你之外没有其他矿工,意味着挖矿更可预测;因此,你无法测试公共区块链上发生的某些情况。

  • 没有其他合约意味着你必须部署要测试的所有内容,包括依赖项和合约库。

  • 无法重新创建一些公共合约及其地址以测试某些情况(例如,DAO合同)。

运行以太坊客户端

如果有时间和资源,建议你尝试运行完整的节点,即使仅仅是为了了解该过程的更多信息。在本节中,我们介绍如何下载,编译和运行以太坊客户端Parity和Geth。这要求你熟悉在操作系统上使用命令行界面的方式。无论你选择将它们作为完整节点,测试网节点还是作为本地私有区块链的客户端运行,都值得安装这些客户端。

运行全节点的硬件要求

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

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

最低配置:

  • 具有2个以上内核的CPU

  • 至少300 GB的可用存储空间

  • 使用SSD硬盘需要至少4 GB RAM,如果是HDD硬盘,则至少8 GB RAM。

  • 互联网服务的下载速度不低于8 MBit/sec

这些是同步以太坊的区块链的完整(但已消减)账本的最低要求。

Parity的代码在编写时,所消耗的系统资源较少,因此,如果你的硬件资源有限,使用Parity可能会看到更好的结果。

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

推荐配置:

  • 具有4个以上内核的高速CPU

  • 16 GB以上的RAM

  • 具有至少500 GB可用空间的高速SSD

  • 互联网服务的下载速度不低于 25+ MBit / sec

很难预测区块链大小的增长速度以及何时需要更多磁盘空间,因此建议你在开始同步之前检查区块链账本的最新容量。

Note

此处列出的磁盘容量要求假定你将运行具有默认设置的节点,在该节点上“削减”了旧状态数据。如果改为运行完整的“归档”节点,其中所有状态都保留在磁盘上,则可能需要超过1 TB的磁盘空间。

这些链接提供了区块链账本大小的最新估计:

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

本节介绍了Parity和Geth客户端软件。它还假定你使用的是类似Unix的命令行环境。这些示例显示了在运行bash shell(命令行执行环境)的Ubuntu GNU / Linux操作系统上显示的命令和输出。

通常,每个区块链都有其自己的Geth版本,而Parity则通过相同的客户端支持多个基于以太坊的区块链(以太坊,以太坊经典, Ellaism ,Expanse,Musicoin)。

Tip

在本章的许多示例中,我们将使用通过“Terminal”应用程序访问的操作系统的命令行界面(也称为“Shell”)。Shell将显示提示;键入命令,然后Shell程序会对输入的命令返回一些文本和下一个命令的新提示。该提示在你的系统上可能看起来有所不同,但是在以下示例中,该提示用 $ 符号表示。在示例中,当你看到 $ 符号后的文本时,不要键入 $ 符号,而是紧随其后键入命令(以粗体显示),然后按Enter执行该命令。在示例中,每个命令下面的行是操作系统对该命令的响应。当看到下一个 $ 前缀时,你将知道这是一个新命令,应重复此过程。

在开始之前,你可能需要安装一些软件。如果你从未在当前的计算机上进行过任何软件开发,则可能需要安装一些基本工具。对于以下示例,您将需要安装 git,即源代码管理系统; golang,Go编程语言和标准库;和Rust(一种系统编程语言)。

"git"可以按照 https://git-scm.com 上的说明安装Git。

"Go", seealso="Geth (Go-Ethereum)")可以按照 https://golang.org 上的说明安装Go,如果你使用的是Ubuntu,可以按照 https://github.com/golang/go/wiki/Ubuntu 上的说明安装。

Note

"Geth (Go-Ethereum)")Geth的不同版本要求各不相同,不过如果你使用的是Go 1.10或更高版本,应该可以编译所需的不同版本的Geth。当然,你应该阅读参考文档以了解你选择的Geth版本。

安装在操作系统上默认的 golang 版本可能早于1.10。如果是这样,请将其删除并从 https://golang.org/ 安装最新版本。

可以按照 https://www.rustup.rs/ 上的说明安装Rust。

Note

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

Parity还需要一些软件库,例如OpenSSL和 libudev。要将它们安装在与Ubuntu或Debian GNU / Linux兼容的系统上,请使用以下 command

$ sudo apt-get install openssl libssl-dev libudev-dev cmake clang

对于其他操作系统,请你使用该操作系统的软件包管理器,或按照 Wiki instructions 来安装所需的软件库。

现在,你已经安装了 git ,golang , Rust,和必需的软件库,让我们开始操作吧!

Parity

Parity中包括了一个以太坊全节点客户端和DApp浏览器。它是用系统编程语言Rust从头开始编写的,目的是构建模块化,安全和可扩展的以太坊客户端。 Parity由英国公司Parity Tech开发,并根据GPLv3免费软件许可发布。

Note

备注:本书的作者之一,加文·伍德博士(Gavin Wood)是Parity Tech的创始人,并撰写了许多Parity客户文章。Parity约占已安装的以太坊基础客户端的25%。

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

安装Parity

Parity Wiki 提供了在不同环境和容器中构建Parity的说明。我们将向你展示如何从源代码构建Parity。假设您已经使用 rustup 安装了Rust(请参见创建和运行客户端(节点)的软件要求)。

首先,从GitHub获取源代码:

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

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

$ cd parity
$ cargo install --path .

如果一切顺利,你应该会看到类似以下内容的信息:

$ cargo install --path .
Installing parity-ethereum v2.7.0 (/root/parity)
Updating crates.io index
Updating git repository `https://github.com/paritytech/rust-ctrlc.git`
Updating git repository `https://github.com/paritytech/app-dirs-rs`   Updating git repository

 [...]

Compiling parity-ethereum v2.7.0 (/root/parity)
Finished release [optimized] target(s) in 10m 16s
Installing /root/.cargo/bin/parity
Installed package `parity-ethereum v2.7.0 (/root/parity)` (executable `parity`)
$

我们可以通过调用 -version 选项,尝试运行 parity 以查看其是否已安装:

$ parity --version
Parity Ethereum Client.
  version Parity-Ethereum/v2.7.0-unstable-b69a33b3a-20200124/x86_64-unknown-linux-gnu/rustc1.40.0
Copyright 2015-2020 Parity Technologies (UK) Ltd.
License GPLv3+: GNU GPL version 3 or later .
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

By Wood/Paronyan/Kotewicz/Drwięga/Volf/Greeff
   Habermeier/Czaban/Gotchac/Redman/Nikolsky
   Schoedon/Tang/Adolfsson/Silva/Palm/Hirsz et al.
$

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

Go-Ethereum (Geth)

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

Note

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

复制代码库

"Geth (Go-Ethereum)","cloning Git repo for")第一步是复制Git的源代码库,以获取源代码的副本。

要对所选代码库进行本地复制,请在主目录或用于开发的任何目录下,按如下所示运行 git 命令:

$ git clone <Repository Link>

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

Cloning into 'go-ethereum'...
remote: Enumerating objects: 86915, done.
remote: Total 86915 (delta 0), reused 0 (delta 0), pack-reused 86915
Receiving objects: 100% (86915/86915), 134.73 MiB | 29.30 MiB/s, done.
Resolving deltas: 100% (57590/57590), done.

很好!现在你有了Geth的本地源代码副本,可以为你的平台编译可执行文件。

从源代码构建Geth

"Geth (Go-Ethereum)","building from source code")要构建Geth,请转到下载源代码的目录,并使用 make 命令:

$ cd go-ethereum
$ make geth

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

build/env.sh go run build/ci.go install ./cmd/geth
>>> /usr/local/go/bin/go install -ldflags -X main.gitCommit=58a1e13e6dd7f52a1d...
github.com/ethereum/go-ethereum/common/hexutil
github.com/ethereum/go-ethereum/common/math
github.com/ethereum/go-ethereum/crypto/sha3
github.com/ethereum/go-ethereum/rlp
github.com/ethereum/go-ethereum/crypto/secp256k1
github.com/ethereum/go-ethereum/common
[...]
github.com/ethereum/go-ethereum/cmd/utils
github.com/ethereum/go-ethereum/cmd/geth
Done building.
Run "build/bin/geth" to launch geth.
$

让我们确保 geth 可以正常运行而无需启动节点:

$ ./build/bin/geth version

Geth
Version: 1.9.11-unstable
Git Commit: 0b284f6c6cfc6df452ca23f9454ee16a6330cb8e
Git Commit Date: 20200123
Architecture: amd64
Protocol Versions: [64 63]
Go Version: go1.13.4
Operating System: linux
[...]

你的 geth version 命令显示的信息可能略有不同,但是你看到的版本信息应该与此处看到的非常相似。

下一部分将介绍以太坊区块链的首次同步时会遇到的问题.

基于以太坊的区块链的首次同步

通常而言,你的客户端将从一开始即从创世区块下载并验证每个区块和每笔交易。

虽然可以通过这种完全验证方式同步区块链,但是这种类型的同步将花费很长的时间,并且对资源的要求很高(它将需要更多的RAM,并且如果你的硬盘存储速度不快,则将花费很长时间)。

2016年底,许多基于以太坊的区块链成为拒绝服务攻击的受害者。受影响的区块链在使用完全验证模式同步时会非常缓慢。

例如,在以太坊上,新的客户端的同步初期会非常迅速,直到第2,283,397区块。该区块于2016年9月18日被开采,标志着DoS攻击的开始。从此区块到2,700,031(2016年11月26日),交易的验证变得极其缓慢,需要使用更多的内存和I/O。这导致每个块的验证时间超过1分钟。以太坊使用硬分叉实施了一系列升级,以解决DoS攻击中利用的潜在漏洞。这些升级还删除了由垃圾邮件交易创建的约2000万个空帐户,从而来清理区块链。

如果你正在使用完全验证模式来同步,则客户端将变慢,可能需要几天甚至更长的时间来验证受DoS攻击影响的块。

幸运的是,大多数以太坊客户端现在默认执行“快速”同步,跳过交易的完整验证,直到已同步到区块链的尖端,然后恢复完整验证。

Geth默认情况下对以太坊执行快速同步。对于其他以太坊链的Geth,你可能需要参考他们的特定说明。

Parity在默认情况下也执行快速同步。

Note

Geth仅在从空的块数据库开始时才能进行快速同步。如果你最初没有使用快速模式进行同步,则Geth无法切换到快速同步模式。与继续使用完全验证方式同步相比,删除区块链数据目录并从头开始快速同步要快得多。删除区块链数据时请注意不要删除任何钱包!

运行Geth或Parity客户端

现在你已经了解了“首次同步”的问题,你就可以启动以太坊客户端并开始同步区块链了。对于Geth和Parity,你可以使用 -help 选项查看所有配置参数。默认设置通常很适合大多数用途。选择配置任何可选参数以满足你的需求,然后启动Geth或Parity同步链。然后就是默默等待同步的完成。

Tip

在具有大容量RAM的高速系统上,同步以太坊区块链需要花费半天的时间,而在速度较慢的系统上,同步则可能需要数天的时间。

JSON-RPC接口

以太坊客户端提供了一个应用程序编程接口和一个一组远程过程调用(RPC)命令,这些命令被编码为JavaScript Object Notation(JSON)。你将看到称为 JSON-RPC API 的内容。从本质上讲,JSON-RPC API是一个接口,允许我们编写将以太坊客户端用作以太坊网络和区块链的“网关”的程序。

通常,RPC接口在端口8545上作为HTTP服务提供。出于安全原因,默认情况下将其限制为仅接受来自本地主机(你自己计算机的IP地址,即127.0.0.1)的连接。

要访问JSON-RPC API,你可以使用专门的库(以你选择的编程语言编写),该库提供与每个可用RPC命令相对应的“存根”函数调用,或者你可以手动构造HTTP请求并发送/接收JSON编码的请求。你甚至可以使用通用的命令行HTTP客户端(例如 curl )来调用RPC接口。让我们尝试一下。首先,确保已启动并运行Geth,并配置了—​rpc以允许HTTP访问RPC接口,然后切换到新的终端窗口(例如,使用现有的Ctrl-Shift-N或Ctrl-Shift-T终端窗口),如下所示:

$ curl -X POST -H "Content-Type: application/json" --data \
  '{"jsonrpc":"2.0","method":"web3_clientVersion","params":[],"id":1}' \
  http://localhost:8545

{"jsonrpc":"2.0","id":1,
"result":"Geth/v1.9.11-unstable-0b284f6c-20200123/linux-amd64/go1.13.4"}

在此示例中,我们使用 curl 建立与地址 http://localhost:8545 的HTTP连接。我们已经在运行 geth ,它在端口8545上提供JSON-RPC API作为HTTP服务。我们指示 curl 使用HTTP POST 命令,并将内容标识为 application/json 类型。最后,我们将JSON编码的请求作为HTTP请求的 data 组件传递。我们大多数命令行只是设置 curl 来正确建立HTTP连接。有趣的部分是我们发出的实际JSON-RPC命令:

{"jsonrpc":"2.0","method":"web3_clientVersion","params":[],"id":1}

JSON-RPC请求的格式根据 JSON-RPC 2.0规范设置。每个请求包含四个元素:

jsonrpc

JSON-RPC协议的版本。这必须是"2.0"。

method

要调用的方法的名称。

params

一个结构化的值,其中包含在方法调用期间要使用的参数值。该参数可以省略。

id

客户端建立的标识符,必须包含 String,Number 或 NULL 值(如果包含)。如果包含的话,服务器必须在响应对象中以相同的值回复。该成员用于关联两个对象之间的上下文。

Tip

id 参数主要用于在单个JSON-RPC调用中发出多个请求的情况,这种做法称为 batching 。批处理用于避免每个请求的新HTTP和TCP连接的开销。例如,在以太坊上下文中,如果我们想通过一个HTTP连接检索成千上万的交易,则将使用批处理。批处理时,你为每个请求设置一个不同的 id ,然后将其与来自JSON-RPC服务器的每个响应中的 id 相匹配。实现此目的最简单的方法是维护一个计数器并为每个请求增加值。

我们收到的回复是:

{"jsonrpc":"2.0","id":1,
"result":"Geth/v1.9.11-unstable-0b284f6c-20200123/linux-amd64/go1.13.4"}

这告诉我们,目前的JSON-RPC API由Geth客户端版本1.13.4提供。

让我们尝试一些更有趣的事情。在下一个示例中,我们向JSON-RPC API询问以wei为单位的当前燃料gas价格:

$ curl -X POST -H "Content-Type: application/json" --data \
  '{"jsonrpc":"2.0","method":"eth_gasPrice","params":[],"id":4213}' \
  http://localhost:8545

{"jsonrpc":"2.0","id":4213,"result":"0x430e23400"}

返回的信息, 0x430e23400 告诉我们,当前的gas价格是18 gwei(gigawei或十亿wei)。

$ echo $((0x430e23400))

18000000000

完整的JSON-RPC API可以在 Ethereum wiki上看到。

Parity对Geth的兼容模式

Parity具有特殊的“ Geth兼容模式”,其中提供了与Geth相同的JSON-RPC API。要在此模式下运行Parity,请使用 --geth 开关:

$ parity --geth

远程以太坊客户端

远程客户端提供了完整客户端功能的一部分。他们没有存储完整的以太坊区块链,因此它们启动速度更快,所需的数据存储量也少得多。

这些客户端通常可以执行以下一项或多项功能:

  • 管理钱包中的私钥和以太坊地址。

  • 创建,签名和广播交易。

  • 使用数据与智能合约进行交互。

  • 浏览并与DApp交互。

  • 提供到区块浏览器等指向外部服务的链接。

  • 转换以太币单位并从外部来源检索汇率。

  • 将一个web3实例作为JavaScript对象注入到Web浏览器中。

  • 使用另一个客户端提供/嵌入到浏览器中的web3实例。

  • 在本地或远程以太坊节点上访问RPC服务。

一些轻量级客户端(例如移动(智能手机)钱包)仅提供基本的钱包功能。其他轻量级客户端是完全开发的DApp浏览器。轻量级客户端通常提供完整节点以太坊客户端的某些功能,而无需同步以太坊区块链的本地副本。

让我们看一些最受欢迎的远程客户端及其提供的功能。

移动端(智能手机)钱包

所有移动钱包都是远程客户端,因为智能手机没有足够的资源来运行完整的以太坊客户端。轻量级客户端正在开发中,并且通常不用于以太坊。Parity的轻量级客户端被标记为“实验性”,可以通过运行带有 -light 选项的 parity 来使用。

流行的移动钱包包括以下内容(我们仅将其作为示例列出;并不意味对这些钱包的安全性或功能的认可):

Jaxx

基于BIP-39助记符种子的多币种手机钱包,并支持比特币,莱特币,以太坊,以太坊经典,ZCash,各种ERC20代币以及许多其他货币。 Jaxx在Android和iOS上可用,可以作为浏览器插件钱包,也可以作为各种操作系统的桌面钱包使用。

Status

移动钱包和DApp浏览器,支持各种通证代币和流行的DApp。适用于iOS和Android。

Trust Wallet

移动端多币种钱包,支持以太坊和以太坊经典以及ERC20和ERC223通证和代币。 Trust Wallet适用于iOS和Android。

Cipher Browser

启用了以太坊功能的全功能移动DApp浏览器和钱包,可与以太坊应用程序和通证集成。适用于iOS和Android。

浏览器钱包

各种钱包和DApp浏览器都可以作为插件使用-浏览器(例如Chrome和Firefox)的插件或扩展程序。这些是在浏览器中运行的远程客户端。

一些比较流行的是MetaMask,Jaxx,MyEtherWallet和MyCrypto。

MetaMask

MetaMask,在 [intro_chapter]中展示的,是一个基于浏览器的多功能钱包,RPC客户端和基本合约浏览器。它在Chrome,Firefox,Opera和Brave Browser上都可以用。

与其他浏览器钱包不同,MetaMask将web3实例内嵌到浏览器JavaScript内容中,充当连接到各种以太坊区块链(主网,Ropsten测试网,Kovan测试网,本地RPC节点等)的RPC客户端。内嵌web3实例并充当外部RPC服务的网关的能力使MetaMask对开发人员和用户而言都是非常强大的工具。例如,它可以与MyEtherWallet或MyCrypto结合使用,充当这些工具的Web3提供程序和RPC网关。

Jaxx

Jaxx, 在上一节中作为移动钱包引入,也可以作为Chrome和Firefox扩展程序以及桌面钱包使用。

MyEtherWallet (MEW)

MyEtherWallet 是基于浏览器的JavaScript远程客户端,它提供以下功能:

  • 可以将Trezor和Ledger等流行硬件钱包连接到区块链

  • 一个Web3界面,可以连接到另一个客户端(例如MetaMask)内嵌的Web3实例

  • 可以连接到以太坊完整客户端的RPC接口

  • 给定合约的地址和应用程序二进制接口(ABI),可以与智能合约进行交互的基本接口

  • 一种移动应用程序MEWConnect,使用户能够使用兼容的Android或iOS设备来存储资金,类似于硬件钱包。

  • 使用JavaScript运行的软件钱包

Warning

访问MyEtherWallet和其他基于浏览器的JavaScript钱包时,你必须非常小心,因为它们经常是网络钓鱼的目标。建议使用书签而不是搜索引擎或链接来访问正确的Web URL。

MyCrypto

In early 2018, the MyEtherWallet项目在两个独立的开发团队的指导下分为两个相互竞争的项目:“ fork”,在开源开发中称为“ 分叉”。这两个项目分别称为MyEtherWallet(原始商标)和 MyCrypto。 MyCrypto提供了与MyEtherWallet几乎相同的功能,但不是使用MEWConnect,而是提供了与Parity Signer移动应用程序的连接。与MEWConnect一样,奇偶校验签名器将密钥存储在手机端上,并以与硬件钱包类似的方式与MyCrypto进行接口。

Mist(已淘汰)

Mist 是第一个由以太坊基金会开发的,可以使用以太坊功能的浏览器。它包含一个基于浏览器的钱包,这是ERC20通证标准的第一个实现(ERC20的作者Fabian Vogelsteller,也是Mist的主要开发者)。 Mist也是第一个引入camelCase校验和(EIP-55)的钱包。截至2019年3月,Mist已淘汰,不应该再使用了。

本章小结

在本章中,我们探讨了以太坊的多种客户端。你可以下载,安装并同步客户端,以成为以太坊网络的参与者,并通过在自己的计算机上复制区块链账本来为整个系统的健康和稳定性做出贡献。