操作指南 | 如何用Ubuntu和Prysm参与Medalla测试网?_UDO:SUDO

本文将以 Medalla 多客户端测试网为例介绍在 ETH 2.0 上质押的详细步骤。主要基于以下几个技术:

Ubuntu?v20.04 (LTS) x64 服务器

Go Ethereum?节点 (代码分支)

Prysmatic Labs?ETH 2.0 客户端 —— Prysm(代码分支)

官方多客户端公共测试网?Medalla

浏览器扩展程序钱包?MetaMask

Prometheus?指标

Grafana?控制面板

这篇指南介绍了如何:

配置新运行的 Ubuntu 服务器实例

配置和运行 ETH 1.0 节点

为 ETH 2.0 Phase 0(Medalla 测试网)编译并配置 Prysmatic Labs 信标链和验证者客户端软件,并提供相应的运行服务

安装并配置 Prometheus 指标,并创建 Grafana 控制面板用于查看数据和接收警报(编者注:该部分内容未选入)

这篇指南参考了各种网上资料。没有它们,就没有这篇指南。特此表示感谢!

我本人并不精通这篇指南中列出的所有技术。经过亲身尝试之后,我发现这些技术非常有趣,因此想要分享给其他人。如有任何错误或疏漏之处,烦请见谅。欢迎大家积极反馈!

这篇指南并不适合初学者。读者需要具备一些关于以太坊、以太币、质押、Linux 和 MetaMask 的知识。在开始阅读之前,请先运行 Ubuntu 服务器实例。先安装好 MetaMask 浏览器插件并配置好也在一定程度上有所帮助。然后,我会引导你完成接下来的步骤。

我没有在树莓派上测试过这个指南。如果你想尝试一下,直接将下文列出的软件换成 ARM 版本。但是我不保证一定能成功!

Ubuntu 服务器实例。我使用的是 v20.04 (LTS) amd64 服务器虚拟机。

安装并配置好的 MetaMask 密码学钱包浏览器扩展程序。

运行 Prysm 软件的最低硬件要求: — 操作系统:64-bit Linux — 处理器:Intel Core i5–760 或 AMD FX-8100 或以上 — 内存:4GB RAM (推荐 8GB) — 硬盘:不低于 20GB 的 SSD 固态硬盘空间 — 网络:稳定的宽带连接

目前似乎还没有任何硬性硬盘要求(无论是 Medalla 测试网还是 ETH 2.0 主网)。测试网可能只需要 100GB 的 SSD 固态硬盘就够了。对于主网来说,接下来的几年,使用 1TB 的 SSD 固态硬盘(信标链和分片链各占一半)可能更好。总的来说,最好做好在必要时扩展硬盘容量的准备。

这份指南很长而且细节繁多。所以我画了一张究极简化的示意图来帮助你对接下来要做的事情建立基本概念。下图中的黄色框即是本指南会覆盖到的部分。

整个流程可以概念化表述为:

启动一个 Eth1 节点并同步 Eth1 G?erli 测试网

生成并激活验证者密钥对

配置信标链节点和验证者客户端

让信标链节点在验证者(签名功能)的帮助下施展魔法(处理区块、见证消息和罚没事件)

安全性很重要。由于本文不是一篇全面的安全性指南,我只介绍一些基本设置:防火墙和用户账号。本文预设你可以访问你的 Ubuntu 实例的控制台,并作为?root?用户通过 SSH 登陆控制台。

Ubuntu 20.04 服务器可以使用默认的?UFW 防火墙?来限制访问该服务器的流量。我们需要允许来自 SSH、Go Ethereum、Grafana 和 Prysm 的入站流量。 允许 SSH —— 允许通过 SSH(端口 22/TCP )连接到该服务器

注:出于安全考虑,你可能需要考虑更换你的 SSH 端口(默认端口是 22 )。这里面会有一些细微差别,你可以自己研究一下。

#?ufw?allow?22/tcp允许 Go Ethereum —— 允许来自 Go Ethereum 节点(端口 30303/TPC 和 30303/UDP)的请求。

注:如果你将你的 Ubuntu 实例托管在本地,你需要对你的路由器和/或防火墙进行配置,允许来自这些端口的入站流量。

允许 Grafana —— 允许将入站请求发送至 Grafana 网络服务器(端口 3000/TCP)

#?ufw?allow?3000/tcp允许 Prysm —— 允许对等节点之间进行连接,以便在信标链节点上进行操作。Prysmatic Labs 将端口 13000/TCP 和 12000/UDP 列为默认端口。

可选项:如果你想要直接访问 Prometheus 数据服务,你也可以开启端口 9090/TCP 。如果你只使用 Grafana 查看数据,那就没必要开启这个端口。我自己就没有开启这个端口。

#?ufw?allow?9090/tcp现在开启防火墙并检查防火墙是否已经按照上述规则正确配置。

输出应如下图所示:

使用?root?账户登陆存在很大的风险。让我们来重新创建一个拥有管理权限的用户账户。

#?adduser?<yourusername>你需要输入密码以及其它信息。

将新的用户加入 sudo 群组,即可授予其管理权限。

#?usermod?-aG?sudo?<yourusername>当你以?<yourusername>?登陆时,你可以在命令行前键入 sudo ,即可以超级用户的权限来执行操作。

可选项:如果你使用?SSH 密钥连接你的实例,你需要将这个新账户与?root?账户的 SSH 密钥数据进行关联。

#?rsync?--archive?--chown=<yourusername>:<yourusername>?~/.ssh?/home/<yourusername>第二步 —— 升级你的系统注销你的?root?账户登录状态和 SSH,使用你新创建的用户名进入 Ubuntu 系统,运行下列命令行来升级系统。

本步的用意是安装并配置好一个将来的你的信标链节点需要连接的以太坊 1.0 节点。如果你倾向于使用由第三方托管的节点(比如?Infura),那就跳过这一步。

Go Ethereum 建议使用 PPA 的(Personal Package Archives,个人安装包归档)。

$?sudo?add-apt-repository?-y?ppa:ethereum/ethereum更新安装包并安装最新的稳定版本。

为要运行的服务创建一个用户。此种类型的用户无法登录服务器。

sudo?useradd?--no-create-home?--shell?/bin/false?goeth为 Eth1 区块链创建数据文件夹。这是存储 Eth1 节点数据所必须的操作。使用?-p?来创建完整的路径。

$?sudo?mkdir?-p?/var/lib/goethereum设定文件夹权限。用户?goeth?需要权限来修改该数据文件夹。

$?sudo?chown?-R?goeth:goeth?/var/lib/goethereum创建一个 systemd 服务文件来存储服务配置。我们将使用配置文件来命令你的 systemd 运行?geth?进程。

$?sudo?nano?/etc/systemd/system/geth.service复制下列服务配置到该文件里面。

那个?--goerli?标签是用来指定 Goerli 测试网的,而?--http?标签则是用来暴露供信标链节点连接的端口(http://localhost:8545)的。

可以对照下面这张屏幕截图。你的文件也应该像它一样。记得保存然后退出。

重启 systemd 以使更改生效。

$?sudo?systemctl?daemon-reload开启这项服务,并确保它正常运行。

启动服务后的输出应该像下图一样。

如果一切正常,它应该会用绿色文本显示 “active (running)”。如果不正常,那就倒回去,重复这个步骤来解决这个问题。可以按 Q 退出。

允许 geth 服务在系统重启时自动启动。

$?sudo?systemctl?enable?gethGo Ethereum 会自动开始同步。你可以运行 journal 命令来查看进度。按 Ctrl+C 可以退出。

$?sudo?journalctl?-f?-u?geth.service找到对等节点并完成 Goerli 测试网同步可能要花好一段时间。如果出现了延宕的情况,你可以手动添加节点来帮助同步。到这个网站找到最新的节点列表,并像这样这样修改 geth 服务:

修改 “ExecStart” 那一行,加入?--bootnodes?标签和一些最新的节点(用逗号分隔)。

保存文件并退出。重启服务并观察。

结果应该像这样:

注意:在你运行信标链节点之前,要先等这个 Eth1 节点同步完成。可以在这里找到最新的区块。

接下来,我们要下载 Prysm 软件(用于运行信标链节点和验证者)。从这里开始你可以开启一个新的命令行窗口,这样你就能继续观察 Eth1 节点的同步情况了。

Bazel 是一个开源构建工具。我们将使用它来编译 Prysm 软件。

我们还需要使用?Curl?来下载 Prysm 代码。

$?sudo?apt?install?curl?gnupg下载 Bazel gpg distribution URI 并将其添加为包源。你在复制命令行时,别漏了 “add” 后的(-):sudo apt-key add -sudo apt-key add -。

根据 Bazel 的文档,保留组建名 “jdk1.8” 只是出于历史遗留原因,不再代表支持或包含哪些 JDK 版本。

安装 Bazel 。先安装最新版本,然后安装 3.2.0 版本。Prysm 目前需要 3.2.0 版本。

Prysm 由两部分二进制文件组成:信标链和验证者。我们将构建这两部分。

克隆 Prysm 的主代码库。

使用 Bazel Build 来编译信标链和验证者二进制文件。

信标链文件需要一段时间才能构建完成。现在我们可以喝杯水小憩一下。或许可以读一下我的其它文章。

构建验证者文件会快一些,因为我们已经下载和/或构建好相关项了。

如果二者均构建完成,就可以执行后续步骤了。如果失败了,可以去?Prysm 的 Discord?寻求帮助。

注:务必在完成本指南中的所有步骤后再执行该步骤,否则请直接跳到第六步。

如果你因为 Git 代码库变化而需要更新代码,请执行以下步骤获得最新文件,并创建你的二进制文件:

别忘了停止信标链和验证者服务,并将二进制文件复制到?/usr/local/bin?目录下,然后再开始启动服务:

在这一步骤中,我们将让信标链节点作为后台服务运行,如果系统重启,信标链节点进程也会自动重启。

为这项服务创建一个用户。此种类型的用户无法登录服务器。

$?sudo?useradd?--no-create-home?--shell?/bin/false?beaconchain也要为信标链节点创建数据目录(文件夹)。这是存储信标链数据库所必需的。使用?-p?来创建完整的路径。

$?sudo?mkdir?-p?/var/lib/prysm/beaconchain设置文件夹权限。这个?beaconchain?用户需要权限来更改这个数据库目录。-R?表示递归。

$?sudo?chown?-R?beaconchain:beaconchain?/var/lib/prysm/beaconchain接下来,把新编译的?beacon-chain?二进制文件复制到?/usr/local/bin?目录。我们会在这个文件夹里运行它。

注意:每次你 拉取/构建 一个新版本的?beacon-chain?二进制文件的时候,都要做这一步骤。

$?sudo?cp?bazel-bin/beacon-chain/linux_amd64_stripped/beacon-chain?/usr/local/bin把所有权设给我们上面创建的用户账户?beaconchain。

$?sudo?chown?-R?beaconchain:beaconchain?/usr/local/bin/beacon-chain创建和配置服务创建一个 systemd 服务文件来存储这个服务的配置。

$?sudo?nano?/etc/systemd/system/beaconchain.service复制下列内容到这个文件里面。

我们是用一个环境参数(Environment variable)来获得这个客户端的 IP 地址?Environment="ClientIP=$(curl -s v4.ident.me)"?因为?ExecStart?不允许内联调用(call in-line)。使用?--p2p-host-ip=${ClientIP}?是为了应对故障(work-around)。

--http-web3provider?标签用于定义 Eth1 节点的端口。如果你使用的是本地的节点,这个值就是?http://127.0.0.1:8545,如果你在使用第三方服务,那就要使用一个外部的端口地址。

看看你的文件是不是也像这个截图一样。应该是一样的。然后你可以保存并退出。

重启 systemd 以使变更生效。

$?sudo?systemctl?daemon-reload注意:如果你在本地运行 Eth1 节点(见第三步),你需要等待本地的节点同步区块链同步完成,然后才能开始 beaconchain 服务。使用这个命令行来检查进度:sudo journalctl -f -u geth.service?。

启动服务并检查它有没有正常运行。

屏幕上的输出看起来应该是这样的。

如果你正确地完成了上述步骤,它应该会用绿色字体显示 “active (running)”。如果没有这么显示,你要倒回去,重复这些步骤,来修复问题。按 Q 可以退出。

让信标链服务能随系统重启而自动重启。

$?sudo?systemctl?enable?beaconchain然后信标链节点会开始同步。可能需要几个小时才能完成同步。你可以运行 journal 命令来检查进度。按 Ctrl+C 来退出。

$?sudo?journalctl?-f?-u?beaconchain.service命令行窗口的输出会给你来自 Eth1 区块链的(对应于 Medalla 测试网的就是 Goerli 测试网)、正在处理的保证金的状态信息。

现在你的信标链节点已经作为一项服务在后台运行了。恭喜!虽然节点还在同步,我们可以开始下一步了。

在启动验证者客户端之前,我们需要先生成我们的验证者密钥对。官方的?Eth2 Launch Pad?会引导你完成这个流程(生成验证者密钥对、存入 Goerli ETH),不过,在你开始存入保证金之前,你需要获得一些 Goerli ETH。

遵照下列步骤:

点击 MetaMask 浏览器插件并登录

点击顶部的下拉菜单,选择 Goerli 测试网

点击你的用户名,它会自动复制下你的 Goerli ETH 钱包地址;

你可以通过这个经过认证的水龙头来获得 Goerli 测试网 ETH,或者到?ethstaker Discord 群组的?goerli-eth?频道内使用机器人命令:!goerliEth <walletaddress> <numberofvalidators-maximum5>?获取。

如果你在计划运行多个验证者,你可以请求自己想要的额度(32ETH 乘以你想运行的验证者数量)

等到 Goerli ETH 出现在你的钱包里,你就可以操作下一步了(记得要选择 Goerli 测试网!)

访问官方的?Eth2 Launch Pad?网站,跟随指引完成操作。如果一切顺利,它就能生成一个验证者密钥文件(每一个验证者都会有一个专门的文件,你想运行几个验证者,就要生成几个)。

(编者注:Launch Pad 的使用流程简介可见此处。)

根据引导流程、使用命令行工具所生成的 JSON 文件会存储在你运行 “验证者密钥生成” 脚本的目录下的?eth2.0-deposit-cli/validator_keys?文件夹里。当我们要运行验证者的时候(下一步),我们需要从这个位置引用我们的密钥。如果你需要通过 SFTP(SSH 文件传输协议)发送到你的服务器,那可以放心这么做。本指南假定这个文件会存储在这个目录:$HOME/eth2.0-deposit-cli/validator_keys。

首先我们要使用 Prysm 的验证者二进制文件(我们之前就编译好的)来创建一个钱包,就基于上一步我们所创建的密钥。

你会被程序询问指定一个钱包的存储位置。你可以直接按回车,这样它会存储到默认位置。你还需要输入一个新的钱包口令,请务必把这个口令保管在安全的地方。

接下来你要输入你在?Eth2 Launch Pad?网站上创建验证者密钥时候使用的口令。如果你正确输入了,这个账户就会导入到这个新钱包中。

确认验证者账户创建成功。

$?bazel?run?//validator:validator?--?accounts-v2?list这就完成啦。现在这个验证者钱包已经配置好了,我们将启动验证者作为一个后台服务。

我们将让验证者能作为一项后台服务运行,并且在系统重启时这个线程会自动重启。

为要运行的服务创建一个用户账户(系统账户)。此种类型的账户无法登录服务器。

$?sudo?useradd?--no-create-home?--shell?/bin/false?validator为验证者客户端创建数据存储目录,也就是跟验证者相关的数据库存放的地方。使用?-p?来创建完整的地址。

$?sudo?mkdir?-p?/var/lib/prysm/validator设置目录的权限。这个?validator?用户需要修改这个数据目录的权限。

$?sudo?chown?-R?validator:validator?/var/lib/prysm/validator现在,复制我们之前编译好的?validator?二机制文件到这个?/usr/local/bin?目录。

注意:每次你 拉取/构建 一个新版本的?validator?二进制文件,都要做这一步。

把用户和群组权限设给?validator?用户。

$?sudo?chown?-R?validator:validator?/usr/local/bin/validator创建和配置服务创建一个 systemd 服务文件来存储服务配置。

$?sudo?nano?/etc/systemd/system/validator.service完全复制下列内容到这个文件中,就除了下面的两个例外:

用你正在使用的用户名替代那两个?<yourusername>。

用你的?Prysm POAP 参与奖章值?替换掉?<POARstring>,这样就能获得特殊的 NFT 奖品(POAP 奖章)!例如?--graffiti "abcdefg12345"

检查你的文件,看看是不是跟这个截图一样。保存并退出。

password.txt?是必需的,因为?--wallet-password-file?需要指定一个口令文件。因此我们就创建一个,然后存储在那个位置。

把你的钱包 password 输入到这个文件中。就像下图一样,然后保存并退出。

重启系统以使变更生效。

$?sudo?systemctl?daemon-reload启动服务并确保正常运行。

你的屏幕输出应该看起来像这样。

$?sudo?systemctl?enable?validator你可以运行 journal 命令来检查进度。按 Ctrl+C 来退出。

$?sudo?journalctl?-f?-u?validator.service等信标链真的启动之后,可能还要等几个小时来激活你的验证者账户。验证者进程的输出会显示进度。

Aug?02?03:03:25?ETH-STAKER-01?validator[5203]:?time="2020-08-02?03:03:25"?level=info?msg="Waiting?for?beacon?chain?start?log?from?the?ETH?1.0?deposit?contract"?prefix=validator你可以通过?beaconcha.in?检查自己的验证者的状态。只需搜索你的验证者公钥即可。网站上很快就会显示出来。

就这么简单。我们已经开始运行信标链节点和验证者客户端了。恭喜恭喜,你很棒!

(编者注:下文的内容为指导用户安装 Prometheus、节点浏览器、Gafuna,主要是帮助用户管理自己的节点和验证者,但这恐怕不是用户最需要的。如果用户了解足够多的背景知识,使用区块浏览器基本上也能满足自己监控验证者的需求,只是自动化程度差一些。因此我们不选入。感兴趣的用户可以自己到原文阅读。)

郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。

金智博客

[0:15ms0-9:312ms