EOS开发实战 - 如何创建和管理钱包

00 导言

      在上一讲,我们讲述了《怎样在不满足硬件条件的ubuntu上搭建EOS开发环境》,通过增加swap和修改脚本来达到我们的目的。在开发环境搭建好后,接下来我们干什么好呢?你可能很想赶快创建智能合约并部署运行起来。不过别急,我们还是先来学学如何创建和管理钱包。说到钱包,我默默地望了望我那干瘪的钱包,然后偷偷地跑到厕所里的哭了一阵:(

      EOS创建钱包需要用到相应的命令工具。实际上EOS包含了好几种命令工具,每一种命令下又包含了若干的子命令,它们组成了一套命令工具集。这几种命令工具如下:

命令 说明
nodeos (node + eos = nodeos) - 核心的EOSIO节点守护进程,用于启动节点,生产区块和接收API请求
cleos (cli + eos = cleos) - 客户端命令行交互模块,用于解析用户命令,根据具体命令请求调用相应的接口,例如查看区块信息、操作钱包等等
keosd (key + eos = keosd) - 钱包相关密钥的安全管理模块

      这几种命令工具的关系如下图所示:
EOS开发实战 - 如何创建和管理钱包_第1张图片

      创建和管理钱包,我们需要用到cleos下的子命令wallet。直接在命令行键入cleos回车,可以查看相应的子命令。

$ cleos
ERROR: RequiredError: Subcommand required
Command Line Interface to EOSIO Client
Usage: cleos [OPTIONS] SUBCOMMAND

Options:
  -h,--help                   Print this help message and exit
  -u,--url TEXT=http://localhost:8888/
                              the http/https URL where nodeos is running
  --wallet-url TEXT=http://localhost:8900/
                              the http/https URL where keosd is running
  -r,--header                 pass specific HTTP header; repeat this option to pass multiple headers
  -n,--no-verify              don't verify peer certificate when using HTTPS
  -v,--verbose                output verbose actions on error
  --print-request             print HTTP request to STDERR
  --print-response            print HTTP response to STDERR

Subcommands:
  version                     Retrieve version information
  create                      Create various items, on and off the blockchain
  get                         Retrieve various items and information from the blockchain
  set                         Set or update blockchain state
  transfer                    Transfer EOS from account to account
  net                         Interact with local p2p network connections
  wallet                      Interact with local wallet
  sign                        Sign a transaction
  push                        Push arbitrary transactions to the blockchain
  multisig                    Multisig contract commands
  system                      Send eosio.system contract action to the blockchain.

      我们在命令行中键入 cleos wallet,可以查看wallet这个子命令的子命令。

$ cleos wallet
ERROR: RequiredError: Subcommand required
Interact with local wallet
Usage: cleos wallet SUBCOMMAND

Subcommands:
  create                      Create a new wallet locally
  open                        Open an existing wallet
  lock                        Lock wallet
  lock_all                    Lock all unlocked wallets
  unlock                      Unlock wallet
  import                      Import private key into wallet
  remove_key                  Remove key from wallet
  create_key                  Create private key within wallet
  list                        List opened wallets, * = unlocked
  keys                        List of public keys from all unlocked wallets.
  private_keys                List of private keys from an unlocked wallet in wif or PVT_R1 format.
  stop                        Stop keosd (doesn't work with nodeos).

01 创建默认钱包

      使用 cleos wallet create 可以创建钱包。

$ cleos wallet create
"/usr/local/bin/keosd" launched
Creating wallet: default
Save password to use in the future to unlock this wallet.
Without password imported keys will not be retrievable.
"PW5JAxrSC6pGmpqTt2ygaRgWW7WXAex7QtwMRknkUzG1ThCfDuS39"

      “PW5JAxrSC6pGmpqTt2ygaRgWW7WXAex7QtwMRknkUzG1ThCfDuS39”是生成的钱包密码,cleos可以用来管理多个钱包,但每个钱包都通过不同的钱包密码进行保护,请一定妥善保存!

02 创建指定名称的钱包

      上面create后面什么都不跟,此时创建的是default钱包。我们也可以使用 -n 选项,后面跟上钱包名称,可以创建指定名称的钱包。

$ cleos wallet create -n testwallet
Creating wallet: testwallet
Save password to use in the future to unlock this wallet.
Without password imported keys will not be retrievable.
"PW5JJpM79Za4jymBvMfqDmtzGQxUP3imJyTe9LCVpmSsytTbwTDVA"

      上面创建了一个名称为testwallet的钱包。

03 查看所有钱包

      使用cleos wallet list可以创建已经创建的所有钱包。

$ cleos wallet list
Wallets:
[
  "default",
  "testwallet *"
]

      我们拥有了两个钱包,一个是default,一个是testwallet。

04 锁定钱包

      通过cleos wallet list可以查看已经创建的所有钱包,不过细心的你可能会发现testwallet钱包后面带了一个*号。这个*号表示钱包的处于解锁状态,刚刚创建的钱包默认是解锁状态的。等过一阵子,钱包就会自动变为锁定状态了,例如default钱包就处于锁定状态。

      我们也可以使用cleos wallet lock子命令手动锁定某个钱包。

$ cleos wallet lock -n testwallet
Locked: testwallet

$ cleos wallet list
Wallets:
[
  "default",
  "testwallet"
]

      如果不加-n ,则表示锁定default钱包。

05 解锁钱包

      处于锁定状态的钱包,什么事都做不了,此时需要解锁钱包。使用cleos wallet unlock可以解锁default钱包,加上-n表示解锁指定名称的钱包。

$ cleos wallet unlock -n testwallet
password: 
Unlocked: testwallet

$ cleos wallet list
Wallets:
[
  "default",
  "testwallet *"
]

06 创建密钥对

      想象一下,现实生活中钱包是用来干吗的?你肯定会说钱包当然是用来放钱的,没错,除此之处钱包也可以用来放各种各样的银行卡。银行卡通过账号和密码进行操作。与之相类似,区块链的钱包是用来管理密钥对的。一组密钥对相当于一张银行卡,公钥对应银行卡的账号,私钥对应银行卡的密码。一个区块链钱包可以管理多组密钥对。

      使用cleos create key 命令可以创建密钥对。

$ cleos create key
Private key: 5KQmW22Ah47S4vfjFyyzsjdcpBgEf3PKqZf5rjhSsXdcPpNPygh
Public key: EOS5M8uPke7hWU12d99d8uNmTLjRJxaSgg6pu4GrEkbvy1mcb7oGS

$ cleos create key
Private key: 5J7Go6bPpGDdV3Ra5M47F9p7BFD9P3UC5vPYWFdWPMQLaNYu7Re
Public key: EOS7ttmfisjgAXNcqnryNUCcQJ1ptVyXokgQmVXacQ93jtn11ZnFV

      上面我们创建了两钥密钥对。

07 导入私钥

      接下来我们可以将上面创建的两组密钥对导入同一个钱包。使用cleos wallet import子命令,后面跟上私钥进行导入。

$ cleos wallet import -n testwallet 5KQmW22Ah47S4vfjFyyzsjdcpBgEf3PKqZf5rjhSsXdcPpNPygh
imported private key for: EOS5M8uPke7hWU12d99d8uNmTLjRJxaSgg6pu4GrEkbvy1mcb7oGS

$ cleos wallet import -n testwallet 5J7Go6bPpGDdV3Ra5M47F9p7BFD9P3UC5vPYWFdWPMQLaNYu7Re
imported private key for: EOS7ttmfisjgAXNcqnryNUCcQJ1ptVyXokgQmVXacQ93jtn11ZnFV

      不加-n选项 ,表示导入到default钱包。

08 列出所有已解锁钱包导入的公钥

      使用cleos wallet keys列出所有已解锁钱包导入的公钥

$ cleos wallet keys
[
  "EOS5M8uPke7hWU12d99d8uNmTLjRJxaSgg6pu4GrEkbvy1mcb7oGS",
  "EOS7ttmfisjgAXNcqnryNUCcQJ1ptVyXokgQmVXacQ93jtn11ZnFV"
]

      默认列出所有钱包,不能通过-n选项来指定某个钱包。

09 列出指定钱包导入的密钥对

      使用cleos wallet private_keys列出指定钱包导入的密钥对。

$ cleos wallet private_keys -n testwallet
password: [[
    "EOS5M8uPke7hWU12d99d8uNmTLjRJxaSgg6pu4GrEkbvy1mcb7oGS",
    "5KQmW22Ah47S4vfjFyyzsjdcpBgEf3PKqZf5rjhSsXdcPpNPygh"
  ],[
    "EOS7ttmfisjgAXNcqnryNUCcQJ1ptVyXokgQmVXacQ93jtn11ZnFV",
    "5J7Go6bPpGDdV3Ra5M47F9p7BFD9P3UC5vPYWFdWPMQLaNYu7Re"
  ]
]

      不加-n参数,表示列出default钱包导入的密钥对。

10 总结

       通过cleos wallet和相关的子命令,我们可以创建和查看EOS的钱包,并且导入密钥对。一个钱包可以导入多组密钥对,就像现实生活中的钱包可以存放多张银行卡一样。它们的关系如下图,下一讲我们将讲述账户的创建以及账户和钱包的关系。


EOS开发实战 - 如何创建和管理钱包_第2张图片

你可能感兴趣的:(EOS开发实战 - 如何创建和管理钱包)