Arweave,文明火种的未来守护者

Arweave是个去中心化存储协议。其最大的创新在于设计了一套不同于中本聪结构的链结构,在保证去中心化的前提下还能实现“一次性付费,永久存储“的目标。每次提到Arweave,人们免不了都会提起Filecoin,但是实际上二者的设计思路和解决的问题有很大差异。所以,我们一起来看下,Arweave的特点是什么,和Filecoin有哪些不同。

Arweave的特点

  • 首先首先,需要知道的是Arweave本身的结构在他们官方来讲不属于区块“链”,而是区块“网”。即blockweave. 也就是说,其整个结构并不是像普通区块链账本一样是one by one,一个区块链只和上一个区块链有链接,而是每个区块需要链接两个区块:一个是上一个新生成的区块,而另一个则是Recall Block
  • 同时,它采用了一个POW的升级算法,POA(proof of access),一种和它的recall block结构相关的共识算法来确保整个协议的安全性以及对于提升数据存储的完整性,并且采用了博弈论中的“以牙还牙”的方式来确保节点的活跃性和去中心化。同时,这个以牙还牙策略还是其代币经济体系中不可缺少的一环。这样做的好处还在于,整个blockweave没有全节点和轻节点之分,大家都一样,原因后面来讲。而且对于新加入的节点,也不再要求同步所有区块的信息,而只是同步前一个区块和一个recall block的数据,也就是说,大大减少了成为节点的门槛。
  • 一次付费,永久存储。并且存储成本较为固定,严格按照数学公式,而不是由矿工和客户双方协调定价。
  • Arweave上面的智能合约一旦提交就不可修改

除此之外,我们需要明白的是,Arweave想解决的问题围绕的是“信息永久存储”,Filecoin解决的更多的是我们常规理解的“按照买卖双方既定合同在固定时间内存储响应信息”的问题。正是由于二者想要解决的问题不同,导致二者的思路和策略也完全不同。

所以接下来,我们来看下Arweave的这些特点&概念,并且看下和Filecoin相比,到底有何不同。

什么叫Recall- Block

Recall-Block是属于Blockweave中不同于最近新生成区块的历史区块。当一个节点想要铸造一个新的区块时,必须要同步一个Recall-Block和最新生成的区块的数据。并且,由于并不是单链形式的结构,所以对于新生区块的高度,取决于recall-block的高度,具体区块高度计算公式为:

关于Recall-Block,我们需要知道的核心是它是整个BlockWeave结构中,想要出块时必须所要具备的条件就行, 同时,知道recall-block有一套自己的算法来保证矿工不知道下一个区块的Recall-Block是哪个(上面公式中的Mod算法本身就是难以逆向求解的),从而也难以作恶。

可以看到,和Filecoin相比,Arweave整体的结构就与其大不相同。Filecoin采用的还是中本聪链的结构,即常规的区块链状结构。Arweave则采用的是复杂性更高的网状结构。如同之前提到的,由于二者解决的问题不同,所以二者在根本结构上就完全不一样。

什么是POA(Proof of Access)

简而言之,POA算法是说,如果一个节点想要生成一个新的区块,那么它需要证明这个新的区块里有链接(access)到一个随机的recall block,然后才能出块和获得奖励(具体的解密就是需要算出一个None值,用RandomX算法,一种POW里的针对通用CPU优化的竞争算法)。同时需要知道的是,POA会激励矿工存储“稀有”的数据。这是因为矿工在同步Recall-Block数据的时候,每个网络中已经生成的区块被选中成为Recall-Block的概率是一样的,也就是说,如果矿工存储了大量别人很少同步的稀有数据区块,一旦该区块被选中成了recall-block, 那么他要面对的矿工竞争就会大大减少,从而获得更大的出块可能性。

这样最终也会导致在其整个网络上存储的数据的备份是最大化的,这对于一个目标是“永久存储数据”的存储网络来说是最为至关重要的。而像Filecoin等其他去中心化存储大多采用的是合约计算每份数据的副本数,根据这个数量调整报价让区块进行同步,这样需要增加与合约的交互次数。并且,Filecoin由于其独特的买卖市场,往往会导致矿工只愿意存储报价高的数据,而不是稀缺数据,所以AR则大大减少了这种问题。套用一下官方举的例子:

如果有1PB数据需要存储,但是只有2PB的空间可以使用,那么POA算法会激励矿工去存储更为稀有的数据(增加被选中的概率)

同时根据POA的机制,矿工出块的概率如下:

所以,在hash power很难提升的情况下,理智的矿工会存储尽可能多的recall block数据在本地,提高自己的出块概率。

我们可以看到,PoA这一套算法的核心还是前面提到的recall-block,利用“精致的利己主义”这一博弈心理来让稀有数据获得更多的备份,进而实现自己的永久存储。不过根本上还是因为双方想要解决的问题不同,导致二者的共识算法不同(Filecoin采用的是PoRep+PoSt来保证矿工的履约)。也正因为如此,Filecoin对矿机的硬件要求较高,用户参与成本较高。而Arweave对参与挖矿的要求则较低。我们可以用“如何检验学习成绩”对二者的共识机制做个类比,Arweave像“考试”,你在考试的时候能得到高分就行;而Filecoin则像是实时监控你,看你是不是在学习。孰优孰劣,不做表态。

讲到现在,我们似乎还没有说到一个对于区块链来说很重要的东西,就是矿工之间如何竞争挖矿?出块的流程是什么样?想要了解这些,我们就需要知道Arweave的竞争策略WildFire(官方称其为AIIA meta-game),以及出块需要同步的数据,blockshadow.

Wildfire

每个节点都有一个可信同辈节点列表,用来接收和发送Arweave API请求,包括发送交易,块信息以及请求其他信息。同时,节点会使用wildfire监听每个同辈节点的一个分数,其代表着其对其他节点请求反应的快慢和准确性,本质上来说,这个分数就是该节点和其他节点通信的每秒滚动字节平均值,不过针对新加入网络的节点,AR给了他们一定期限的适应期免于排名。

每个节点的可信节点列表都会定期清除表现不佳的节点,也就是分数排名靠后的节点。同时也会新增分数较高的节点。当一个节点广播交易或者出块信息时,其他节点会被分成两类:

  • 一类是list里表现较好的节点。这类节点会首先同时受到这个信息
  • 剩下的表现不佳和新加入的节点则会依次收到消息

这样一套下来, 这种启发式的方法能让节点合理的使用带宽,并且提高他们通信的效率,最终拉高连通率,减少分叉出现的可能。同时,也能很大程度上减少时间损耗和恶意节点的出现,进而提升整个网络的表现

AIIA的一个例子:

AIIA博弈模拟

一个是代表AR中每个节点真正的行为特征(向其他节点表现出来的):

一个是代表每个节点自以为表现出的偏好特征,大小等同上面的Acs:

而AIIA游戏进行的每一步,都需要继续每个节点之间的净得分,利用如下公式进行迭代计算:

也就是计算节点A行为对其他所有节点的行为特征综合。

然后,每一次计算Fnet后,假设节点会“检测”自己的分数(比如看奖励多少),调整自己的行为。如果需要调整行为,相当于是有一个“突变”函数,代表其改变行为后的表现分数。并且,当F(M,As[i])>F(A,As[i])的时候,节点才会调整行为。所以这段话可以用下面的公式来表示:

而检测自己行为得分的过程也可以用一个函数来表示

这个函数代表的是,节点会比较自己实际的行为得分和自己预测得分的差别是多少,进而决定自己是否需要调整得分。

由于AIIA的策略是“以牙还牙”策略,所以原则上来说:如果时间足够长,整个网络中的节点行为会逐渐偏向于亲社会行为,即整个网络中节点的“行为偏差”逐渐趋同于同一个值。当然,模拟结果也表示,亲社会行为的变化率不会超过整个网络中偏差的均值。

WildFire&AIIA 小结

数据来源:Arweave 白皮书

另外,多说一句淘汰节点的问题。通过观察上面的拓补图,我们可以看到,每个节点互联的速度取决于该链接路径上速度最慢的节点,最慢节点的回应速度是每个链接路径上响应速度的最大值。所以,为了加快路径响应时间,节点会排除响应速度一直靠后的其他节点,选择和更为高效的节点进行连接,最终导致的结果就是整个网络响应速度的上升。

Filecoin在提升矿工活跃度方面采用的是更为直白的市场竞争机制,依托于自己的“存储买卖订单薄市场”,卖方(即提供服务的矿工)可以直接看到自己的报价处于订单薄的什么位置,进而调整自己的报价。同时,如果想要提升自己出块概率,也是需要自愿升级硬件才行(但是又因为其共识机制的问题,升级硬件势必会导致存储成本的提高)。当然,这也是因为Filecoin用的还是传统区块链结构有关,无法做到和Arweave这种结构一样的局部联通性提高带动整体的提高。

但是,AIIA也不是没有缺点,具体如下:

  • 由于AIIA本质是依靠参与者本身的“自私”机制,而不是有一个指导性的策略来强迫节点施行“亲社会行为”。同时,根据经典的动态社交网络理论,如果部分恶意群体抱团,而其他普通群体没有团建一致,会导致恶意行为的扩散,最终造成网络被攻击。
  • 共识机制无法被轻易改变
  • 按照理想的模拟情况,也需要较长时间才能让整个网络环境达到“亲社会”的程度,并且过程中,如果反应较慢的节点会掉队,进而被清楚,哪怕不是恶意节点。

所以,Arweave和Filecoin在博弈策略上各有优劣,很难说哪一个会更加有优势。

Blockshadows

  • 一个是wallet list(钱包的最新交易信息。确保了所有钱包的历史记录都可以随时被调用)
  • 一个是block hash list
  • 同时,还包含了交易信息的哈希,而不是包含了所有交易内容本身。

按照上面提到的两个算法,只要包含这几个信息,任何区块都可以重新恢复完整的交易内容。当然使用这个机制虽然说增加了区块的容量,减少了分叉的概率,但是会出现一个新的瓶颈,就是重构交易信息的时间和区块能包含的交易ID数量(交易哈希和其他两个list都和交易ID相关)。

所以,AR要求每个节点在准备打包交易时快速分享该交易给另一个节点,但是只有当其高度确认其他节点也有该交易的copy时,才会讲该交易打包到块内。同时,引入了AIIA博弈来计算其他节点来访问某个区块的可能性。这样,每个节点的行为会有以下两个倾向:

  • 每个节点不会过早的去打包交易,因为这样会有很大概率被拒绝出块(上面提到的只有其他节点有该交易的copy,才能将其打包到区块)
  • 每个节点不会很晚去打包交易,因为这个交易可能已经被其他节点打包出块了。

这样就会让整个网络变的非常的“及时响应“,出块速度会和交易在网络中的传播速度一样快。

Filecoin在同步信息这一点上利用了“零知识证明”来减少同步的数据量,这也是现在绝大多数链和layer 2采用的方案,更加成熟,用例也更加广泛。不过,由于Arweave和Filecoin都还没出过什么很严重的安全性问题,所以这两种方式的优劣,在此就不做比较了。有兴趣的话我们后面单独拿出来讲讲。

分叉

我们先来看下分叉出现在什么时候。在AR中,每一个区块都包含了一个cumulative_difficulty的难度系数。当一个节点收到一个新的区块,并且和自己本地的区块进行比较,发现新来区块的难度系数更大,但是新来区块高度的大于自己本地记录里最新生成的区块高度的两个高度以上。这就有可能发生了分叉。加上节点本身就有自私的因素,所以最快确定分叉主链的方式就是比较难度系数,再与其他节点进行沟通,确定最长链。其中和其他节点沟通确定的是分叉区块回溯问题。要一直回溯到分叉前并且各个区块记录难度系数一致的区块高度时,再重新以难度高度最高的链作为主链,同时将被淘汰的分叉块的交易drop掉。如下:

图片来源:Arweave yellow paper

如果对区块链分叉有所了解的话,Arweave这个分叉处理方案其实就是很常见的处理方案,与Filecoin等并无不同。只是理论上出现分叉的概率很小。

Arweave的经济激励机制

对于永久存储来说,首当其冲需要被确定的就是永久存储的价格,我们来看下AR是怎么确定这个价格的。

首先是每GB数据的存储成本:

当然,由于技术的发展,目前来说硬盘的价格是一直在降低的(理论上确实是一直在下降的),总体来看,每GB存储成本按照时间序列来看,呈如下的情况:

图片来源:Arweave yellow paper

所以,上面AR的计算公式,如果作为永久存储成本来看的话,数据的总存储成本为:

由于Pgbh[i]理论上应该是一直在减少的,所以,如果用类似于递减等比数列求和方式来计算成本的话,每份数据的存储成本基本上是在可控范围内。当然,这一点在于笔者本人假设每GB存储成本变化呈等比数列的形式,白皮书中并没有这么写,一家之言,仅供参考。

说完存储成本,我们就来看看所谓的刺激矿工永久存储数据的机制是什么。为了让矿工可以永久存储数据,AR将存储费用分为两部分。一部分是类似于gas fee一样的出块手续费,激励矿工出块,另一部分是作为刺激矿工永久保存数据的一个线性释放的费用。

既然知道了成本,那么我们来看下用户需要付出的交易费具体如何计算:

白皮书里的TX fee就是TXreward,它这是小瑕疵,写错了。我们可以看到,实际上矿工可以直接拿到的费用是TXreward, 而不是total, 剩下的Txcost会计入到我们接下来要讲的Storage Endowment中。

Storage Endowment

图片来源:https://www.arweave.org/technology

通常来说,当矿工已经拥有了超额收益的情况下,协议会避免动用Storage Endowment中的资金,以确保整个系统中经济的稳定性。不过为了确定到底何时才能动用Endowment资金,AR给了一套计算公式。

首先,矿工出块奖励由以下三个部分组成:

Rfees: 单个区块中所有交易的交易手续费总和,即上一部分中同一区块内每笔交易Tx total的总和:

Rinflation: 通胀奖励,类似于出块奖励,是每个区块提前预设好的值。和其他区块链的出块奖励一样,是一个递减函数。不过AR网络中的出块奖励递减仅和区块高度相关,具体计算如下:

我们可以看到这个Rinflation算是个较为平滑的曲线函数,并且由于BH是唯一的变量,所以在取极限(BH无限大)后,该值为0。和BTC的最终想法一样,出块奖励最后肯定是要归零的。

Rendowment:这个endowment就是我们的保险库奖励了。原则上在fee和inflation能负担的了整个网络的成本时,不会动用到endowment资金。加上其出块奖励本身的曲线就较为平滑(与BTC相比),哪怕到inflation最终到0并且fees已经低到无法cover成本,需要动用到endowment时也是很久以后的事情了。此时的endowment已经积累了大量资金,也能负担的起后续的存储成本。不过,我们还是要看下Rendowment到底怎么计算:

抛开最外层的Prop这个我们不认识的函数,里面的max函数我们还是应该知道的。这就是判断Wsize*PGBB — (Rinflation+Rfees)是否大于0。大于0,就是代表整个网络成本现在高于上面说到的inflation+fee的和,此时就需要动用到endowment。否则就不需要。

然后我们再来看下这个Prop函数,先直接看下它的计算公式:

这里有一个Endowment计算。那么我们再把endowment计算公式贴一下:

这里我们可以看到,这两个计算公式都是递归公式,并且彼此还需要相互引用计算。先来看下Endowment,在通常的前提下,Rendowment为0,每个区块产生的TXcost会被计入到Endowment中,导致Endowment越来越大。所以,Prop()在AR中通常为0。

经济机制小结

同时,我们可以看到,Arweave的存储报价是纯粹的数学公式来确定的,成本可控,并且实际上也非常便宜,也只有存储收费,读取并不收费。filecoin则采用“交易市场撮合交易”的方式,在买卖双方都可以接受的报价下达成交易,虽然从理论角度来说,这种交由市场来决定价格的方式最终也会达成一个较为稳定的报价,但是,理论和现实总是有差异的。由于市场情况不通过,买卖双方的价格预期也不同,导致Filecoin存储服务的报价还是浮动较大。并且,由于Filecoin在存储和读取的时候都需要付费,对于那些需要频繁存储&读取的用户来说,这个成本不可控,也较高。这也是为什么很多新兴NFT项目都会选择Arweave来作为自己的存储方的主要原因之一,另一个重要原因就是一直在说的,永久存储。

节点出块示例

首先,作为一个节点,需要考虑以下几个方面:

数据来源:Arweave yellow paper

整个过程分为四步:

  • 接受交易和区块信息:social rank排名决定了接受的快慢。同时打包交易进块的速度也很重要(毕竟reward和fee高度相关)。同时,交易的格式/内容要符合AR规定,并且各类数据(例如接收人和发送人不能是同一个地址)也要符合要求
  • 接入recall-block:recall-block的计算是个Mod运算,所以是无法被预测的
  • 产生备选区块:一旦第一步和第二步完成,就会进入竞赛阶段,运用算力根据难度系数去产生区块(具体看下面的出块流程)
  • 区块获得准入:广播区块信息给其他节点。这一步也用到了social rank, 因为rank低的人的广播会最后被传达,而网络会优先传播rank 高的节点信息。当然,包含了一些违禁信息内容的区块广播也不会被接受,例如在政策黑名单中的信息。

出块

数据来源:Arweave yellow paper

而针对出块具体步骤,则和上图一样。需要注意的是,每个矿节点有两个交易池:一个是等待池,一个是铸造池。每笔交易进来后,会先进入到等待池,接受节点检查,包括内容审核。一旦该节点有了很高的信度认为其他节点也接受到了这个交易并且内容合适,才会讲交易转入到铸造池。当然,因为分叉恢复的问题,可能会导致废弃区块中的交易又回到mining pool。

接下来,就是出块。

出块需要包含的信息为block data segment(BDS), 是一个哈希列表,包括:

  • 上一个区块独有哈希值
  • Recall-block完整内容(同步上面说的blockshadow,而不是真的所有信息全部直接同步)
  • 新生成备选区块的交易信息和其他元数据

而具体步骤分为五步:

Step1, 装配相关元数据:recall-block, 此前最新生成的区块相关hash数据

Step2, 收集需要打包到新区块的交易信息,计算难度和手续费

Step3, 生成新的BDS

Step4, 计算一个满足难度系数的nonce:randomX算法,和pow难度计算的目的一样。如果在这个过程中有新的交易需要被打包到这个块中,则这个过程会被打断,回到step2

Step5, 广播该区块的blockshadow

这边我们就不再对出块进行更为详细的描述。有兴趣的同学可以自己去看下官方白皮书。

其他

总的来说,Arweave的Smartweave智能合约,具有不变性。一旦上传就无法修改。同时,与以太坊不同,合约不是由矿工节点执行,而是下载到“合约调用者”的本地进行执行,从创世区块开始,按照顺序执行合约上的所有交易,最后才执行调用者的交易。完成交易后,由调用者再把合约上传到Arweave,往复循环。

套用大神刘毅(Cdot Network 创始人)的说法:

对于一笔智能合约交易,阿维网络 只需一个节点 — — 调用者自己的节点来执行 (注意阿维网络不区分全节点和轻客户端) 。由于调用者节点执行 (同时验证了) 了合约历史上的全部交易,因此他无需信任或依赖任何节点,就能得到 可信的计算结果 (即智能合约的新状态) 。因此,可以把每个 Smartweave 合约都看成阿维的 二层链 ,执行智能合约就是对二层链的全量同步和验证。这一设计使得 DApp 业务逻辑层的 可扩展性 / 计算成本难题迎刃而解。智能合约几乎可以不受限制地包含任何复杂计算,只需付出很低的边际成本,因为通常情况下调用者的计算设备已经被购买或者长期租用了 。

由于目前Arweave上部署的合约都比较小,使用率也不是很高。所以有空再给大家详细讲讲。今天,我们说的主要就是存储。

总结

两万年来,人类智慧产出了诸多载入史册的东西,无数的天才夜以继日的去产出名作,去解决问题,去提出思想。为什么人们会痛惜“亚历山大图书馆”被烧毁?这对于统治者来说,可能只是一种彰显国力的方式,但是对人类文明来说,它是一个存储智慧的无价宝库。

所以,在我看来,Arweave不像一个目的是为了盈利的项目。而是为了解决一个自古以来就困扰人类的问题:

“如何最大程度保存人类知识,延续人类文明?”

这也代表,Arweave不止是Filecoin的竞争者,它要解决的是更为宏大的问题。毕竟,如同刘毅所说:

永久保存人类的知识和历史 当然是大问题,而且很可能它的重要性对人类无出其右。毕竟现代人就智力和体能而言,跟几万年前的智人祖先没什么不同。我们过着与先人截然不同的生活,唯一的原因就是我们继承并利用了人类在数万年的历史中 沉淀的知识和经验 。

如果Arweave最终因为经济模型而走向消亡,那也不会影响它在探索人类存储的道路上留下浓墨重彩的一笔,历史会记住这个立志成为“人类文明的守护者”。

参考文章:

https://www.chainnews.com/articles/124011762292.htm

2.《Arweave yellow paper》:

https://www.arweave.org/yellow-paper.pdf

--

--

Distributed blockchain research institution. Focusing on underlying technology research and practice. Support us: http://giveth.io/project/cyc

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
CYC

Distributed blockchain research institution. Focusing on underlying technology research and practice. Support us: http://giveth.io/project/cyc