*本系列文章,是链博核心区块链研究小组输出的高质量区块链研究性文章,旨在研究和分享底层区块链技术的原理解析,新技术趋势,拒绝讨论任何token,行情和投资建议。
上一篇文章中,我们探讨了 [14]从数学角度对PoC的形式化模型和证明的讨论,Burst则是在工程角度实际运行的PoC完备系统。
两者在理念上是完全一致的,但Burst在实现细节上却与该论文提出的模型和交互不完全相同。
本篇文章我们会从Plot文件和出块流程两方面讨论PoC的算法细节,同时末尾结合 的模型讨论Burst是否可以纳入其框架之下。
PoC硬盘利用与Plot文件
Plot文件即每一个参与出块的节点或是矿工需要在硬盘中存储的文件,其内容由大量特定结构的Hash值组成。Plot文件包含以下的几个基本概念:
Nonce的生成流程如下:
1.Nonce文件的种子由 Id(即网络中的用户地址或者用户Id) 与Nonce Id(即nonce编号)组成区块链挖矿,经过第一次Hash,生成Hash #8191,即Non中的编号为8191的Hash值。
2.#值由之前一个#值与 Id,Nonce Id 生成。
3.#值由之前两个#,#值与 Id, 生成,依次类推,每下个Hash值,都有其之前计算的所有Hash值与,Nonce Id 生成。如果过程中超过了4096个bytes,则取最近生成的作为下一次的Hash函数输入参数。
4.最终Hash的生成,由Hash#0-8191与 Id,Nonce Id共同生成,之后对8192个Hash值都分别对其进行异或操作,作为每个Hash最终的值。
5.得到了8192个Hash值后,Scoop文件的结构如下图所示:
至此,我们生成了1个完整的Nonce文件,一个Nonce文件包含8192个Hash值,占用空间256KB。
这同时也是矿工参与挖矿的最低门槛,即只要有大于等于1个Nonce文件即可参与挖矿。
按照目前全网算力估计,3PB大约占全网算力的百分之一,那么需要多少个Nonce?经过简单计算我们得知,大约需要117亿左右个这样的Nonce。
而一般的家用主机以500G为例,仅可以存储200万个Nonce。
故在的世界里,低算力基本也都是以参与矿池的形式参与挖矿的过程。
PoC的共识与出块
上一章节我们介绍了Plot文件与其基本结构,本章节我们将介绍PoC作为区块链共识,其完整的挖矿流程是怎样的,其同时探讨几个共识中的核心问题,最后与 的理论相结合,探讨两套体系的关联和异同。
上图是一个完整的PoC共识出块流程,下面我们将结合图示分别介绍其每一个步骤。
步骤1-2,的生成:类似于中的概念,用于形成前后相继的区块链结构。
中,由于该Hash同时参与共识过程中参数的建立区块链挖矿,其将概念拆分为两个:
由上一个区块中的与上个区块的出块者做Hash得出,由与快高信息做Hash得出。通过这样两次Hash计算,即将当前区块前的所有区块形成了不可修改历史区块的链式结构,同时也得出了PoC共识中的重要参数。
步骤3-4. Scoop 的计算:钱包生成后,将此值发送给矿工,矿工由此计算本次出块需要的Scoop 。 4096 即是Scoop 的值。该Scoop 用来定义本次出块中,全网的所有矿工应当查询自己拥有的所有Nonce中的Scoop的数据。结合上一章节内容我们可以得知,也即其拥有的某个Scoop中两个Hash的值。
步骤5,计算,:首先,矿工需要遍历磁盘,找到自己拥有的所有nonce中对应于上一步计算出的Scoop 的两个hash,记为,使表达式 =Hash(, )的值最小。之后利用该最小值,计算/得出。类似中的参数,控制全网挖矿难度,而决定了了该矿工产生的区块在全网中是否成功得到该区块铸造权。
上述每个参数:
步骤6-9,打包交易,铸造区块,广播区块。此过程与所有区块链系统类似。值得一提的是,的区块负载大小限制为176KB,平均可以承载19k个左右的交易,不难得出其理论tps上限控制在80左右,与和Eth等PoW类型的区块链系统相比,其性能量级也是相类似的。
综上所述,本次我们以为例,详细介绍工程中的PoC共识算法的实现,主要集中在Plot文件内容的生成,与出块的详细交互和计算流程。
在下一篇文章中,我们提取几个PoC共识过程的核心问题,帮助读者更好地理解PoC算法,同时结合 的模型讨论Burst是否可以纳入其框架之下和一些思考的分享,敬请期待。
链博科技区块链系列文章,致力于分享区块链领域的底层技术知识,努力提供原创,有深度的技术内容。
从技术角度探索区块链创新的同时,链博科技也从产业结合角度深入思考,推进区块链落地项目的建设,为企业提供专业、易用、全栈的区块链链改服务。
评论留言