*本系列文章是链家博客核心区块链研究小组输出的高质量区块链研究文章。它旨在研究和分享区块链底层技术的原理分析和新技术趋势,拒绝讨论任何令牌,市场和投资建议。上一篇文章《深入区块链共识(三)》以BurstCoin为例,详细介绍了PoC共识算法在工程中的实现,主要集中在plot文件内容的生成,与Plot的详细交互以及计算流程。
在本文中,我们将提取PoC共识过程中的几个核心问题,并比较Stefan Dziembowski的模型,讨论其与Burst的模型的异同,并介绍PoC的基本文件结构和挖掘过程,可以帮助我们更好地理解PoC算法。
如何解决基于截止期的组块过程中分布式节点的时间同步问题?
区块链系统作为一种特殊类型的分布式系统,继承了分布式系统的特点和问题。熟悉分布式系统的读者可能知道,在设计分布式系统时,必须考虑到分布式系统的一个重要特性,那就是缺少全局时钟,即分布式系统中不存在唯一的全局时钟。
在BurstCoin系统中,不同的矿工向不同的节点广播不同期限的块,不同的节点对当前时钟有不同的理解。节点如何确定当前块是否满足广播条件?在网络中收到同步块后,如何验证截止时间是否合法?
要解决时钟不同、步调不一致造成的不同步问题,在分布式系统中,一般需要尽量形成一个逻辑“时钟”,让每个人都能认出这个“时钟”而不是自己的。
这个逻辑时钟的第一个实现是Lamport时间戳。虽然Lamport时间戳的学术价值大于实际价值,并没有被系统实际使用,但是,在其中出入的向量时钟,却被AWS S3、DynamoDB、Riak等系统广泛使用,以保证同一对象的因果关系。
矢量时钟算法严重依赖于节点间的信任,因此只适用于可靠的分布式环境。然而,作为一个运行在节点互不信任的P2P网络上的区块链系统,这是无法保证的。那么,比特币这样的分布式系统是如何确定时间(因果)的呢?在中本聪比特币的设计中,PoW的产物block被巧妙地应用为系统的逻辑时间(引用比特币白皮书):
我们提出的解决方案从时间戳服务器开始。时间戳服务器的工作方式是获取一组要打上时间戳的项目的散列,并广泛地公布该散列,例如在报纸或《新闻组邮报》上公布。【2】【3】【4】【5】时间戳证明数据当时肯定是存在的,显然是为了进入hash。每个时间戳的散列中都包含前一个时间戳,形成了一个链,每个额外的时间戳都会加强前一个时间戳。
每个块包含一个Unix时间戳。除了作为块散列的变化源之外,它们还使得对手更难以操纵区块链。如果一个时间戳大于前11个块的中值timestamp,并且小于网络调整时间2小时,则该时间戳被视为有效。“网络调整时间”是连接到您的所有节点返回的时间戳的中间值。因此,块时间戳并不精确,也不需要精确。封锁时间精确到一两个小时以内。每当一个节点连接到另一个节点时,它都会从该节点获取一个UTC时间戳,并存储它相对于节点本地UTC的偏移量。网络调整时间则是节点本地UTC加上所有连接节点的中间偏移量。但是,网络时间的调整不会超过本地系统时间的70分钟。比特币使用无符号整数作为时间戳,因此2038年的问题又延迟了68年。
BurstCoin也在一定程度上继承了比特币的核心思想。时间戳以逻辑时间顺序存在,而不是真正准确的时间。
一般它和真正的UTC时间有1-2个小时的误差。同时,BurstCoin的特殊性在于,一个区块链接成功与否,与其计算的截止日期直接相关。因此,我们可以在BurstCoin源代码中找到以下验证过程:
该过程将当前块截止时间的值与当前块时间戳和其前任时间戳之间的差值进行比较。其中时间戳是块高度为0的第一块的时间偏移,允许一定程度的误差。在误差允许的范围内,全球时钟的存在没有必要,区块链系统在“计时”上已经形成共识。
验证最后期限的合法性
当我开始阅读BurstCoin源代码时,我很疑惑,块数据库中没有使用完整的勺子,也不涉及Merkle的操作。如何检查一个块的截止日期的合法性?
还记得在系列的第二篇文章中,我们讨论过在Stefan Dziembowski提出的PoC系统中,使用Merkle树来简化验证过程,BurstCoin中没有关于Merkle树的计算。
笔者在通读了BurstCoin源代码后,发现BurstCoin中采用了一种更巧妙的计算方法,来检查根据PoC consensus中存储的内容计算出来的共识参数deadline。下面我们来解释一下:
当一个节点接收到P2P网络中的一个历史块或一个挖掘器广播的一个cast块时,它必须首先对该块进行预校验操作。这是调用者提交的参数,scoopData始终为null,因为在burstCoin使用的数据存储中,scoopData不存储在Block的字段中。那如何完成验证呢?答案就在calculateHit方法中。BurstCoin将其节点的一些函数方法放在burstKit的一个单独的jar包中。找到它的calculateHit方法后,我们发现它调用了MiningPlot的初始化方法。在MiningPlot方法中,我们可以看到,通过两个参数nonce Id和accountId来回忆Nonce文件的生成算法,就可以知道通过Nonce Id和accountId完全可以生成两个Nonce文件。因此,在BurstCoin中,矿工不需要向节点发送大小为256KB的Nonce文件,只需要在参与分块时向wallet节点发送分块内容和这两个参数,wallet就可以计算出整个Nonce值。同时,整个网络中的每个节点在接收到每个块后,将通过计算这个随机数来计算其截止时间。了解BurstCoin中Deadline的合法性验证过程,并与Stefan Dziembowski的协议过程进行比较。在BurstCoin中,因为没有Merkle树的计算,所以BurstCoin的存储文件F的初始化是完全非交互的。
挖掘者只需要遵循协议,生成一个特定图结构的Nonce文件。(在Burst中,也就是Nonce文件的算法方法可以批量生成Nonce。实际上,Nonce文件的计算过程可以完全符合Stefan Dziembowski的图模型,其中每个Hash都是Nonce图结构中的W值。BurstCoin中使用的图结构与Stefan Dziembowski的不完全相同,但它也具有复杂的前件-后继件和连接关系。理论证明不是突发给出的,整体证明思路差不多。感兴趣的读者可以在这里探索。)
这无疑是一个非常重要的优化,因为在分布式系统中,复杂的交互往往会带来协议的复杂性,而由于网络中节点数量众多,交互的复杂性往往会因为P2P网络中的网络延迟和网络波动而难以实现。
Stefan Dziembowski在验证阶段使用了Merkle的结构,使得验证的效率极高,但在一个真实的网络量巨大的分布式系统中,交互步骤越少,协议越简单,往往意味着更高的可靠性。
在这一点上,BurstCoin选择了节点在验证阶段需要额外的8192次哈希计算,这将带来初始阶段完全非交互的文件初始化和验证阶段更小的网络数据传输量(只需要向节点发送包括nonce Id和accountId在内的少数固定参数),这对于区块链系统本身来说无疑是更合适的选择。
另一方面,Stefan Dziembowski提出的相对复杂的初始化过程更适用于网络条件相对不同的联盟链系统和授权区块链系统,以及一些网络条件相对较好的对等系统。
BurstCoin如何处理分叉?
在战俘共识的区块链体系中,处理分歧的逻辑非常简单明了。所有诚实的节点都应该认为当前网络中最长的链就是主链。但在PoC共识中,事情并不那么明显。相对于十分钟的比特币分块时间,大部分时间都花在矿工计算当前分块的nonce上,用于消耗大量的CPU时间。
BurstCoin挖矿本身并不需要密集的CPU运算时间,所以挖矿者总是可以在30秒内遍历磁盘,而计算出来的截止时间才是对区块时间的真正控制,所以主链的判断不能只依据最长的链。
在比特币共识中,链的长度反映了当前链投入的CPU计算量,而在Burst中,反映硬盘空间占用量的指标是累计了多少个有效截止期。在所有块高增加一的竞争者中,生产截止时间较小的块的矿工在概率上使用了更多的存储空间,因此他们获得了施放块的权利。
同样,如果考虑分叉场景,Burst如何判断哪条链是主链?诚实的矿工如何选择两个分支的子链?
在实际的Burstcoin系统中,引入了累积困难度的概念。
其计算公式如下:
同时,需要为每个块重新计算baseTarget:
在BurstCoin中,所有诚实的节点都应该认为当前累积困难的最大链是PoC共识的主链。
其实这个结论理解起来并不复杂。
观察baseTarget的计算过程,我们知道当前块的截止时间会影响下一个块的挖掘难度,即当前截止时间越小,下一个块的baseTarget就越小,当前块的附加难度就越大,所以累计难度指数反映了每个子链中所有块的难度之和。
与PoW类似,链的长度本质上代表了链中投入的计算资源量。然而,在PoC中,累积难度指数直观地反映了当前链中使用的存储资源量。
通过对这三个问题的详细讨论,结合源代码分析,相信读者可以对PoC共识的内容、思路和算法细节有一个透彻、详细的了解。
PoC系列文章到本章结束。后续,我们将讨论更多区块链领域的技术话题。对于具体领域感兴趣的,也欢迎评论和解释。
博科技区块链系列文章,致力于分享区块链领域底层技术知识,力求提供原创、深入的技术内容。
链博科技在技术层面探索区块链创新的同时,也从产业整合的角度进行深度思考,推动区块链落地项目建设,为企业提供专业、易用、全栈的区块链改革服务。
欢迎关注我们之前的文章,也欢迎在文章评论区留下你的看法和想法。
–
基准源
[1.]Spacemint:一种基于空间证据的加密货币BHD白皮书[3。]爆裂硬币介绍严重[4。]空间的证明[5。爆发主义者.]堆叠扩展器的空间证明[7。爆裂的Dymaxion[8 .]突发论坛.]采矿教程[10。辛西娅德沃克莫尼瑙尔,《通过处理或打击垃圾邮件定价》[11。朱塞佩阿坦尼斯、兰德尔c伯恩斯、礼萨科特莫拉、约瑟夫海岭、利基斯纳、扎卡里新泽西州彼得森和道恩宋。在不受信任的存储中拥有可证明的数据。彭宁萨布丽娜德卡皮塔尼迪维梅尔卡蒂和保罗塞弗森编辑,美国计算机学会CCS 07,第598-609页。美国计算机学会出版社,2007年10月[12。凯文d鲍尔斯、阿里朱尔斯和艾莉娜奥普瑞。可检索性的证明:理论与实现。在CCSW,第43-54页,2009年[13。尼古拉卡尔韦拉斯和阿盖洛斯基亚利亚斯。安全擦除的有效证明。《网络安全与密码学——第九届国际会议,SCN 2014,意大利阿马尔菲,2014年9月3-5日》。会议录,第520-537页,2014年][14。Dziembowski,s .Faust,s .Kolmogorov,v .Pietrzak,K. (2015).空间的证明。计算机科学讲义(包括人工智能的子系列讲义和生物信息学的讲义),9216(616160),585605。[15]比特币白皮书(作者:链博科技,内容来自链得得内容开放平台\”得得号\”;本文仅代表作者观点,不代表链得得官方立场)