浅谈存在证明共识机制
笔者最近看到一个项目关于容量存在证明的策略,提到以下几点:
1. 独一无二的随机数填充硬盘,确保每个矿工都是公平参与;
2. 占领磁盘,而不是保持硬盘空闲(避免扩容盘蹭收益);
3. 尽量减少硬盘转速对挖矿收益的影响(笔记本硬盘或者5400转硬盘依然友好)。
挖矿时的基本原理
为了便于描述,笔者在此用一个例子进行讲解。
整个区块链网络,是一个考试官,平均每4分钟开出一道题目。
矿工是应试的学生,每个人手头有一个答案库,答案库的大小取决于你参与挖矿的硬盘的大小。
每4分钟,考试官放出一道题目,所有矿工在自己的答案库里面搜索正确答案,并且把自己认为接近的答案提交给考试官,最接近正确答案的提交者,获得出块奖励。
基本上,学生提交的答案命中率,取决于你答案库的大小。答案库越大,得到高分的几率就越大,也更容易获得奖励。
问题在初见端倪。
如果想要更容易挖到矿,就需要更大的硬盘存储更多的答案,但基于人性,矿工只会去存更多的答案,不会愿意将磁盘空间贡献出来给别人使用。
这个明显不能够促进生态的正常运作。
方案修改
来对方案进行优化。
矿工贡献自己存储空间,用户将自己文件分片并生成 hash 列表,每个矿工都保存着所有 hash 列表,以及 hash 对应的文件。
创世块 hash 跟着项目启动诞生,每个块的诞生会往外扔一个 hash,这个 hash 主要是矿工地址和文件 hash 经过算法生成的。
共识机制有一个复杂度,复杂度决定了上一个块扔出的 hash 与文件 hash 之间的差是否能算挖矿成功。
这个复杂度是根据块的生成速度自动调节,长久块不生成,所有矿工将一致决定降低复杂度。如果在一段时间内块生成速度很快,同理将提升复杂度。挖到矿的矿工会将自己的地址和文件片 hash 一起写入新的区块并接入主链对外广播,其他矿工收到后会对其进行验证,验证通过将对新块抛出的 hash 再进行挖矿操作。
到这里只是存储挖矿部分,Hero Node 项目中运行的功能将包含多条公链的同步,文件的存储,数据的计算。
在 Hero Node 的挖矿过程中我们需要考虑到这些元素,所以做出一些设想。出题人将由公链出任,多条公链轮流出题,比如最新块诞生的瞬间题目开始,矿工将寻找与这个块偏差复杂度以内的文件片 hash,找到即对外广播,并写入主链。
如果矿工希望挖到更多的矿则需要更及时的同步公链,存更多的文件等,这些将促使矿工们提升矿机性能,提高磁盘空间,增加网络带宽。这个对促进 Hero Node 生态的良性运作大有裨益。