从源代码上理解 REX

dfuseio 版主 发布在 dfuse
 386  1


为了让开发者更容易地使用 EOSIO 上的资源,Block.one 编写了资源交换(REX)智能合约。 虽然网上有很多 REX 的使用教程,但是开发者仍然需要理解基础代码,所以这是我们针对的 REX 技术指南。

首先我们要定义八个术语,保证我们理解它们,它们对 REX 讨论都非常重要。

成熟期——当你购买 REX 代币时,在四天内将无法把它们换回 EOS。在此期间,这些代币被称为在“成熟期”。你最多可以有4个不同的到期日(或称为“储蓄桶”)。如果你用储蓄桶(请参阅下文),在你想从桶中取出 REX 代币时,你需要提前4天选择让它进入成熟期,4天后到期才能取出。

4天——如上所述,到期日的计算均从 UTC 时间的第二天00:00开始。因此,如果用户在今天16:00 UTC 购买 REX 代币,那么他们将只能在4天8小时后卖回 EOS(成熟后)。所以每当人们说“四天”时,它实际上是从购买后的 00:00 UTC 计算的四天。

30天——每次借用的 CPU 或网络带宽的有效期为30天。如果你想30天的续租,需要执行fundcpuloan 或fundnetloan 操作,它会按照续租当天的市场价进行续租。

储蓄桶(Savings)——储蓄桶的设计是为了增加资产的安全性。放入储蓄桶里的 REX 代币放不会自动进入成熟期。,直到你提出要取出里面的代币,它才会开始四天的成熟期,成熟后才能移动它们。举一个具体的用例,如果你的 active 和 owner 权限的用的是不同的密钥,而你的 active 密钥被盗了,有这个密钥的人就能动用你已经到成熟期了的 REX 代币,换成 EOS 币然后盗走。但是如果你的 REX 存进了储蓄桶里,你这时候就有时间用你的 owner 权限改你的 active 权限,然后终止储蓄桶里代币的成熟,保护你的你的资产。

REX 基金——要与 REX 交互,你先要在把 EOS 代币存入你的 REX 基金中 ,REX 基金中存的是 EOS 而不是 REX 代币。

投票前提——想通过 REX 把自己的资源租出去,有一个前提,必须至少给21个节点投票,或者把投票权代理出去。

流动性紧缩——这种情况出现的几率很小,但是我们还是应该有所了解。如果在 REX 池中没有足够的EOS 代币来满足提款人的需求,这种现象就叫“流动性紧缩”。这意味着所有提款订单会被排队,等有新的 EOS 代币进入 REX 池之后,或者有借用的资源到期了才可以被提走。用户从 REX 池中赎回 EOS 是没有风险的,可能最多需要等待30天,而且需要再次强调,这种紧缩的情况是非常罕见的。

市场价——REX 由 Bancor 支持的,就是说 EOS:REX 的价格不是由用户自己出价决定的,而是由系统根据池中 EOS 和 REX 代币的比率去计算的。这就是为什么收益率或续约价格不是一定的,因为价格都是在交易时才确定的,取决于交易的时间和当时的状况。

我们还想强调一下两件重要的事情。1. 上述 EOS:REX 比值的确定方式使你卖出 REX 而收回 EOS 数量不是高于就是等于你投入的 EOS 数量。这意味着你永远不会因为持有 REX 而失去任何 EOS,你只会获益

另一点是,在获取帐户快照时,空投可以选择是否考虑你的 REX 余额。就是说你在 REX 中的代币会不会被计算取决于具体空投的开发者的设置。

我们现在来看一下在与 REX 交互时可调用的所有操作,并作出相关解释。

buyrex

在你把 EOS 代币放入 REX 基金中以后,就可以调用 buyrex 操作把 EOS 代币交易成 REX

closerex

这个操作将首先检查你的帐户中是否有任何 REX 代币、任何正在借用的 CPU 或网络带宽和任何在REX基金中的 EOS 代币。如果检测到这些都是空的,那么你可以释放用在 eosio.rex 合约上的 RAM

cnclrexorder

如果你的帐户中有还没结算的 sellrex 订单,调用这个操作会取消订单

consolidate

由于 REX 代币有4天的成熟期,因此你一次最多可以有4个储蓄桶,每个桶都会占用你的RAM。 如果你想释放 RAM,把它们全部整合到一个储蓄桶中,让他们 4 天后成熟,你可以调用 consolidate 操作。

defcpuloan

如果你为了给借来的 CPU 到期时续期存了些 EOS 代币,但你想解冻一部分或所有这里面的代币,那么你可以调用这个操作。

defnetloan

如果你为了给你借来的网络带宽到期时续期存了些 EOS 代币,但你想解冻一部分或所有这里面的代币,那么你可以调用这个操作。

deposit

将 EOS 代币存入你的 REX 基金

fundcpuloan

如果你正在借用别人的 CPU,而想在到期时续期,你只需要把你 REX 基金中的 EOS 分配到这个借用订单的 ID上就行了。

fundnetloan

如果你正在借用别人的网络带宽,而想在到期时续期,你只需要把你 REX 基金中的 EOS 分配到这个借用订单的ID上就行了。

mvfrsavings

如果你调用用 mvtosavings 操作将 REX 代币放入储蓄桶,你需要调用此操作以开始4天的成熟期,成熟后然后才能将其换成EOS代币。

mvtosavings如果你想将部分(或全部)REX 代币移入储蓄桶,你可调用此操作。 它将检查确保你正在被出售的 REX 代币不进入储蓄桶。 移入储蓄存储桶不需要等待 REX 代币成熟。
rentcpu

调用此操作从 REX 池租用 CPU。 你可以将租来的 CPU 分配给任何帐户,也可以在租用的 CPU 到期时用此操作加入 EOS 来续费。

rentnet

调用此操作从 REX 池租用网络带宽。 你可以将租来的带宽分配给任何帐户,也可以在租用的网络带宽到期时用此操作加入 EOS 来续费。

rexexec

在调用与 REX 相关的大多数操作时,也会同时运行2个“维护操作”。 这些操作包含合约对 REX 池的更新,对卖单的处理,对任何资源的租用,将代币从 eosio.names 移动到 eosio.rex 等......所有这些都可以在 runrex 操作(不能单独调用)中找到。

sellrex用此操作来出售 REX 代币来换取 EOS 代币。 如果出现流动性紧缩,那么你的卖单将被排入队列。 如果你有正在进行的卖单,再次调用此操作将合并两个卖单。
unstaketorex

此操作允许用户使用当前抵押在 CPU 或网络带宽上的 EOS 代币购买 REX 。

updaterex

此操作允许用户更新他们的投票权重,以包括如果把 REX 换成 EOS 所能获得的权重。 跟重新投票的效果相同。

withdraw

调用此操作从 REX 基金中取出 EOS 代币

对于想用便宜和临时资源的开发人员而言,eosio.rex 这个智能合约就专门解决了这个问题。 我们希望这篇文章加进了你对 EOSIO 的理解,为可能的想法开辟思路。 如有任何疑问,请加入 dfuse Telegram 和微信群

本文已针对原版本进行了更新




你能在以下平台上找到 dfuse 哦!

dfuse 中文官网:dfuse.io/zh

Github 源码库:github.com/dfuse-io

微信公众号:dfuse API(通过【社区资源】菜单加入 dfuse 开发者群)

微博:weibo.com/dfuseio

Bilibili:space.bilibili.com/596090399

Telegram:t.me/dfuseAPI

Twitter:twitter.com/dfuseio

YouTube:youtube.com/channel/UCT_wVH42n6jv-IG8C7QsHGg

CSDN:dfuse.blog.csdn.net

币乎:bihu.com/people/1460622786

链节点:chainnode.com/forum/333


  • 正序
  • 最新
只看帖主 楼层直达
登录 账号发表你的看法,还没有账号?立即免费 注册
帖子数 96 获赞数 5
dfuse 是区块链 API, 通过组织全球的去中心化数据,帮助开发人员构建高性能的应用程序。 关注微信公众号 dfuse API 免费获取 API Key、加入区块链开发者群。
热帖榜 本周最热 本月最热
热门跟帖