STA:XEN 合约代码深入解读

这两天XEN特别火,看了看代码,相对比较简单。这篇文章就来结合文档来解读一下合约代码,仅做学习交流用。对于玩法还不熟悉的朋友可以先看看我昨天发的推文。

整个玩法分成两部分,我这里将其区别为:

时间挖矿,也就是在参与时指定时间,时间到期后即可领取对应的XEN,唯一付出的成本就是gas费用和等待的时间stake挖矿,通过质押XEN来挖矿时间挖矿

先来看第一部分,时间挖矿。用户通过调用?claimRank(uint256term)?来参与,term?代表用户想要挖矿的天数,在这个时间到期之后才能领取XEN奖励。

其中全局变量?globalRank?代表的是全局参与的总人数,只增不减。activeMinters?代表正在参与挖矿的人数,当用户参与时间挖矿时增加?1,到期领取奖励后减少?1。userMints?代表用户的挖矿参数。我们看到,这里最短需要参与一天,最多参与的天数是通过?_calculateMaxTerm()?实时计算出来的。

动态 | 2019年区块链十大事件盘点:1:中国拥抱区块链

2019年10月24日,中央局第十八次集体学习时强调,区块链技术的集成应用在新的技术革新和产业变革中起着重要作用。

2:央行数字货币试点

2014年中国央行开始研究法定数字货币(DCEP)。DCEP的完整字面意思就是数字货币电子支付。

3:Facebook发布Libra计划

2019年6月,Facebook发布Libra白皮书,Libra的使命是建立一套简单的、无国界的货币和为数十亿人服务的金融基础设施。

4:去中心化金融DeFi

去中心化金融(DeFi),解决传统金融行业中的痛点,被称作DeFi 是加密史上第二个突破。

5:IEO开始流行

IEO是ICO之后,币圈诞生的一种新筹集资金方式,项目方依托交易所进行资金筹集。

6:Bakkt 推出比特币期货

2019年9月23日, 号称币圈牛市的发动机的Bakkt上线。

7:嘉楠科技上市

美国东部时间11月21日嘉楠科技正式上市纳斯达克,IPO发行价最终锁定在每股9美元,总计募资9000万美元。

8:模式币走红币圈

模式币,使用类似模式的币种,通过拉人头、分红、合伙人等等推广营销模式,配合资金控盘,来吸引散户进场接盘。

9:以太坊伊斯坦布尔升级

以太坊网络在2019年12月8日, 9,069,000区块高度完成升级,代号:伊斯坦布尔(Istanbul)。

10:吴忌寒詹克团之争

吴忌寒夺权:10月29日全球最大的矿机生产商之一的比特大陆创始人吴忌寒以比特大陆集团董事会主席、北京比特大陆科技有限公司法定代表人、执行董事的身份,向全体员工发送邮件,宣布解除詹克团在比特大陆的一切职务,即刻生效。[2019/12/23]

Xeno Holdings投资CityLabs,后者业务涉及BaaS等:投资公司Xeno Holdings Limited对CityLabs Co. Ltd.进行股权投资,以扩大其在韩国市场的影响力。此前,该公司与济州岛格洛斯特酒店(Gloucester Hotel Jeju)签署投资和合作协议,在济州岛开展酒店、度假、旅游和休闲业务。

据悉,CityLabs Co. Ltd. (前身为Daily Blockchain)是一家韩国科斯达克(Kosdaq)上市公司,主要从事智慧城市解决方案业务,提供BaaS(区块链即服务)、智能交通系统(ITS)解决方案、闭路电视(CCTV)集成控制中心业务、道路交通管理系统、驾驶员信息系统、最佳路线指引系统、公共交通管理系统、电子安全系统、海上交通管制系统和空中交通管制系统。总部位于中国香港的投资公司Xeno Holdings主要投资以科技为导向的初创企业;最近推出NFT市场平台Xeno NFT Hub。(Crypto News Flash)[2021/3/15 18:45:30]

首先如果全部参与人数没有超过5000,那么最多只能挖100天。如果达到了5000,通过对参与人数进行对数运算,计算出对应的最大天数。对应于文档中的:

Blockstack Stacks 2.0测试网已进入最后阶段Xenon:Blockstack昨日发文称,随着主网即将到来,现在已经进入Stacks 2.0测试网的最后阶段Xenon。与上一阶段(Krypton)相比关键的区别是Xenon测试网已经和主比特币测试网相结合,而在Krypton,使用的是比特币Regtest测试网络。后者显然是一个更加可预测的环境,完全在Blockstack的控制之下,所以在更加不稳定和不可预测的比特币测试网上运行将是在主网发布之前的一个很好的试金石。

除了与比特币测试网结合外,Xenon不久还将增加对微块分叉处理和挖矿的全面支持(pull request正在审查中)。Blockstack还实现了论坛文章中所述的大多数从Stacks 1.0升级到Stacks 2.0的机制。在stacks.js中提供一个新的Stacking库。希望在未来几周内把支持BNS(区块链命名系统)的核心功能推广到Stacks 2.0 Xenon上。跟BNS互动的API将在stacks-blockchain-api中实现,并在stacks.js中得到支持。(Blockstack Base)[2020/12/5 14:06:52]

库币于6月22日15:00开放Xensor (XSR):据库币KuCoin交易所消息,库币已于6月22日15:00正式上线Xensor (XSR) 项目并支持XSR/USDT交易服务。Xensor项目基于ethash加密算法,通过自动化数据管理,提高数据存储和交易的效率,进一步降低了构建物联网通信网络的成本。Xensor还将区块链技术集成到设备网络中,以确保数据的可信度,并计划在未来对其硬件客户实施激励政策。库币是一家全球性数字货币交易所,为来自207个国家的500万用户提供币币、法币、合约、矿池、借贷等一站式服务。[2020/6/22]

最大参与时间计算公式

代码中的?fromUInt()?和?log_2()?都来自于?ABDKMath64x64?库。其中?fromUInt()?的代码:

入参x有限制,这个最大值转换为10进制是?9223372036854775807,全部参与人数不可能超过这个数,所有可以安全使用。

Blockchain.com任命全球战略战略主管Xen Baynham-Herd出任COO:加密货币基础设施提供商Blockchain.com已提拔了其全球战略主管Xen Baynham-Herd担任该公司首席运营官(COO)。(Finance Magnates)[2020/4/30]

在构造的挖矿系数?mintInfo?中,_calculateRewardAmplifier()?和?_calculateEAARate()?也是实时计算的。

可以看到,越早参与,可以获得到的?AMP?就越多,最开始一天是?3000,每过一天会减少?1,最终超过3000天就会恒定为?1。

对应于文档中?AMP?的计算方式:

AMP计算公式

EAA计算公式

由于Solidity中没有小数,因此在代码中将其放大了?1000?倍,后面在?getGrossReward?方法中会再缩小?1000?倍。

到这里,我们可以看到,在用户参与时间挖矿时,已经确定的数据有

用户在全局中的位置参与时长,由用户在参与时指定AMP,越早参与越大EAA,越早参与越大接下来我们来看用户领取奖励时的方法?claimMintReward():

校验限制后,计算可得奖励数量,然后?_mint?给用户,计算奖励数量的主要计算逻辑在?_calculateMintReward()?中:

这里我们先忽略?penalty?这一块,其他部分的计算正好对应于文档中的:

时间挖矿奖励数量计算公式

在计算最终奖励数量的时候,自己参与的位置越靠前,后面的人越多,那么

cRG-cRu

就会越大,同样说明越早参与越好。

我们再来看?penalty?这部分,这块其实就是系统限制用户必须在到期后一定时间内领取走,如果没有领取则会随着时间越来越少,最终归零。

对应于文档中的扣除比例:

扣除比例时间关系

文档中显示超过七天就全部不能领取,但是代码中显示最多只会扣除?99%。

到这里,我们就介绍完了时间挖矿的代码部分,接下来我们来看看stake挖矿的部分。

stake挖矿

这里的stake其实比常见的挖矿计算逻辑要简单。常见的挖矿?APY?是根据用户质押数量占比以及参与时间来计算的,属于随挖随走类型的。而这里的stake挖矿的?APY?在参与时就已经固定了,且需要在参与时就指定参与时间,在时间到期后才能领取奖励,如果没有到期就领取,只能取回本金,没有任何的奖励。

用户可以在前面时间挖矿到期时调用?claimMintRewardAndStake?同时领取奖励并进行stake,或者单独调用?stake(uint256amount,uint256term)?进行stake挖矿:

整体的逻辑也比较简单,参与的时候需要指定时间?term。有一个小细节是在?stake?的时候直接?burn?掉了用户的token,而不是通过转账的方法,这样可以少一步授权操作。由于合约本身既包含了挖矿操作,同时也是ERC20,因此可以实现这个逻辑。

接下来我们看看计算APY的方法?_calculateAPY():

基本逻辑也是类似于上面计算?EAA?的方法,一次函数递减,参与的时间越早,相对应的?APY?就越大。初始值为?20,每过?90?天,减少?1。最终在?1620?天后,恒定为?2。对应于文档:

APY时间关系

最终在?stake?到期后,可以调用?withdraw()?取出本金和奖励:

对应于文档中的:

stake奖励计算公式

对于stake挖矿而言,没有领取的限制,奖励数量不会变化。

总结

到这里我们就看完了主要的逻辑代码。这个玩法有意思的地方在于越早参与获得的奖励越多,相当于普通的挖头矿,但是同时也取决于总体的参与人数,如果后面没有人参与,那么也没啥意义。必须是参与的早且后面还有更多人参与的情况下,奖励才会更多。目前时刻总参与人数已经快达到50万了,热度确实很高。

同时,前面的时间挖矿和后面的stake挖矿也存在博弈关系,如果前面选择的时间越长,获得的奖励就越多,但是来到后面的stake挖矿的APY就会降低,需要大家自行抉择。

合约本身代码没啥难度,但是整体机制比较有趣,值得花点时间了解。

责任编辑:MK

郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。

链链资讯

[0:15ms0-7:344ms