在本节中,我们将更详细地介绍参与波卡运行的不同角色,包括我们为这些角色而创建的安全模型。对于这些角色的理解,有利于进一步理解整个协议的设计,包括协议是如何工作的,以及采用这种设计的原因。
波卡网络节点的运行是基于接下来我们要介绍的相关角色和功能设定而展开的。
验证人:验证人在波卡网络拥有最高权限,控制并承担新区块的打包工作。验证人需要质押足够多的资金,但是由于我们允许其他有资金的提名人推举一个或多个可以代表他们的验证人,所以验证人的部分资金可能并不是自有资金,而是来自提名人。各验证人运行中继链的客户端,必须具备高可用性和高带宽的性能条件,节点必须准备好在每一个中继区块上批准某一平行链的新区块,有时候可能是几个新区块的确认。这个过程包括接受、验证、再发布候选区块。平行链的任务分配给验证人存在随机性,且变化频繁,要求验证人维护所有平行链的数据并保证数据库的完全同步,显然是不合理的,于是,“收集人”概念应运而生,作为第三方平行链的新区块。指定验证人集合一旦合理地批准所属平行链的所有新区块,验证人本身必须进行中继链的区块批准工作。过程包括更新交易队列的状态(将数据从一条平行链的输出队列传输到另一条平行链的输入队列),处理已批准的中继链的交易批次以及对最终区块进行审批。如果查证到验证人没有达到职责要求,将会被重罚。例如,质押在他们名下的所有资金或者部分资金被没收。某种意义上,验证人角色和基于POW区块链的矿池有类似之处。
提名人:提名人作为利益相关方,为每一个验证人贡献安全性资金。提名人主要作用就是将风险资本质押到他们信任的一个或一组验证人,以代表他们行使维护网络的职责,除此之外,无其他角色职责安排。根据其资金贡献量,提名人会得到其资金占验证人总质押金额里相应比例的奖励或惩罚。和收集人一样,某种意义上,提名人和基于POW网络的矿工相类似。
收集人:交易收集人(简称收集人)作为帮助验证人生产有效平行链区块的一方,会运行某个特定平行链的全节点,也就是说收集人需要保留所有授权新区块所必需的信息,用于打包新块并执行交易,就跟基于PoW区块链的矿工一样。在正常情况下,收集人收集并执行交易,并创建一个“未封装”的区块,连同有效性证明信息将区块递交给一个或多个当前负责审查该平行链区块的验证人。
钓鱼人:不像其他的两个参与方,钓鱼人并不直接参与区块打包的过程。他们是独立的"赏金猎人",激励他们的是一次性的大额奖励。严格来说,我们希望通过“钓鱼人”的设置,减少恶意行为的发生。即使发生类似情况,希望也只是因为资金质押方私钥不小心泄露,而不是出于蓄意的恶意企图。该名字缘由是考虑到其期望奖励的频率,选择参与的最小要求以及最终能够获得奖励的数量。钓鱼人的奖励来自于能够及时发现资金质押方的非法行为,这对于检测无效平行链区块的批准是非常有价值的。钓鱼人通过及时证明至少有一方(收集人或验证人)存在作弊行为而获得奖励,这对监控无效平行链区块生成与批准很有价值。
钓鱼人有点类似于区块链系统中的全节点,所需的资源相对较少,并且不需要承诺稳定的正常运行时间和带宽。他们的不同之处在于钓鱼人必须绑定一小笔保证金。这部分绑定的保证金可以防止因女巫攻击而浪费验证人的时间和计算资源。虽然钓鱼人是波卡安全模型的一部分,但由于并没有为钓鱼人设计激励模型,所以对Polakdot的设计需要保证在没有他们的情况下系统也很安全。我们未来工作的一部分既是为钓鱼人增加一个激励模式。
如图1,图例展示了Polkadot协议中定义的结构元素和不同的角色:拥有6条平行链、18个验证人以及每条平行链拥有5个收集人。图2显示了包含5个中继区块的中继链。需要注意的是,分配给一条平行链的验证人数量,是通过验证人总数除以平行链的数量来决定的,但收集人的数量是独立于平行链数量的。桥是允许外部链与Polkadot互操作的子协议,更多信息请参见A.2。
图1:一个保护六个平行链区块的的中继块。每个平行链有5个收集人和3个验证人