Skip to content
This repository has been archived by the owner on Dec 10, 2020. It is now read-only.

Latest commit

 

History

History
184 lines (108 loc) · 8.11 KB

投票选举.md

File metadata and controls

184 lines (108 loc) · 8.11 KB

English version

启动配置

  • 验证节点

    • 最少 4 个,最多 100 个。
    • 验证节点负责打包交易,维护链的共识安全。
  • 信托节点(当前仅有Bitcoin信托)

    • 最少 3 个,最多 15 个。(针对Bitcoin信托)
    • 信托节点的概念基于跨链转接桥,当无法在原链内实现 ChainX 轻节点时,就会诉诸于信托节点的方式托管用户的跨链资产。信托节点由 ChainX 的验证人经过信托选举而来。
  • 分红周期

    • 150 个块,约 5 分钟。
    • 每个分红周期会发行一定数量的 PCX。
  • 选举周期

    • 正式网:12 个分红周期,1800 个块,约 60 分钟
  • 投票赎回锁定期

    • 用户投票赎回锁定期:72 个选举周期,主网 3 天
    • 节点抵押赎回锁定期:720 个选举周期,主网 30 天
    • 当用户从某个节点撤销投票的时候,撤票的 PCX 并不会立即成为可用余额,而是有一段时间的撤票锁定期。当撤票锁定期满后,用户可以手动进行解锁撤票金额,该撤票即可真正成为用户的可用余额。

基本概念

分红周期奖励

一个分红周期类似比特币一个块的概念,每个分红周期会发行一定量的 PCX 作为分红奖励。

类似Bitcoin,PCX 总量 2100 万,每隔 21 万个分红周期,奖励减半。 在前 21 万个分红周期,也就是初始轮分红周期,每个分红周期奖励为 50 个 PCX。 次轮分红周期奖励为25个PCX,依次类推。

分红周期节点奖励分配

团队奖励

在前 21 万个分红周期中, 50 个 PCX 的 20% 会分配给团队地址,即在前 21 万个分红周期,每个分红周期的所有节点总奖励 为 50 * 80% = 40 个 PCX。

团队分配上限为总量的 10%,即在初始轮分红周期团队才有奖励,之后无奖励。

资产挖矿

除了前 21 万个分红周期分配20%的分红奖励,其他所有奖励都将采用资产挖矿的方式进行分发。

资产挖矿的所有参与方以PCX为算力单位进行竞争,分为虚拟算力的跨链挖矿和真实算力的投票选举挖矿:

  • 跨链挖矿指跨链用户通过充值, 映射或锁仓等方式进入的各类链外资产,比如BTC、ETH等,将自动根据该跨链资产兑换PCX的价格和相应的跨链资产折扣D折合成虚拟的PCX跨链挖矿算力。每个跨链资产都有不同的跨链资产折扣, 跨链资产折扣的参数可通过社区投票调整。之所以会有跨链资产折扣,是因为PCX作为系统原生货币,理应比跨链资产获得更大的挖矿权重,鼓励用户更多地持有PCX。

  • 投票挖矿指用户所持有的真实PCX参与PoS系统的选举手动投票给某些节点。

用户的总挖矿算力为虚拟PCX的跨链挖矿算力和真实PCX的投票挖矿算力之和。比如用户跨链充值了1个BTC、2个ETH进入ChainX,并持有700个PCX,其中有300个PCX参与了选举投票,400个PCX未参与投票。此时ChainX内交易所撮合产生过去一小时均价为1BTC:10000PCX,1ETH:1000PCX,则用户将自动获得(1 * 10000 + 2 * 1000)* 10% + 300 = 1500PCX 的挖矿算力。所有用户根据挖矿总算力瓜分每个奖励周期的PCX挖矿收益,所获PCX可以继续参与选举投票,也可以等待所持有的跨链资产升值,来获得更大的挖矿权重。

节点奖励

每个分红周期,系统会根据所有节点的总得票数比例计算出每个节点的应得奖励。

节点应得奖励 = 节点总得票数 / 所有节点总得票数 * 所有节点总奖励

所有处于参选状态,且总得票数不为 0 的节点,都会按照总得票数占比获得奖励。如果节点因为掉线惩罚被强制下线进入为未参选状态,则无法获得分红周期奖励。

注: 参与挖矿的跨链资产可视作一个虚拟节点,该虚拟节点虽不参与共识,但是参与分红周期发放奖励。

节点奖池

对于每个分红周期各节点的应得奖励,分配如下:

  1. 10% 直接进入节点账户
  2. 90% 进入节点奖池

节点奖池是一个无人知道私钥的特殊账户,奖池账户计算逻辑为

奖池账户 = Hash(节点账户)

用户在节点奖池的待领利息不是自动分配,而是需要用户手工提息时再进行计算。 代领利息的计算依据为用户票龄占节点总票龄的比例。

票龄相关

票龄(对于充值挖矿来说,更准确地说法应该是币龄)逻辑同时适用于投票选举和充值挖矿。

节点票龄

每个真实节点 有如下属性:总票龄、总票龄更新高度,在节点的总得票数有变化时更新,比如投票和赎回时:

总票龄 = 老总票龄 + 老总投票金额 * (当前高度 - 老总票龄更新高度)

总票龄更新高度 = 当前高度

用户票龄

用户在节点都有如下属性:用户票龄、用户票龄更新高度,在各用户对该节点的投票变化时更新,比如投票和赎回时:

用户票龄 = 老用户票龄 + 老用户投票量 * (当前高度 - 老用户票龄更新高度)

用户票龄更新高度 = 当前高度

投票利息

如果用户对某节点投了票,可以先获取节点和用户的票龄信息,然后根据当前高度,实时在前端计算待领利息,计算逻辑为:

最新总票龄 = 总票龄 + 总投票金额 *(当前高度 - 总票龄更新高度)

最新用户票龄 = 用户票龄 + 投票金额 *(当前高度 - 用户票龄更新高度)

用户待领利息 = 最新用户票龄 / 最新总票龄 * 奖池金额

用户提息

用户提息时,按照用户票龄占节点总票龄的比例从奖池中领取利息,领完后,票龄变化为:

节点总票龄 = 节点总票龄 - 用户票龄
用户票龄 = 0

节点换届

每个选举周期进行验证人节点的选举,可参与验证人选举的节点必须:

  1. 节点处于参选状态
  2. 节点总得票数不为 0

满足上述条件的节点按总得票数高低参与验证人节点选举。

交易接口

注册节点

  • 参数:节点名
  • 判断:任何人都可以提交,节点名小于16字节,并且不能重复

初始化该节点的票龄信息,并将初始状态设置为‘退选’

更新节点

  • 参数:网址、简介、出块账户ID、状态(参选|退选)
  • 判断:只有已注册节点可以调用,网址字节范围是4到24,只能数字、大小写字母和. ,简介小于128字节。

如果参选节点数小于 最小验证节点数 则不能退选,其余情况下直接更新节点信息。

设置信托

  • 参数:链ID、简介、热公钥、冷公钥
  • 判断:只有参选节点可以调用,链目前只能是Bitcoin,并且公钥格式正确。

更新节点的信托设置,只有正确设置了所有链的信托,才可能被选举为信托节点。

增加投票

  • 参数:节点账户ID、增加金额、备注
  • 判断:任何人都可以调用,节点账户必须存在,增加金额需小于用户的 PCX 可用余额,备注小于64字节

如果正确,则增加用户的投票,并更新用户和节点的票龄信息。

赎回投票

  • 参数:节点账户ID、赎回金额、备注
  • 判断:只有投票了该节点的用户才能调用,赎回金额需小于等于原投票金额,备注小于64字节

如果正确,则扣减用户的投票,并新增赎回记录,计算赎回解冻高度(需判断是赎回节点自抵押,还是普通用户投票),并更新用户和节点的票龄信息。用户赎回节点的投票后,赎回锁定中的资金不会在产生收益。

赎回解冻

  • 参数:节点账户ID、索引
  • 判断:只有用户存在该索引对应的赎回操作才可以调用,而且当前高度必须大于解锁高度。

如果正确,则将赎回金额转变为用户的可用余额,并删除赎回记录。

提取利息

  • 参数:资产ID
  • 判断:只有持有该资产的用户才可以调用。

根据上述的待领利息计算方法,计算用户利息,从奖池账户中扣除,并增加给用户的可用余额。