STA:XEN 合约代码深入解读_STAK

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

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

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

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

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

声音 | 邓建鹏:中国应尽快推动区块链领域的谨慎监管:5月21日讯,今日,中央财经大学法学教授邓建鹏在《区块链监管的未来之路——深度思考》一文中,就区块链监管给出了7点建议,他表示,其一,我们首先建议监管机构加强国际协作,强化国际监管。其二,开展ICO监管沙盒园试点,降低ICO风险。其三,明确虚拟货币法律界定,根据分类具体定性。其四,未来证券领域考虑增加募集资金小额豁免制度,同时在立法上扩大“证券”的概念内涵,以适应时代变化。其五,强化合格投资者门槛与投资者风险教育。其六,监管者应调整思维,以及对未来行政规范性文件及监管措施赋予充分合法性。最后,政府在把握鼓励金融科技创新与风险控制平衡点的前提下,监管思维应及时跟进,推动区块链技术与监管技术的融合。此外,相关监管手段既包括柔性约束,也包括硬法规制。[2019/5/21]

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

声音 | 中央财大邓建鹏:挖矿有效利用本可能被浪费的能源 因此有益于当地经济增长:据证券日报消息,日前,国家发改委发布《产业结构调整指导目录(2019年本,征求意见稿)》,将“虚拟货币‘挖矿’活动(比特币等虚拟货币的生产过程)”列为淘汰类产业。中央财经大学教授、区块链法律监管资深研究专家邓建鹏表示,国家计划淘汰类主要是不符合有关法律规定,不具备安全生产条件,严重浪费资源、污染环境,需要淘汰的落后工艺、技术、装备及产品。“按照此意见稿,虚拟货币‘挖矿’活动(比特币等虚拟货币的生产过程)一项未列明淘汰计划或淘汰期限,若将来生效,应属国家已明令淘汰或立即淘汰的条目。” 针对“挖矿”是否应直接被淘汰,邓建鹏表示,对不具备安全生产条件“挖矿”活动,由于存在潜在风险,应及时淘汰,并严厉打击“矿场主”的违法行为。此种“矿场”根据法律本来就应取缔,无可厚非。 邓建鹏称,对于确属浪费资源、污染环境的“挖矿”活动,则应及时淘汰。但对于“矿场”分布在国内电力资源(尤其是可再生能源,如水电、风电等)丰富但几乎无法输出的贫困地区,此活动有效利用本可能被浪费的能源,因此有益于当地经济增长。[2019/4/12]

声音 | 邓建鹏:三五年后经济体量大国将以谨慎开放的姿态对待ICO:12月25日消息,中央财经大学法学院教授邓建鹏近日发文认为,区块链相关的金融安全风险主要有:1、交易所数据造假的风险;2、交易所给普通投资者带来所杠杆交易风险;3、市场操纵的风险;4、内幕交易的风险;5、网络安全的风险。他还认为,经济体量大国人口众多,监管机构受维稳压力等因素要求,针对区块链金融相关领域采取一刀切式的禁令政策,但公有链是区块链产业长足发展的主流,政府监管与鼓励的两难。不过,随着国际监管趋势逐渐明朗,三至五年后,此种经济体量大国不得不正式将区块链纳入长效监管机制中,以谨慎开放的资态对待诸如虚拟货币交易所或ICO等。[2018/12/25]

最大参与时间计算公式

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

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

声音 | 邓建鹏:ICO已沦为子非法集资手段:据暨南学报消息,中央民族大学法学院教授邓建鹏发表文章称,从区块链专业人士调研,当前高达90%以上的ICO项目涉嫌欺诈,少部分项目虽与欺诈无关,却因早期融资失败而转向ICO。这两种类型的项目,风险均非常高。因此,ICO已经由助力区块链初创企业融资的高效工具,化身为大量子非法集资的手段。[2018/9/16]

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

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

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

中央民族大学法学院教授邓建鹏:监管不该一刀切:据央广网报道,中央民族大学法学院教授邓建鹏认为,监管上的一刀切,从结果上看,并没有起到当初的目的,未来的监管,还应该给数字货币“留条活路”。所以我们是不是要思考监管规则做一个微调,把你做公募是绝对不允许的,是绝对刑法要打击的,但是如果是私募又是真实的创业,可否有一些特殊的渠道,比方说由专门的某个机构来审批,来避免监管的一个窘迫的状况。我觉得这个东西值得再思考。[2018/5/2]

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:0ms0-10:577ms