《精通门罗币》:网络、节点与矿工

原著 | Serhack 翻译 | 筋斗云_头等仓 第四章 门罗币网络在这一章,你将接触区块链科技的核心概念,并了解门罗矿工是如何维护账本的安全。我们会先带你了解区块的构造,以及他们链接成不可篡改的链的方式,以及矿工是如何使用工作量证明以对合意的区块链版本达成共识。关于矿工,我们将讨论新币的产生和在生态中的发行方式。最后,我们会涉猎一些加密学概念(哈希值 [hash] 与随机数 [nonce])以更深入地了解挖矿的过程。
头等仓APP下载

原著 | Serhack
翻译 | 筋斗云_头等仓

第四章 门罗币网络

在这一章,你将接触区块链科技的核心概念,并了解门罗矿工是如何维护账本的安全。我们会先带你了解区块的构造,以及他们链接成不可篡改的链的方式,以及矿工是如何使用工作量证明以对合意的区块链版本达成共识。关于矿工,我们将讨论新币的产生和在生态中的发行方式。最后,我们会涉猎一些加密学概念(哈希值 [hash] 与随机数 [nonce])以更深入地了解挖矿的过程。

前面的章节讲述了系统构建交易的方式。概括来说,你的钱包发起了一条消息,指示系统将你的一个输出移交给他人。在你的钱包使用你的私钥对消息进行签名以授权该消息之前,消息中的敏感信息(发送者、接收者、金额)在密码学上已经被隐藏起来。

在这一章中,你将习得交易消息是如何被处理以发起实际的转账。当你的钱包广播一条消息的时候,门罗币网络会暂时将它存储在待处理的交易系列表中,也就是我们说的记忆池(memoery pool)。矿工们从记忆池中收集待确认的交易,并将它们打包到区块(blocks)。下图是一个区块的简易表示:

《精通门罗币》:网络、节点与矿工

图4.1:每一个序列数字化的区块都包含随机数和指向上一个区块哈希值的参考值。

每一个区块都包含一组交易,一个指向上一个区块的加密学链接(哈希值),以及一个供矿工来生成(include)以使区块完整的特殊数值(随机数)。

如果你想要了解哈希值和随机数的工作原理,这一章末尾将提供易读的讲解和示例(如果你对加密学真的非常感兴趣,那么你可以直接先跳到本章最后一部分)。你只需要了解以下两个概念,便可以理解这些技术是如何保障区块链的安全的:

1. 哈希值是一项安全措施,以保障每一个情况都链接至未经篡改的上一个区块。如果攻击者想要篡改账本的任意一处,即使是极其细微的改动,每一个区块的哈希值都将发出警报,使这种尝试昭然于众。

2. 随机数是一个补足区块的特殊字符串,并将区块标记为就绪,以加入区块链。要想找到定型和封装区块所需的随机数,是计算上的一个巨大难题。矿工付出大多数的时间和精力来搜寻有效的随机数。随机数无法提前计算,必须等待新区块出现才可以开始搜寻工作。随机数在数学上没有太多意义,只是一次性的,包含随机字符的字符串。

4.2 节点是网络的主干

4.2.1 节点在网络里中继数据

之前我们提及“门罗币网络”的时候,都对它的细节一笔带过。你的交易是如何在这个星云状的网络里传达给矿工和其它用户的?分散在这个星球上的数以千计的门罗节点互联成网,互通信息。

这些点对点网络中的节点,为门罗用户提供高效弹性化的通信。运行节点无需特殊的设备或技能,你只需下载门罗https://web.getmonero.org/downloads/ 和安装门罗软件即可(过程非常方便,比读这本书快多了)。

《精通门罗币》:网络、节点与矿工

图4.2:门罗币使用分布式点对点网络,该网络由自愿加入和共享数据的设备组成。保存完整的区块链副本的节点便是这个网络的主干。因为运行节点需要大量的硬盘空间,所以有些设备(特别是移动钱包)只能选择连接至远程节点来获取信息和广播交易。

在门罗的点对点网络中,不存在任何“特殊”或“超级”节点的概念;所有节点都是平等的,平等地分享资源,平等地劳作协同。节点可以运行在各式各样的计算设备上:笔记本,台式机,服务器甚至是虚拟机。

4.2.2 节点保存区块链

要启动一个新节点,必须下载完整的区块链并验证加密学链接,如哈希值和随机数。初始化同步过程可能需要数小时,因为节点需要在本地建立自己的区块链副本,同时确认每一笔交易和每一个区块的有效性。门罗节点不会只从单一的中心化源头下载区块,而是接收多个同伴传播过来的信息。节点间无需辨别身份和信任,因为数据的有效性是建立在加密学上的。

所有门罗钱包软件(如GUI、手机钱包等)必须获得访问区块链副本的权限,否则无法完成诸如检索历史交易记录,计算资产余额和发起交易等任务。没有连接至已同步好的节点的钱包无法发起交易,因为钱包需要找到并计算所有相关的未花费输出。然而,不管你有没有连接至已同步好的节点,你都可以接收门罗币(只是你需要钱包下载和验证那个区块后,才会将收款显示在你的资产余额中)。

4.2.3 “本地节点" vs "远程节点“

运行本地节点(local node)意味着你需要在本地储存和验证整个区块链,以保证你的钱包可以和你自己的账本副本交互。在这种配置情况下,你的钱包只与你个人的区块链账本交互。运行本地节点需要较多的硬盘空间 (截止写稿时,大约需要60GB),这不适用于智能手机等设备。

好在钱包还可以连接至远程节点(remote node)。这同时也意味着你的钱包会连接至他人的节点,并请求获取关于你的输出的信息。鉴于轻应用的特性,大部分门罗的移动端钱包都默认设置为连接远程节点。门罗GUI和CLI钱包都可以设置为本地节点或连接远程节点。

使用远程节点没有多少安全上的风险;你的种子密语和密钥并不会泄露出去,远程节点的运营者也无法控制你的资产或破解任何被环形机密交易、隐蔽地址等门罗技术保护的信息。

不过使用远程节点需要在一些小问题上做让步,因为节点运营者会知晓你广播交易和连接更新的时间和设备的IP地址。即将到来的Korvri隐私技术将显著降低这方面的风险。如果你使用自己的本地节点,你的钱包只用扫描你自己的区块链账本里的历史交易,而不会依赖第三方去检索这些信息。

4.3 矿工生成区块

4.3.1 矿工在最长链上添加区块

矿工在记忆池中收集待确认的交易,通过检查其密码学证明和签名的有效性,来验证其交易真实性,并检查密钥镜像是否被花费过(回顾3.2.3 环形签名来理解这么做的重要性)。

为了准备一个区块,矿工需要起草一份希望打包进区块的交易列表,以及上一个区块的哈希值以作为密码学上的链接。最后,矿工投入到搜寻补足区块所需的随机数的劳动中。

门罗网路中时时都有数以千计的矿工,各自(或组成矿池)来寻找补足当前区块的随机数。一旦矿工或矿池找到了定型当前区块的随机数,他们将向网络中的其他人公布自己准备的区块版本。其它矿工和节点收到这个完整的区块后,将其添加进自身的区块链副本中,这时候,区块高度上升"1"。已被这个新区块打包的交易将从记忆池中移除,其它矿工放弃在这区块上所作的工作,投身至下一个区块周期中。

4.3.2 高难度的工作保证稳定性和公平性

门罗生态遍布全球,网络延迟导致的无法预测的广播中继延期,可能使另个矿工在同一时间同一高度各自补足好一个区块,这时区块链出现短暂的分裂。假设一个南美洲的矿工率先完成一个区块,欧洲的另一个矿工此时尚未收到来自南美洲的这条广播,且正好完成了自己的区块。在这种情况下,西半球和东半球可能暂时使用的是不同的区块链。在很短的一段时间内,两个略微不同的门罗账本在互相竞争中(差异取决于矿工从记忆池中收集的交易不同)。有人可能会觉得这是灾难性的事情。

《精通门罗币》:网络、节点与矿工

《精通门罗币》:网络、节点与矿工

图4.3:矿工相互竞争,给链添加新的区块。上图中,区块链的高度为"3",所有的矿工都在努力完成区块"4"。下图中,中间的矿工率先完成他的区块并将其加在了区块链上,所有的矿工便转向寻找区块"5"的随机数了。

实际上,可以执行一个简单的原则来优雅地解决这个问题:所有的矿工必须统一在最长链上继续下一个区块的开采工作。这是门罗去中心化共识协议的核心之一,它将使门罗网络从以外的分裂中快速恢复成一条链。其原理并不是尝试直接修复差异化的区块,而是让矿工继续竞争下一个区块。

几分钟过后,将会有一个矿工开采出区块并添加至链上,这条链也就变成了最长的链,所有的矿工和节点迅速同步其副本,并放弃前一个竞争区块,使之成为孤块(orphaned block)。孤块中的交易返回到主链的记忆池中,会被打包进之后的区块。简单地执行最长链原则,区块链网络的任何分裂都将化解,并在唯一通用的账本上达成共识。

未完待续(历史连载在app内可免费阅读)
希望你喜欢这段门罗之旅。

本文由 区块链资讯平台头等仓 作者:筋斗云 发表,其版权均为 区块链资讯平台头等仓 所有,文章内容系作者个人观点,不代表 区块链资讯平台头等仓 对观点赞同或支持。如需转载,请注明文章来源。
头等仓APP下载

发表评论