00 導言
? ? ??在上一講,我們講述了《怎樣在不滿足硬件條件的ubuntu上搭建EOS開發(fā)環(huán)境》,通過增加swap和修改腳本來達到我們的目的。在開發(fā)環(huán)境搭建好后,接下來我們干什么好呢?你可能很想趕快創(chuàng)建智能合約并部署運行起來。不過別急,我們還是先來學學如何創(chuàng)建和管理錢包。說到錢包,我默默地望了望我那干癟的錢包,然后偷偷地跑到廁所里的哭了一陣:(
? ? ??EOS創(chuàng)建錢包需要用到相應的命令工具。實際上EOS包含了好幾種命令工具,每一種命令下又包含了若干的子命令,它們組成了一套命令工具集。這幾種命令工具如下:
| 命令 | 說明 |
|---|---|
| nodeos | (node + eos = nodeos) - 核心的EOSIO節(jié)點守護進程,用于啟動節(jié)點,生產(chǎn)區(qū)塊和接收API請求 |
| cleos | (cli + eos = cleos) - 客戶端命令行交互模塊,用于解析用戶命令,根據(jù)具體命令請求調(diào)用相應的接口,例如查看區(qū)塊信息、操作錢包等等 |
| keosd | (key + eos = keosd) - 錢包相關(guān)密鑰的安全管理模塊 |

? ? ??創(chuàng)建和管理錢包,我們需要用到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 創(chuàng)建默認錢包
? ? ??使用 cleos wallet create 可以創(chuàng)建錢包。
$ 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 創(chuàng)建指定名稱的錢包
? ? ??上面create后面什么都不跟,此時創(chuàng)建的是default錢包。我們也可以使用 -n 選項,后面跟上錢包名稱,可以創(chuàng)建指定名稱的錢包。
$ 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"
? ? ??上面創(chuàng)建了一個名稱為testwallet的錢包。
03 查看所有錢包
? ? ??使用cleos wallet list可以創(chuàng)建已經(jīng)創(chuàng)建的所有錢包。
$ cleos wallet list
Wallets:
[
"default",
"testwallet *"
]
? ? ??我們擁有了兩個錢包,一個是default,一個是testwallet。
04 鎖定錢包
? ? ??通過cleos wallet list可以查看已經(jīng)創(chuàng)建的所有錢包,不過細心的你可能會發(fā)現(xiàn)testwallet錢包后面帶了一個*號。這個*號表示錢包的處于解鎖狀態(tài),剛剛創(chuàng)建的錢包默認是解鎖狀態(tài)的。等過一陣子,錢包就會自動變?yōu)殒i定狀態(tài)了,例如default錢包就處于鎖定狀態(tài)。
? ? ??我們也可以使用cleos wallet lock子命令手動鎖定某個錢包。
$ cleos wallet lock -n testwallet
Locked: testwallet
$ cleos wallet list
Wallets:
[
"default",
"testwallet"
]
? ? ??如果不加-n ,則表示鎖定default錢包。
05 解鎖錢包
? ? ??處于鎖定狀態(tài)的錢包,什么事都做不了,此時需要解鎖錢包。使用cleos wallet unlock可以解鎖default錢包,加上-n表示解鎖指定名稱的錢包。
$ cleos wallet unlock -n testwallet
password:
Unlocked: testwallet
$ cleos wallet list
Wallets:
[
"default",
"testwallet *"
]
06 創(chuàng)建密鑰對
? ? ??想象一下,現(xiàn)實生活中錢包是用來干嗎的?你肯定會說錢包當然是用來放錢的,沒錯,除此之處錢包也可以用來放各種各樣的銀行卡。銀行卡通過賬號和密碼進行操作。與之相類似,區(qū)塊鏈的錢包是用來管理密鑰對的。一組密鑰對相當于一張銀行卡,公鑰對應銀行卡的賬號,私鑰對應銀行卡的密碼。一個區(qū)塊鏈錢包可以管理多組密鑰對。
? ? ??使用cleos create key 命令可以創(chuàng)建密鑰對。
$ cleos create key
Private key: 5KQmW22Ah47S4vfjFyyzsjdcpBgEf3PKqZf5rjhSsXdcPpNPygh
Public key: EOS5M8uPke7hWU12d99d8uNmTLjRJxaSgg6pu4GrEkbvy1mcb7oGS
$ cleos create key
Private key: 5J7Go6bPpGDdV3Ra5M47F9p7BFD9P3UC5vPYWFdWPMQLaNYu7Re
Public key: EOS7ttmfisjgAXNcqnryNUCcQJ1ptVyXokgQmVXacQ93jtn11ZnFV
? ? ??上面我們創(chuàng)建了兩鑰密鑰對。
07 導入私鑰
? ? ??接下來我們可以將上面創(chuàng)建的兩組密鑰對導入同一個錢包。使用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參數(shù),表示列出default錢包導入的密鑰對。
10 總結(jié)
? ? ?? 通過cleos wallet和相關(guān)的子命令,我們可以創(chuàng)建和查看EOS的錢包,并且導入密鑰對。一個錢包可以導入多組密鑰對,就像現(xiàn)實生活中的錢包可以存放多張銀行卡一樣。它們的關(guān)系如下圖,下一講我們將講述賬戶的創(chuàng)建以及賬戶和錢包的關(guān)系。
