昨天提到了一个问题:如果账户的CPU,带宽和RAM资源用光了怎么办? 但是受篇幅所限,只是简单下了结论,没有展开来说。 今天的文章,我们继续聊一下EOS中资源耗尽之后的恢复方式。由于今天发文时间刚好在回老家的飞机上,
无法查看发文状态,所以如果格式之类有问题,还请多多包涵,我晚点会改正。
image两类不同的资源
CPU/带宽资源,和RAM资源存在诸多不同之处。 - 计费方式不同: 前者是抵押多少,赎回时候能够收回多少EOS;后者是根据市场价格,赎回RAM时候的价格,可高可低。 - 是否可转让:CPU跟带宽资源可以租赁给别人使用;而RAM资源不可以,只存在占用、释放两种状态,无法租赁给他人。 除此之外,两类资源的使用和恢复方式也有所不同。我们来简单了解一下。
RAM与仓库租赁
可以简单的理解为:RAM是固定的,是不可再生资源,除非继续提升供应量,不然,RAM就只有那么多。
类似于你去到一间大的仓库,你付费租了其中一小部分的空间,用于存放你的物品;
如果空间用光了,只有继续付费,购买更大的空间。
RAM资源用光了,就是用光了,如果想要继续使用的话,就只好继续抵押EOS,来购买新的RAM。
CPU,带宽,回转寿司店
而CPU和带宽资源, 虽然一定时间内,你可以用的是数量仍然是有限的,但是,它们的供应是持续的。
比如,你去了寿司店吃回转寿司。在这一轮,也许回转寿司已经全部吃光了;但是,只要这家店还想继续做生意,就会继续供应寿司;那么,你等待一段时间之后,仍然是有寿司可以吃的。
CPU和带宽资源也是一样。虽然一定时间内,供应量就是那么些,但是,CPU跟带宽的资源是流动的,可以理解为是可持续供应的资源。
只要节点还在运转,那么,CPU资源就会持续存在。虽然你在上一个周期里面,已经把分配给你的份额用光了,但是,你还是后续有CPU资源可以继续使用。
简单说,按照我目前的有限理解,就是CPU跟带宽的资源是具有恢复期的,至于恢复期是多长,我原先以为是24小时,不过按照我目前的理解程度,对于恢复期还无法下定论。
总额不变,可用量增加
假设节点的硬件水平是固定的,那么,单位时间内的总CPU跟带宽资源是固定的。
假设,你的EOS所占的总的份额也不变,那么,单位时间内,分配给你的总的可用CPU跟带宽也是固定的。这一点应该容易理解。
那么,我们所说的恢复是什么意思呢? 可以理解为,你已经使用过的CPU跟带宽的数额,会随着时间而衰减。就是说,随着时间推移,你上周的时候,可能显示的使用量是50%,而现在,计算你已经用过的资源也许就会变为25%。
用总的配额,减去你已用资源的数量,就是你当前可以用的资源了。
https://eosflare.io/account/blockchainpm
resource-limit-12.png例如,图中显示的红框部分,就是我某个账号的cpu跟带宽使用情况。我们过一周时间再来看看是否会有所变化。
取消再抵押,如何计算?
有朋友问道:如果我cpu跟带宽快用光了,那么这时候我赎回EOS,等EOS三天后转到了账户里,我再重新抵押换取资源,是不是就可以恢复了?
这一点我还在尝试中,我的理解很可能会有错,希望一起探讨。我先说一下我的看法。
不过按照目前阅读代码得到的理解,这样做应该没有什么用处。因为,你的帐号使用了多少资源,会记录下来;取消抵押之后这个记录仍然存在;
三天后重新抵押的时候,既然你的使用记录仍然在,那么,考虑到时间恢复的因素,你的可用资源量,仍然也只会比你刚开始时候的可用资源量多一点点,而不会清零重计算。
不过,有一个方式也许会生效:
你的某个账户 A 取消了质押,然后将取回的EOS转给另外一个账户,B。B重新抵押之后,可以得到这部分资源。
当然,这种情况的使用场景比较狭窄,仅仅是作为探讨列在这里。
问题与参考
资源模型部分,复杂而有趣,不是几篇文章能够完全写完写清楚的。
我也是边探索这个黑盒子,边分享自己的探索体会。
欢迎同好一起交流探讨,我的微信号是:shuke0327.
就我目前所知,还没有见到文章明确写到这部分,昨天晚上到现在还在翻查代码,对于资源限制这部分仍然没有完全明白。也请做过研究的同学指教。
关于资源计费和配额的代码主要在 resource_limits.cpp
, resource_limits_private.cpp
和 transaction_context.cpp
这几个文件中。
随着EOS研究者们对资源模型的深入理解,你一定会发现,我所写的内容肯定会存在很多错误的地方或者理解不当的地方,还请不吝赐教。
网友评论