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

Latest commit

 

History

History
157 lines (92 loc) · 7.68 KB

跨链挖矿.md

File metadata and controls

157 lines (92 loc) · 7.68 KB

动态跨链挖矿模型

ChainX作为一个PoS系统,其安全性依托于用户抵押的PCX,抵押的PCX越多,系统越安全。同时由于ChainX致力于成为跨链资产网关的特性,其另一个价值支撑点在于所连接的跨链资产,接入的跨链资产越多,价值越大。此外,由于原生资产与跨链资产竞争性地共同参与资产挖矿,因此两者是一个相互依存又相互竞争的关系。

为了避免在系统初期跨链资产短时间内大量涌入对系统造成冲击,原生资产与跨链资产挖矿采用动态挖矿模型,当跨链资产增速太快时,采用固定分红比例对跨链资产和原生资产进行分配。

当前跨链资产与PCX投票挖矿算力上限比例为1:1, 该比例可由社区投票调整,即所有跨链资产的挖矿算力上限设定为50%,保证PCX投票挖矿的算力占比大于等于50%,每天至少有一半的PCX会发行给PCX持有者。

符号表
符号 意义
Powertotal 全网挖矿总算力
Powerreal 全网真实挖矿算力
Powervirtual 全网虚拟挖矿算力
Rtotal 每个分红周期所有算力瓜分的发行总量
Rreal 每个分红周期全网真实算力分得的PCX总量
Rvirtual 每个分红周期全网虚拟算力分得的PCX总量
Siactive 状态为已参选(active)的节点 i 的总票数
Stakedactive 所有状态为已参选的节点总得票数之和
c 某一跨链资产, c ∈ ( X-BTC, L-BTC, S-DOT, ... )
Powerc 跨链资产 c 的总虚拟算力
Amountc 跨链资产 c 的总量,
Pricec 单位跨链资产 c 兑换PCX的价格
Discountc 跨链资产 c 单资产初始折扣
UbiquitousDiscount 所有跨链资产动态竞争折扣
FinalDiscountc 跨链资产 c 的最终算力折扣
算力相关计算公式
  • 全网算力等于全网真实算力与全网虚拟算力之和:

    Powertotal = Powerreal + Powervirtual

  • 所有状态为已参选的节点总得票数之和:

    Powerreal = Stakedactive = sum (Iiactive), i ∈ 节点列表

  • 全网虚拟算力为各跨链资产对应的虚拟算力之和:

    Powervirtual = sum ( Powerc ), c ∈ ( X-BTC, L-BTC, S-DOT, ... )

    Powerc = Amountc * Pricec * Discountc

    对于 c ∈ (X-BTC, L-BTC):

    • Price X-BTC 基于链上DEX过去一小时的成交均价计算

    • Discount X-BTC 目前为10%

    • L-BTC 没有交易对,目前算力与X-BTC算力相同。

    对于 c ∈ (S-DOT):

    • Price S-DOT 为固定的 0.1PCX

    • Discount S-DOT 为10%。

  • 每个分红周期所有算力的发行总量分配:

    Rtotal = Rreal + Rvirtual

  • 基于市值的跨链资产 c 最终算力折扣:

    FinalDiscountc = Discountc * UbiquitousDiscount

动态算力竞争

当前所有跨链资产挖矿算力比上限为 50%, 即 Powervirtual : Powerreal = 1:1。若 Powervirtual > Powerreal, 则上限挖矿算力规则生效。

  • 当 Powervirtual <= Powerreal 时,

    • Rreal = Powerreal / Powertotal * Rtotal

    • Rvirtual = Powervirtual / Powertotal * Rtotal

    • UbiquitousDiscount = 1

  • 当 Powervirtual > Powerreal 时,

    • Rreal = 1/(1+1) * Rtotal = 50% * Rtotal

    • Rvirtual = 1/(1+1) * Rtotal = 50% * Rtotal

    • UbiquitousDiscount = Powerreal / Powervirtual

按照跨链资产与投票资产动态算出两类资产总奖励以后,根据各真实和虚拟节点在所在类别的比例得出单个节点的奖励, 进而根据票龄算出单用户收益。当所有跨链资产总数激增达到上限后,相当于每个跨链资产始终有一个单资产折扣的情况下,再施加一个所有跨链资产总折扣。

充值奖励

自 v1.0.3 版本,所有跨链资产的充值奖励不再按照跨链资产确认期间的累计票龄所占比例发放,而是直接从跨链资产的奖池给跨链用户发放 0.001 PCX.

BTC

BTC 用户进行跨链充值时,需要等待 BTC 交易确认(等待 6 个 BTC 块)后,ChainX 才会在链内给相应的充值地址发放 X-BTC。对于每次 BTC 充值,我们会根据用户的 BTC 充值金额,计算等待确认时间所累积的充值币龄,从 BTC 奖池中给用户发放相应的充值奖励,具体计算方式如下:

充值奖励 = (充值金额 * BTC确认时间) / BTC 总币龄 * BTC 奖池金额

SDOT

DOT 用户进行映射并没有充值奖励,但是会参与后续的充值挖矿。

充值挖矿利息

BTC和SDOT相当于两个虚拟节点,通过自身的总发行量来折合各自的“总得票数”,与下面的真实投票节点的总得票数,一起衡量比例关系,平分每个周期发行的PCX。每个周期的奖励打入一个无人知道私钥的特殊账户,作为该虚拟节点的奖池,奖池账户计算逻辑为hash(币种名称)。用户在虚拟节点的待领利息不是自动分配,而是需要用户手工提息时再计算。

充值利息计算公式

币龄计算公式与投票选举的票龄逻辑相同。

每个虚拟节点 有如下属性:总币龄、总币龄更新高度,在各资产的发行量有变化是更新,比如充值和提现确认时:

总币龄 = 老总币龄 + 老发行量 *(当前高度 - 老总币龄更新高度)

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

用户在虚拟节点都有如下属性:用户币龄、用户币龄更新高度,在各用户持有该种资产的量有变化时更新,比如转账、币币交易成交、提现确认时:

用户币龄 = 老用户币龄 + 老用户持有量 *(当前高度 - 老用户币龄更新高度)

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

则如果用户持有某种资产,可以先获取虚拟节点和用户的币龄信息,然后根据当前高度,实时在前端计算待领利息,计算逻辑为:

最新总币龄 = 总币龄 + 发行量 *(当前高度 - 总币龄更新高度)

最新用户币龄 = 用户币龄 + 持有量 *(当前高度 - 用户币龄更新高度)

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

充值利息分配

首先根据上面的充值利息计算公式得出用户充值总利息,用户实际获得利息分配如下:

用户待领利息 = 总待领利息 * 90%

渠道或议会待领利息 = 总待领利息 * 10%。

当用户进行跨链充值时,有一个可选的充值渠道,该充值渠道为 ChainX 内某一节点。

  • 为了奖励充值渠道,当用户进行提息操作时,首先会查询用户充值渠道,如果存在,则将总待领利息的 10% 打给渠道,如果不存在则打给议会账户,作为社区发展基金。
  • 扣除奖励渠道方的 10%,剩余总待领利息的 90% 才是充值用户实际可得的利息。

交易接口:提取利息

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

根据上述的待领利息计算方法,计算用户利息和渠道或议会利息,从奖池账户中扣除,并分别增加给他们的可用余额。