2021-02-26

在Windows10上运行以太坊质押校验节点

以太坊 2.0 如期在 2020年12月1日 上线,新的共识机制 POS(Proof of stake) 可以让任何人通过质押 ETH 的方式建立校验节点(Validator Client),用来对以太坊网络进行维护从而获取一定的利润,也可以把它理解为挖矿。以太坊是一个去中心化的网络系统,当遍布在全世界的节点数量越多越分散,就意味着以太坊网络越不容易受到攻击。整个以太坊及其生态也将会因为 2.0 的上线而有一个质的飞跃。以太坊 2.0 上线后,会有数次更新,未来它每秒种能够承载的交易量将有显著的提升,在以太坊上出现的和约应用将 (Dapp)会越来越多。

为什么要质押才能够运行校验节点?

之所以需要质押以太币才能建立校验节点,是因为校验节点需要对全网交易进行打包并且有权对其它的交易或区块进行投票审核,任何恶意操作都会扰乱以太坊网络的正常运行。

虽然一个恶意的操作会被所有诚实的校验节点否决掉,但如果成为校验节点而无需任何质押,那么就可以让攻击者很容易通过建立一定数量的恶意结点来让诚实的结点变成少数节点,再通过大量投票让全网接受恶意数据来达到攻击网络的目的(参考51%攻击)。但是,因为校验节点需要质押 ETH,且若某节点进行了恶意操作,那么该节点所质押的 ETH 会根据作恶严重程度而受到损失。并且,想要获得大多数的投票权,需要质押比当前网络总质押的 ETH 数量还要多的 ETH 来建立校验节点,于是使得作恶的成本非常的高。所以,质押 ETH 才能成为校验节点是整个生态中非常重要的一环。

事实上,所有的区块链系统,不管是 PoW 还是 PoS,都需要“花费”某些价值,才能换取对整个区块链进行维护的权利,并且获取利润。PoW 需要强大的算力及电力成本,而以太坊上的 PoW 则通过质押 ETH。

架构

要运行一个校验节点,需要接触到两条链,一条是当前的以太坊链,一条是 Beacon 链(也叫做信标链)。Beacon 链上线(Phase 0),开启了质押的服务,校验节点可以通过 Beacon 链获取质押的奖励。很快第三条链也准备上线,叫做 Shard 链。Shard 链上线(Phase 1),将会大幅度提升以太坊的每秒交易承载量。

前期准备

需求

  • 你需要 32 ETH 和一些执行合约所需要的交易费,这些交易费目前估计在 0.007 ETH 左右。

  • 你需要一台安装了 Windows 的电脑(这里只讨论 Windows,事实上使用 Linux 和 macOS 都是可行的)。这台电脑内存至少 8GB 以上,安装的 CPU 为 i5 或更高,推荐 i7。

  • 电脑上需要安装了一块剩余空间不小于 800GB 的 SSD。在这里必需强调的是,一块 SSD 是必需的,以太坊网络上目前交易频繁,若存储设备的写入速度赶不上交易产生的速度,那么意味着你将永远无法把区块数据同步到本地。

  • 访问互联网的宽带,至少 50M,若有独立 IP 地址更佳,因为这样可以通过 P2P 网络连接到更多的节点。

步骤

  • 建立 Eth 1 节点

  • 下载 Prysm

  • 使用 Prysm 建立Beacon节点

  • 使用 deposit 生成私钥,质押相关文件

  • 访问以太坊官方 Launchpad 并进行 32 ETH 质押

  • 使用 Prysm 导入校验节点的私钥

  • 运行校验节点(Validator)

为什么需要 Eth 1 节点

创建一个校验节点(Validator Client)需要访问以太坊账本数据。因为以太坊网络是一个分布式区块链系统,账本数据保存在各个节点中,通过 P2P 网络来供它人检查和校验。所以作为校验节点需要存取这些账本数据。找到一个这样的节点并向其请求数据则可以很好的服务于一个或多个校验节点。

但是,我们要求这个以太坊节点是稳定、保持在线和能够随时被我们流畅访问。显然,自己建立一个稳定的校验节点是非常有必要的。并且,能够有条件建立一个以太坊网络节点并保存一份账本数据且积极的同步每天新增的账本数据,对整个以太坊网络的生态意义重大。

建立 ETH 1.0 网络节点很容易,你只需要在你的电脑上运行节点程序,然后由该程序自动将账本数据通过 P2P 网络同步到你的电脑即可。不过,从零开始同步到最新的数据,可能会花费掉几天甚至一个星期的时间,这也取决于你的电脑运行速度、网络带宽以及你选择的账本同步方式。

现在有很多开源的实现了以太坊协议的节点程序,这里向大家推荐的是 Go Ethereum。它是一个使用Go语言开发的开源项目,也是当前认可度最高,最稳定的以太坊节点代码。大家可以访问它的 主页 了解更多的信息。

建立 Eth 1 节点

Go Ethereum(以下简称Geth)是一个开源的项目,理论上任何人都可以将其编译到指定的目标平台,它支持市面上主流的操作系统,但是这一过程需要比较专业的知识。为了方便普通用户的使用,Geth 团队已经将最新的稳定版本分别编译出了 Windows/macOS/Linux 的三个版本,你可以在官方的 下载页面 上看到,并可以免费下载对应你的操作系统的那个安装包。

页面往下拉,还会看到新期的历史版本,并且加粗了根据你当前浏览器推荐给你的版本,并且该版本对应你当前使用的操作系统。

The page preview for downloading geth

按照推荐的链接,你可以下载到 Geth 的安装包,浏览器会提示你这是一个有风险的程序,因为它运行在你的机器上并且可以对你的计算机进行修改(安装过程需要将程序文件写入系统目录),你只需要确定该安装包是在官方的网站上下载的,然后保留并双击这个文件进行安装即可。

安装过程很容易,基本上只需要使用默认的设置,一步步往后即可。Geth 程序所需要的空间大概在 65 M 左右。先把程序本身的文件安装到电脑里,之后在运行的时候我们需要设置具体 SSD 的盘的位置。

运行 Geth

安装完成后,在开始菜单中是可以找到 Geth 相关的快捷方式的,但是,因为我们需要额外的参数来指定 Geth 的工作方式以及可能需要修改区块数据的保存位置,所以我们需要使用命令提示符来启动 Geth。可能听起来和平常在 Windows 上运行程序不大一样,但是其实并不难,按下面的步骤进行即可。

  1. 按下 Windows 键,然后输入 “Command Prompt”,然后用鼠标单击 “命令提示符” 这个图标打开它;

  2. 输入命令并启动 Geth;

如果你整个硬盘都只有一块 SSD 那么你可以直接输入并回车执行 geth --http 就可以了,如果你的 SSD 是挂在第二个硬盘上的,你需要指定数据存储的位置。比如,你的 SSD 是 D 盘,那么你可以输入 geth --datadir d:\EthereumData --http 将数据指定到 D 盘的 EthereumData 目录里。–http 这个参数表示需要打开一个本地通道让第三方的程序可以与 Geth 进行通信,稍后的 Beacon 节点和我们检查同步情况的时候需要用到。

  1. 运行后,你在命令提示符的窗口里应该看到类似以下的内容,这表示 Geth 正在从 P2P 网络上的其它节点获取数据。

Logs from geth

在写这篇文章的时候 (2020/11/30),Geth 同步完成的区块数据总共是 290+ GB,未来数据还会继续增长,所以保留 800GB 的剩余空间会让你在一段时间内都不会需要增加硬盘。另外,这些空间还将用于存储后面提到的 Beacon 链的数据。

检查节点的运行情况

当你的 Geth 在运行的时候,除了查看它输出的日志来判断当前的同步进度外,你还可以启动另外一个 Geth 连接到正在同步数据的 Geth 进程上,使用命令来查看当前数据同步的情况。

打开另外一个 “命令提示符” 窗口,然后输入命令 geth attach http://localhost:8545 来启动另一个 Geth 并连接到正在同步数据的 Geth 进程。启动成功后,你将会看到一个 “>” 号,在这里你可以输入想要执行的命令。

Connected to geth

输入命令 eth.syncing 并按下回车,将可以看到当前区块同步的情况。 其中比较重要的两个键值:“currentBlock” 表示当前已经同步了多少个区块,“highestBlock” 表示一共有多少个区块需要同步。若该 Geth 的所有的区块数据是已经同步完成的,那么你将不会看到任何的数值,按下回车后仅仅会显示一个 “false”,表示区块数据并不在同步中。

Syncing status of geth

除了检查当前区块的同步情况,你还可以使用命令查看你的 Geth 一共连接到了多少个节点。因为以太坊是去中心化的 P2P 网络,所以它同步的数据将会从其它的节点中获取。这意味着,你连接到了一定数量的节点,才能够高效的同步数据。输入命令:net.peerCount 并执行。同时连接到的节点数量也并不是越多越好,太多的连接会明显拖慢你的电脑的性能,所以 Geth 默认设置最多会连接到 50 个节点。 如下所示,我的 Geth 已经连接了 50 个节点了。

Full connections of nodes

下载Prysm

你可以在等待 Geth 同步数据的时候,先准备好 Prysm,我们需要它来建立 Beacon 链的节点,并且运行质押节点的校验器(Validator)。Prysm 官方提供了一个脚本,使用该脚本可以方便的从官方的服务器上下载或自动更新 Prysm 相关的程序。你可以访问 Prysm 的 Github 页面 来了解更多的信息。

  1. 首先,在你的存储设备上建立一个空的文件夹,例如:在 D 盘创建一个名字为 “prysm” 的文件,可以直接在命令提示符输入命令 d: && mkdir d:\prysm && cd \prysm。它先使用 D 盘作为当前的默认驱动器,然后在根目录下建立了一个新的文件夹 “prysm”,最后将 “d:\prysm” 设置为当前的文件夹。

  2. 然后,我们要从网络上下载这个脚本,打开一个新的命令提示符窗口,然后运行命令 curl https://raw.githubusercontent.com/prysmaticlabs/prysm/master/prysm.bat --output prysm.bat。该命令将会把 Prysm 的主脚本下载到你的命令提示符所在的文件夹里。当命令运行完成后,你将会在 “d:\prysm” 这个文件夹内发现一个名为 “prysm.bat” 的文件,这就是 Prysm 的主运行脚本。

  3. 最后一步,你需要执行命令 reg add HKCU\Console /v VirtualTerminalLevel /t REG_DWORD /d 1,该命令会设置一个日志显示的级别,用以确认所有的 Prysm 的命令的输出正常。

启动Beacon链的节点

在建立 Beacon 链并同步 Beacon 的区块数据前,你需要等待并确认 Eth 1 的节点的区块数据已经同步成功。因为以下的命令会连接到 Geth 并获取需要的数据。

  1. 首先,我们在 D 盘创建一个新的文件夹,叫做 “eth2”,用于存放 Beacon 链的区块数据。

  2. 然后,执行命令 prysm.bat beacon-chain --datadir d:\eth2 --http-web3provider http://localhost:8545,该命令会启动 Prysm 的主脚本,并要求该脚本启动一个 Beacon 链,并开始通过 P2P 网络同步数据。

  3. 脚本运行的时候,它会先检查对应的 Beacon 链的节点程序是否是最新的版本,如果不是或者它不存在的时候,将会从 Prysm 的服务器上下载最新的版本的程序,然后才开始执行。

  4. 当你使用一个新的目录来下载区块数据时,Prysm 会提示你查看它的使用条款,你必需同意该条款中的内容才能使用它,使用条款可以通过访问这里来查看。请输入 accept 然后按下回车按钮,Prysm 将开始区块数据的同步。

你将在命令提示符窗口中会看到类似下面的消息输出,Prysm 正在从 Eth 1 的区块数据中处理质押的数据,并且开始同步区块数据。

Importing data from eth 1

安装 Metamask

Metamask 是一个浏览器插件,用于管理你的 ETH 并且可以执行网络上的合约代码。你可以访问 Metamask 官方网站 来下载,并且了解到更多的关于 Metamask 的信息。你需要访问网站并且安装 Metamask,然后将你的 32 ETH 转至 Metamask 为你生成的唯一的 ETH 的账号。记住还可能需要额外的 0.007 个以太坊作为执行合约的转账费用。

下载 deposit 并生成质押文件

首先你需要访问以太坊官方的质押 LaunchPad,这是一个启动面板工具,用于帮助需要去质押的人们一步步了解质押操作所涉及的风险,利益分配等内容,并且帮助你运行质押的智能合约然后将 32 ETH 质押到以太坊网络上。请仔细阅读每一页的说明文字,了解清楚具体的步骤,每一页读完后点击下方的“I Accept”(我同意)按钮继续阅读下一页。直到最后一页“Confirmation”完成,引导页面会来到页面让你选择你需要用哪个程序作为以太坊 1.0 的节点程序,选择 Geth 继续。

Choose an eth1 client

在选择下方有详细的安装说明,和本文章最初的章节 “建立ETH1.0网络节点” 具有同样的功效,你也可以阅读官方提供的文档来获取更多的详细信息。点击 “Continue” 继续选择 Prysm 作为 ETH2.0 节点程序。

Choose an eth2 client

在这个页面上选择使用哪个项目来搭建以太坊质押相关程序,都不会妨碍你之后选择其它的项目来达成目的,选择了其它的项目也不需要再到这个页面来跑一次流程。你需要了解的是当前以太坊从 1.0 过渡到 2.0 整个系统的大体框架和你需要哪些类型的程序来搭建你的质押节点。事实上,这个页面更多的只是为了让你了解到现在社区里有哪些主流的项目,并且简单的告诉了你这些项目的特质。若你有很强的技术背景,那么你可以按照你的喜好来对这些程序进行选择,如果你没有的话,可以就按照本文中推荐的程序来完成以太坊的质押矿机的建立。

产生一对密钥

选择好了Eth 2 client(ETH2.0 节点程序)后,来到了非常重要的一页。在这一页里,你将下载一个质押数据产生程序,然后在你的机器上产生一个根密钥和使用该根密钥产生的验证器密密钥。你需要第一时间把这个根密钥保存起来。

(未完待续)

MATTHEW
桂ICP备17005075号