跳到主要内容

Alaya经济方案

公链设计原则#

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

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

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

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

在与公链有关的分布式经济体中,最重要的基础设施是分布式账本(可以称为分布式信任基础设施)。矿工作为分布式经济体核心成员,维护分布式账本,并需要承担一定成本和风险。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 共识成本

Alaya 的经济设计目标#

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

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

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

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

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

Alaya 的经济方案#

Alaya 中的经济周期#

经济周期

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

  • 增发周期

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

  • 结算周期

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

  • 共识周期

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

ATP 发行#

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

初始发行#

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

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

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

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

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

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

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

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

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

正常解锁锁仓ATP

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

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

ATP 增发#

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

通常增发有两种方式:

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

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

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

增发周期

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

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

其中:

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

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

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

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

PPoS 共识#

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

角色说明#

  • 备选节点候选人

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

  • 备选节点

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

  • 验证节点

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

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

  • 委托人

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

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

角色说明

总体流程概述#

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

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

  2. 委托 ATP

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

  3. 选举备选节点

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

  4. 选举验证节点

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

  5. 共识出块

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

  6. 退出备选节点候选人

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

验证节点的选举#

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

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

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

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

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

  • 节点不能重复质押。

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

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

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

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

增加质押#

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

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

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

选举验证人

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

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

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

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

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

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

    • 再淘汰部分正常的验证节点,假设剩余的备选节点数量为$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 函数计算得到。

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

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

  • 考虑某一个备选节点,假设排名为$i$,共有$w_i$张选票,所有备选节点的总选票数为$W=\sum_{k=1}^{101}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$个备选节点。

退出备选节点候选人#

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

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

退出验证人流程

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

申请退出1

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

系统处罚退出1

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

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

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

    退出冻结锁定期

[!NOTE|style:fATP|label:注意]

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

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

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

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

    系统处罚退出委托解除

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

委托人#

委托#

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

  • 委托的 ATP 有两个来源:

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

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

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

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

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

委托奖励#

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

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

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

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

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

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

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

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

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

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

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

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

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

领取委托奖励#

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

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

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

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

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

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

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

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

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

共识#

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

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

激励机制#

验证节点的成本分析#

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

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

激励基金来源#

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

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

  • 系统增发

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

  • Alaya 基金会补贴

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

  • Alaya 基金会验证节点收益

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

  • Slash 削减惩罚金

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

激励规则#

奖励发放

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

  • 出块奖励

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

    $$B(n)=\frac{R_{v\times (n-1)}\times50\%}{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)}\times50\%}{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 削减节点的质押金进行惩罚,以此来提高作恶成本,约束规范节点行为,保证系统的稳定与安全。Alaya 也引入相应的惩罚机制。

被惩罚的行为#

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

  • 双签\双出

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

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

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

  • 长期不在线

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

Alaya 的惩罚方式#

Alaya 目前支持两种处罚方式:

  1. 扣除节点自有质押金

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

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

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

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

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

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

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

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

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

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

Alaya 的惩罚机制#

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

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

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

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

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

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

  • 为防止误判或者人为恶意伪造举报证据,slashing 合约遵循以下验证规则: 1)举报证据是否在有效期内,不在有效期内则为无效举报。 2)举报证据的签名是否为验证节点签名,不是则为无效举报。 3)举报的双出区块是否为被举报节点负责生产的区块,不是则为无效举报。 4)举报的双签投票区块是否为被举报节点负责验证的区块,不是则为无效举报。 5)举报的双签区块是否是未来区块,是则为无效举报。

零出块-系统自动判断和处罚#

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

低出块率验证

当出块数量为零时,系统将节点强制退出备选节点候选人,不再参与验证节点选举,当前结算周期没有 Staking 奖励。

交易手续费#

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

Gas 手续费机制#

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

Gas 费用说明#

除了普通的转账交易外,Alaya 还支持以下经济和治理相关的内置合约交易,我们采取按照接口定制固定 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)
提交文本提案35000015000
提交参数提案53000020000
提交升级提案48000021000
取消提案53000030000
给提案投票32000
版本声明33000
  • 举报惩罚交易
接口名称交易固定 gas 消耗交易动态 gas 消耗规则
举报重复签名63000
  • 锁仓交易
交易名称交易固定 gas 消耗交易动态 gas 消耗规则
创建锁仓计划68000本次锁仓的解锁次数 ×21000
  • 领取委托收益
交易名称交易固定 gas 消耗交易动态 gas 消耗规则
领取委托奖励8000委托的节点数量(nodeid+stakingNum) x 1000 + 未计算委托奖励的周期数 x 100