以太坊2.0质押和矿机配置流程Windows篇
写在前面
以太坊2.0将会如期在2020年12月1日上线,新的共识机制POS(Proof of stake)将可以让任何人通过质押以太币的方式建立校验节点(Validator Client),对以太坊网络进行维护从而获取一定的利润,通俗的说就是挖矿。以太坊是一个去中心化的网络系统,所以越多校验节点(Validator),意味着这个网络越安全。其实我觉得真正振奋人心的并不是通过质押以太币获取利润这件事情,而是整个以太坊生态将因为以太坊2.0的上线而有一个质的飞跃。以太坊2.0的出现,每秒种能够承载的交易量有显著的提升,顺畅的以太坊网络将会让更多的人愿意使用这个网络进行交易,于是在以太坊上出现的应用将会越来越多。
之所以需要质押以太币才能建立校验节点,是因为校验节点需要对全网交易进行打包并且有权利对其它的交易或区块进行投票审核,一旦这样的节点进行任何恶意操作都会伤害到以太坊网络的正常运行。虽然一个恶意操作会被大部分的正常校验节点否决掉,但如果成为校验节点无需任何质押,那么就可以让攻击者很容易通过建立非常多的恶意结点来让诚实的结点变成少数节点,再通过大量投票让全网接受恶意数据来达到攻击网络的目的(51%攻击)。但是,因为校验节点需要质押以太币,而若该节点进行了恶意操作,那么他质押的以太币会根据作恶程度被定量扣除。而想要获得大多数的投票权,需要质押比当前网络总质押以太币数量还要多以太币来建立校验节点,于是使得作恶的成本非常的高。所以,如果不需要质押以太币或者质押的以太币金额太少,那么就会让作恶变得很容易。
前期准备
那么,质押和校验节点的基础大概了解了,下面就需要开始进行准备工作。那么在建立节点前,需要准备哪些东西呢?
- 你需要32枚以太币和交易这些以太币的交易费,这些交易费目前估计在0.007ETH左右。
- 你需要一台安装了Windows/Linux/macOS的电脑,这台电脑内存至少8GB以上,安装的CPU为i3或更高,推荐i7。该电脑上最好安装了一块剩余空间不小于500GB的SSD硬盘。
- 可以通过该计算机访问互联网,若有独立IP地址更佳。
建立ETH1.0网络节点
创建一个校验节点(Validator Client)需要访问以太坊账本数据。因为以太坊网络是一个分布式区块链系统,账本数据保存在各个节点中,通过P2P网络来供它人检查和校验,作为校验节点同样也需要存取这些账本数据。显然,找到一个这样的节点并向其请求数据则可以很好的服务于一个或多个校验节点。但是,以太坊是一个区块链网络系统,当全网中的账本数据的副本越多,那么该网络将会变得更加的安全。所以,能够有条件建立一个以太坊网络节点并保存一份账本数据且积极的同步每天新增的账本数据,对整个以太坊网络的生态意义重大。同时,在自己的机器上建立一个这样的数据节点,也使得自己的校验节点能够更稳健的获取账本数据,而不会因为对方网络节点网络出现问题或节点维护而受到影响。
建立ETH1.0网络节点很容易,你只需要在你的电脑上运行节点程序,然后由该程序自动将账本数据通过P2P网络同步到你的电脑即可。但是,这一个同步过程可能会持续几天甚至一个星期,所需要的时间根据你的电脑运行速度、网络带宽以及你选择的账本同步方式。
现在在市面上,有很多开源的以太坊的节点程序,这里向大家推荐的是Go Ethereum。它是一个使用Go语言开发的开源项目,也是当前认可度最高,最稳定的以太坊节点代码。大家可以访问它的主页(https://geth.ethereum.org)了解更多的信息。
下载节点程序
Go Ethereum是开源的项目,理论上任何人都可以将其编译到指定的目标平台和支持不同的操作系统,但是这一过程仍然需要专业的开发员来完成。为了方便普通用户的使用,Go Ethereum团队已经将最新的稳定版本分别编译出了Windows/macOS/Linux的三个版本,你可以在官方的下载页面(https://geth.ethereum.org/downloads)上看到,并可以免费下载对应你的操作系统的那个版本。
页面往下拉,还会看到新期的历史版本,并且加粗了根据你当前浏览器推荐给你的版本,该版本对应你当前使用的操作系统。
按照推荐的链接,你可以下载到Go Ethereum的安装包,浏览器会提示你这是一个有风险的程序,因为它运行在你的机器上并且可以对你的计算机进行修改(安装过程需要将Go Ethereum的程序写入系统目录),你只要确信是在官方的网站上下载的安装包,那么就可以忽略警告,保留并双击这个文件进行安装。
安装节点程序
安装过程很容易,基本上只需要一步步往后就可以,你确认你的硬盘剩余空间有500GB以上就可以。在写这篇文章的时候(2020/11/30),使用fast sync mode的Go Ethereum同步完成的区块数据总共是290+GB,未来数据还会增长,所以保留500GB的剩余空间会让你在一段时间内都不会需要增加硬盘。
安装完成后,你唯一需要做的事情就是按下Win键打开开始菜单,输入“Geth”查找到新安装的Go Ethereum应用程序,然后单击运行它。在第一次运行,你的系统会提示该程序需要网络权限,同意并且继续。
单击该程序后,会显示一个黑底的命令行窗口,里面显示的内容是Go Ethereum的运行日志。它通过增加参数的方式来修改配置信息,所以该程序并不需要图形界面,你看到的日志窗口是唯一一个交互界面,但你通过日志可以看到所有的以太坊节点的运行信息,包括同步状态,节点数量,同步错误信息等。保留这个窗口,让它处于运行状态,它会自动的寻找P2P网络中的节点并向它们请求区块数据,校验并按照顺序保存到你的硬盘中,这一过程可能会持续好几天的时间,请耐心等待,并保持电脑开机及网络通畅。
建立ETH2.0网络节点(信标链Beacon chain)
以太坊1.0是使用PoW共识机制,2020年12月1日,以太坊2.0上线后,会逐步将以太坊1.0的共识机制替换成为PoS,这一个过程是漫长的,估计需要两年左右的时间。但是,一旦以太坊2.0上线后就会开始产生以太坊2.0的账本数据,作为验证者的你需要接收并且保存这些数据到你本地的硬盘中,就像是上一小节中保存以太坊1.0的账本数据一样。同样的,你需要一个程序来运行并支撑起这些以太坊2.0的账本数据的校验、存储等功能。
当前,一共有四个成熟的开源项目可以帮助你达成这一目的。分别 是:Lighthouse, Nimbus, Prysm和Teku。
Lighthouse
Lighthouse使用Rust语言编写,采用Apache 2.0开源协议。Rust语言是一门比较新的语言。它具有C/C++语言的运行速度,并且加强了内存安全管理以及其它的一些新的优质特性。Lighthouse可以很轻松的在macOS和Linux下编译并运行,并且官方在该项目的Github页面上发布了最新版本的二进制文件以供下载。但是,它暂时不支持Windows下的编译,同时也没有提供任何Windows下的二进制文件。所以,若需要在Windows下运行,那么只有安装Docker然后使用官方提供的Docker Image来运行该程序,虽然这也可以达到目的,但是并不是效率最优的。
Nimbus
Nimbus使用一种类Python的语言Nim,这种语言的代码会被编译成为C语言的源代码文件,再将该C语言的源文件编译成二进制文件。我并没有仔细研究过这个项目的安装,但是这个项目声称它的目标是运行在嵌入式系统或手机系统上的,若需要把节点运行在这些系统上,可以考虑使用它来作为节点工具,它采用Apache 2.0开源协议。
Teku
Teku使用Java编写,运行在Java虚拟机中。Java语言是一个稳健的语言,但它同时也是资源消耗大户。我也并没有仔细研究这个系统,它采用Apache 2.0开源协议,理论上可以在Windows下编译并运行。
Prysm
最后是Prysm。Prysm使用Go语言编写,采用GPL-3.0开源协议。它提供了Windows下的二进制文件,并且提供了脚本工具帮助使用者检查和更新Prysm。
分析
Prysm所使用的Go语言虽然运行效率不及C/C++,而且它还使用了垃圾回收机制来管理内存,但是因为其可以直接被编译成Windows下的二进制代码,且不依赖虚拟机,所以在资源使用上理论应该是比Teku要少。尽管Lighthouse一开始获得了我非常多的关注,但因为它无法被直接编译成Windows下运行的二进制文件,而被迫使用Docker来虚拟一个Linux环境,而在Windows下使用Docker来跑一个长期处于运行中的程序会消耗额外的资源,并且网络情况复杂且不好配置(Windows和macOS下的Docker其实都是使用了一个虚拟机来运行Container,所以整个运行的网络也在虚拟机中),最终我还是没有选择Lighthouse。所以放弃了Lighthouse后,Prysm似乎是一个比较折中但不错的选择。
安装Prysm
在Prylabs的文档页面上有详细的安装和使用说明。安装Prysm只需要在命令窗口里粘贴并运行文档页面上的脚本下载命令,就可以把Prysm的安装脚本下载到本地硬盘上。
- 首先在你的本地硬盘上建立一个文件夹,你可以在Windows的资源管理器里操作,或者直接在命令窗口里输入命令来创建并将当前命令行的文件夹切换到该目录中:
mkdir prysm && cd prysm
- 然后,请将下面这一段代码选中并使用CTRL+C复制到剪切板中:
curl https://raw.githubusercontent.com/prysmaticlabs/prysm/master/prysm.bat --output prysm.bat
- 回到命令窗口,点击鼠标右键将命令内容粘贴到命令窗口中,然后按下回车键(Enter)。稍等片刻,该程序将会自动从Prysm的官方主页上下载到本地。
- 最后,你需要添加一条注册表记录,官网上说是为了Ensure logging appears properly,复制这个代码在命令行窗口里运行:
reg add HKCU\Console /v VirtualTerminalLevel /t REG_DWORD /d 1
启动ETH2.0信标链(Beacon chain)
在命令行窗口里粘贴这个命令并按下回车执行:prysm.bat beacon-chain --http-web3provider=http://localhost:8545
。这个命令将会自动检查当前的节点程序是否为最新的版本,若电脑中的节点程序不是最新的,它将会自动下载最新的版本并启动它。启动成功后,它会尝试连接你的本地以太坊1.0节点,并开始通过P2P网络与其它的节点进行通信并同步账本数据。
因为从以太坊1.0过度到以太坊2.0是一个漫长的过程,所以在这一段时间里,两个版本的账本都需要同时存在并且工作。而验证节点需要原以太坊1.0的账本数据来进行校验工作,所以这也是为什么以太坊2.0的节点需要与以太坊1.0的节点相连接并交换数据。以下是在我电脑上已经同步好的信标链的日志截图:
如果你的以太坊1.0的节点的数据同步工作并没有完成,而你又需要马上启动你的以太坊2.0节点,那么你可以尝试使用Infura或Alchemy。这两个网站维护了以太坊1.0的节点并提供公开的接口以供其它人连接并使用。但是它们对于每日发送的API数量是有限制的,如果需要更加大量的访问,那么可以付费使用,具体的使用方法可以在它们的主页上查看。
质押32个ETH
安装MetaMask浏览器钱包,并接收32个ETH以及额外的一点点ETH(大概0.007个就可以)用以支持转账费用。当你把以太币转到你的MetaMask钱包后,就可以开始质押的流程。
LaunchPad
访问ETH质押的LaunchPad(启动面板),这个启动面板是一个质押引导,从Overview一直到Confirmation,里面分页清楚的说明了所有你将要承担的风险和安全需知。请仔细阅读每一页的说明文字,了解清楚具体的步骤,每一页读完后点击下方的“I Accept”(我同意)按钮继续阅读下一页。
直到最后一页“Confirmation”完成,引导页面会来到页面让你选择你需要用哪个程序作为以太坊1.0的节点程序,选择Geth继续。
在选择下方有详细的安装说明,和本文章最初的章节“建立ETH1.0网络节点”具有同样的功效,你也可以阅读官方提供的文档来获取更多的详细信息。点击Continue继续选择Prysm作为ETH2.0节点程序。
在这个页面上选择使用哪个项目来搭建以太坊质押相关程序,并不会妨碍你之后选择其它的项目来达成目的,选择了其它的项目也不需要再到这个页面来跑一次流程。你需要了解的是当前以太坊从1.0过渡到2.0整个系统的大体框架和你需要哪些类型的程序来搭建你的质押矿机。事实上,这个页面更多的只是为了让你了解到现在社区里有哪些主流的项目,并且简单的告诉了你这些项目的特质。若你有很强的技术背景,那么你可以按照你的喜好来对这些程序进行选择,如果你没有的话,可以就按照本文中推荐的程序来完成以太坊的质押矿机的建立。
产生一对密钥
选择好了Eth 2 client(ETH2.0节点程序)后,来到了非常重要的一页。在这一页里,你将下载一个密钥产生程序,然后在你的机器上产生一对密钥。你需要非常清楚的知道你在做什么,第一时间把这对密钥正确的保存起来。
验证者数量
首先选择你将要运行的验证者的数量,在第一个数字输入框中输入1然后相应的,在右边会显示出32.0 ETH。这表示你需要质押32个以太币来运行1个验证者。
操作系统
告诉页面,你需要在什么类型的操作系统下运行这个密钥产生程序,在这里选择Windows继续。(事实上,我最开始是使用Linux产生的这一对密钥,在哪里产生密钥对并没有关系,关键是如何正确保存,请仔细继续阅读)。
下载密钥产生程序
选择了Windows后,在紧接着的页面会问你:你打算怎么样运行这个密钥产生程序?页面提供了两种方式,一种是下载编译好的可执行文件,另一种是自己下载源代码编译。
开源项目的源代码,都可以在网上免费获取,并下载和编译成可执行文件。在这个过程中,你可以添加自己的优化选项,使用特定的编译器和编译方式等。但是这一过程对于非专业的人来说比较复杂,所以社区同时也提供了已经编译好的可执行文件供大家下载。选择“Download CLI app”然后在下方会看到一个按钮“Download from Github”,点这个按钮进入到开源项目的下载页面。点击选择Windows的安装包下载密钥生成程序。
双击下载好的压缩包,你会发现里面有一个叫做deposit.exe的文件,把它解压缩并存到你打算存储密钥的位置。
生成密钥
打开命令行进入到包含deposit.exe这个文件的文件夹,然后输入“deposit”回车,一切正常时,你会看到以下内容。
这是一个命令行工具,什么参数都不带(或使用–help)被执行的时候,它就会显示出自己的参数文档。可以看到,这个命令有两个参数:“existing-mnemonic”和“new-mnemonic”。
- existing-mnemonic — 从已经有的助记词(mnemonic)生成(或恢复)钥匙文件
- new-mnemonic — 生成新的助记词(mnemonic)并且生成出对应的钥匙文件
我们并没有生成过任何助记词,所以我们应该使用“new-mnemonic”作为主参数,命令如下:deposit.exe new-mnemonic --num_validators 1 --chain mainnet
注意,这个命令除了使用“new-mnemonic”作为主参数外,还使用了"--num_validators 1"
和"--chain mainnet"
两个额外的参数。第一个参数表示,产生的助记词对应1个校验者;第二个参数表示,该校验者将跑在主网络上(mainnet)。
输入命令并回车执行,然后回答以下问题:
- Please choose your mnemonic language (chinese_simplified, chinese_traditional, czech, english, italian, korean, spanish) [english]:(请选择助记词语言)这个选项我推荐你使用英文,直接回车即可。
- Type the password that secures your validator keystore(s):(输入钥匙文件的密码)这时请输入一个新密码,这个密码用于打开你的钥匙文件,请务必记好这个密码,在将钥匙文件导入到校验程序的时候会用到(注意,这个密码需要至少8个字符,如果不符合要求则会提示重新输入)。
- 完成后,屏幕会显示出生成的助记词,请拿出笔和纸将该助记词抄下来。注意,这一步非常的重要,抄完后按下任意键继续。
- 这时程序会提示你重新按顺序输入你的助记词,请将刚才抄下来的助记词重新输入到屏幕上,并按回车继续。这一步是要确信你已经正确保存了你的助记词。
- 当你的助记词校验成功后,程序会开始生成你的钥匙文件,完成后,会在屏幕上显示出类似下面图片中的内容。
非常好,按下任意键退出程序。这时,在当前目录下会多出一个目录名称为:“validator_keys”,这个目录里保存了两个文件:“deposit_data-*.json”“keystore-m_*.json”(注,*号表示的是一串数字,这个数字不同的时间生成出来的不同)
其中,“deposit_data-*.json”这个文件是一个公钥,需要在你质押了32个ETH后同时锁定到合约中。而“keystore-m_*.json”就是你的钥匙对文件,这个文件将由之前输入的密码解锁,校验程序需要使用它来进行签名,你发布的区块数据,投票都会被记录到区块链中以供其它的验证者验证。
上传验证者公钥文件
回到浏览器的Launchpad页面,拉到屏幕最下端,钩上“我已经保存好了我的钥匙文件并且将助记词写到了纸上”然后点击“Continue”继续。
来到下一页,你这时候需要打开资源管理器,浏览并找到刚才生成的“validator_keys”文件夹,把“deposit_data-*.json”这个文件拖到页面中心的那个有十字和虚线圆的框框里。
上传完成后,点“Continue”继续,然后页面会询问你使用哪个钱包。请选择MetaMask,然后在下一页就会显示出你当前安装在浏览器中的MetaMask钱包地址、余额等信息。点击“Continue”继续到下一页。
这一个页面是一个警告页,因为你马上就会通过使用32个ETH来执行合约上的质押代码了,这个页面中所有的说明文字都是在确认你的各种信息是否都已经保存妥当,包括你是否了解你的各项责任和需要承担的风险等等。
这个页面上的所有的钩你都需要钩上,并且请仔细阅读这个页面上的所有文字并认真理解。然后点击“Continue”按钮继续。
开始质押32个ETH
这一个页面是交易页,有一个按钮“Initiate The Transaction.”在中间,下方是你的钱包的地址缩写。点击这个按钮,会通过你的MetaMask钱包初始化官方的合约付款,这时你需要向这个质押合约支付32个ETH。请认真检查转账费用,我在使用该钱包的时候,可能因为网络拥堵,转账费用高得离谱(默认约1个ETH),请手动修改gas fee,直到转账费用降低到0.007个ETH或更少。不用担心转账费用少,矿工就会不打包你的转账记录,你只需要多等待一些时间就可以。
转账完成后就已经完成了质押,你的32个ETH已经被质押到了官方的合约上,在未来当你可以取出的时候,你就可以通过之前的助记词将这32个ETH和质押获利取出来。
启动验证程序
当你的ETH1.0和ETH2.0的节点都运行并同步好数据后,你就可以开始你的质押获利的过程了。
启动验证器
仍然是使用Prysm脚本程序,切换到包含Prysm的脚本的目录,然后输入命令:prysm.bat validator
启动验证器(Validator Client)就可以了。若一切正常,你会看到类型下面图像里的日志,每间隔一段时间,就会进行一次投票(Attestation)。
查看收益
打开你的浏览器,然后访问BeaconCha.in。这个网站是Beacon chain网络的区块浏览器,在这里你可以查询到所有的发生在Beacon chain上的信息。一旦你的质押成功,那么你可以在这里找到你的验证节点相关信息,以及你的唯一编号(Unique Index)。
要找到你的验证节点,首先你打开你的MetaMask钱包,然后把用于质押以太币的转账地址复制出来,然后再把这个地址粘贴到区块浏览器页面的最上面的输入框中,很快这个输入框会识别你输入的内容并且在弹出的下拉列表中显示出这个地址。
单击它就可以查询和这个地址相关的所有的质押记录。拉到这个页面的下方,可以看到最下面的列表中列出了与该地址相关的所有的质押记录,如果你只做了一次质押,这里应该只有一条记录,点击这条记录中的“Validator key”来访问你的验证节点页面。
你可以看到这是我的验证节点页面,在Overview页面中显示出了当前的收益情况,质押余额等信息。如果你的质押操作还没有满12小时,那么很大的概率,你的验证节点的状态是“Deposited”或“Pending”,这时候你需要保持你的验证节点在工作的状态,排队等待你的结点被激活。一旦验证节点被激活了,那么验证器会立即工作,并且进行线上投票,你也可以在这个页面中立即看到收益情况和验证器工作状态。
后记
这里基本的操作流程已经介绍完成了,可能后续我还会把一些常见的问题列出来,以供大家参考。若有什么问题也可以写信给我:mattxlee@gmail.com,我会整理大家的问题并更新到这里。