使用Nethermind客户端和Lighthouse运行以太坊2.0测试网的验证者
安装 Nethermind 客户端
Nethermind 客户端主页:https://www.nethermind.io/client
Nethermind 客户端文档:https://nethermind.readthedocs.io/
准备安装 Nethermind 之时,请访问公开版本页,下载适用于您的操作系统的最新版本(不过本教程聚焦于 Linux 系统下的安装和运行)。从 zip 压缩文件中提取出 Nethermind:
unzip nethermind-linux-amd64–1.8.XX-XXXXXXX.zip -d nethermind(第一个 xx 是版本号。比如我现在撰文的时候,最新的版本是 1.8.43。文件名中有一个 7 位数的校验和,就是 xx 后面的 xxxxxxx。对于 1.8.43 版本来说,校验和是 f28f4b7。文件名后面可能还附有文件的上传时间,这全看你是在哪儿下载的文件。真正最重要的事只有一个:下载 Nethermind 最新的稳定版本!使用最新的版本往往能让很多技术问题迎刃而解。)
确保 Nethermind 是最新版本
Eth2 的技术规范变化很快,甚至有可能推倒过去的一些东西。Nethermind 客户端也在快速推进,有时候几乎每天都有新版本。我建议你把检查和升级 Nethermind 作为日常工作的一部分,再不济也要变成每周的例行工作。
如果你想检查自己运行的 Nethermind 是不是最新版本,在 Nethermind 的目录里面打开 CLI(./Nethermind.Cli),输入
web3.clientVersion然后版本号就会出来了。然后再比对 Nethermind 的公开版本页,如果不是最新版本,就请动手更新。
更新版本跟安装实质上是一样的。下载新的安装包,解压 zip 文件到你选定的存储位置,覆盖掉旧的 Nethermind 文件。我这里就完全复制了从下载文件夹解压 Nethermind 的命令行,只不过加了一个 -o,表示要覆盖文件夹里的内容:
unzip -o nethermind-linux-amd64–1.8.XX-XXXXXXX.zip-d nethermind升级之后你必须重启软件,这样你的节点才会允许最新版本的 Nethermind。
同步 Goerli 测试网
在 Nethermind 目录中,使用 Nethermind 同步 Goerli 测试网:./Nethermind.Runner --config goerli --JsonRpc.Enabled true(另一种方法是,在运行 Nethermind.Launcher (启动)时会提供额外的选择,询问你要同步哪条链。本版指南使用了 Nethermind.Runner,额外的好处是可以通过制作一个 systemd 脚本或者类似方法来自动化这个过程)。
如果你想使用 Nethermind 来生成在 Goerli 测试网上使用的钱包,你还得再加一段:--Init.EnableUnsecuredDevWallet true。
把 JsonRpc.Enabled 设为 True(启动)是为了便于使用 Goerli 水龙头(免费获得 Goerli 测试网上的以太币)和发送验证者保证金。如果你的计算机上没有别的软件在使用 8545 端口传输消息,那 Nethermind 就会直接使用这个端口。不要忘了在 MetaMask 上把网络设成 localhost:8545(我自己不觉得有必要做这一步,不过如果你已经在本地同步好了,那就没有必要使用 Infura 来查询 Goerli 测试网了 —— 你不手动设,MetaMask 就会自动使用 Infura)。
当 Nethermind 开始显示 “Processed” 的时候,就说明你的节点已经完成同步了。这里有张截图,已同步好 Goerli 测试网的 Nethermind 节点就是这样的:
Lighthouse
Lighthouse 是由 Sigma Prime 团队开发的 Eth2 客户端,是用 Rust 语言写的。所以你得跳转到 rustup.rs 网页找个简易的安装指南装一下 Rust。稍微剧透一下,安装 Rust 可能很花时间、占用很多计算机资源(译者注:此言不虚,在 Windows 安装完整的 Rust 非常麻烦。)
装好 Rust、确保能运行之后,下一步就是下载和构建 Lighthouse 代码。build(构建)操作会花一些时间,我上次尝试的时候,运行时间超过半个小时。
git clone https://github.com/sigp/lighthouse.gitcd lighthousecargo build — releaseLighthouse 默认加入 Witti 测试网,所以你需要下载 Witti 代码库。找个文件夹,输入下面这个命令行就可以了:git clone https://github.com/goerli/witti(译者注:现在 Witti 测试网已经关停了。现正在运行的多客户端测试网叫 Altona。可在此处查看详情:https://github.com/goerli/altona )
第一步是让信标链节点(Beacon Node)连上 Goerli 测试网并同步区块链。下面整个命令行是假设 Witti 被克隆到了 home 目录,不然的话你要替换成你用的地址:
lighthouse bn –http –testnet-dir ~/witti/lighthouse –eth1-endpoint http://127.0.0.1:8545注意:要是你光输入 lighthouse 没用的话(比如程序出错,显示 bash: lighthouse: command not found ),你可能需要换成 ~/lighthouse/target/release/lighthouse ,而且可能每次用到 lighthouse 命令的时候都要换。
- 使用 Lighthouse 同步的信标链节点 -如果你的 Nethermind 还在 terminal 窗口里输出,你应该能看到好多个 RPC 请求出现:
- Nethermind Goerli 节点在信标链节点同步期间的表现 -我们会使用 Lighthouse 来创建用于 Staking 的钱包。创建一个口令文件(包含你所设定的口令),放到一个你选定的地方。我这里用的文件命名为 password.txt,假定把它放在 home 目录下,你可以根据需要传入不同的输入。这里的钱包我也直接命名为 witti,这只是因为本教程所用的 Witti Lighthouse 用户必读文件中建议这么做,但实际上你可以随自己高兴来命名。类似地,生成的助记词文件我们也直接放到 home 目录里面。这样做其实不安全。只不过,这样可以让我写文章的时候容易一点。我希望你在阅读的时候能更小心一些,弄清楚自己需要做什么。lighthouse account_manager wallet create \--name “witti” \--passphrase-file ~/password.txt \--testnet-dir ~/witti/lighthouse \--mnemonic-output-path ~/menmonic.txt这样做就能生成一个钱包了。你会看到一套由 12 个单词组成的助记词出现在屏幕上,还附有如何保管助记词的建议。我就不截图放出来了,因为,正如一些建议所说:永远不要跟人分享你的助记词(译者注:因为助记词即意味着对一个账户的完全控制权)。
下一步我们要创建一个验证者账户。
lighthouse account_manager validator create \--at-most 1 \--testnet-dir ~/witti/lighthouse \--wallet-name “witti” \--wallet-passphrase ~/password.txt这时会产生一串 16 进制的数字。
现在我们需要为我们的验证者存入保证金。基本上有两种办法,要么用 MetaMask,要么用 Nethermind CLI。
使用 MetaMask:你先要将 MetaMask 连接到你的节点,就是在右上角选择所用网络的下拉选项里选择 localhose:8545(如果你使用的是另一个端口,你就需要选择 “Custon RPC(自定义 PRC)”,然后输入你的端口号)。你也可以在选项里直接选择 Goerli 测试网,不过,你明明自己电脑上已经有一个 Goerli 节点了,为什么还要去用 Infura 的节点呢?
你需要存入至少 32 GoETH(也就是 Goerli 测试网上的 ETH,没有实际价值),才能成为验证者。如果你有 Twitter 或者 Facebook 账号,你可以使用 https://faucet.goerli.mudit.blog 水龙头。输入你的 MetaMask 地址,跟随指引完成操作即可。要等待一些时间才能收到 GoETH,但应该不会等待超过 1 分钟。
(译者注:访问 https://prylabs.net/participate 这个网站并连接自己的 Metamask 钱包可一次性领到 32 个测试网 ETH。)
在网页浏览器内访问 Lighthouse 的文档。点击 “upload” 按钮。Lighthouse 需要的文件应该放在 ~/.lighthouse/validators/0x... 处,也就是 home 目录里一个叫做 .lighthouse 的隐藏文件夹里(注意那个开头的 .)。你要找到一个叫做 eth1-deposit-data.rlp 的文件。上传这个文件会生成一笔 MetaMask 交易,发送 32 GoETH 到 Goerli 测试网上的保证金合约。
(译者注:使用此方法最好再检验一下 MetaMask 交易的目标地址,确保是 Altona 测试网的保证金合约地址。因为现在 Witti 网络已经关闭了)。
使用命令行:首先,需要使用额外的一个参数来启动 Goerli 节点:
--Init.EnableUnsecuredDevWallet true在 Nethermind 目录里面,启动 CLI(./Nethermind.Cli),输入 personal.listAccounts 会给你一个测试账户列表。要是没出现这样的列表,那这个教程剩下的部分可能也没法正常运行,那我就要推荐你使用上面的 MetaMask 方法了。如果有用,你可以输入下列命令行、创建一个新账户,password 就是这个账户的口令,换成一个你喜欢的就行:personal.newAccount(“password”)记下运行这个命令所产生的新地址,使用 https://faucet.goerli.mudit.blog 水龙头往这个地址里打钱(需要你用 Twitter 或者 Facebook 账号给他们做宣传)。你需要至少 32 GoETH(Goerli 测试网 ETH)才能成为验证者。你还需要从 Nethermind CLI 中解锁你的账号:personal.unlockAccount(, “”)在撰写本文之时,Lighthouse 仍需要一个 IPC 端点来发起存款,虽然我听说已经有人提了 PR 要换成 http 端点了。下面这段就是关于如何发起存款交易的一个有根据的猜测:lighthouse account_manager validator deposit \--eth1-http http:127.0.0.1:8545 \--from-address \--testnet-dir ~/witti/lighthouse \--validator all信标链节点应该一直在同步。你可以在信标链同步期间启动验证者客户端,但在完成同步之前,验证者客户端什么都不会干。我会建议你先等着。完成信标链同步之后,软件的输出会像下图所示:
- 同步好的 Lighthouse 信标链节点 -完成同步之后,信标链节点也不能关闭,要继续运行。在新的命令行窗口里,输入下列命令以启动验证者客户端:lighthouse vc –auto-register –testnet-dir ~/witti/lighthouse只有第一次运行验证者的时候才需要这些参数,而 --auto-register 如果不是在首次运行时使用甚至还会产生问题,所以,在你需要重启验证者客户端的时候,只要用下面这个简单的命令就好了:lighthouse vc整个教程就是这样啦。如果你能完整做到这一步,真是恭喜你!你现在运行着信标链节点和验证者客户端,稳妥地站在以太坊 2.0 的前沿世界里了。
一些提醒
在本文撰写之时,Witti 测试网上还没有验证者新人的排队机制,所以当你启动验证者之后,马上就能看到软件的输出如下图:
- Lighthouse 验证者 -每隔一段时间,你就会看到不是上图这样的另一种输出,要么是产生了一条区块见证消息(attestation),要么是发布了一个新区块。我还没看到我的客户端发布新区块的情况,但下面这种就是产生见证消息时候的场景:
- Lighthouse 验证者,正在发布见证消息 -见证消息的内容是对某个区块的投票支持。发布新区块则是实际上为区块链提议一个新区块,当然这种机会要少得多。
离线的验证者会被惩罚,在本文写作之时(2020 年 6 月),这个惩罚力度被设成很小的值,大概要超过 1 年才会损失掉 32 个 ETH。因此,估计大家也会时不时离线(为了升级、更新等等)。
遵循教程的操作,可能也会有搞不定的情况。你的基本设置可能与我的并不相同,另外,这个领域是全新的,软件也很稚嫩。所以请求帮助的时候不用觉得不好意思!客户端团队基本上都有 discord 频道,虽然你们可能生活在地球的两端,但他们其实很乐意帮助你,也很希望能得到反馈。不要害羞啦!
使用其它客户端
Lighthouse 并不是唯一的以太坊 2.0 客户端软件。你可以使用 Nethermind 来同步 Goerli 测试网,再搭配任意的以太坊 2.0 客户端软件。本教程只是拿 Lighthouse 来举例。我们会在下文列举其它的一些客户端。
此外,据我所知,你可以同时运行多个以太坊 2.0 客户端。可能你得自己调整一些默认设置,比如客户端所用的网络端口;另外就是注意自己的电脑性能够不够。不过,不管怎么做,你只需要一个 Goerli 节点。
Teku 客户端
Teku 客户端正式文档:https://docs.teku.pegasys.tech/
Witti Teku 文档:https://github.com/goerli/witti/tree/master/teku
Teku 是一款用 Java 写成的软件,由 PegaSys 开发。跟随这些指令就能安装 Teku 客户端软件(还有 Java SDK)。Teku 的文档假定用户使用 Besu 客户端来同步 Goerli 测试网,(但我们这里告诉你可以用 Nethermind),所以相关的段落是可以跳过的。
我自己没有尝试过使用 Teku 配合 Netherminde,但我觉得应该是没问题的。你需要用 Nethermind 来生成钱包(根据我的理解是这样),所以你要确保使用 -Init.EnableUnsecuredDevWallet 参数来运行 Nethermind。
Lodestar 客户端
Lodestar 客户端的安装指南见:https://github.com/ChainSafe/lodestar
我也没有尝试过使用 Lodestar 配合 Netherminde,但我也觉得问题不大。尝试的时候多看看 Witti 的文档应该会有所帮助。
Prysm 客户端
Prysm 测试网指南:https://prylabs.net/participate
Witti(Schlesi)Prysm 文档:https://github.com/goerli/witti/tree/master/prysm
(译者注:现在 Schlesi 测试网也关停了。Prysm 客户端团队发起的最新单客户端测试网名为 Onyx,不过文档也都是公开的)。
Prysm 运行自己的 Goerli 节点集群,并使 Prysm 客户端默认与集群相连。在写这篇文章的时候,一些技术问题使得 Prysm 无法连接到 Nethermind 部署在本地的 Goerli 节点。它是最著名的以太坊 2.0 客户端,所以我觉得我有必要批评几句。
(完)
微信掃描關注公眾號,及時掌握新動向
2.本文版權歸屬原作所有,僅代表作者本人觀點,不代表比特範的觀點或立場
2.本文版權歸屬原作所有,僅代表作者本人觀點,不代表比特範的觀點或立場