-
验证节点
- 最少 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 的节点,都会按照总得票数占比获得奖励。如果节点因为掉线惩罚被强制下线进入为未参选状态,则无法获得分红周期奖励。
注: 参与挖矿的跨链资产可视作一个虚拟节点,该虚拟节点虽不参与共识,但是参与分红周期发放奖励。
对于每个分红周期各节点的应得奖励,分配如下:
- 10% 直接进入节点账户
- 90% 进入节点奖池
节点奖池是一个无人知道私钥的特殊账户,奖池账户计算逻辑为
奖池账户 = Hash(节点账户)
用户在节点奖池的待领利息不是自动分配,而是需要用户手工提息时再进行计算。 代领利息的计算依据为用户票龄占节点总票龄的比例。
票龄(对于充值挖矿来说,更准确地说法应该是币龄)逻辑同时适用于投票选举和充值挖矿。
每个真实节点 有如下属性:总票龄、总票龄更新高度,在节点的总得票数有变化时更新,比如投票和赎回时:
总票龄 = 老总票龄 + 老总投票金额 * (当前高度 - 老总票龄更新高度)
总票龄更新高度 = 当前高度
用户在节点都有如下属性:用户票龄、用户票龄更新高度,在各用户对该节点的投票变化时更新,比如投票和赎回时:
用户票龄 = 老用户票龄 + 老用户投票量 * (当前高度 - 老用户票龄更新高度)
用户票龄更新高度 = 当前高度
如果用户对某节点投了票,可以先获取节点和用户的票龄信息,然后根据当前高度,实时在前端计算待领利息,计算逻辑为:
最新总票龄 = 总票龄 + 总投票金额 *(当前高度 - 总票龄更新高度)
最新用户票龄 = 用户票龄 + 投票金额 *(当前高度 - 用户票龄更新高度)
用户待领利息 = 最新用户票龄 / 最新总票龄 * 奖池金额
用户提息时,按照用户票龄占节点总票龄的比例从奖池中领取利息,领完后,票龄变化为:
节点总票龄 = 节点总票龄 - 用户票龄
用户票龄 = 0
每个选举周期进行验证人节点的选举,可参与验证人选举的节点必须:
- 节点处于参选状态
- 节点总得票数不为 0
满足上述条件的节点按总得票数高低参与验证人节点选举。
- 参数:节点名
- 判断:任何人都可以提交,节点名小于16字节,并且不能重复
初始化该节点的票龄信息,并将初始状态设置为‘退选’
- 参数:网址、简介、出块账户ID、状态(参选|退选)
- 判断:只有已注册节点可以调用,网址字节范围是4到24,只能数字、大小写字母和. ,简介小于128字节。
如果参选节点数小于 最小验证节点数 则不能退选,其余情况下直接更新节点信息。
- 参数:链ID、简介、热公钥、冷公钥
- 判断:只有参选节点可以调用,链目前只能是Bitcoin,并且公钥格式正确。
更新节点的信托设置,只有正确设置了所有链的信托,才可能被选举为信托节点。
- 参数:节点账户ID、增加金额、备注
- 判断:任何人都可以调用,节点账户必须存在,增加金额需小于用户的 PCX 可用余额,备注小于64字节
如果正确,则增加用户的投票,并更新用户和节点的票龄信息。
- 参数:节点账户ID、赎回金额、备注
- 判断:只有投票了该节点的用户才能调用,赎回金额需小于等于原投票金额,备注小于64字节
如果正确,则扣减用户的投票,并新增赎回记录,计算赎回解冻高度(需判断是赎回节点自抵押,还是普通用户投票),并更新用户和节点的票龄信息。用户赎回节点的投票后,赎回锁定中的资金不会在产生收益。
- 参数:节点账户ID、索引
- 判断:只有用户存在该索引对应的赎回操作才可以调用,而且当前高度必须大于解锁高度。
如果正确,则将赎回金额转变为用户的可用余额,并删除赎回记录。
- 参数:资产ID
- 判断:只有持有该资产的用户才可以调用。
根据上述的待领利息计算方法,计算用户利息,从奖池账户中扣除,并增加给用户的可用余额。