admin管理员组文章数量:1648350
我们知道在部署eosio.system合约之前,cleos new account都是可以好好使用的,一旦eosio.system部署完成,再执行该命令就会报如下错误。
$cleos create account eosio itleaks EOS8Znrtgwt8TfpmbVpTKvA2oB8Nqey625CLN8bCN3TEbgx86Dsvt
Error 3080001: account using more than allotted RAM usage
这时必须使用如下命令创建对象
$cleos system newaccount eosio itleaks EOS8Znrtgwt8TfpmbVpTKvA2oB8Nqey625CLN8bCN3TEbgx86Dsvt —stake-net-bandwidth xxx
其实system newaccount也是调用createaccount命令来创建账号,只不过又多执行一个buyram action
也就是通过新增一个buyram action来解决RAM不够问题,那这里就存在一个问题了?为啥eosio.system部署前不报这个ram不够的错呢?
这个是因为newaccount这个action有两个执行者,一个是native handler函数create_native_account,一个是eosio.system的newaccount函数(原理具体可看我的博文【EOS特殊智能合约eosio】)。create_native_account函数负责创建账号,初始化账号数据。经过create_native_account函数处理后,账号的cpu_resource_limit中的cpu,ram, net都是-1,意味着账号拥有无限的ram, cpu, net, 所以不会报错。而eosio.system部署后,“newaccount”这个action还会执行eosio.system的newaccount函数,这个函数做了一个很重要的事,就是将账号的cpu_resource_limit中的ram,cpu, net都赋值为0,这样该账号就没有任何资源了,因而在后面的检测阶段因为ram不够而报错。
源码分析
"newaccount"的两个处理函数逻辑如下:
native handler的处理函数
eosio.system的处理函数newaccount
|**************************************************
* 本文来自CSDN博主"爱踢门",喜欢请点关注
* 转载请标明出处:http://blog.csdn/itleaks
***************************************************|
如果你对EOS,ETH技术及开发感兴趣,请入QQ群讨论: 829789117
如需实时查看最新文章,请关注公众号"区块链斜杠青年",一起探索区块链未来
版权声明:本文标题:[EOS源码分析]11.cleos create account创建账号失败源码分析 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/xitong/1729497198a1203052.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论