如何释放已使用的EOS RAM

时间:2018-07-05作者:klpeng分类:IT综合浏览:1975评论:0

如何释放已使用的EOS RAM(合约占用的内存)

 

写在前面

本文主要适用于以下场景或用户:

1. 在主网发布了智能合约或者合约代币者不想使用此合约或想销毁此代币合约

2. 想把代币合约或智能合约占用的内存释放的

提示

截止到目前为止,在主网发布代币合约占用ram大约(180kb+),阅读本文将释放内存共

(180kb+) - 7kb;

 
情景

昨天EOS RAM价格开始下跌,有一些用户想卖掉自己的RAM,但是却发现大量RAM被占用,

位伙伴找到我时,他说啥都没做但他的内存使用量怎么高达189k,然后我查了一下该账号的交易记录,发现他曾经部署过智能合约。然后他告诉我是他不小心部署的,且报错了,以为没部署成功。可见RAM被智能合约吃掉了,那怎么办呢?

 

释放已经使用的EOS RAM

 

    个人使用掉的EOS RAM如果很大,大部分都是智能合约导致的,因此减少智能合约的EOS RAM占用即可释放RAM。智能合约已经部署上去了,又没有删除接口,那怎么减少智能合约的RAM占用?EOS提供了智能合约更新接口,通过更新一个更小的智能合约即可减少RAM的使用量。那什么是最小的智能合约呢?只有一个空函数的智能合约,比如

 

 

然后更新为这个最小的智能合约后发现占用的RAM确实下降到了31k了,瞬间减少了158K的RAM使用量。那有没有可能有更小的智能合约呢?经过底层分析,我实现了一个只占用7k的智能合约, 大家可以实践实践猜猜我是怎么实现的。合约链接如下:

        https://github.com/itleaks/eos-contract/tree/master/cleancontract-exp

更新智能合约释放RAM

git clone https://github.com/itleaks/eos-contract.git

cleos set contract your_account cleancontract-exp/empty/

 

    由于更新智能合约需要用到私钥,请大家不要轻易交给第三方操作,除非是非常信任的人,就算是这种可信任情况,也要要求他通过set permission更新账号的EOS公钥,达到私钥只有你一人知道的效果。

    还有一点需要注意的是如果你原来的智能合约的table已经有数据,请先通过你的智能合约接口清理这些数据,如果你的智能合约没有清理接口,那就先实现一个清理数据的智能合约并更新,清理完成后再部署这个empty智能合约。

其他操作占用的RAM    

其他操作包括抵押,执行带有table的action也会占用RAM,这种RAM释放就比较麻烦一点,需要知道是抵押给谁的,调用哪些action,然后执行反向操作将数据清空才可以释放RAM。由于这部分RAM使用量一般较少,所以优先级不高

文章原文:http://blog.csdn.net/itleaks


打赏
文章版权声明:除非注明,否则均为彭超的博客原创文章,转载或复制请以超链接形式并注明出处。
相关推荐

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

猜你喜欢