EOS账号ram,cpu资源用尽了,啥都不能干了,怎么办

问题重现

    比如如下账号testtest1233,ram, cpu资源都没有了

因此创建新账号失败

于是想着购买cpu,结果失败

那购买ram,却仍旧失败

    所以进入了一个死循环,没有ram没法购买cpu,没有cpu没法购买ram,因而要破解这个先有鸡还是先有蛋的问题。

解决方案

    目前有两种方法
    1) 让其他账号给你买一些ram或者cpu
        这个要找到其他账号的过程由个人的人脉决定,是一个不确定状态

    2) 我搭建了一个【EOS互助平台】专门用来解决这个问题,具体请参考这篇文章EOS CPU不足

       https://blog.csdn.net/itleaks/article/details/80812902   

    3)将buyram action和stake cpu action打包到一个transaction
        目前cleos并不存在发送包含多个action的transaction的命令,因此我修改了cleos源码,实现了一个buyres命令用来将购买ram和抵押购买cpu action打包在一个transaction里。 该扩展命令我是参考newaccount命令修改而来的,patch可以从以下url下载:
    下载完成后,在eos源码目录执行 git am 0001-Add-extend-command-for-cleos.patch,
     然后执行./eosio_build.sh重新编译

    buyres命令会生成包含了2个action的transaction, 从而该transaction的执行时间会长一些,同时由于没有cpu资源,从而有可能引起leeway错误,可以多尝试几次。

    这种方法也是在很极端的情况下才可以成功,因为目前系统设置了一个leeway时间限制,就是transaction的最长cpu时间= leeway(3000us) + account_cpu_limit(本文讨论的账号这里肯定就是0) = 3000us,也就是说buyram和buycpu两个action的 时间不能超过3000us,通常情况下这两个action耗时4500+us,除非节点机器够强悍,负载够轻才可能将这个执行时间降到 3000us以下,这种情况下才能成功,可见这种时机也是不好把控的。

    总的来说,目前情况下,第二种方案最好。第三种方法我也已经在给官方提意见,希望能够将这个leeway提高到6000us.但是这个也会增加DOS攻击的损失。因为目前cpu不够等错误并不会扣除执行账号的余额,所以作恶账号可以持续的发起肯定不能成功的action,大量消耗全网的cpu资源,而自己可以毫发无伤。

/********************************
* 本文来自CSDN博主"爱踢门"
* 转载请标明出处:http://blog.csdn.net/itleaks
******************************************/

EOS技术交流群,EOS开发群,以太坊技术群:787804520

猜你喜欢

转载自blog.csdn.net/itleaks/article/details/80754175
今日推荐