宇宙链 宇宙链
Ctrl+D收藏宇宙链
首页 > 中币下载 > 正文

EOS REX 安全系列之从源码开始玩转 REX(二)

作者:

时间:1900/1/1 0:00:00

BySlowMistTeam前言

上一篇文章粗略分析了整个买卖rex的流程,由于篇幅的原因,剩下有一些细节没有分析到位。所以,这篇文章将在上一篇文章的基础上对一些细节进行深入的分析。前情回顾

上一篇介绍了买卖rex的流程,涉及到了几个函数,我们一起回顾下:1、deposit:用于充值,将EOS变成SEOS,也叫预备金。2、withdraw:用于提现,将SEOS换回EOS。3、buyrex:用于从用户的预备金中扣除相应的份额,并用于rex的购买。4、sellrex:用于卖出已经结束锁定的rex,并将本金连带收益一起放进用户的预备金账户中。5、add_to_rex_pool:用于将用户购买的rex放进rex_pool中,并根据rex_pool中的相关信息计算出用户能够购买的rex的数量,被buyrex函数调用。6、fill_rex_order:处理用户卖单,计算收益。以上几个函数除了sell_rex和fill_rex_order其他函数都介绍得差不多了,本文将重点介绍这两个函数的细节。sellrex函数

独家 | 加密货币市值前十币种1涨9跌 BSV、EOS领跌:金色财经数据显示,截止当前,加密货币市值前十币种1涨9跌。近24小时涨跌情况分别为:BTC(9935美元,-0.13%)、ETH(260.37美元,-1.60%)、XRP(0.2926美元,-5.17%)、BCH(412.97美元,-6.60%)、BSV(284.01美元,-9.46%)、LTC(75.13美元,-4.13%)、USDT(1.007美元,+0.10%)、EOS(4.374美元,-7.17%)、BNB(23.32美元,-4.40%)、XTZ(3.16美元,-2.29%)。[2020/2/17]

以上为sellrex函数的具体实现,从开头开始一步一步进行分析。首先抛开runrex这个函数,这个函数并不属于本次讨论的范围,runrex函数主要用于处理rex_pool的信息,包括处理到期的资源租赁订单,回收用户资源,处理用户的rex卖单等,有兴趣的同学可以先自行研究,以后的文章也会进行单独的分析。接上篇分析,sellrex函数我们分析到了fill_rex_order函数就没有继续往下分析了,fill_rex_order函数也只是讲了最核心的收益公式,这次我们来仔细进行分析。sellrex流程如下:1、经过了一系列的检查之后,获取用于已经解锁的rex的数量,调用fill_rex_order获取用户的卖单。2、卖单携带着订单的完成状态,这是一个flag,分为成功和失败两种状态,当状态为失败的时候,进入上文的if条件。2.1、订单状态成功订单状态成功的时候current_order.proceed的值大于0,这个时候通过update_rex_account将卖rex的所得转至用户的储备金账户。用户就可以直接进行提现或者继续下一轮的购买了。2.2、订单状态为失败这个时候创建一个order,我们这里为了不混淆,不说卖单,而是说为欠条,是一个REX平台给你的借条。什么意思呢?打个比方,你去商店订购商品,商品存货不足,这时候怎么办呢?这时候商店就会给你打一个单,这个单记录了你是谁,你要买多少的商品,买的时间等信息,等有货了就会根据这个单给你补上商品。REX也是同样的道理,用户在卖rex的时候,由于rex_pool中的资金不足以支付用户的本金+收益,就会将用户的订单暂时挂起。这就是REX给你打的欠条,当REX资金充足的时候,就会把钱还你。当sellrex失败的时候,这个借条记录了以下信息:卖rex的用户。要卖的rex的数量(记录在rex_requested字段中)。用户的收益,此时为0,因为rex没有卖出去,收益是不存在的。抵押状态,这个抵押状态是由于buyrex的时候,根据购买的数量会产生的相应的票权。这个欠条创建的时间。3、最后,检查挂起的金额有没有超过已经解锁的rex的数量。以上就把sellrex完整的讲完了,但是还有一个疑问,就是为什么会存在资金不足的情况,以及如何判定资金不足?这些秘密都在fill_rex_order里面。下面就详细的分析fill_rex_order函数。

动态 | 跨ETH/EOS/TRON/IOST四大公链,DApp活跃度排行榜:据 DAppTotal 01月06日数据显示,过去一周,综合对比ETH、EOS、TRON、IOST四大公链的DApp生态情况发现:总用户量(个): ETH(178,990) > TRON(48,281) > EOS(31,724) > IOST(4,264);总交易次数(笔):EOS(335,077,404) > IOST(7,720,741) > TRON(5,207,539) > ETH(919,726);总交易额(美元):EOS(88,179,757) > ETH(40,753,792) > TRON(24,972,894) > IOST(5,713,015);跨四条公链按用户量TOP3 DApps为:MillionMoney(ETH)、EOS Dynasty(EOS)、WINk(TRON);按交易次数TOP3 DApps分别为:EIDOS(EOS)、iPirates(IOST)、MICH token miner(EOS);按交易额TOP3 DApps分别为:Newdex(EOS)、EIDOS(EOS)、WINk(TRON)。[2020/1/6]

上一篇文章我们分析了核心的收益公式是怎么计算出来的。这次从11行开始,看看这个函数做了什么:1、首先获取unlent_lower_bound的值,即最低未出租rex_pool中的EOS的数量。这个字段等于用户从rex_pool中借用资源的总量,是以EOS为单位的。2、计算available_unlent的值,这个值有可能为负数,为什么呢?假设一个场景,你是一个投资经理,你手上有很多投资人的钱,然后你把投资人的钱拿出去放贷收取利息,那么请问,这个时候你手上的资金还有多少?答案自然是:投资人的钱-放贷资金+放贷收益。REX相当于这个投资经理,用户可以用少量的成本(EOS)换取大量的贷款(资源),这个时候,REX的资金池中的资金就就变成了:用户的资金-租用的金额+租用收益。根据前面的描述,用于租用资源的资金总是小于REX平台出租出去的资金,也就是说在持续出租资源的时候,rex_pool中的资金总是不断变少的(这里不讨论系统收益的情况)。想清楚这一点,就能明白为什么available_unlent的值为负数了,当出租出去的资金大于rex_pool中当前资金+收益的时候,这个值就会为负数。3、判断用户出售的rex获得的收益是否小于rex_pool中的剩余资金,相当于投资人想要回自己的钱,这个时候分两种情况:3.1、如果资金不够,那么这个订单就会挂起,此时由sellrex函数创建一个欠条,这就是订单失败的由来。3.2、如果够的话,则从rex_pool资金池中减去用户收回的资金,更新相关的表字段,更新用户的rex_balance账户,扣除相应的rex解锁金额。那么到这里,整个sellrex的流程都讲清楚了,流程图是这样子的:

行情丨EOS在15分钟内跌幅超过3.00%:据火币全球站数据显示,EOS/USDT在15分钟内出现剧烈波动,跌超3.00%,达到-3.23%。当前报价为 3.39 美元,行情波动较大,请注意风险控制。[2019/11/8]

安全性分析

由于本次没有拓展新的函数,所以安全结论是和上篇是一样的,但是这次我们可以对上次说的安全问题有更深的了解。在原先版本的rex合约中,是没有check(pending_sell_order.amount<=bitr->matured_rex,"insufficientfundsforcurrentandscheduledorders")这一个校验的,这会导致什么呢?我们知道,当资金池中的资金不足以支付用于的卖单的时候,将跳过if判断下的所有步骤,直接由sellrex函数挂起订单,在这种情况下,恶意用户在系统资金池资金不足的时候,就可以一直卖rex,叠加挂起订单的rex金额,直到资金池有足够的资金支付,出售比购买rex数量更多的rex。但是这样操作还是会卖不出去,因为最后更改用户rex_balance的时候由于asset结构体自带的溢出检测,是不能成功卖出去的。但是这就会让这个订单成为一笔坏账,在这种情况下,因为有未完成的sellrexorder,整个REX系统将停止运行。具体原因是什么可以自己去发现,答案会在下一篇文章揭晓。文章可能有说得不对或说得不够好的地方,欢迎讨论交流。详情参考:https://eosauthority.com/blog/REX_progress_with_testing_and_implementation_details往期文章

动态 | EOSIO v 1.8版本顺利激活:在全球节点的共同努力下,EOS主网顺利激活v 1.8版本,实现重大更新。对比升级前主要的优化有:

1. 更安全地使用EOS主网上的dApp, 通过对所有操作行为的检查,抵御恶意攻击,用户安全性获得更高保障;

2. 修复了延期交易的问题,例如RAM未接收等;

3. EOS链上的CPU/NET等资源可以由dApp来承担,进一步降低EOS使用门槛;

4. 为Voice的上线做好准备,Voice是Block.one筹备推出的重要社交产品,需要新版本才能执行 (MEET.ONE)[2019/9/23]

EOSREX安全系列之从源码开始玩转REX(一)声明

本文仅用作技术参考,不构成任何投资建议。投资者应在充分了解相关风险的基础上进行理性投资。

行情 | EOS持续拉升,日内涨幅超6%:据Huobi行情显示,EOS短线持续上涨,日内涨幅超6%,当前报价4.16美元,行情波动较大,请注意控制风险。[2019/8/11]

标签:REXEOSSELORD币威RREX交易所eos币前景Useless Tokenordi币论坛

中币下载热门资讯
ETH周报 | 376位巨鲸掌握了三分之一的ETH;德勤将于年底在以太坊上推出“大项目”(5.13-5.19)

作者|秦晓峰编辑|卢晓明出品|Odaily星球日报 一、整体概述 本周,德勤区块链项目的全球首席技术官AntonioSenatore透露,德勤将于年底在以太坊平台上推出一个非常大的项目.

1900/1/1 0:00:00
Tether(USDT)的那些事

前言:如何看USDT的走向?本文作者分析了为什么发生纽约总检察长办公室诉讼事件之后,价格仍旧锚定为1美元?未来会有什么走向?本文作者theblock,由“蓝狐笔记”社群的“Leo”翻译.

1900/1/1 0:00:00
公链共识与治理迷局——区块链技术引卷之六

通证通研究院×FENBUSHIDIGITAL联合出品文:宋双杰,CFA;孙含儒特别顾问:沈波;Rin;JX导读自2017年发布初版白皮书以来,EOS就受到广泛关注.

1900/1/1 0:00:00
通证经济模型的十个基本要素

编者按:本文来自谷燕西,Odaily星球日报经授权发布。目前的美国STO市场正在快速发展中,提供STO融资服务的各种平台和证券行业中相关机构都在不断地进入这个市场。在市场的另外一端,融资的需求方同样非常旺盛.

1900/1/1 0:00:00
高返利吸引锁仓,贝尔链被指资金盘

编者按:本文来自蜂巢财经NEWS,作者:武旭升,Odaily星球日报经授权转载。导语:BRC币价在一个月内上涨了8倍,从社区动态看,推动币价“飞天”的两大杀手锏是新游戏《环球城》与超级节点竞选计划的推出.

1900/1/1 0:00:00
蹭 IEO 热点,发平台币的 Gate.io 一周募了 6400 万美元

Odaily星球日报译者|Moni只用了短短七天时间,加密货币交易所Gate.io就为自己的平台币产品募集到了价值6400万美元的加密资产。不过,他们的平台币应该至少在半年内不会上链.

1900/1/1 0:00:00