《精通以太坊》-以太坊客户端

原文:Ethereum Clients

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

以太坊是一个开源项目,源代码在开源(LGPL v3.0)许可下可用,可以免费下载和用于任何目的。开源意味着不仅仅是免费使用。这也意味着以太坊是由一个开源的志愿者社区开发的,任何人都可以修改。

以太坊由称为“黄皮书”的正式规范定义。这与例如比特币形成对比,比特币没有以任何正式方式定义。比特币的“规范”是比特币核心的参考实现,以太坊的规范记录在一篇结合了英语和数学(正式)规范的论文中。除了各种以太坊改进提案之外,此正式规范还定义了以太坊客户端的标准行为。随着对以太坊的重大改变,黄皮书会定期更新。

作为以太坊明确的正式规范的结果,以太网客户端有许多独立开发但可互操作的软件实现。以太网在网络上运行的实现比任何其他区块链更多样化。

以太坊网络

存在各种基于以太坊的网络,这些网络很大程度上符合以太坊“黄皮书”中定义的形式规范,但它们之间可能相互也可能不相互操作。

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

目前,以六种不同语言编写的以太坊协议有六种主要实现:Go (Geth), Rust (parity), C++ (cpp-ethereum), Python (pyethereum), Scala (mantis) and Java (harmony)。

在本节中,我们将介绍两个最常见的客户,Geth和Parity。我们将学习使用每个客户端设置一个节点,并探索它们的一些命令行和应用程序编程接口(API)。

我应该运行全节点吗?

区块链的健康,弹性和审查抵抗力取决于具有许多独立操作和地理上分散的全节点。每个全节点都可以帮助其他新节点获取区块数据以引导其操作,并为操作员提供所有交易和合约的权威和独立的验证。

但是,运行全节点将导致硬件资源和带宽的显着成本。全节点必须下载超过80GB的数据(截至2018年4月;取决于客户端)并将其存储在本地硬盘上。随着新交易和区块的增加,这种数据负担每天都在迅速增加。

以太坊开发不需要在实时网络(主网)上运行的全节点。您可以使用testnet节点(存储较小的公共测试区块链的副本),本地私有区块链或使用服务提供的基于云的以太坊客户端执行几乎所有操作。

您还可以选择运行轻量级客户端,该客户端不存储区块链的本地副本或验证区块和交易。这些客户端提供钱包的功能,可以创建和广播交易。

轻量级客户端可用于连接到现有网络,例如您自己的全节点、公共区块链、公共或许可(PoA)测试网或私有本地区块链。实际上,您可能会使用轻量级客户端(如MetaMask,Emerald Wallet,MyEtherWallet或MyCrypto)作为在所有不同节点选项之间切换的便捷方式。

术语“轻量级客户端”和“钱包”可互换使用,但存在一些差异。通常,轻量级客户端除了提供钱包的交易功能外,还提供API(例如web3js API)。

不要将以太坊轻量级钱包的概念与比特币中的简易支付验证(SPV)客户端的概念混淆。SPV客户端验证块头并使用merkle证明来验证区块链中的交易。通常,以太坊轻量级客户端不验证区块头或交易。他们完全信任由第三方运营的完整客户端,以授予他们对区块链的RPC访问权限。

全节点的优点和缺点

选择运行全节点有助于各种基于以太坊的网络,但也会为您带来一些轻微到中等的成本。让我们看看一些优点和缺点。

优点

  • 支持基于以太坊的网络的灵活性和审查区块。
  • 权威地验证所有交易。
  • 可以与公共区块链上的任何合约互动(无需中间人)。
  • 如有必要,可以离线查询(只读)区块链状态(帐户,合约等)。
  • 可以在不让第三方知道您正在阅读的信息的情况下查询区块链。
  • 可以直接将您自己的合约部署到公共区块链中(无需中介)。

缺点

  • 需要大量且不断增长的硬件和带宽资源。
  • 第一次初始下载需要几个小时或几天才能完全同步。
  • 必须维护,升级并保持在线以保持同步。

公共Testnet的优点和缺点

无论您是否选择运行全节点,您可能都希望运行公共testnet节点。让我们看看使用公共testnet的一些优点和缺点。

优点

  • 一个testnet节点需要同步和存储更少的数据,大约10GB,具体取决于网络(截至2018年4月)。
  • 一个testnet节点可以在几个小时内完全同步。
  • 部署合约或进行交易需要测试以太,它没有价值,可以从几个“水龙头”免费获得。
  • Testnets是具有许多其他用户和合约的公共区块链,运行“live”。

缺点

  • 你不能在testnet上使用“真正的”钱,它在测试以太坊网络上运行。
  • 因此,您无法测试真实对手的安全性,因为没有任何利害关系。
  • 公共区块链的某些方面无法在testnet上进行实际测试。例如,交易费用虽然是发送交易所必需的,但由于gas是免费的,因此不在testnet上考虑。并且测试网络不会像公共网络那样经历网络拥塞。

本地实例(TestRPC)的优点和缺点

对于许多测试目的,最好的选择是使用testrpc节点启动单实例专用区块链。TestRPC创建一个仅限本地的私有区块链,您可以与其进行交互,而无需任何其他参与者。它具有公共testnet的许多优点和缺点,但也有一些差异。

优点

  • 磁盘上没有同步,而且几乎没有数据。你自己挖掘第一块。
  • 无需获取测试以太,您可以“奖励”自己可用于测试的挖掘奖励。
  • 没有其他用户,只有你。
  • 没有其他合约,只有您在启动它之后部署的合同。

缺点

  • 没有其他用户意味着它的行为与公共区块链的行为不同。交易空间或交易顺序没有竞争。
  • 除了你之外没有矿工意味着挖掘更容易预测,因此你无法测试公共区块链上发生的某些情况。
  • 没有其他合约意味着您必须部署要测试的所有内容,包括依赖项和合约库。
  • 您无法重新创建一些公共合约及其地址来测试某些方案(例如DAO合同)。

运行以太坊客户端

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

全节点的硬件要求

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

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

最低要求

  • 具有至少双核的CPU。
  • 固态硬盘(SSD),可用空间至少为80GB。
  • 最小4GB RAM,如果你有HHD而不是SSD,至少8GB。
  • 8 MBit/sec下载Internet服务。

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

在撰写本文时(2018年4月),Parity代码库在资源方面往往更少,如果您使用有限的硬件运行,您可能会看到使用Parity的最佳效果。

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

推荐规格

  • 具有至少四核的快速CPU。
  • 16GB+ RAM。
  • 具有至少500GB可用空间的快速SSD。
  • 25+ MBit/sec下载Internet服务。

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

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

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

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

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

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

在我们开始之前,我们可能需要满足一些先决条件。如果您从未在当前使用的计算机上进行任何软件开发,则可能需要安装一些基本工具。对于下面的示例,您需要安装源代码管理系统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需要Rust1.24版本或更高版本。

Parity还需要一些软件库,例如OpenSSL和libudev。要在Linux(Debian)兼容系统上安装它们:

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

我们将从源代码构建Parity。这假设您已经使用rustup安装了Rust。

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

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

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

$ cd parity
$ cargo build

如果一切顺利,你应该看到类似的东西:

$ cargo build
    Updating git repository `https://github.com/paritytech/js-precompiled.git`
 Downloading log v0.3.7
 Downloading isatty v0.1.1
 Downloading regex v0.2.1

 [...]

Compiling parity-ipfs-api v1.7.0
Compiling parity-rpc v1.7.0
Compiling parity-rpc-client v1.4.0
Compiling rpc-cli v1.4.0 (file:///home/aantonop/Dev/parity/rpc_cli)
Finished dev [unoptimized + debuginfo] target(s) in 479.12 secs
$

让我们通过调用--version选项尝试运行parity以查看它是否已安装:
(译者注:mac下会出现“parity: command not found”错误,请参考Fixing Parity Error on a Mac)

$ parity --version
Parity
  version Parity/v1.7.0-unstable-02edc95-20170623/x86_64-linux-gnu/rustc1.18.0
Copyright 2015, 2016, 2017 Parity Technologies (UK) Ltd
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
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
   Habermeier/Czaban/Greeff/Gotchac/Redmann
$

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

Go-Ethereum(Geth)

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

仓库链接

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

克隆仓库

我们的第一步是克隆git仓库,以获取源代码的副本。
要创建此仓库的本地克隆,请在主目录中或在用于开发的任何目录下使用git命令,如下所示:

git clone <Repository Link>

将仓库克隆到本地系统时,您应该看到进度日志:

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

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

从源代码构建Geth

要构建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=58a1e13e6dd7f52a1d5e67bee47d23fd6cfdee5c -v ./cmd/geth
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.6.6-unstable
Git Commit: 58a1e13e6dd7f52a1d5e67bee47d23fd6cfdee5c
Architecture: amd64
Protocol Versions: [63 62]
Network Id: 1
Go Version: go1.8.3
Operating System: linux
GOPATH=/usr/local/src/gocode/
GOROOT=/usr/local/go

您的geth version命令可能会显示略有不同的信息,但您应该看到与上面的版本日志非常相似的版本日志。

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

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

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

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

通常,在同步以太坊区块链时,您的客户端将下载并验证自创世块以来的每个区块和每个交易。

虽然可以通过这种方式完全同步区块链,但同步将花费很长时间并且具有高计算资源要求(更多RAM和更快的存储)。

许多基于以太坊的区块链是2016年底遭遇拒绝服务(DoS)攻击的受害者。受此攻击影响的区块链在进行完全同步时往往会缓慢同步。

例如,在以太坊上,新客户将快速进展,直至达到2,283,397区块。该区块于2016年9月18日开采,标志着DoS攻击的开始。从该块到块2,700,031(2016年11月26日),交易验证变得非常缓慢,内存密集,I/O密集。这导致每区块的验证时间超过1分钟。以太坊使用硬分叉实施了一系列升级,以解决在拒绝服务中利用的潜在漏洞。这些升级还通过删除垃圾邮件交易创建的大约2000万个空帐户来清理区块链。

如果您正在同步完整验证,您的客户端将会变慢并可能需要几天或更长时间来验证受此DoS攻击影响的任何区块。

大多数以太坊客户端都包含执行“快速”同步的选项,该同步会跳过交易的完整验证,直到它同步到区块链的提示,然后恢复完整验证。

对于Geth,启用快速同步的选项通常称为--fast。您可能需要参考所选以太坊链的具体说明。

对于Parity,对于较旧版本(<1.6),选项为--warp,并且在较新版本(> = 1.6)上默认启用(无需设置配置选项)。

Note Geth和Parity只能在从空区块数据库开始时进行快速同步。如果您已经开始同步而没有“快速”模式,则Geth和Parity无法切换。删除区块链数据目录并从头开始“快速”同步比继续同步完全验证更快。删除区块链数据时,请注意不要删除任何钱包!

JSON-RPC接口

以太坊客户端提供应用程序编程接口(API)和一组远程调用(RPC)命令,这些命令被编码为JavaScript对象表示法(JSON)。您将看到这称为JSON-RPC API。本质上,JSON-RPC API是一个接口,允许我们编写使用以太坊客户端作为网关进入以太坊网络和区块链的程序。

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

要访问JSON-RPC API,您可以使用以您选择的编程语言编写的专用库,该库提供与每个可用RPC命令相对应的“stub”函数调用。或者,您可以手动构建HTTP请求并发送/接收JSON编码的请求。您甚至可以使用通用命令行HTTP客户端(如curl)来调用RPC接口。让我们试试(确保您已配置Geth并先运行):

或者,您可以手动构建HTTP请求并发送/接收JSON编码的请求。您甚至可以使用通用命令行HTTP客户端(如curl)来调用RPC接口。让我们试试(确保您已配置Geth并先运行):

使用curl通过JSON-RPC调用web3_clientVersion函数

$ 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.8.0-unstable-02aeb3d7/linux-amd64/go1.8.3"}

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

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

JSON-RPC请求根据JSON-RPC 2.0规范进行格式化,您可以在此处看到:http://www.jsonrpc.org/specification

每个请求包含4个元素:

  • jsonrpc:JSON-RPC协议的版本。这必须是“2.0”。
  • method:要调用的方法的名称。
  • params:一个结构化值,用于保存在调用方法期间要使用的参数值。该成员可以省略。
  • id:客户端建立的标识符,必须包含字符串、数字或NULL值。如果包含,服务器必须在Response对象中回复相同的值。该成员用于关联两个对象之间的上下文。
Tip id参数主要用于在单个JSON-RPC调用中发出多个请求时,这种做法称为批处理。批处理用于避免每个请求的新HTTP和TCP连接的开销。例如,在以太坊上下文中,如果我们想要在一个HTTP连接中检索数千个交易,我们将使用批处理。批处理时,为每个请求设置不同的id,然后将其与来自JSON-RPC服务器的每个响应中的id匹配。实现此目的的最简单方法是维护计数器并增加每个请求的值。

我们收到的回复是:

{"jsonrpc":"2.0","id":4192,
"result":"Geth/v1.8.0-unstable-02aeb3d7/linux-amd64/go1.8.3"}

这告诉我们Geth客户端版本1.8.0正在提供JSON-RPC API。

让我们尝试更有趣的事情。在下一个示例中,我们向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价格是1.8 Gwei(千兆wei或亿wei)。

https://github.com/ethereum/wiki/wiki/JSON-RPC

parity的Geth兼容模式

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

$ parity --geth

轻量级以太坊客户端

轻量级客户端提供完整客户端的功能子集。它们不存储完整的以太坊区块链,因此它们设置起来更快,并且需要更少的数据存储。

轻量级客户端提供以下一项或多项功能:

  • 管理钱包中的私钥和以太坊地址。
  • 创建、签名和广播交易。
  • 使用数据有效负载与智能合约进行交互。
  • 浏览DApps并与之交互。
  • 提供外部服务的链接,例如区块浏览器。
  • 转换以太单位并从外部来源检索汇率。
  • 将web3实例作为JavaScript对象注入Web浏览器。
  • 使用由另一个客户端提供/注入浏览器的web3实例。
  • 访问本地或远程以太坊节点上的RPC服务。

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

让我们来看看一些最流行的轻量级客户端及其提供的功能。

移动(智能手机)钱包

所有移动钱包都是轻量级客户端,因为智能手机没有足够的资源来运行完整的以太坊客户端。

流行的移动钱包包括Jaxx,Status和Trust Wallet。我们将这些列为流行移动钱包的示例(这不是对这些钱包的安全性或功能的认可或指示)。

Jaxx

基于BIP39助记符种子的多币种手机钱包,支持比特币,Litecoin,以太坊,以太坊经典,ZCash,各种ERC20 token和许多其他货币。Jaxx可用于Android,iOS,作为浏览器插件钱包,以及适用于各种操作系统的桌面钱包。在https://jaxx.io上找到它

Status

移动钱包和DApp浏览器,支持各种token和流行的DApp。适用于iOS和Android智能手机。在https://status.im上找到它

Trust Wallet

移动的以太坊,以太坊经典钱包,支持ERC20和ERC223 token。Trust Wallet适用于iOS和Android智能手机。在https://trustwalletapp.com/找到它

Cipher Browser

全功能的支持以太坊的移动DApp浏览器和钱包。允许与以太坊应用和token集成。在https://www.cipherbrowser.com上找到它

浏览器钱包

各种钱包和DApp浏览器可用作Chrome和Firefox等Web浏览器的插件或扩展:在浏览器中运行的轻量级客户端。

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

MetaMask

MetaMask是在[介绍]中引入的,是一个多功能的基于浏览器的钱包、RPC客户端和基本合约浏览器。它适用于Chrome,Firefox,Opera和Brave Browser。在以下位置找到MetaMask:

https://metamask.io

乍一看,MetaMask是一个基于浏览器的钱包。但是,与其他浏览器钱包不同,MetaMask将一个web3实例注入浏览器,充当连接各种以太坊区块链的RPC客户端(例如,mainnet,Ropsten testnet,Kovan testnet,本地RPC节点等)。注入web3实例并充当外部RPC服务的网关的能力使MetaMask成为开发人员和用户都非常强大的工具。例如,它可以与MyEtherWallet或MyCrypto结合使用,充当这些工具的web3提供程序和RPC网关。

Jaxx

Jaxx是智能手机中的移动钱包,也可作为Chrome和Firefox扩展程序使用。找到它:

https://jaxx.io

MyEtherWallet(MEW)

MyEtherWallet是一个基于浏览器的JavaScript轻量级客户端,提供:

  • 一个用JavaScript运行的软件钱包。
  • 通往Trezor和Ledger等流行硬件钱包的桥梁。
  • 一个web3接口,可以连接到另一个客户端注入的web3实例(例如MetaMask)。
  • 可以连接到以太坊完整客户端的RPC客户端。
  • 给定合约地址和应用程序二进制接口(ABI)的基本接口,可与智能合约交互。

MyEtherWallet对于测试和硬件钱包的接口非常有用。它不应该用作主要的软件钱包,因为它通过浏览器环境暴露于威胁,并且不是安全的密钥存储系统。

访问MyEtherWallet和其他基于浏览器的JavaScript钱包时必须非常小心,因为它们经常成为网络钓鱼的目标。始终使用书签而不是搜索引擎或链接来访问正确的Web URL。MyEtherWallet可在以下位置找到:

https://MyEtherWallet.com

MyCrypto

就在本书第一版出版之前,MyEtherWallet项目分为两个竞争实现,由两个独立的开发团队指导:在开源开发中调用的“fork”。这两个项目称为MyEtherWallet(原始品牌)和MyCrypto。在拆分时,MyCrypto提供了与MyEtherWallet相同的功能。由于两个开发团队采用不同的目标和优先事项,这两个项目很可能会出现分歧。

与MyEtherWallet一样,在浏览器中访问MyCrypto时必须非常小心。始终使用书签,或者非常仔细地键入URL(然后将其加入书签以备将来使用)。

MyCrypto可在以下位置找到:

https://MyCrypto.com

Mist

Mist是由以太坊基金会建造的首个支持以太坊的浏览器。它还包含一个基于浏览器的钱包,这是ERC20令牌标准的首次实现(Fabian Vogelsteller,ERC20的作者也是Mist的主要开发者)。Mist也是第一个引入camelCase校验和的钱包(EIP-155,参见[eip-155])。Mist运行全节点,并提供完整的DApp浏览器,支持基于Swarm的存储和ENS地址。找到它:

https://github.com/ethereum/mist

参考

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,372评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,368评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,415评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,157评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,171评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,125评论 1 297
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,028评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,887评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,310评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,533评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,690评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,411评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,004评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,659评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,812评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,693评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,577评论 2 353

推荐阅读更多精彩内容