'CryptoYC'
研究|重新回顾波卡
🌿

研究|重新回顾波卡

波卡的跨共识信息格式(XCM)在今年5月终于落地,所以我们来回顾一下波卡,波卡分工明确,平行链负责提供候选块,安全性和最终性确认由中继链负责,并且波卡给定了统一的标准进行开发和信息交互,平行链由substrate开发,链间交互用XCM来进行,让开发和交互变得非常简单。所以本文从整体架构,跨共识信息格式,开发框架(substrate),插槽拍卖,kusama和波卡的对比等方面拆解和回顾。

一、架构

波卡的架构和传统的区块链不一样,它的组成有中继链和平行链,主要角色有验证者(validator),提名者(nominator),收集者(collator)。

图片来源:波卡官方
图片来源:波卡官方

中继链

中继链也是波卡的中心链,主要的职责是用来协调整个系统(包括平行链),其他具体的工作会委托给平行链执行。故意将功能最小化,所以中继链不支持智能合约。中继链由几种功能类型组成,包括与治理机制交互,平行链的拍卖,参与NPoS。所有验证者都会把DOT质押在中继链上并且负责在中继链上验证。中继链上负责处理验证和最终确认的就是验证者。

平行链

为什么叫平行链?因为和中继链并行运行,所以叫平行链,最常见的是采用区块链的形式,但是也没有特别要求他们是实际的区块链,除了区块链也可以是实验性架构(本质上不一定是区块链)。平行链是一种特定的数据结构,全局一致,并且可以由中继链的验证者验证。在波卡中除了需要平行链生成可以被验证器验证的证明(有效性证明,即POV)以外,没有什么其他限制。除此之外,平行链还可以作为扩容工具,创建拥有自己平行链的平行链,如果重复这个步骤,就会形成树状结构。这些平行链之间也会划清清晰的界限,满足同时运行很多/所有平行链并且还不会发生碰撞,就如同Gavin说过的 ‘如果有十条平行链,就可以使用相同的安全源执行十倍的工作’。平行链的完整节点由collator维护。collator也可以叫网络维护者,保留必要信息,产生新的候选块,传递给中继链的验证者进行验证,平行链可以有自己的代币,也可以没有原生代币使用DOT即可,代币可以用来支付手续费,激励collator;collator本身是不需要参与质押的,所以该角色不需要持有平行链的原生代币。

图片来源:polkawiki
图片来源:polkawiki

平行线程(Parathreads)

和平行链有相同的API,可以和平行链互相转换,因为都是使用substrate开发的链,所以技术上的区别达到相对最小,差异更多的是经济上的区别:

1)平行链是通过波卡的正常方式进行注册(比如治理或者插槽拍卖),平行线程由固定的注册费用,大约10–100个DOT,成本是远远低于平行链的;

2)虽然平行链和平行线程都是拍卖的形式,但是平行链是对一个插槽的使用权进行拍卖,而平行线程是按需付费,并且对每个块都要付费,也叫逐块拍卖,是为了给那些不需要专用平行链插槽但是希望能继续使用中继链的平行链提供一个解可行方案,这个想法也是来自于80年代末90年代初的个人计算机内存资源有限的类似概念,在当物理内存有限,但应用程序需要更多内存的时候,计算机可以使用应建行的交换空间来创建虚拟内存,允许更多的进程同时运行。在每个块拍卖的时候,也会有类似比特币或者以太坊里出现的情况,在繁忙时会推动费用上涨。这一点又和平行链不同了,平行链有权力在中继块中通过专用插槽执行一个块。

平行链插槽

数量有限,依据现在的性能大约可以同时承载100条,官网例举了三种分配方式:

1)治理授予的或者叫“共同利益”平行链(common good):由治理系统分配,比如其他网络的链接和桥梁,这种通常是系统级链或者公共链,没有经济模型(一般情况),因为不是通过拍卖进行,所以也不存在租约到期,只有通过治理才能删除。

2)拍卖授予的平行链:蜡烛拍卖,团队使用自己的DOT或者通过众筹的方式获得DOT在拍卖中获取插槽,租期结束之后,DOT不可转让也不可以质押,没有获得新租约的平行链会自动变成平行线程。说一下拍卖,卡槽是三个月为一个周期,持续两年就是一共8个周期,想获得卡槽的平行链不需要拍两年的价格,可以按周期的倍数拍卖,举个例子:

  • A在周期1–8出价75,一共是75*8=600
  • B在周期5–8出价100,一共100*4=400
  • C在周期1–4出价40,一共40*4=160
  • 代币数量是B最高,可是只拍了1–4,所以需要和C一起共用一个插槽,两人加起来是560,但是反过来看A,虽然单价没有最高,但是拍1–8出价600,这一轮就是A拍到了插槽。

3)平行线程:为每个块进行拍卖,即按需拍卖(pay as you go)

主要角色

  • 验证者:在中继链上接受收集者发来的有效状态转换证明,产生区块,获得质押奖励
  • 提名者:将他们的DOT绑定质押到特定的验证者,帮助他们进入验证者集合,提名者也会从验证人那里获得一部分质押奖励
  • 收集者:平行链和平行线程上的完整节点,收集平行链上的交易,并状态转换证明,发送给中继链上的验证者,,还可以通过使用xcmp从其他的平行链发送和接收消息。

安全性

波卡中的安全性是共享的,平行链和平行线程都是依赖中继链的共识来确保安全性,因为他们本身不能具有自己的共识,只需要收集块和提交块给中继链,最终行确认由中继链单独完成。

其他

  • WebAssembly:Wasm,在波卡和substrate中用作运行时的编译目标,是一种用于基于堆栈的虚拟机的二进制指令格式。使用wasm的好处是不需要通过硬分叉来升级区块链。硬分叉是一般区块链升级会选择的方法,不过速度慢,效率低却容易出错,用wasm升级可以自动在某个高度制定新逻辑,隔离并且非常具体。
  • hash:使用的blake2b,非常快速,使用它的还有zcash

小结

波卡里分工明确,中心链中继链负责保证安全和最终性确认,平行链(线程)负责生成有效性证明(POV)和候选块,其中平行链需要插槽拍卖产生,平行线程只需要按需付费,为需要的块的付费,也是以拍卖的形式,平行链和平行线程有相同的API,可以互相转换。

二、跨共识信息格式(XCM)

上一节了解了架构:中继链负责网络安全性,一致性和跨链互操作性。这一节我们讨论一下跨共识信息格式,顺序如下:

XCM介绍 → XCM技术栈介绍 → XCM的传输协议(xcmp,vmp)→ 协议应用实例(资产转移) → 转移频道建立 → XCM资产注册。

跨共识信息格式(XCM)

是一种跨共识信息,不是协议,是共识系统相互通信的一种信息格式。

  • 特点:向前兼容(旧版本的系统可以接受新版本的数据),可扩展(在中继链中是O(1)),实用。为数据通信提供一个基本框架,让不同共识系统之间实现交互。
  • 应用:因为xcm是一种信息格式,所以未来可以在很多系统中使用,不仅限于波卡。在波卡中主要是用来让平行链和中级链之间能够自由的传输信息,包括资产转移,协议互相部署等。
  • 技术栈:

商业模式:可组合模块,智能合约

xcm接口

XCM

四种传输协议:主要说一下xcmp和vmp

共识环境

图片来源:https://wiki.polkadot.network/docs/learn-crosschain
  • XCMP(cross- chain message pasisng),允许一个平行链和同一个中继链上的其他平行链进行信息交换,跨链事务基于merkle tree机制来解决,将一个平行链的输出作为另一个平行链的输入(就是wiki里面说的出口和入口),中继链之储存相关元数据的散列值。有两个模式:
  • Direct模式:数据在平行链之间直接传递,对于中继链,是O(1),所以说扩展性非常强
  • Relayed模式:数据通过中继链传递,这个可扩展性就没有direct模式那么强,可能会因为队列的增长而长时间无法收到消息。

Xcm在5月落地,Xcmp现在还没有落地,现在的暂替方案是XCMP-Lite,又称HRMP(horizontal relay-routed message passing),是一个临时协议,数据由横向中继路由传递,hrmp和xcmp有同样的功能和接口,但是因为它将所有的消息都存在了中继链中,并不是默克尔树机制,所以对资源的要求也高。未来在xcmp实现了之后,hrmp就会被弃用,并且逐步淘汰。

  • VPM:垂直的消息传递。这里面又分了两种,下图以monbeam为例,

UMP(upward message passing):允许平行链向他们的中继链发送消息

DMP(Downward message passing):允许中继链向下发送消息到其中一个平行链

图片来源:https://docs.moonbeam.network/builders/xcm/overview/

实例

在XCM实现的早期阶段,主要有两个实例,功能相似但是机制不同

  • 资产传送:A向B直接转移,类似销毁铸造的桥接机制,将A链资产销毁,并且在B链上创建相应数量的资产,完成资产从一个区块链转移到另一个区块链的这个过程。前提是每条链都需要有自己的原生资产作为储备。值得注意的是,这个模式需要有一定程度的信任,否则AB任何一方都有恶意铸造更多资产的可能。
  • 远程转移:A向B间接转移,通过B所拥有的中间账户(又称主权账户),类似于锁仓铸造或者是销毁解锁的桥接机制,A通过B的主权账户将资产转移给B。这时A的资产不会被销毁,而是被主权账户持有,执行XCM会在B区块链上铸造跨链(虚拟)资产到接收地址,这个跨链资产可以一直保持1:1的比例和原生资产进行兑换。

资产转移的频道建立

  • 两条链如果要进行信息传递,就先要在链之间建立频道,用来传输数据,这个频道并不是双向信息传递的频道,如果A和B要双向传递,那就需要建立两个频道。并且AB都需要有自己的原生资产,才可以进行跨链资产转移,费用直接从转移的资产中扣除。
  • 中继链和平行链之间的XCM频道在连接时已经自动建立,所以不需要额外建立频道。如果A向B传输信息(AB都是平行链),A需要先在网络中发送一个开启频道的函数,这部分函数同时也在XCM函数中,接受XCM的就是中继链,函数包括1)信息执行地点,2)支付费用的账户和执行交易时可使用的费用数量,3)编码信息,包括在中继链上被调用的方法(信息频道),目标链的ID,在目标点的信息队列最大信息数量和可以发送的最大信息大小。

XCM资产的注册(在频道建立之后即可注册资产)

函数需要包括:

  • 原始资产所在网络的平行链ID
  • 资产类别:比如平行链的原生资产或者是通过Pallet资产创建资产的相应索引(一般情况下,在注册资产被XCM支持时,后续会进行runtime升级,但在moonbeam中,就包括了substrate pallet,资产就不需要runtime升级也可以进行转移,简化了流程)
  • 资产名称,标志和单位(十进制)
  • 最低额度

注册完成后,需要设置一个每秒的执行单位,用作XCM信息的费用参数(类似以太坊的gas),不强制使用原生资产支付,也可以使用DOT等其他代币支付。如果支付的代币数量不够执行XCM操作,就会出现交易失败,并且已经支付的费用不会被退回。

小结

XCM是一种跨共识的信息格式,XCMP和VMP都是可以用来传输XCM的协议,可以通过平行链之间传输和平行链与中继链之间传输,XCMP没有落地执行,用的是替代协议HRMP,未来会被弃用。在平行链之间传输信息前需要建立通道,平行链和中继链不需要,通道建立成功,每条链即可建立XCM资产,设置每秒执行单位,完成这三步之后就可以进行进行信息传输了。

三、Substrate

  • 什么是substrate?

独立于波卡的项目,可以创建货币和去中心化系统的框架。可以开发,整合不同的模块(pallet)来创建定制化的区块链,再在上面进行二次开发就容易很多了。

  • 特点:简单,易操作。让几个月甚至几年才能做成的链可以最快在15分钟内完成。
  • 架构如下:
来源:CYC整理
来源:CYC整理

共识引擎

重点说一下共识引擎,因为在所有区块链中的状态一致性是节点使用共识引擎达到的。共识引擎包括状态机(runtime),分叉选择规则,区块生成和最终确定性。

状态机就是指定链上逻辑状态如何改变的规则,链上runtime就是把包含生成新块规则的代码存储在链上,运行的节点和程序只需要读取这些信息就可以更新了。状态机也有不同的开发难度,这个决定了substrate模型库里编译的三个难度等级,状态机需要的自定义越多,难度就越大。简单开发就是在substrate中将所需的模块挑选出来,再根据需求改动一些参数,如果加入新功能就只需要专注一个模块的开发即可;最困难的就是只使用库里面的一些基础程序,所有的模块都自己开发。

一般的区块链只有一个共识,比如比特币PoW,但是因为substrate提供模块化框架,所以支持几种不同的模型让节点达成共识。共识包括出块,分叉选择和最终性确认。在出块方面分两种,一个是基于PoW,第二个是基于插槽,这种共识模型会把时间分为离散的slot来出块,要求是要有一组已知允许生成块的验证节点。基于插槽的共识里面有可以再分为两个,一个是Aura的循环模式,另一个BABE的随机模式。

  • Authority-based round-robin scheduling (基于权限的循环调度 ),这里面的验证者是一组已知被授权的,以循环的方式轮换出块,将时间分成离散的slot,每个slot有t秒,在规定时间t内就会有一个被授权的出块者来处理一个区块放在最长链上。
  • Blind assignment of blockchain extension (BABE)slot-based scheduling(基于区块链扩展时隙调度的盲分配),和上面不同,这个共识模型使用的是可验证随机函数(VRF)选择验证者,VRF就是区块链框架中为了随机产生出块节点和验证节点常用的一个函数(比如Algorand和Dfinity的共识中都有用到VRF),有时候也可以用来解决分叉,属于零知识证明的应用,目的是保护记账节点,防止记账节点被其他恶意节点推测,因为VRF中随机种子数只有在最后才会公布,所以在证明者计算完成前,随即种子是一直被隐藏的消息,不会有人知道具体记账的节点,就不会发生集体攻击的事件。BABE模型通常基于Pos,每个验证者都被分配了一个epoch权重,epoch被分为多个slot,并且每个验证者会评估每个slot的VRF,如果验证者的VRF输出比它权重的低,才会被允许出块。如果在slot中没有被选中的出块者,BABE共识也提供了备用机制,第二个slot将会在规定的恒定时间内辅助出块。和Aura相比,BABE会更容易出现分叉的情况,因为多个验证者会在同一个时间内产生同一个块。
  • PoW:基于工作量证明计算的调度,解决了计算密集型问题,任何节点都可以随时生成块,解决这个问题需要计算资源,所以节点只能按计算资源的比例生成块。

分叉

在出块完成后,如果两个块的头部信息都指向同一个父块的时候,分叉就会产生,substrate也会提供分叉规则,为了选择最佳链,一般是选择最长链。可以使用提供的GRANDPA协议来选择,这个协议比较直接,就是字面意义上的最长链,协议中的投票机制也是选用这个longestchain作为选择链的规则。还有幽灵规则(GHOST rule),虽然也是用最长链,但是和单纯的最长链不同,它是选择分差最多的那一条作为最优。除了这两种,用户还可以使用Trait来编写自定义的分叉选择规则。

图片来源:https://docs.substrate.io/main-docs/

确定最终性

一般来说在交易完成后会有个信号,比如收到文件要提供签名,就可以确认邮递完成。但是在上面的描述中,会有交易永远不会完成的可能性,因为存在异步,在确认交易完成之前,依然可以从不同的用户那里接收和发送交易,长链和重链都会有回滚的可能性,所以要尽可能的让链的还原性降到最低,可以在特定块上构建更多的块,通过这种方式,就会给出块和分叉选择上提供概率确定性。如果要很明确的确定性,那么开发者就需要在逻辑上添加确定性机制,比如分出一个固定的有权限的集合,通过成员的投票确定最终性,只有拥有足够多的投票才可以成为最终区块,大多数都是用的拜占庭,也就是2/3这个阈值。除非有硬分叉这种外部协调方式,否则是无法回滚的。需要特别提出的是,一般的共识模型中,第k个区块确认之前,第k+1个新块是无法出来的,所以说出块和最终性确认是相结合的,但是在可以看到,在substrate中,我们是把出块和最终性确认分开来说的,因为两个过程可以相互隔离,可以使用两种方法来实现最终性确认,概率性确认+出块算法或者出块算法+其他最终性确认机制来实现。但是并非所有的共识都规定了一个单一的链,当两个块都拥有相同的父级块并且他们也没冲突时,就会变成DAG结构,有些协议也会进行验证,substrate同样提供了这种案例,叫AlephBFT,可以使用Aleph Zero来开发。Substrate中默认的共识模型是出块的Aura和最终性确认GRANDPA。其他的可以通过自定义来开发。

小结

Subtrate就是将区块链模块化,这是它可以做到15–30分钟内发链的一个重要原因,模块包括了核心模块,共识机制,基本逻辑,P2P网络,链上治理。这些都是substrate中可以调用的模块。有两个默认的共识模块,一个出块一个最终性确认,同时也提供了其他的共识模式给用户选择,其他的可以自定义,用substrate可以创建PoW,PoS和DAG等。对于开发者来说是操作非常便捷的,并且语言用的Rust,这些因素才可以让substrate最大化的简化了区块链的开发过程。

四、插槽拍卖

什么情况需要拍卖平行链?想要共享波卡的安全机制,和其他平行链信息传递,进行交互。波卡和kusama的平行链数量目标都是100条左右,分为两种,社区测试型插槽(community beta slots)、商用插槽(commercial slots)。波卡给社区测试型插槽预留了20%的位置给Web3基金会,剩下80%才会用拍卖的方式开放。

准备

足够的DOT,来源有2种,1)直接购买DOT,2)众筹并且支付相应费用。DOT需要时未锁定状态,波卡要求是28天。

拍卖

波卡在每一次拍卖会提供一个2年的插槽,kusama是1年。插槽是逐个开放的

都是使用的改良版蜡烛拍:2+5。1天18小时为第一阶段,后五天为第二阶段,6个小时的确认时间

第一轮5次,每7天开启新一轮,统一接入中继链

第二轮6次,每14天开启新一轮,统一接入中继链、

图片来源:CYC整理
图片来源:CYC整理

租赁方式

图片来源:波卡生态研究院
图片来源:波卡生态研究院

波卡维基上介绍是以3个月为一周期来开房租赁,但最终拍卖的时候是以6个月为一周期:

  • 单租赁:1,2,3,4
  • 双租赁:12,23,34
  • 三租赁:123,234
  • 四租赁:1234

注意:有些情况会导致DOT的锁定期长于租赁期,比如在双租赁拍卖成功,但是A只租34周期,但是锁定要从12开始锁定,所以最后是只租赁一年,但是DOT会被锁定2年。

租期结束之后如果还想继续使用插槽可以重新参加竞拍,而且在第一次竞拍成功时可以预留当前插槽相邻的位置。

五、kusama和polkadot对比

kusama和波卡经常会被放在一起讨论,那么kusama和波卡有什么不同?在说不同之处之前,先介绍一下波卡和kusama他们的相同之处。

相同:

  • 架构:Kusama和波卡使用的是相似的代码,架构一样,kusama也是异构分片设计,所以作为波卡的早期版本先发布的,提供预生产环境,也是“金丝雀网络”,在以前煤矿工人会把金丝雀放入煤矿中用来检测存在的有毒气体量。大家都认为kusama是波卡的兄弟链,也是测试网,但其实不是,一般大家理解的是在主网上线前,并且代币价值为0,为开发者提供测试环境的网络才是测试网,很显然kusama就不是。而且波卡有个真正意义上的测试网叫Westend。所以应该是测试网->kusama->polkadot。二者的关系更像是莱特币和比特币网络的关系。
  • 原生token:都有自己的原生的代币,代币用途也是相同的,包括可以参与质押,投票,治理等。
  • 治理:代币持有者就可参与,治理的流程也相同。
  • 插槽:目标都是100个平行链插槽可以使用,也都是蜡烛拍的形式。不过是改良版,具体为2+5的两个阶段进行拍卖。最开始两天是普通拍,出价高就有优势,后面有5天的ending period,随机选择一个高度作为结束时间,所以必须在这个随机高度前出价最高才可以拍成功。如果在随机选择的高度之后就不算。比如在ending period选择第100个区块作为结束期,之前有人出价1w个dot,但101块中有人出价2w个dot,那么还是出价1w的人获得插槽。

不同:

图片来源:polkawiki
图片来源:polkawiki
  • 平行链的建立
  • 治理:包括投票期和颁布期

投票期:kusama的投票期是7天,波卡28天

颁布期:kusama8天,波卡28天

从治理方面来看,kusama经历提案,公投和颁布批准升级的总时长要比波卡短得多,所以更活跃,迭代起来更快,要比波卡更快的适应和发展。

  • 插槽拍卖:

代币绑定数量:kusama用户绑定的代币数远低于波卡

插槽使用时间:kusama最长为1年,每次拍卖提供48周的插槽;波卡2年,每次拍卖提供96周的插槽

  • 应用:

kusama迭代更快,所以适合部署一些游戏,社交网络这类应用程序,或者用来测试新功能和新技术。而波卡追求的是安全和稳定,所以金融这些对安全性要求更高的项目更适合在波卡上搭建。

小结

kusama和波卡是相互独立的,所以它并不是波卡的测试网,而是先行网,也可以叫金丝雀网络。用了相似的代码,所以架构上是相似的,并且有自己原生的token,包括代币用途也一样。不同的地方在于kusama的建链门槛低,治理时间相对短,平行链更新快,风格比较狂野和快速,适合游戏,社交网络等,或者用来测试波卡的候选平行链;波卡建链门槛高,治理时间长,更新迭代慢,风格是追求保守,安全和平稳,所以适合创建金融类安全需求高的项目。

展望

波卡认为公链生态的繁荣程度很大程度上取决于Dapp的种类、数量和性能,所以好的Dapp对公链的正向影响很大,参考Defi Kingdoms在Avalanche的子网上运行,ronin选择基于以太坊做一条侧链,波卡的平行链成为某个Dapp的专用链似乎也是一个不错的解决方案,波卡的重心也逐渐从开发转向生态和影响力层面,未来可期。

参考文献: