昨天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 contractyour_accountcleancontract-exp/empty/

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

其他操作占用的RAM

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

results matching ""

    No results matching ""