跳到主要内容

经济模型

公链设计原则#

经济学研究的核心问题之一是稀缺资源的合理配置。公链作为开放、自由、人人可参与的分布式系统。一个精心设计的经济模型可以在最大化参与者利益的前提下,保证公链资源的合理配置,同时将各参与者的利益与公链的整体利益对齐,使其在追求自身经济利益的同时也能对整个区块链网络做出贡献,保证网络能够长期稳定地发展下去。

具体的说,公链经济设计需要考虑以下问题:

分布式经济体及其中基础设施付费问题#

分布式经济体的核心是稀缺资源的生产和分配,并且稀缺资源配置通过市场机制而非中心化方式进行。分布式经济体由社区自治,经济活动的基础设施由社区共建、共享。

在与公链有关的分布式经济体中,最重要的基础设施是分布式账本(可以称为分布式信任基础设施)。矿工作为分布式经济体核心成员,维护分布式账本,并需要承担一定成本和风险。PoW矿工需要承担高额的硬件投资和电力花销。PoS矿工需要锁定一定数量的Token,承担Token的流动性成本和钱包安全风险成本。

要激励矿工维护分布式账本,就必须补偿他们承担的成本和风险。矿工激励问题本质上就是如何为基础设施付费。常见做法是“谁使用谁付费”,这种方案面临以下三个问题:

第一,这类收入取决于公链内交易活跃程度,对矿工而言是不稳定且难以准确预测的。

第二,这类收入在数量上是否足以覆盖矿工承担的成本和风险?这一点困扰比特币社区已有相当长时间。

第三,公平性问题。很多长期持有Token的人很少发起公链内交易,因此也很少向矿工支付手续费。但他们持有Token的价值仍然依赖于矿工提供的分布式账本安全性。

出块奖励有助于缓解“谁使用谁付费”面临的这三个问题,特别在公链发展前期。

Token价值、出块奖励和通胀税#

出块奖励与“谁使用谁付费”存在一个关键不同。“谁使用谁付费”是已发行Token在交易发起者和矿工之间的再分配,而出块奖励是矿工获得的新发行Token。

出块奖励在经济学上的核心问题是Token增发与Token价值之间的关系。

Token价值受基本面和流动性因素影响。从长期看,Token价值主要由基本面决定。在短期,流动性因素对Token价值有很强驱动力。假设基本面和流动性因素都没有显著变化,那么新发行的Token就会稀释原有Token的价值,Token增发对原有Token价值的稀释可以称为通胀税。

与“谁使用谁付费”相比,通胀税对矿工是更稳定的收入来源,并且长期持有Token的人通过分担通胀税也向矿工付费。如果将矿工群体视为新的Token持有者,那么Token增发本质上是将财富从原有Token持有者转移给新的Token持有者。因此,在短期,Token增发主要是财富再分配;在长期,新老Token持有者的利益都绑定在Token价值上升上。

信任基础、共识算法和共识成本#

公链的核心是共识算法,共识算法有两个关键点:

一是Token增发;

二是分布式账本的记账权分配。

如果Token增发主要为奖励矿工维护分布式账本的贡献,那么记账权分配主要为防范作恶矿工对分布式账本的破坏。我们从信任基础角度给出共识算法的一个经济学分析框架。

PoW—基于技术的信任#

在PoW中,矿工参与共识算法不需要持有Token,PoW挖矿完全是随机性的,矿工控制的算力越大,获得记账权概率越大。

在PoW中,矿工之间是竞争关系,不存在交互式沟通协作。谁先找到随机数Nonce,谁就获得记账权和出块奖励,而其他矿工之前所做的工作就基本作废。

挖矿的开放性以及矿工之间的竞争关系,使得在Token价格上涨时,挖矿成本攀升。一旦有矿工投资于算力,在增加自己挖矿成功概率的同时,也降低其他矿工的挖矿成功概率。因此,一个矿工对算力的投资会对其他矿工构成负外部性。从而导致矿工间进入“军备竞赛”。

总的来说,PoW体现了基于技术的信任,主要靠技术为挖矿创造了一个不依赖于矿工链外身份或信用的环境,矿工之间是竞争关系,但难以内生地抑制算力“军备竞赛”对挖矿成本的抬升。

PoS—基于制度的信任#

在PoS中,矿工参与共识算法需要持有Token,因此有对PoS型公链的风险敞口,但面临的硬件设施要求比PoW低得多。风险敞口的大小取决于矿工是否需要锁定Token。

锁定Token是暂时放弃根据市场情况出售Token的权利,即暂时放弃Token流动性。放弃Token流动性的成本与锁定Token的数量和时间正相关,更与持有Token的策略有关。

PoS矿工有两个显著特点。第一,矿工的链外身份和信用很重要,矿工需要向其支持者“拉票”。矿工的过往表现,比如出块率以及奖励分享慷慨程度,会直接影响其信用和 “得票” 。作恶的矿工会在选举中被选下去。第二,不同矿工之间存在一定合作关系。矿工可以顺序或VRF方式进行生产区块,但最终全体矿工会对候选区块运行拜占庭协议直到达成共识。

总的来说,PoS体现了对制度的信任。制度是为提高群体合作效率而针对群体成员引入的行为规则。矿工的链外身份和信用,矿工选举程序,以及矿工在区块生产和达成共识上的合作关系,都是制度的体现。

共识成本#

不管是PoW,还是PoS,共识算法的目标都是在存在各种差错、恶意攻击以及异步的分布式网络中,并且在没有中央协调的情况下,确保分布式账本在不同网络节点上副本的“最终一致性”。达成这种一致状态毫无疑问需要成本,我们称之为“共识成本”。

在PoW中,共识成本主要体现为挖矿成本,即在挖矿硬件设施上的投资以及运行这些硬件设施消耗的能源,可以称之为“技术成本”。PoW有难以内生地抑制算力 “军备竞赛” 对技术成本的抬升。

在PoS中,尽管PoS中的各种制度可以提高群体合作效率,但制度的持续、有效和稳健运行却非易事。PoS依赖链外身份和信用机制以及针对群体互动的程序性安排,这些机制设计对PoS的共识成本有很复杂的影响,可以称为“制度成本”。

每种共识算法都在不同程度上依赖基于技术的信任以及基于制度的信任,并因此分别产生技术成本和制度成本,共识成本则是技术成本和制度成本之和。对基于技术的信任的依赖程度越高,技术成本越高,反之则反是。这一关系对基于制度的信任和制度成本亦然。完全依赖基于技术的信任,或完全依赖基于制度的信任,都会造成比较高的共识成本。我们认为,存在两种信任基础之间的最佳配比,使得共识成本最小(图1)。

共识成本
图1 共识成本

PlatON的经济设计目标#

基于前文的分析,PlatON的经济设计主要有以下目标:

第一,选择PoS。我们认为,PoW的能源消耗过高。面对现实世界的能源限制,PoW的市场份额不可能无限增长。PlatON的共识算法被称为PPoS(PlatON PoS)。

第二,降低共识成本。PPoS使用链外身份和信用机制以及程序化安排,但通过VRF引入的随机性来降低对它们的依赖程度。这样能有效抑制贿赂、共谋等行为。

第三,加强公链内经济活动与公链支持的经济活动(即数据和算力流通市场)之间的耦合关系,为Token价值提供支撑。

第四,内生地抑制PPoS矿池规模扩张。

PlatON的经济方案#

PlatON中的经济周期#

经济周期

在介绍PlatON的经济方案前,为了方便后续理解,先对PlatON经济模型中的几个基本经济周期进行介绍:

  • 增发周期

    PlatON设计为每年固定增发,这个年度周期在PlatON中不是自然时间周期,而是区块高度周期,基于一年365.25天为标准,根据一段时间范围内的平均出块时间(时间范围取当前区块往前一年),计算出当前增发周期区块数。为使得增发逻辑总是在结算区块中处理,设计时将增发周期设计为结算周期的倍数,因此增发区块也是结算区块。由于平均出块时间的不确定性,增发周期内的结算周期数会动态调整。

  • 结算周期

    PlatON中,考虑到系统处理性能,将锁仓处理、质押锁定、Staking奖励发放、增发、节点排名等逻辑都周期性集中处理,这个周期就称为结算周期。结算周期的最后一个区块称为结算区块,统一处理各种周期性的处理逻辑。结算周期为共识周期的倍数,固定为10750个区块。

  • 共识周期

    每个共识周期固定生产430个区块,其中第410个区块为选举区块,用来选出下一个共识周期的43个验证节点。

LAT发行#

PlatON公链内的Token被称为LAT,LAT不设硬顶,分为初始发行和增发。

初始发行#

LAT初始发行按一定比例分配给创始团队、LatticeX 基金会、学术基金、生态基金、计算士基金、私募发行方和预留,通过将分配的账户及余额参数信息写入到创世区块配置中来实现,并引入相应的锁定机制。

初始分配-中文

初始发行的锁定通过锁仓合约进行控制,按照设定好的锁定期进行锁仓和解锁,锁仓的金额不可提前解锁。为提高系统处理性能,锁定期必须是结算周期(10750blocks)的倍数,因此每一个锁定期解锁点(解锁区块高度)都是结算周期的结算区块(结算周期的最后一个区块)。

为了保障锁仓账户权益,锁仓的LAT可以用于验证节点的质押和委托,在解除质押或委托时,该质押和委托的LAT重新返回到锁仓合约。

根据锁仓计划,达到解锁区块,锁仓合约自动解锁对应的该解锁LAT到锁仓账户地址内。

假设A账户锁仓计划为(总计锁仓1000LAT):

  • 锁定1个结算周期,锁定数量:100LAT

  • 锁定2个结算周期,锁定数量:300LAT

  • 锁定3个结算周期,锁定数量:600LAT

则解锁处理流程如下图所示:

正常解锁锁仓LAT

由于存在锁仓LAT用于质押或委托,而质押或委托未到期退回,导致到达解锁区块,锁仓合约内该账户锁仓余额不足解锁数量,此时的处理方法是全部解锁,并记录一个“欠账数”,并在每个结算区块检查是否存在“欠账数”,以及锁仓合约内该账户锁仓余额是否有入账,有的话继续解锁,直到“欠账数”归零。

同时需要指出的是,当锁仓LAT用于验证节点质押,质押的LAT被处罚削减时,系统会反馈到锁仓合约,并将“锁仓待解锁量”扣减对应的处罚金额。

LAT增发#

增发主要是为了激励矿工维护分布式账本,在纯靠交易手续费作为矿工激励无法满足的情况下,通过增发的出块奖励补偿他们承担的成本和风险。同时持续的增发可以稀释持有人的Token,从而促进更多的人参与PoS共识验证,保证网络更稳定。

通常增发有两种方式:

  • 批量增发:定期分批次增发,每个批次增发一定的比例。如Cosmos增发方式。
  • 连续增发:不定期增发,可以理解为将批量增发模式的批次缩短到一个非常小的数值。如EOS增发方式。

PlatON采用批量增发模式,即每年(一个增发周期)一次性增发。相对于连续增发,批量增发更加简单实用,同时可以提高链的性能。

按照年度预期出块数为增发周期进行LAT增发。相对于上一年底的LAT总发行量每年固定增发2.5%,在增发区块(上个增发周期最后一个区块)进行增发,将其中增发的2%转入到由智能合约控制的奖励池,并由PPoS共识算法的运行逐轮释放奖励给验证节点。余下的0.5%转入到一个信托基金,由LatticeX 基金会作为信托人用来奖励未来的PlatON基础协议开发者。

增发周期

因此当前增发周期LAT增发量用公式可表示为:

$$f(x)=W\times(1+a \% )^{x-1}\times a \% $$

其中:

$x$:当前增发周期序号,从创世区块开始到当前为第几个增发周期(创世区块开始为第一年,增发周期1)。

$W$​:初始发行流通的LAT总量,创世区块第一年增发的基数。

$a%$ :增发周期固定的增发比例。

奖励池获得的增发LAT将用于验证节点的出块奖励以及Staking奖励。具体将在激励机制部分进行详述。

PPoS共识#

PlatON采取在小规模的备选节点中随机选取节点参与BFT共识,在验证节点数量和性能之间做权衡。任何LAT持有者可以通过质押参选验证节点(备选节点候选人),其他LAT持有者通过委托的方式持续投票,从而维持一个小规模的动态验证节点候选(备选节点)列表,然后在这个候选列表中通过VRF和概率分布随机选取若干验证节点进行出块和验证。VRF的特性保证了选取的随机性,从而降低了验证节点被攻击的机率,同时又提高了去中心化程度。而概率分布则可以让权益高的备选节点被选中的概率较高,从而激励备选节点想办法增加自己的权益,随着整个系统质押LAT数量的增加,整个系统的安全性就会越高。通过这种方法缩小了验证节点的选取范围,从而保证了共识效率,又有效的避免了过于中心化的问题。

角色说明#

  • 备选节点候选人

    想参与PlatON区块生产的LAT持有者,质押锁定一定数量的LAT到质押合约内,成为备选节点候选人。

  • 备选节点

    排名(排名规则参见备选节点选取)在201名前的备选节点候选人称为备选节点,备选节点参与每个共识周期的验证节点选举,可获得结算周期LAT增发的分配奖励。

  • 验证节点

    由系统通过VRF随机函数在201个备选节点中随机选出43(正常状态)个节点作为共识周期验证节点。

  • 提议人 一个共识周期生产430(43个验证节点 * 每个验证节点连续出10块)个区块,43个验证节点轮流成为提议人,每个验证节点的出块时间为20秒。

  • 委托人

    把自己的LAT委托给备选节点候选人的LAT持有者。验证节点不能相互委托,也不能自委托。

角色关系示意图如下,为方便后续描述,备选节点候选人包含备选节点和验证节点。备选节点包含验证节点。

角色说明

总体流程概述#

  1. 质押成为备选节点候选人

    LAT持有者通过质押超过一定的LAT作为保证金成为备选节点候选人,备选节点候选人总数不限。

  2. 委托LAT

    LAT持有者可将自己的LAT委托给备选节点候选人,其中备选节点和验证节点在参与共识过程中可获得收益,收益可基于节点设置的委托奖励比例与委托人分享。委托人可以随时部分或者全部赎回委托,没有额外的冻结期。

  3. 选举备选节点

    每个结算周期的最后一个区块(即结算区块),系统根据当前备选节点候选人的排名,取排名前201的节点为下个结算周期的备选节点,参与下个结算周期共识。备选节点可获得Staking奖励。

  4. 选举验证节点

    每轮共识需要43个验证节点,系统会使用VRF方式从当前备选节点中随机选取43个验证节点参与下一轮共识。

  5. 共识出块

    验证节点轮流成为提议人进行出块,其他验证节点进行区块验证,共同运行CBFT协议完成一轮共识(每轮共430个区块),出块节点获得交易手续费和出块奖励。

  6. 退出备选节点候选人

    在结算周期的结算区块获取新排名,排名201名后的节点变为备选节点候选人,不再享受Staking奖励。被举报多签且举报属实或共识轮出块率为0的情况下,节点会立刻被淘汰出备选节点候选人列表。

验证节点的选举#

质押成为备选节点候选人#

任何LAT持有者可通过质押一定的LAT(必须超过一个事先确定的最低数量)作为保证金成为备选节点候选人,备选节点候选人总数不限。质押的LAT可以有两个来源:

(1)账户余额的LAT:指账户的余额,就是账户中流通的,可以随时使用的LAT。

(2)账户锁仓的LAT:指账户在锁仓合约进行锁仓没有解锁的那部分LAT。

成为备选节点候选人还需要提交节点程序的真实版本号、节点程序的真实版本号签名、BLS的公钥、BLS的公钥证明Proof、用于接受出块奖励和Staking奖励的收益账户(后续支持修改)、节点将获得的收益(包含出块奖励和staking奖励)分配给委托人的奖励比例(后续支持修改)、节点的描述(后续支持修改)、节点的官方主页(后续支持修改)、节点的第三方信息披露身份ID(可选, keybase.io账户生成的16位字符-后续支持修改)、被质押节点的名称(后续支持修改)、被质押的节点ID、质押的LAT数量等信息。质押需要遵守以下规则:

  • 节点不能重复质押。

  • 系统将发起质押交易区块到当前结算周期的结算区块的区间为犹豫期,在犹豫期发起撤销,节点立即退出备选节点候选人列表,质押LAT立即返回用户质押账户。

    质押犹豫期
  • 节点的版本号低于当前链版本号或预生效版本号时,质押失败。

  • 一旦成功将节点质押为备选节点候选人,质押使用的账户与该节点ID将一一对应,后续相关操作都需要使用该质押账户发起签名交易,请注意安全保管质押账户。

备选节点候选人可以接受委托。在当前结算周期的结算区块,如果按照当前总质押数量(自质押和委托数量的总和)排名进入到201名,即可当选为下个结算周期的备选节点。

增加质押#

所有备选节点候选人可随时增加质押的LAT数量,从而提高备选节点候选人的排名。

  • 如果因为主动撤销质押或被处罚,撤销质押正在处理(质押LAT退回需要一段时间的冻结期)或已经完成(质押LAT已释放到原质押账户),则不能增加质押。
  • 用来增加质押的LAT可以是账户余额的LAT,也可以是账户锁仓的LAT。
  • 只能从初始质押账户增加质押。
备选节点选取#

备选节点总数最多是201,每个结算周期最后一个区块(结算区块)会重新选取。

选举验证人

选取的规则主要是根据节点的排名取前201,排名规则如下:

  1. 首先按照运行的系统版本号从高到低排序。
  2. 再按照总质押数量(自质押和委托数量的总和)从高到低排序。
  3. 如果总质押数量(权益)相等,则按照初始质押的区块高度排名,质押区块高度小的优先。
  4. 如果初始质押的区块一样,再按照质押时在同一个区块中的交易的序号排名,序号小的优先。
验证节点选取#

每个共识周期负责生产430个区块,在共识周期的第410区块从201个备选节点中选举下一轮共识周期验证节点,第1个共识周期的验证节点是在创世区块中内置的。

为防止新选取的验证节点由于网络连接慢、区块不同步等原因影响共识效率,保证共识的容错性,每次不全部替换所有43个节点,只替换部分验证节点,具体规则如下:

  • 从当前共识轮的43个验证节点中淘汰部分验证节点

    • 优先淘汰异常状态的验证节点(假设数量为$F_1$)必须被淘汰,包括被举报双签验证属实的,出块率为0被处罚的,版本低于预生效版本(升级提案如果投票成功,则升级提案中的版本号为预生效版本,具体参考PlatON治理方案)的,申请退出且不在备选节点列表的。

    • 再淘汰部分正常的验证节点,假设剩余的备选节点数量为$L$,$u$为每轮验证节点总数,则被淘汰的正常验证节点数量$F_2$计算如下:

      $$R=(u-1)/3$$

      $$F_2^{'}=IF(F_1>=R, 0, R-F_1)$$

      $$F_2=IF(F_2^{'}>L, L, F_2^{'})$$

    • 淘汰的正常验证节点按照以下规则进行排序后选取前 $F_2$ 个:任期(连续参与共识轮的次数)由长到短,总质押数量由小到大,初始质押的区块高度由高到低,质押交易在同一个区块中的交易序号由大到小。

  • 从备选节点列表中通过VRF选取$F=F_1 + F_2$个新的验证节点,备选节点数量不足则全部选取

    为保证足够的随机性,降低攻击者的攻击,选取算法的伪随机种子生成规则如下:

    • 每个备选节点在本地产生公私钥对$(pk, sk)$,私钥本地保管用于生成随机数,公钥公开用于验证随机数。

    • 创世区块生成一个随机数作为初始伪随机种子$r_0$。

    • 假设当前为第$i$个区块,第$i-1$个区块产生的随机种子参数为$r_{i-1}$,负责生产当前区块的验证节点的公私钥对$(pk,sk)$。当前验证节点使用如下VRF生产第$i$个区块的随机数种子$r_i$:

      $$\pi_i=SIG_{sk}(r_{i-1}), r_i=H(\pi)$$ (1)

      其中$SIG_{sk}(r_{i-1})$表示用私钥$sk$对当前随机种子参数$r_{i-1}$签名,$H(\cdot)$是哈希函数,对任意输入,$H(\cdot)$均输出一个长度为$l$的二进制数。哈希函数$H(\cdot)$作为随机预言的性质决定了,$r_i$ 在$[0, 2^l-1]$之间均匀分布,从而$\frac{r_i}{2^l-1}$服从$[0,1]$之间的均匀分布。

    • 创世区块中初始指定的验证节点负责打包第一轮的所有区块并在每个区块中生成一个随机种子,每个区块中的随机种子由提议人根据前一个区块的随机种子通过VRF函数计算得到。

每一轮第410个区块的提议人负责选取下一共识轮的验证节点,假设当前为第$n$个区块,选取规则如下:

  • 区块提议人根据前一个区块的随机种子生成当前区块的随机种子及其证明$(r_n, \pi_n)$

  • 考虑某一个备选节点,假设排名为$i$,共有$w_i$张选票,所有备选节点的总选票数为$W=\sum_{k=1}^{201}w_k$,选择一个正整数$m<W$,令$p=\frac{m}{W}$。对该节点,找到$X$使得

    $$\sum_{k=0}^XB(k,w_i,p)\leq\frac{r_{n-i} \oplus r_n}{2^l-1}<\sum_{k=0}^{X+1}B(k,w_i,p)$$ (2)

    其中, $B(k,n,p)$为二项分布$B(n,p)$的概率密度函数,而$F(x)=\sum_{k=0}^xB(k,n,p)$为其累计概率分布函数。

    因此,式(2)可以等价表述为$F(X)=\frac{r_{n-i} \oplus r_n}{2^l-1}$,从而

    $$X=F^{-1}(\frac{r_{n-i} \oplus r_n}{2^l-1})$$ (3)

    因为$\frac{r_{n-i} \oplus r_n}{2^l-1}$服从$[0,1]$之间的均有分布,所以X服从二项分布$B(n,p)$,并且

    $$E(X)=np$$ (4)

    因为当前随机种子参数和公钥是公开的,PPOS共识算法的参与者很容易验证$(r_n, \pi_n)$ ,根据备选节点的得票数计算其$X$值。

  • 计算所有备选节点的$X$值,最高的$F$个$X$值对应的备选节点就成为验证节点。经VRF得到的$X$值越高,越有可能被选为验证节点。但因为VRF引入的随机性,最终选出的$F$个验证节点不一定正好是得票最高的$F$个备选节点。

退出备选节点候选人#

备选节点候选人可以主动申请退出,验证节点被处罚也可能被强制退出。为了维护整个网络的安全,退出命令执行以后,所质押的LAT需要经过一段较长时间的冻结期才能真正到账,冻结期可以让恶意攻击就算在形成之后才被检测到,依旧能受到惩罚。

申请退出验证节点处理流程:

退出验证人流程

(1)从申请退出验证节点的区块开始,该节点即时被移出备选节点候选人列表,该节点将不可接收委托和增加质押金。如果节点为当前结算周期备选节点,节点可继续参与VRF共识轮验证节点的选举,同时在结算区块可获得Staking奖励。

申请退出1

(2)当前结算周期的备选节点被系统处罚退出或者扣除节点自有质押金后不满足备选节点候选人所需的最低质押门槛时,则该处罚区块实时将节点移出当前结算周期的备选节点名单和备选节点候选人列表,节点不再继续参与VRF共识轮验证节点选举,当前结算周期这个节点无Staking奖励。

系统处罚退出1

(3)退出验证节点命令执行后,节点自有质押LAT退回到质押账户时间:

  • 犹豫期未锁定的质押LAT,退出命令执行后,即时到账。

  • 已锁定的质押LAT,退出命令执行后,继续冻结锁定168结算周期(不包含当前结算周期)

    退出冻结锁定期

注意:

如果当前节点参与了升级提案投票,且提案没有投票结束,则需要判断解冻区块是否大于投票截止区块,如果大于,则继续按照默认的解冻区块进行质押LAT释放。如果小于,则按照投票截止区块进行质押LAT释放。退回的质押LAT原路返回。

(4)备选节点候选人退出,委托的LAT处理说明:

  • 备选节点候选人主动申请,在当前结算周期的结算区块,节点接收到的委托LAT全部解除锁定,需要由委托人主动申请赎回,提交赎回后,委托的LAT即时退回到委托人账户。

    主动退出委托解除
  • 备选节点候选人被动处罚退出,从处罚区块开始,节点接收到的委托LAT全部解除锁定,需要由委托人主动申请赎回,提交赎回后,委托的LAT即时退回到委托人账户。

    系统处罚退出委托解除

(5)退出申请必须由节点原质押账户发起。

委托人#

委托#

LAT持有者可以通过把手中的LAT委托给备选节点候选人,以此获取收益。

  • 委托的LAT有两个来源:

    (1)账户余额的LAT:指账户的余额,就是账户中流通的,可以随时使用的LAT。

    (2)账户锁仓的LAT:指账户在锁仓合约进行锁仓的那部分LAT。

  • 为防止恶意委托攻击,单笔委托有最小LAT数量限制。

  • 委托的LAT进入下个结算周期开始锁定,委托LAT不主动赎回,委托LAT将一直持续锁定,系统不支持自动赎回功能。同时只有锁定一个完整结算周期才会参与分享节点收益。

  • 备选节点候选人一旦申请退出或被系统处罚退出,将无法继续委托。原委托LAT将解除锁定,用户需要主动赎回委托的LAT。

委托奖励#

基于PPoS共识,委托人委托LAT给备选节点候选人,从而影响备选节点候选人的排名,排名进入前201名的备选节点候选人即可成为每个结算周期的备选节点并获得Staking奖励,同时有机会成为验证节点,参与出块并获得出块奖励和区块内的交易手续费奖励。委托人作为维护备选节点候选人列表排名的重要影响因素,为提高排名,吸引委托人进行委托,备选节点候选人需要慷慨的对给予其获得系统奖励的委托人分配委托奖励。具体分配给委托人的奖励比例由节点在质押成为备选节点候选人阶段提交。

  • 委托奖励包含两种来源:

    (1)基于委托奖励比例分享的出块奖励:委托的备选节点候选人成为验证节点,参与出块获得的出块奖励。将出块奖励按照该节点的委托奖励比例分享给节点名下委托人。

    (2)基于委托奖励比例分享的Staking奖励:委托的备选节点候选人成为备选节点,在结算区块获得Staking奖励,将Staking奖励按照该节点的委托奖励比例分享给节点名下委托人。

  • 委托奖励遵循以下规则:

    • 委托奖励结算间隔:每间隔一个结算周期结算一次委托奖励。

    • 委托奖励范围:锁定一个完整结算周期的委托(有效委托)才有委托奖励。任何中途退出的锁定委托、未锁定委托以及节点退出解除锁定的委托都没有委托奖励。

    • 委托奖励分配:根据节点名下委托人之间的有效委托比例分享委托奖励,有效委托越多,委托奖励越多。

    • 委托奖励领取:需要委托人主动发起领取交易,领取交易可一次性领取所有委托节点名下全部可领取的委托奖励。同时如果全部赎回某节点委托,将自动领取某节点下全部可领取的委托奖励。

    • 在以下情况下,节点在该结算周期将不会分享委托奖励:

      (1)某结算周期内,节点名下没有有效委托。

      (2)某结算周期内,节点被处罚并强制退出备选节点候选人列表。

      (3)节点申请退出备选节点候选人后在当前结算周期的下一个结算周期不会再分享委托奖励。

领取委托奖励#

委托人在将LAT委托给备选节点候选人后,当委托的节点产生收益(获得出块奖励和Staking奖励)且委托LAT锁定完整结算周期时,委托的LAT将会产生委托奖励。委托人可以随时提交领取委托奖励交易。

  • 领取委托奖励,支持领取当前所有已结算的委托奖励。不支持部分领取。
  • 委托多个备选节点候选人,每次提交一个领取委托奖励交易,将会自动领取所有已委托节点名下产生的委托奖励,且一次性全部领取。
赎回委托#

委托人可以随时提交赎回委托交易,因为委托人在一定程度上可以说是无法作恶的,所以委托人赎回委托后的LAT没有额外的冻结期。同时与退出备选节点候选人的解除质押有所区别,解除质押是全部解除,但赎回委托支持部分赎回(也就是减持)和全部赎回。

  • 委托交易区块到当前结算周期的结算区块的区间为犹豫期,赎回委托,委托LAT立即退回到用户委托账户。

  • 委托的LAT在下个结算周期开始锁定,锁定的LAT,赎回委托,委托LAT在该结算周期的结算区块退回到用户委托账户(原路返回)。

    赎回委托1
  • 当委托的LAT包含未锁定和锁定状态的LAT,优先赎回未锁定的LAT,剩下的部分从锁定的LAT赎回。

  • 当委托的LAT包含使用账户余额委托的LAT和使用账户锁仓余额委托的LAT,优先赎回(减持)使用账户余额委托的LAT。如果不足用户指定的赎回数量,剩下的部分从使用账户锁仓委托的LAT赎回。

  • 为防止恶意委托攻击,单笔赎回委托有最小LAT数量限制,同时为防止小额委托大量遗存,赎回委托数量后,剩余委托量不足最小LAT数量,则自动全部赎回所有委托。

  • 当赎回某节点全部委托时,将自动领取该节点下全部可领取的委托奖励。

共识#

每个验证节点轮流成为提议人,每个提议人有20秒的窗口期,最多能出10个块。即若在20秒内出满10个块,则立即轮到下一个提议人出块。若20秒内未能出10个块,则依然轮到下一个提议人出块,若该轮出块未满430个,则继续循环。

具体共识方案参见PlatON共识方案。

激励机制#

验证节点的成本分析#

PlatON中,维护一个验证节点的成本包括以下方面:

  • 设备电力
  • 系统安全维护
  • 委托人支持服务
  • 质押锁定流动性成本

激励基金来源#

基于PoS共识公链,为促进矿工维护分布式账本,保证有足够的Token来承载未来强大丰富的分布式生态应用,并促进用户质押提供链的安全性,一般PoS区块链的激励基金都是来源于通胀增发。

PlatON网络激励金来源包含以下几个方面:

  • 系统增发

    每个增发周期固定增发的80%(相当于前一年发行总量的2%)转入到奖励池。增发是激励基金的主要来源。

  • LatticeX 基金会补贴

    前10年(增发周期)基金会为鼓励和吸引更多节点加入,通过锁仓发行的方式补贴到奖励池,从而提高前10年(增发周期)节点的收益率。

  • LatticeX 基金会验证节点收益

    为维护主网的稳定运行,LatticeX 基金会赞助质押并维持7个验证节点。LatticeX 基金会赞助的验证节点运行中的收益将全部进入到奖励池,作为社区验证节点的激励基金。

  • Slash削减惩罚金

    验证节点由于低出块率受到系统削减惩罚,惩罚金全部进入到奖励池,供下一年增发周期进行分配。

激励规则#

奖励发放

在PlatON中,对验证节点有以下三类激励方式:

  • 出块奖励

    所有参与到共识出块的验证节点,将会获得所出区块的出块奖励。出块奖励根据随着生产的区块实时发放。奖励池的50%用于区块奖励,单个区块的出块奖励金额在每个增发周期初根据奖励池的余额确定,整个增发周期保持不变。第$n$个增发周期的单个区块出块奖励如下:

    $$B(n)=\frac{R_{v\times (n-1)}\times 50 \%}{v}$$

    其中,

    $R_{v\times (n-1)}$:第n年增发周期初(区块 $v\times (n-1)$ )奖励池的余额。

    $v$ : 系统增发周期的区块数,非固定参数,一年内产生的区块总数,此参数根据出块平均间隔计算得出。

  • 交易手续费

    负责生产区块的验证节点可获得对应区块内所有交易的手续费。交易手续费随区块实时发放。

  • Staking奖励

    每个结算周期内的所有备选验证节点,都能获得Staking奖励作为质押锁定的回报。奖励池的50%用于Staking奖励,单个结算周期的Staking奖励在每个增发周期初根据当时奖励池的余额确定,整个增发周期不变。Staking奖励在结算区块平均发放给当时的备选节点(包括当前共识轮的验证节点)。

    当前增发周期的每个结算周期的Staking奖励: $$S(n)=\frac{c\times R_{v\times (n-1)}\times 50 \%}{v}$$

    在结算区块上,假设当前结算周期的备选节点数量为$m$,则当前结算周期每个备选节点的Staking奖励:

    $$I(n)=\frac{S(n)}{m}$$

    其中,

    $R_{v\times (n-1)}$:第n年增发周期初(区块 $v\times (n-1)$ )奖励池的余额。

    $v$ : 系统增发周期的区块数,非固定参数,一年内产生的区块总数,此参数根据出块平均间隔计算得出。

    $c$: 系统结算周期的区块数,固定为10750个区块

惩罚机制#

区别于PoW公链,PoS公链一般并不依靠算力来维护系统安全,PoS公链要求参与验证的节点质押一定数量的Token作为担保,当节点出现不良行为时,系统将通过Slash削减节点的质押金进行惩罚,以此来提高作恶成本,约束规范节点行为,保证系统的稳定与安全。PlatON也引入相应的惩罚机制。

被惩罚的行为#

在PlatON中,任何尝试分叉区块链和长期不在线的节点都可能会受到Slash削减惩罚。

  • 双签\双出

    无论是软分叉还是硬分叉,都需要通过投票来共同决定。任何节点私自试图分叉的行为,都会受到 Slash 削减惩罚。

    双出,是指在同一个view中,节点在同一区块高度下出现双块(或多块)的情况。

    双签,是指在同一个view中,节点对同一个高度不同hash的区块出现多次签名。

  • 长期不在线

    节点长时间无法连接,无法正常出块或验证签名,节点将会受到 Slash 削减惩罚。

PlatON的惩罚方式#

PlatON目前支持以下处罚方式:

  1. 扣除节点自有质押金

    从节点自有质押金(锁定的自有质押金)中扣除一定比例或固定数量的LAT作为惩罚金。扣除后如果节点剩余自有质押金(包含已锁定和处于犹豫期未锁定的质押金)不满足备选节点候选人的质押门槛,备选节点候选人将立即失去参选验证节点资格,系统将自动将其质押撤销。扣除规则如下:

    • 扣除节点自有质押金,仅扣除当前结算周期已锁定的节点自有质押LAT,处于犹豫期未锁定的质押LAT不参与扣除。
    • 节点如果同时质押了账户余额和锁仓余额的LAT,优先扣除使用账户余额质押的LAT,然后扣除锁仓余额质押的LAT。
    • 扣除账户锁仓余额质押的LAT时,锁仓合约中该账户的剩余解锁量和参与质押量对应扣除。
  2. 强制退出备选节点候选人

    备选节点候选人遭受惩罚被动退出,不再参与备选节点和验证节点选举,并立即被撤销质押,退出备选节点候选人列表。委托给该节点的LAT全部失效并解除锁定,委托解除的LAT需要用户自己申请赎回(委托人太多,自动退回非常影响系统性能)。节点剩余的自有质押金继续锁定168个结算周期后自动退回到节点质押账户。

    移出候选验证人名单
    • 被强制退出的节点,不参与该结算周期结算区块的Staking奖励分配。

    • 被撤销质押时,处于犹豫期未锁定的质押LAT不需要继续锁定168个结算周期,即时退回。

    • 委托的LAT在节点被撤销质押时,即可赎回委托的LAT,赎回的委托LAT立即到帐,但是需要用委托人自行申请赎回。

    • 被强制退出的节点,只有在锁定期结束,节点质押LAT退回后,方可继续使用该节点ID重新质押。

    • 被强制退出的节点,重新使用该节点ID重新质押时,之前该节点已失效但未赎回的委托LAT,不会记入重新质押的验证节点(备选节点候选人)名下。

    • 当被强制退出的节点参与了提案的投票,且提案的投票截止期大于168个结算周期,解锁区块延后到投票截止区块。

    • 如果被惩罚并强制退出的验证节点正参与当前共识轮的工作,验证节点可继续完成本共识轮的出块和验证工作。如果节点在共识轮内的410区块后被处罚,如果确定的下个共识轮验证节点有该节点,则节点可继续参与下个共识轮的出块和验证。

  3. 限制节点资格

    节点被临时取消验证节点资格,锁定56个结算周期,锁定期间没有资格成为验证节点参与出块,并且也无法参与治理投票,也没有Staking奖励。

PlatON的惩罚机制#

双签\双出-人工举报和系统处罚#

在PlatON中,双签表示在同一个view中对于同一个块高不同hash进行签名,表现在CBFT里即双签ViewChangeVote和双签PrepareVote。双出表示出块节点在同一个view中对同一个高度出了两个不同hash的区块。本质上出块也是对区块进行了签名验证,因此PlatON中节点双签和双出统一为双签。

节点出现双签行为,如果被任何用户发现,都可以发起双签举报交易,提交双签类型和证据(证据可以通过提供的查询双出、双签证据接口进行获取)给系统slashing合约,经slashing合约验证确认属实后,系统将会削减被举报节点自有质押金的10‱作为惩罚金,同时将被举报节点强制退出备选节点候选人并撤销质押。处罚金的50%给与举报人,50%置入奖励池用于第二年的出块和Staking奖励。

  • 双签举报有一个有效期,双签超过27个结算周期后的举报为无效举报。

    举报有效期
  • 举报遵循先后顺序原则,仅最先举报的用户可获得惩罚金。后续相同举报为无效举报。因此在举报前最好查询一下是否已被举报过双签。

  • 一次双签举报仅支持对一个验证节点的一个双签行为进行举报。多个双签举报需要多次提交。

  • 为防止误判或者人为恶意伪造举报证据,slashing合约遵循以下验证规则:

    • 举报证据是否在有效期内,不在有效期内则为无效举报。
    • 举报证据的签名是否为验证节点签名,不是则为无效举报。
    • 举报的双出区块是否为被举报节点负责生产的区块,不是则为无效举报。
    • 举报的双签投票区块是否为被举报节点负责验证的区块,不是则为无效举报。
    • 举报的双签区块是否是未来区块,是则为无效举报。
零出块-系统自动判断和处罚#

PlatON基于出块率的高低来判断节点是否在线以及节点软硬件及网络环境是否满足要求。在每个共识轮(一个共识轮430区块)的410区块判断上个共识轮验证节点的出块率情况。

低出块率验证

验证节点需满足以下两个条件会被系统判定为零出块:

  • 某个共识周期被选为验证节点,没有生产任何区块或生产的所有区块都没有被其他验证节点确认
  • 在随后的20个共识周期(约2个半小时)内没有出块

节点零出块后会被系统处罚,被扣除相当于2500个区块的出块奖励,并被限制节点资格,如果扣除后质押金不够10万LAT,则强制退出备选节点候选人

交易手续费#

PlatON 上每个应用的运行都要消耗一定的资源(包括算力、带宽、存储、数据等)。为实现资源的公平合理使用,避免资源的滥用,沿用以太坊的Gas机制,实现资源的合理调度和有效性验证。

Gas手续费机制#

为了防止代码的指数型爆炸和无限循环,PlatON沿用以太坊的Gas机制,对每笔交易执行消耗的资源(内存、CPU、带宽)进行度量。用户在提交交易时,可以自行设置GasPrice,即每个Gas的价格,以此来控制提交交易的手续费。

Gas费用说明#

除了普通的转账交易外,PlatON还支持以下经济和治理相关的内置合约交易,我们采取按照接口定制固定gas消耗加上input参数定制可浮动的gas消耗。

转账交易#

转账交易(不含input参数)的Gas消耗为21000Gas。

内置交易#

内置交易的Gas计算规则为:

内置交易Gas消耗 = 交易固定gas消耗 + 交易动态gas消耗规则 + (data中的非0值byte个数*68) + (data中的0值byte个数*4)
  • Staking交易
接口名称交易固定gas消耗交易动态gas消耗规则
发起质押59000
修改质押信息39000
增持质押47000
撤销质押47000
发起委托43000
减持/撤销委托35000
  • 治理交易

为限制文本提案、参数提案、升级提案、取消提案的恶意提交,增加最低GasPrice限制。

接口名称交易固定gas消耗交易动态gas消耗规则最低GasPrice(GVon)
提交文本提案3500001500000
提交参数提案5300002000000
提交升级提案4800002100000
取消提案5300003000000
给提案投票32000
版本声明33000
  • 举报惩罚交易
接口名称交易固定gas消耗交易动态gas消耗规则
举报重复签名63000
  • 锁仓交易
交易名称交易固定gas消耗交易动态gas消耗规则
创建锁仓计划68000本次锁仓的解锁次数×21000
  • 领取委托收益
交易名称交易固定gas消耗交易动态gas消耗规则
领取委托奖励8000委托的节点数量(nodeid+stakingNum) x 1000 + 未计算委托奖励的周期数 x 100