一行代码改动缓解 EOS 主网资源短缺问题!
背景
随着 EOS dapp 的日益流行,EOS 主网资源(CPU,NET,RAM)短缺的问题也日益凸显。
这也是 EOSLaoMao 团队很早就立项 Bank of Staked 项目的原因。我们希望通过该项目,释放更多的 EOS 用于租赁,从而降低开发者和用户的资源成本。
在开发 Bank of Staked 的过程中,我们对 EOS 系统合约做了大量的研究和测试,积累了一定的经验。比如我们将系统合约的解除抵押到账时间从默认的 3 天改成了 1 分钟,从而可以更方便地测试 Bank of Staked 的自动解抵押功能。
解抵押中的 EOS 的再利用
在测试系统合约的过程中,我们(以及很多其他开发者)发现了系统合约的一个特殊的行为,或者说功能:
当用户给自己的账户抵押的时候,系统合约会优先使用解抵押中的 EOS(unstaking EOS)。只有当解抵押中的 EOS 不够的时候,才会使用余额中的 EOS 进行补足。
让我们看一个例子:
假设我们有一个账户 eoslaomaocom,该账户的可用余额有 200 EOS,同时还有一笔解抵押中的 300 EOS:
$ cleos get account eoslaomaocom
EOS balances:
liquid: 200.0000 EOS
staked: 0.0000 EOS
unstaking: 300.0000 EOS
total: 500.0000 EOS
我们用该账户给自己抵押 400 EOS 的 CPU:
cleos system delegatebw eoslaomaocom eoslaomaocom "0 EOS" "400 EOS"
抵押成功之后,我们会看到如下的输出:
executed transaction: xxxxxxxxxxxxxxxx 144 bytes 893 us
# eosio <= eosio::delegatebw {"from":"eoslaomaocom","receiver":"eoslaomaocom","stake_net_quantity":"0.0000 EOS","stake_cpu_quantity":"400.0000 EOS", "transfer": 0}
# eosio.token <= eosio.token::transfer {"from":"eoslaomaocom","to":"eosio.stake","quantity":"100.0000 EOS","memo":"stake bandwidth"}
# voter1 <= eosio.token::transfer {"from":"eoslaomaocom","to":"eosio.stake","quantity":"100.0000 EOS","memo":"stake bandwidth"}
# eosio.stake <= eosio.token::transfer {"from":"eoslaomaocom","to":"eosio.stake","quantity":"100.0000 EOS","memo":"stake bandwidth"}
下面是 eoslaomaocom 账户最终的状态:
$ cleos get account eoslaomaocom
EOS balances:
liquid: 100.0000 EOS
staked: 400.0000 EOS
unstaking: 0.0000 EOS
total: 500.0000 EOS
我们可以看到,这笔 400 EOS 的抵押操作,由解抵押中的 300 EOS 和余额中的 100 EOS 构成。也就是说,系统合约会优先利用解抵押中的 EOS 给自身账户做抵押。
这个功能对用户来说非常棒,因为当他们给自己做抵押的时候,账户中解抵押中的 EOS 可以直接使用,而不会受到 3 天的回款期的限制。
可惜的是,这个功能只有在账户给自己做抵押的时候才有效。在我们的例子中,当 eoslaomaocom 给其他账户抵押的时候,系统合约将只从 eoslaomaocom 的账户余额中扣除全部的抵押金额。
这里是这个功能的代码实现:eosio.system/src/delegate_bandwidth.cpp
在给其他账户抵押的时候,也想优先使用解抵押中的 EOS?只要一行代码改动!
为了让在给其他账户抵押的时候也能使用解抵押中的 EOS,我们深入研究了系统合约代码,发现只需要一行代码改动,就可以实现这个目的。
这里是代码改动的截图和 diff:
eosio.system/src/delegate_bandwidth.cpp code diff
针对改动之后的系统合约,我们在本地测试网络做了详尽的测试,功能完全符合我们的预期。
近期我们将推动这一改动在麒麟测试网络上的部署和测试。我们也希望社区的开发者们也都来参与测试,并提供测试结果和反馈。
如果未来的测试没有问题,我们将发起 proposal 将这个惠及所有 EOS 账户的改动部署到 EOS 主网上。
我们相信这个改动,可以让 EOS 主网释放更多的资源,进而最终降低开发者和用户的资源成本。
By EOSLaoMao 团队
Leave 一行代码改动缓解 EOS 主网资源短缺问题! to:
Read more #eos posts
Best Posts From EOSLaoMao
We have not curated any of eoslaomao's posts yet. But you can encourage our curation team to review posts by visiting them regularly and by referring other readers. Because we give priority to frequently read content.
More Posts From EOSLaoMao
- Announcing EOSES, an EOS Mainnet Data Visualization Service powered by EOSLaoMao team
- 翻译 | 为什么 EOS 的 BP 应该遵循争议解决的裁决
- 翻译 | EOS争端解决中的制衡——或是制衡“流氓”仲裁员
- EOSLaoMao 团队主网上线半年大事纪(中)
- EOSLaoMao 团队主网上线半年大事纪(上)
- 转载 |【独家采访】EOSLaoMao 发起人老猫:除了 EOS,没有更好的选择
- 一行代码改动缓解 EOS 主网资源短缺问题!
- More Resource on EOS Mainnet with ONE-LINE Code Change
- Governance | What is the potential for ECAF to be replaced?
- EOS Guardian, an easy-to-use smart contract to protect your EOS account