源代码解读 [EOS 源码分析] 12 - cleos 创建 EOS 账户的方法和流程

Admin · 2019年12月21日 · 21 次阅读
本帖已被设为精华帖!

EOS 源码分析系列文章,由技术作者松果撰写。为帮助更多开发者了解,特获授权转载至此。感谢松果兄支持。

img

上一篇文章介绍了cleos的HTTP客户端(httpc)的源码,cleos是一个命令行客户端,通过httpc向nodeos发出HTTP Request,使用cleos创建EOS账户也遵循这个流程。

cleos创建EOS账户的方法

使用cleos命令创建EOS账户有两种方式:

1、cleos create account

未部署系统合约(eosio.system)时,可以使用此命令创建EOS账户,创建的账户拥有无限资源,账户的创建者必须是系统初始账户eosio,示例如下:

cleos create account eosio alice1111111 EOS7qu2dehGtYceBpZvqfytu2WNuH4D4LLDXq4MmcoAacqzkMaQ8o

如果已经部署了系统合约,就不能使用这种方式创建EOS账户,会报资源不足的错误:

Error 3080001: Account using more than allotted RAM usage
Error Details:
account alice1111111 has insufficient ram; needs 2996 bytes has 0 bytes

这时需要使用下面的命令来创建。

2、cleos system newaccount

部署了系统合约(eosio.system、eosio.token)的EOS节点环境创建新的EOS账户,需要使用system newaccount命令,并为新账户购买资源,示例如下:

cleos system newaccount --stake-net '10.0000 EOS' --stake-cpu '10.0000 EOS' --buy-ram-kbytes 4096 eosio alice1111111 EOS7qu2dehGtYceBpZvqfytu2WNuH4D4LLDXq4MmcoAacqzkMaQ8o

和cleos create account命令相比,cleos system newaccount命令增加了三个选项:

  • --stake-net '10.0000 EOS'(抵押10个EOS用于网络资源);

  • --stake-cpu '10.0000 EOS'(抵押10个EOS用于CPU资源);

  • --buy-ram-kbytes 4096(购买4MB内存)。

cleos创建EOS账户的流程

两种方式创建EOS账户的源码都位于eos/programs/cleos/main.cpp中,

create account方式的源码位于第2393行:

img

system newaccount方式的源码位于第3872行:

img

可以看到,它们都调用了相同的函数create_account_subcommand,只是传递的第二个参数不同,分别是true和false。

create_account_subcommand是一个结构体,在main.cpp中的定义如下:

img

两种方式调用的都是create_account_subcommand构造函数,第二个参数是布尔类型的simple,表示是否以简单模式创建EOS账户,简单模式即不需要初始化资源

非简单模式下,才会添加资源相关的选项:

img

接下来是create_account_subcommand函数的主流程,放到下一篇文章中进行介绍。

更多内容

币圈信息站开发目录

EOS开发系列目录

共收到 0 条回复
Admin 将本帖设为了精华贴 12月21日 16:21
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册