在开始所有之前,先确定已经完成了上一篇文章的内容。
并且保证nodeos在运行中。
创建一个默认钱包
$ cleos wallet create
Creating wallet: default
Save password to use in the future to unlock this wallet.
Without password imported keys will not be retrievable.
"PW5JuBXoXJ8JHiCTXfXcYuJabjF9f9UNNqHJjqDVY7igVffe3pXub"
通过cleos命令创建了一个默认的钱包。并返回给我们这个钱包的秘钥。每台机器生成的秘钥跟这个并不一样。记录下这个秘钥,之后会经常用到。钱包创建完成后默认是锁定状态的,现在我们需要解锁钱包。
解锁钱包
$ cleos wallet unlock --password PW5JuBXoXJ8JHiCTXfXcYuJabjF9f9UNNqHJjqDVY7igVffe3pXub
Unlocked: default
使用刚刚给出的秘钥我们已经解锁了默认的钱包。
更安全的解锁钱包方式
上面解锁钱包的方式,会将秘钥记录到bash的历史中,存在安全隐患。更安全的解锁方式是使用交互方式,按照提示输入密码,其实这里也可以粘贴密码。
$ cleos wallet unlock
password:
锁定钱包
出于安全考虑,在不使用钱包时,锁定钱包。
$ cleos wallet lock
Locked: default
加载Bios合约
eosio.bios是eos自带的一个合约,存在于源文件下的/build/contracts/eosio.bios,下面的命令假定当前目录位于源文件的根目录,当然也可以使用绝对路径加载这个合约 ${EOSIO_SOURCE}/build/contracts/eosio.bios
$ cleos set contract eosio build/contracts/eosio.bios -p eosio
Reading WAST...
Assembling WASM...
Publishing contract...
executed transaction: 414cf0dc7740d22474992779b2416b0eabdbc91522c16521307dd682051af083 4068 bytes 10000 cycles
# eosio <= eosio::setcode {"account":"eosio","vmtype":0,"vmversion":0,"code":"0061736d0100000001ab011960037f7e7f0060057f7e7e7e...
# eosio <= eosio::setabi {"account":"eosio","abi":{"types":[],"structs":[{"name":"set_account_limits","base":"","fields":[{"n...
这个命令的执行结果是使用两个动作(action)生成了一个交易(transaction),这两个动作是:eosio::setcode和eosio::setabi
稍后我们会看到动作可以被多个合约处理。
这个命令的最后一个参数 -p eosio 的含义是使用eosio账户的私钥对操作进行签名。
创建账户
现在我们已经创建了基本的系统合约,接下来我们来创建自己的账户。我们将创建两个账户:user和tester,每个账户都需要一个秘钥与其关联,这个例子中,我们将同一个秘钥关联到两个账户。首先生成一个秘钥
$ cleos create key
Private key: 5Jmsawgsp1tQ3GD6JyGCwy1dcvqKZgX6ugMVMdjirx85iv5VyPR
Public key: EOS7ijWCBmoXBi3CgtK7DJxentZZeTkeUnaSDvyro9dq7Sd1C3dC4
我们看到生成了一个秘钥对,包括一个私钥和一个公钥。然后将这个秘钥对导入到我们的钱包:
$ cleos wallet import 5Jmsawgsp1tQ3GD6JyGCwy1dcvqKZgX6ugMVMdjirx85iv5VyPR
imported private key for: EOS7ijWCBmoXBi3CgtK7DJxentZZeTkeUnaSDvyro9dq7Sd1C3dC4
确保导入的秘钥是你自己实际生成的秘钥,而不是这里的。
创建两个用户帐号
接下来,我们将创建两个帐户user和tester,并使用我们上面创建的密钥。
$ cleos create account eosio user EOS7ijWCBmoXBi3CgtK7DJxentZZeTkeUnaSDvyro9dq7Sd1C3dC4 EOS7ijWCBmoXBi3CgtK7DJxentZZeTkeUnaSDvyro9dq7Sd1C3dC4
...
$ cleos create account eosio tester EOS7ijWCBmoXBi3CgtK7DJxentZZeTkeUnaSDvyro9dq7Sd1C3dC4 EOS7ijWCBmoXBi3CgtK7DJxentZZeTkeUnaSDvyro9dq7Sd1C3dC4
...
cleos create 命令需要两个秘钥,一个用于OwnerKey,另一个用于ActiveKey,在本例中,我们给它两个相同的秘钥。
查看帐号
因为已经加载了 eosio::history_api_plugin 插件,我们可以使用命令查看秘钥控制的帐号。
插件可以通过两种方式加载,命令参数方式和配置文件方式,我们这里是使用的配置文件加载的,所以在命令参数中并没有看到。
$ cleos get accounts EOS7ijWCBmoXBi3CgtK7DJxentZZeTkeUnaSDvyro9dq7Sd1C3dC4
{
"account_names": [
"tester",
"user"
]
}