下周必关注|Ethena拟于4月
Arweave第17版白皮书解读(四):存储完整数据副本才是王道
作者:Gerry Wang @ Arweave Oasis,原文首发于 @ArweaveOasis 推特
在解读(三)文中,我们通过数学推导对 #SPoRes 的可行性进行了论证。文中的 Bob 与 Alice 一起参与了这场证明游戏。那在 #Arweave 挖矿中,协议部署了这个 SPoRes 游戏的修改版本。在挖矿过程中,协议充当了 Bob 的角色,而网络中的所有矿工共同扮演 Alice 的角色。SPoRes 游戏的每个有效证明都用于创建 Arweave 的下一个区块。具体说来,Arweave 区块的产生与以下参数相关:
其中:
BI = Arweave 网络的区块索引 Block Index;
800*n_p = 每个检查点每个分区最多解锁 800 个哈希次数,n_p 是矿工存储的大小为 3.6 TB 的分区的数量,两者相乘是该矿工每秒最大可以尝试的哈希运算次数。
d = 网络的难度。
一个成功有效的证明是那些大于难度值的证明,而这个难度值会随时间变化而被调整,以确保平均每 120 秒挖出一个区块。如果区块 i 与区块(i+10)之间的时间差为 t ,那么从旧难度 d_i 到新难度 d_{i+10} 的调整如下计算:
其中:
公式注解:从上面两个公式中可以看出, 网络难度的调整主要靠参数 r,而 r 意味着实际的区块产生所需要的时间相对于系统期望的 120 秒一个区块的标准时间的偏移参数。
新计算的难度决定了基于每个生成的 SPoA 证明,挖掘区块成功的概率,具体如下:
公式注解:经过以上推导可以得到新难度下的挖掘成功概率是旧难度下成功概率乘以参数 r。
同样,VDF 的难度也会重新计算,目的是为了保持检查点周期在时间上能够每秒发生一次。
完整副本的激励机制
Arweave 通过 SPoRes 机制来生成每个区块是基于这样一个假设:
在激励下,无论是个体矿工还是群体合作矿工,都会以维护完整数据副本作为挖矿的最佳策略来执行。
在先前介绍的 SPoRes 游戏中,存储数据集的同一部分的两个副本所释放的 SPoA 哈希数量与存储整个数据集的完整副本是相同的,这就给矿工留下了投机行为的可能。于是 Arweave 在实际部署这套机制的时候,对其作了一些修改,协议通过将每秒解锁的 SPoA 挑战数量分成两部分:
一部分在矿工存储的分区中指定一个分区来释放一定数量的 SPoA 挑战;
另一部分则是在 Arweave 所有数据分区中随机指定一个分区来释放 SPoA 挑战,如果矿工没有存储这个分区的副本,则会失去这一部分的挑战数量。
这里也许你会觉得有些疑惑,SPoA 与 SPoRes 之间究竟是什么关系。共识机制是 SPoRes,为什么释放的却是 SPoA 的挑战?其实它们之间是一种从属的关系。SPoRes 是这个共识机制的总称,其中包含了需要矿工做的一系列 SPoA 证明挑战。
为了理解这一点,我们将检查前一节中描述的 VDF 是如何被用来解锁 SPoA 挑战的。
以上代码详细表述了如何通过 VDF(加密时钟)来解锁存储分区中由一定 SPoA 数量组成的回溯范围的过程。
大约每秒钟,VDF 哈希链会输出一个检查点(Check);
这个检查点 Check 将与挖矿地址(addr),分区索引(index(p)),和原始 VDF 种子(seed)一起用 RandomX 算法计算出一个哈希值 H0,该哈希值是一个 256 位的数字;
C1 是回溯偏移量,它是由 H0 除以分区的大小 size(p) 而产生一个余数得来,它将是第一个回溯范围的起始偏移量;
从这个起始偏移量开始的连续 100 MB 范围内的 400 个 256 KB 的数据块,就是被解锁出来的第一回溯范围 SPoA 挑战。
C2 是第二回溯范围的起始偏移量,它是由 H0 除以所有分区大小之和而产生的余数得来的,它同样也解锁了第二回溯范围的 400 个 SPoA 挑战。
这些挑战的约束是第二范围内的 SPoA 挑战需要在第一个范围的对应位置也有 SPoA 挑战。