idiotbaka

PoC算法原理与Burstcoin区块链:被低估的共识算法尝试
诞生于2014年的Burstcoin是一次伟大的尝试,它解决了比特币工作量证明算法(以下简称PoW算法)下的能源消...
扫描右侧二维码阅读全文
07
2019/11

PoC算法原理与Burstcoin区块链:被低估的共识算法尝试

诞生于2014年的Burstcoin是一次伟大的尝试,它解决了比特币工作量证明算法(以下简称PoW算法)下的能源消耗问题。PoC通过改变现有证明思路,将需要的答案预先生成,实现了和PoW类似的证明方式,但是能源消耗却不及百分之一。在谈及PoC之前,需要先了解什么是PoW。

什么是比特币工作量证明(PoW算法)

如果你了解过比特币,那么能知道大概的比特币挖矿的PoW算法原理。PoW算法使用了sha256散列算法。在给定一个初始消息,通过一定算法,生成出256位的消息摘要(二进制)。
1.jpg
散列算法的计算结果具有不可预估和随机性,即使给定的初始文本非常相近,哪怕只是修改一个二进制位,最终生成结果的每一个二进制位都有50%的概率发生改变,这种加密算法属性被称为雪崩效应(avalanche effect),因此广泛用于密码学领域。

在比特币挖矿中,需要进行若干次sha256计算。区块给定一个难度目标(target)后,矿工计算出的sha256结果比目标小,就认为是找到答案的矿工,就可以获得该区块的打包权。因为sha256计算的结果只有计算后才可知,所以挖矿的过程就是在生成随机数,只有算的越多才越有可能找到正确答案。详细过程如下:

  1. 矿工将处理的交易打包进区块中,也就是所谓的记账,记账可以获得交易的手续费;
  2. 为了获得该区块的打包权限,必须需要进行散列算法(sha256)计算答案。矿工需要变更不同的随机数(nonce),来让答案符合目标;
  3. 最先算出答案的矿工将答案广播到比特币网络。网络校验答案正确,该区块以及记账的交易被打包,该矿工获得区块奖励和打包交易的手续费;
  4. 矿工开始打包和计算下一区块的答案。

为了防止彩虹表和同一个答案重复提交,比特币每个区块的答案都需要重新进行计算。计算的sha256规则是:钱包版本号+前一区块的hash值+merkle root(Merkle树的根)+utc时间戳+难度目标(target)+随机数(nonce)。
2.jpg
将这些所需计算的数据全部转为16进制,拼接后使用sha256计算哈希值,如果哈希值小于当前难度所需的target,将答案广播到全网,那么比特币网络就会认为该矿工做了足够的工作,该矿工也就获得了该区块的打包权限。

其中的随机数(nonce)是未知的,矿工需要不停的变动这个随机数,来让答案符合目标。这个数字的范围是0~2^32,也就是只需要计算2的32次方(43亿左右)就可以计算出全部答案。如果按照现在比特币矿机几十T的算力来看,不需要1秒的时间就会被算完,而时间戳是按照秒为单位的。

也就是说,在1秒内算完全部随机数(Nonce),可能也没有符合目标的答案。所以此时还需要改变区块coinbase交易中的附加消息,来让merkle root(Merkle树的根)也跟着一起变化,从而能够在1秒内寻找更多可能符合答案要求的随机数(nonce)。

PoW产生了哪些问题

可以看出,为了获得区块打包权,PoW下的挖矿需要24小时不停的计算答案。因为每个区块都需要重新计算,计算结果也就无法重复利用,也就带来了非常巨大的能源消耗问题。如今PoW挖矿,在不使用专业矿机的情况下已经无法参与。

Burst的PoC算法

Burstcoin使用了PoC算法解决了PoW的能源消耗问题,用硬盘代替了CPU。挖矿前,将答案预先生成在硬盘中,挖矿时,寻找硬盘中的答案即可。预先生成答案(又叫Plot)的过程也是在进行PoW计算,但是为了防止被PoW攻击(抵抗ASIC),所以需要比sha256更为复杂的算法,Burst使用的是shabal256算法。

Shabal256是Burstcoin使用的hash函数的名称。与类似sha256的算法相比,Shabal256是一种计算非常缓慢的散列算法,下图展示了不同平台下常见散列算法的表现。这也就导致在预先生成Plot文件时,会非常缓慢。而Burstcoin的每个区块锻造时间非常短,只有4分钟,所以无法通过实时计算shabal256来算出区块的答案。因此,它非常适合用于Burstcoin之类的容量证明硬币。
pIYBAF1WJcWAaOGxAADEYaqsEJY933.jpg
在生成Plot文件时,将生成称为Nonce(随机数)的东西。每个Nonce包含256KB的数据,都有其自己的编号,并且被分配到4096个不同的位置,这些位置被称为Scoop。每个Scoop存放了2个hash值。Nonce的范围是0-18446744073709551615。创建Nonce时,该数字也用作种子。因此,每一个Nonce的数据都可以是不同的,一个Plot文件中可以有很多Nonce。矿工可以使用这些Plot数据来计算Deadline。
Plottingnonce.png
Deadline可以理解为区块倒计时。因为Burstcoin的打包区块机制和比特币不太一样,比特币需要找到指定的答案小于目标难度(target)。Burstcoin的目标难度是为了动态调节全网矿工找到的Deadline数值的大小。矿工找到的Deadline和Target的比值作为最终Deadline,Target越小,Deadline的最终结果越大,也就越难以打包区块。

Deadline是一个秒数的数值。矿工找到一个Deadline后,提交给区块链,当上一区块距离当前所经过的时间(秒数)达到或超过了找到的Deadline,并且没有其他矿工提交过更小的Deadline,那么就认为该区块被该矿工所打包。Burst网络会动态调整难度,来让每个区块的Deadline平均在240秒(4分钟)。

生成一个Nonce

创建Nonce的第一步是创建一个种子。种子是一个16字节长的值,其中需要包含Account Id。Account Id和钱包对应,所以即使矿工使用同一个Nonce生成Plot文件,Plot文件最终也不会一样。Account Id和随机数拼接后,就是一个种子了。对该种子进行Shabal256计算,获取第一个hash。
PlottingStep1.png
产生的第一个hash是Nonce中的最后一个hash。也就是hash#8191。现在我们将产生的hash值(#8191)添加到下一个种子的开始位置,为计算下一次Shabal256(下一个hash值)服务。
Plottingstep2.png
现在生成了两个hash了,分别是hash#8191和hash#8190。这次,将hash#8190添加到上一个的种子种子的开始位置,再次进行Shabal256计算。
Plottingstep3.png
就这样重复计算完8192个hash的过程,就是在生成一个Nonce。在重复迭代超过128次之后,种子就会超过4096个字节。超过该字节数的情况下,只获取最后4096个字节作为种子。
Plottinglastgenerated.png
在创建8192个hash值之后,需要计算一个最终hash值。使用所有8192个hash值和前16个字节作为种子来进行最后一次Shabal256计算。
Plottingfinal.png
最终hash值分别对所有其他hash值进行异或(xor)计算。
Plottingxor.png
最后计算好的8192个hash值按照顺序,每两个为一组(scoop),就是一个256KB的Nonce。至此,一个Nonce计算并且生成完成,重复生成Nonce,就是在生成Plot。Plot可以理解为将硬盘制作成矿机的过程。

挖矿过程

在开始挖矿时,需要先在钱包中获取挖矿信息,通俗来说就是获取挖矿的任务。挖矿任务中包括签名(generation signature)、目标(Base Target)和下一区块高度(Height)。矿工(挖矿软件)将32位的签名和8位的块高组合作为种子,进行Shabal256计算,生成一个叫Generation hash的hash值。
Mining1.png
然后对该hash值进行取模运算,取模的数字是4096,也就是每个Nonce中Scoop的数量。取模后,将会获得一个4096以内的数字,这个数字就是答案所属Scoop。
Mining2.png
矿工需要在Plot文件的所有Nonce中找出答案所属的Scoop。将64位的Scoop数据和64位的签名(generation signature)组合,作为种子,进行Shabal256计算,将会得到Target。将Target除以目标(Base Target),结果的前8个字节就是区块倒计时(Deadline)。
Mining3.png
而找到最小的Deadline的过程,就是扫盘过程。将找到的最小Deadline广播到Burstcoin网络,在距离上一区块所经过的秒数到达该Deadline时,也没有其他矿工提交更小的Deadline,那么就获得了该区块的打包和锻造权。

PoC的优势和不足

PoC实现了将答案存储于硬盘中,并且可以重复利用,所以挖矿过程就是读取硬盘的过程。该过程消耗的能源及其的低。但也存在着不足,因为和IPFS协议不同,生成的数据除了为了证明容量,没有其他任何用途。但无论如何,Burstcoin提出的PoC容量证明,是一次伟大的尝试。但却没有得到像其他数字货币一样的待遇。和比特币一样,Burstcoin是PoC数字货币的创世货币,0预先挖掘,但在市场表现上却不及后来出现的BitcoinHD等PoC数字货币。

所以说,Burstcoin的PoC算法,是一个被严重低估的共识算法尝试。

参考文章:
[1] "Technical Information about Mining and Block Forging", https://burstwiki.org/en/technical-information-about-mining-and-block-forging/
[2] "Technical Information to create plot files", https://burstwiki.org/en/technical-information-to-create-plot-files/
[3] "PoC2 explained: a needed security upgrade", https://burstcoin.ist/2018/03/01/poc2-explained-a-needed-security-upgrade/
[4] Wikipedia: Shabal, https://en.wikipedia.org/wiki/Shabal
[5] "Shabal算法的优点和缺点解析 —— 电子发烧友", http://www.elecfans.com/blockchain/1053225.html

Last modification:December 4th, 2019 at 04:14 pm
本文采用 知识共享署名 4.0 国际许可协议进行许可
可自由转载、引用,但需署名作者且注明文章出处
If you think my article is useful to you, please feel free to appreciate

Leave a Comment

One comment

  1. biu

    baka姐姐好