[EOS源码分析]11.cleos create account创建账号失败源码分析

59 篇文章 0 订阅
12 篇文章 25 订阅

    我们知道在部署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.net/itleaks
***************************************************|

如果你对EOS,ETH技术及开发感兴趣,请入QQ群讨论: 829789117


如需实时查看最新文章,请关注公众号"区块链斜杠青年",一起探索区块链未来

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
实现BP直链付款,需要以下步骤: 1. 创建一个BP钱包并获取私钥 2. 使用私钥对交易进行签名 3. 广播交易到区块链网络并等待确认 以下是一个使用Python实现BP直链付款的示例代码: ```python from eospy.cleos import Cleos from eospy.keys import EOSKey # 设置节点地址 ce = Cleos(url='http://api.eosnewyork.io') # 设置BP账户和私钥 bp_account = 'your_bp_account' bp_private_key = 'your_bp_private_key' # 设置收款人账户和金额 to_account = 'recipient_account' amount = '1.0000 EOS' # 获取BP账户的余额和账户信息 account_info = ce.get_account(bp_account) balance = account_info['core_liquid_balance'] # 创建交易数据 data = { 'from': bp_account, 'to': to_account, 'quantity': amount, 'memo': 'Test Memo' } # 签名交易数据 key = EOSKey(bp_private_key) trx = {"actions":[{"account":"eosio.token","name":"transfer","authorization":[{"actor":bp_account,"permission":"active"}],"data":data}]} trx['expiration'] = str((ce.head_block_time + datetime.timedelta(seconds=60)).replace(microsecond=0)) trx_id = ce.chain.push_transaction(trx, key, broadcast=True) print('Transaction ID:', trx_id) ``` 在以上示例代码中,我们使用了`eospy`库来与EOS区块链进行交互,首先设置了节点地址、BP账户和私钥、收款人账户和金额,然后获取了BP账户的余额和账户信息。接着,我们创建了交易数据,对交易数据进行签名并广播交易到区块链网络,最后打印出交易ID。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值