2009年,比特币的诞生奠定了PoW共识成为主流共识的基调。其后,这片由PoW开拓的加密数字货币的世界也逐渐演变出更多共识机制,来试图填补PoW机制所带来的不足。
基于此前提,2014年,PoC的理论正如比特币一般在论坛中匿名诞生,更加巧妙的是,它也正契合比特币的初心,避免了能源浪费,使得人人挖矿成为了可能。随着开发进展的推进,PoC也经历了由PoC到PoC2再到PoC2+的进化,PoC3则成为了大部分PoC项目的发展目标,具有重大意义。
PoW与PoC
PoW算法主要依靠矿机性能、电力来进行挖矿。对于挖矿设备有较高的要求,从原本的CPU逐渐更替到了ASIC,矿机的不同型号更新迭代越来越快,需要更新购买,造成了挖矿的高门槛、高投入。因此矿场、矿霸也就此诞生,比特币的算力分布变得中心化。况且机器淘汰后无二次利用的可能以及维持挖矿电力消耗极大都属于严重的资源浪费问题。
PoC算法则依赖于挖矿设备的存储空间,提高挖矿效率的方法变成了增加挖矿设备的存储容量,同时对存储设备的读写速度要求不高,与设备本身的计算性能无关。
在挖矿过程中,一旦所需的数据生成完毕,则不需要多余的计算过程,因此免去了大量计算资源及电力能源。基于以上特点,挖矿的门槛被大大降低。因此,PoC是一个人人可参与挖矿、清洁、高效的算法。
PoC及PoC2
2014年,一篇名为《Efficient HDD Mining》的帖子发布在了BitcoinTalk,其中介绍了POC容量证明的背景和理念,并且进行了开源,第一个采用PoC机制的公链Burstcoin诞生。
2018年BurstCoin 2.2.0版本发布,命名为Pre-Dymaxion,主链硬分叉,扩大区块大小和修改交易结构,同时将原始版本的PoC算法升级到PoC2,这便是后来BHD及众多PoC项目所采用的挖矿算法。
2.2.0版本升级主要是调整了硬盘内Hash存储的顺序和格式,并且完全向前兼容PoC1,主要用来防范MIT论文中提到的挖矿过程中存在的ASIC攻击。经过该升级,tps提高了80倍,同时优化之后的能源利用效率达到了比特币的5000倍左右。
了解PoC算法需要清楚两点,一,其核心是哈希函数Shabal,二,算法需要生成大量的缓存数据——Plot文件。具体计算方式如下:
1)选择一个8字节的随机数Nonce,加上矿工的Account ID一起进行Shabal256计算,得到一个Hash结果。(Account ID从私钥推倒出来的,用来标识身份。)哈希结果被称为Hash #8191。
2)把第一步得到的Hash #8191添加到Account ID和Nonce前面,再进行一次Shabal256计算,得到Hash #8190。
3)以后的计算中,每次都把得到的Hash值添加到数据的前面,当数据的长度超过4096字节后,每次只取最近的4096字节数据进行哈希。
eg: 计算Hash #7000的时候,其实只会取Hash #7001-7128这128个哈希值进行计算。因为每个哈希值的长度是32字节,128个正好是4096字节。
4)当完成了8192次循环后,矿工得到8192个哈希值,然后需要对所有这些数据再进行一次Shabal256计算,得到一个Final Hash。
5)把之前的8192个哈希值逐个和Final Hash进行异或运算,得到的8192个异或后的哈希值保存下来,这些数据就是未来挖矿时需要搜索的范围。这8192个哈希值会两两一组,称为一个Scoop,一个Scoop是挖矿使用的最小数据单位,一个Scoop是64字节。
对每个矿工来说,Account ID是固定的,上面生成的8192个Hash值其实只和Nonce有关,Nonce是8字节的,取值范围在0-18446744073709551615,这是个非常大的数字。矿工只会尽可能多地缓存Nonce和对应的4096个Scoop来提高自己找到解的概率。
简单而言,PoC是通过既定的算法产生众多数量的Hash,然后将Hash存入硬盘空间中,矿工在竞争区块的记账权时,只需要通过扫描硬盘中存储的Hash即可,从概率上确保持有大容量硬盘空间的矿工出块概率大于持有硬盘容量较小的矿工。
PoC2+
PoC2+为Lava于2020年提出的新标准,在原有的PoC2基础上进行改进,解决PoC2存在的碰撞多挖问题,真正意义上首次实现算力确权。
Lava更改了P盘所需要的种子结果,其组成为“8字节nonce number + 20字节矿工公钥 + 4字节项目路径”。种子除去了旧有的Account ID,并增添了项目路径的字节,不同的PoC项目可实现特有标记,从而使得Plot文件达到最大效果的差异化。接着如上文所提到的,进行一系列Hash计算,得到相应的Scoop。
原有算法中的Account ID本意是为了避免几个人共用同一套缓存数据来作弊,和增加搜索空间的范围,然而实际上,由于其本身也不过是十几位长度的数字字符串,相对于地址是一种有损压缩,因此存在碰撞的可能,以此引发项目多挖等混乱情况,对于各类PoC项目也是极不公平的存在。
因此Lava通过舍弃Account ID直接添加矿工公钥将算力与矿工绑定,实现了算力、矿工、项目的三方间相互确认,极大减小了碰撞的概率。
PoC3
PoC3则是精益求精,在原有绿色清洁的基础上更上一层楼。其主要目的是将PoC挖矿过程中存储的无意义的Hash,转变为有意义的资源,如文本,电影,压缩包等等,完成硬盘空间的有意义的利用。
它仍在PoC2的基础上构建,但能够储存两用数据(plot数据和非plot数据)。这样矿工的硬盘存储将会成为有用信息的载体,由于硬盘挖矿的去中心化性质,更有可能成为一个纳入全球网络的存储系统。
目前,Lava的PoC3规划预计在2021年实现。让我们共同拭目以待!