欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

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

来源:本站整理 作者:佚名 时间:2019-05-14 TAG: 我要投稿

伴随着 REX 提案终于被 BP 们投票通过,炒了半年概念的 REX 终于上线了,这个号称稳赚不亏的投资项目吸引了众多人的目光,同时也霸占了各大区块链媒体的头条,其火热程度不亚于平台币,一上线便涌入了大量的资金。但是 REX 究竟是什么呢?REX 又有什么用?本系列基于 rex1.6.0-rc2 源码进行分析,给出相关的细节及答案。

什么是 REX
REX,全称 Resource Exchange,即资源交易所,是为了提供一个更好的资源租赁平台,缓解 EOS 高昂的资源使用成本,以更少的 EOS 换取更多的资源。同时也可以增加用户投票,促进 EOS 系统的良性运转。现在市面上有许多资源租赁 DApp,目的也是为了用于缓解 CPU 紧缺的问题。REX 与这些平台一样,都是充当租赁平台的角色,不同的是资源出租方不再是 DApp,而是每一个 EOS 持有者都能成为资源出租方,并享受收益。这里需要重点声明的是,REX 不是一种代币,而是一个资源租赁平台!用户购买的 REX 只是流转于 REX 租赁平台内的一种通证,用于证明用户出租了资源,这种通证本身不可流转,无法交易。类似于国债,REX 就是手中的债券。为了区分这两个概念,下文统一将 REX 资源租赁平台称为 REX。而用户购买得到的通证称为 rex。
更详细的资料可以参看 BM 自己的文章: https://medium.com/@bytemaster/proposal-for-eos-resource-renting-rent-distribution-9afe8fb3883a
REX 攻略
对于一般用户而言,买卖 rex 只需要接触到以下几个接口,分别是:
1、deposit:用于充值,将 EOS 变成 SEOS,也叫预备金。
2、withdraw:用与提现,将 SEOS 换回 EOS。
3、buyrex:用于从用户的预备金中扣除相应的份额,并用于 rex 的购买。
4、sellrex:用于卖出已经结束锁定的 REX,并将本金连带收益一起放进用户的预备金账户中。
5、unstaketorex:将用于抵押中的资源用于 rex 的购买 。
下面,我们一起来看下这几个函数的实现,了解资金的流向。
deposit 函数
deposit 函数是用户参与 REX 的第一个接口,顾名思义,用户充值以备后来购买 rex。就像去游戏厅充值游戏币一样,先把人民币换成游戏厅的点数冲进卡里,然后用这张卡进行后续的游戏,后续的所有花费都是基于这张卡的。REX 也是相同的道理,后续所有的买卖操作都基于这个储备金账户。deposit 函数的具体实现如下:
 void system_contract::deposit( const name& owner, const asset& amount )
   {
      require_auth( owner );
      check( amount.symbol == core_symbol(), "must deposit core token" );
      check( 0 "must deposit a positive amount" );
      INLINE_ACTION_SENDER(eosio::token, transfer)( token_account, { owner, active_permission },
                                                   { owner, rex_account, amount, "deposit to REX fund" } );///充值进rex账户
      transfer_to_fund( owner, amount );///初始化用户余额,不存在用户则新增用户,存在则累加金额
      update_rex_account( owner, asset( 0, core_symbol() ), asset( 0, core_symbol() ) );   }
我们不需要了解每一行的具体实现,但是大概的道理是需要明白的。deposit 函数做了以下事情:
 1、首先在第三行校验了用户权限,总不能平白无故的让别人给自己买了 rex,绕过自己的意志。
2、在第五行和第六行对购买金额和代币的信息进行校验,不能拿假的 EOS 来买,也不能买个负数的,保证 REX 的安全性。
3、把用户的 EOS 打进 eosio.rex 账户,你的钱就从你的口袋,转到了 eosio.rex 系统账户上了。
4、调用 transfer_to_fund 接口,把用户的充值金额用小本本记起来,这相当我们的储备金钱包,在数据体现上是一个表,后续将根据这个表进行 rex 的购买。
5、调用 update_rex_account 接口,这个接口在输入不同的参数的时候有不同的功能,这里是用于处理用户的卖单,把用户卖 rex 得到的收益一并整理进储备金账户中。
withdraw 函数
withdraw 函数是 deposit 函数的反向接口,用于将储备金账户中的余额转移到用户的 EOS 账户中,就像你在游戏厅玩够了,卡里还有点数,或玩游戏赢到点数放进卡里,就可以用卡里的点数换回人民币,下次再来,withdraw 函数的道理也是一样的。withdraw 函数的具体实现如下:
  void system_contract::withdraw( const name& owner, const asset& amount )
   {
      require_auth( owner );
      check( amount.symbol == core_symbol(), "must withdraw core token" ); ///EOS符号校验
      check( 0 "must withdraw a positive amount" );
      update_rex_account( owner, asset( 0, core_symbol() ), asset( 0, core_symbol() ) );
      transfer_from_fund( owner, amount );
      INLINE_ACTION_SENDER(eosio::token, transfer)( token_account, { rex_account, active_permission },
                                                    { rex_account, owner, amount, "withdraw from REX fund" } );

[1] [2] [3] [4] [5] [6]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载