EOS基礎(chǔ)全家桶(五)錢包管理

簡(jiǎn)介

本篇我們將會(huì)學(xué)習(xí)EOS自帶的命令行錢包的使用方法帐偎,我們將會(huì)使用cleos來(lái)控制keosd服務(wù)對(duì)本地錢包進(jìn)行管理捂人。

雖然現(xiàn)在市面上已經(jīng)有很多支持EOS的錢包了御雕,有Web錢包,有app錢包滥搭,還有瀏覽器插件錢包,著名有scatter錢包捣鲸、TokenPocket錢包還有MeetOne錢包等瑟匆。但是基于服務(wù)器上的錢包管理我們還是必須要學(xué)會(huì)使用keosd的功能,而且栽惶,從安全性來(lái)說(shuō)愁溜,三方的終究沒有官方的更讓人放心吧,我的同事就遇到過(guò)被三方sdk盜號(hào)的情況外厂,所以作為開發(fā)人員冕象,熟練使用keosd的功能,對(duì)我們管理EOS節(jié)點(diǎn)和管理私鑰都至關(guān)重要汁蝶,更何況我們后續(xù)的學(xué)習(xí)都還要基于它呢渐扮。

EOS基礎(chǔ)全家桶(五)錢包管理

簡(jiǎn)介

前置條件

keosd與cleos

啟動(dòng)/停止錢包服務(wù)

默認(rèn)啟停錢包服務(wù)

手動(dòng)啟停錢包服務(wù)

創(chuàng)建錢包

生成私鑰對(duì)

直接生成

生成到錢包

導(dǎo)入私鑰

鎖定與解鎖

解鎖

鎖定

移除私鑰

查看

查看當(dāng)前已導(dǎo)入key

查看錢包狀態(tài)

查看錢包中的私鑰

刪除錢包

前置條件

要使用錢包的功能,我們至少要安裝好了EOS掖棉,包括cleos和keosd墓律,如果使用docker安裝的,我們需要借助docker容器內(nèi)環(huán)境來(lái)操作幔亥,所以建議直接通過(guò)docker的exec命令進(jìn)入到容器內(nèi)部耻讽。

keosd與cleos

在前面EOS基礎(chǔ)全家桶(四)啟動(dòng)節(jié)點(diǎn)中我們介紹了,cleos是一個(gè)命令行工具帕棉,可以通過(guò)rpc接口管理nodeos和keosd针肥,而keosd則是一個(gè)錢包和私鑰文件的管理服務(wù)饼记,本身提供了sockets、http及https的接口慰枕,支持訪問(wèn)控制和webauth的配置握恳。本文只會(huì)介紹基本的功能。

特別說(shuō)明:

下面的文章中使用的截圖中cleos命令大部分都會(huì)帶上—wallet-url參數(shù)捺僻,改參數(shù)并非必須乡洼,只是為了使用特定錢包目錄和服務(wù)而加上。

啟動(dòng)/停止錢包服務(wù)

默認(rèn)啟停錢包服務(wù)

啟動(dòng)

默認(rèn)當(dāng)我們使用cleos的wallet命令操作時(shí)會(huì)自動(dòng)判斷是否已啟動(dòng)了keosd服務(wù)匕坯,如果沒有啟動(dòng)就會(huì)使用默認(rèn)配置啟動(dòng)keosd束昵。

比如我們使用命令cleos wallet list時(shí),可以看到命令行中出現(xiàn)了一行keosd launched的提示葛峻,就表示默認(rèn)錢包服務(wù)已經(jīng)啟動(dòng)了锹雏。

停止

最簡(jiǎn)單的方式就是使用命令cleos wallet stop,當(dāng)然你也可以直接殺掉keosd的進(jìn)程术奖。

手動(dòng)啟停錢包服務(wù)

啟動(dòng)

我們可以手動(dòng)啟動(dòng)keosd礁遵,可以指定它的啟動(dòng)端口、文件目錄和解鎖時(shí)間等采记。錢包的默認(rèn)路徑為用戶目錄下的eosio-wallet文件夾(~/eosio-wallet/)佣耐。下面的命令我們制定了socket的入口文件狡孔,解鎖時(shí)間和錢包目錄截碴。

keosd --unlock-timeout 100 \

--unix-socket-path ~/study/eosio-wallet/keosd.sock \

--wallet-dir ~/study/eosio-wallet

執(zhí)行后如果看到如圖所示耀石,就表示啟動(dòng)成功了谐岁。

啟動(dòng)后錢包目錄下會(huì)產(chǎn)生socket通信文件和錢包文件wallet.lock亥鬓。

這種啟動(dòng)方式的優(yōu)點(diǎn)是可以更方便的設(shè)定錢包啟動(dòng)參數(shù)湾笛,包括端口碳胳、目錄這些可能需要特例化的設(shè)置參數(shù)烦租。

缺點(diǎn)是不夠簡(jiǎn)單方便丸冕,程序是前臺(tái)程序耽梅,啟動(dòng)后不能退出,需要使用nohup或者pm2等程序托管啟動(dòng)胖烛。

另外我們可以使用config.ini文件來(lái)配置啟動(dòng)參數(shù)眼姐,只需創(chuàng)建config.ini文件,并放置在wallet目錄下洪己。文件內(nèi)容可參考默認(rèn)配置妥凳,如下:

# The filename (relative to data-dir) to create a unix socket for HTTP RPC; set blank to disable. (eosio::http_plugin)

# unix-socket-path = kaccd.sock

# The local IP and port to listen for incoming http connections; leave blank to disable. (eosio::http_plugin)

# http-server-address =

# The local IP and port to listen for incoming https connections; leave blank to disable. (eosio::http_plugin)

# https-server-address =

# Filename with the certificate chain to present on https connections. PEM format. Required for https. (eosio::http_plugin)

# https-certificate-chain-file =

# Filename with https private key in PEM format. Required for https (eosio::http_plugin)

# https-private-key-file =

# Configure https ECDH curve to use: secp384r1 or prime256v1 (eosio::http_plugin)

# https-ecdh-curve = secp384r1

# Specify the Access-Control-Allow-Origin to be returned on each request. (eosio::http_plugin)

# access-control-allow-origin =

# Specify the Access-Control-Allow-Headers to be returned on each request. (eosio::http_plugin)

# access-control-allow-headers =

# Specify the Access-Control-Max-Age to be returned on each request. (eosio::http_plugin)

# access-control-max-age =

# Specify if Access-Control-Allow-Credentials: true should be returned on each request. (eosio::http_plugin)

# access-control-allow-credentials = false

# The maximum body size in bytes allowed for incoming RPC requests (eosio::http_plugin)

# max-body-size = 1048576

# Maximum size in megabytes http_plugin should use for processing http requests. 503 error response when exceeded. (eosio::http_plugin)

# http-max-bytes-in-flight-mb = 500

# Append the error log to HTTP responses (eosio::http_plugin)

# verbose-http-errors = false

# If set to false, then any incoming "Host" header is considered valid (eosio::http_plugin)

# http-validate-host = true

# Additionaly acceptable values for the "Host" header of incoming HTTP requests, can be specified multiple times.? Includes http/s_server_address by default. (eosio::http_plugin)

# http-alias =

# Number of worker threads in http thread pool (eosio::http_plugin)

# http-threads = 2

# The path of the wallet files (absolute path or relative to application data dir) (eosio::wallet_plugin)

# wallet-dir = "."

# Timeout for unlocked wallet in seconds (default 900 (15 minutes)). Wallets will automatically lock after specified number of seconds of inactivity. Activity is defined as any wallet command e.g. list-wallets. (eosio::wallet_plugin)

# unlock-timeout = 900

# Override default URL of http://localhost:12345 for connecting to yubihsm-connector (eosio::wallet_plugin)

# yubihsm-url =

# Enables YubiHSM support using given Authkey (eosio::wallet_plugin)

# yubihsm-authkey =

# Plugin(s) to enable, may be specified multiple times

# plugin =

停止

停止錢包服務(wù)比較簡(jiǎn)單,有多種方式:

? ? 如果你使用的是直接前臺(tái)啟動(dòng)的話答捕,你只要ctrl+c終止進(jìn)程就行了逝钥,或者直接關(guān)閉啟動(dòng)了keosd的命令行。

? ? 如果你是后臺(tái)啟動(dòng)的,你直接殺掉keosd進(jìn)程就行了,或者在開發(fā)環(huán)境可以直接killall keosd艘款。

? ?你也可以使用cleos來(lái)關(guān)閉持际,如果你使用的是默認(rèn)錢包文件路徑,可以直接使用cleos wallet stop哗咆,否則你需要指定錢包socket文件參數(shù)—wallet-url蜘欲,如下:

cleos --wallet-url unix:///Users/astaldo/study/eosio-wallet/keosd.sock \

wallet stop

創(chuàng)建錢包

我們已經(jīng)啟動(dòng)錢包服務(wù)了,要?jiǎng)?chuàng)建一個(gè)新錢包晌柬,我們只需要使用cleos wallet create命令即可姥份,create命令有幾個(gè)參數(shù)。

-n 指定錢包名字

-f 指定輸出錢包密碼的文件年碘,未指定—to-console時(shí)為必須參數(shù)

—to-console 指定錢包密碼輸出到控制臺(tái)中澈歉,優(yōu)先級(jí)高于-f

我們創(chuàng)建一個(gè)名字為dev的錢包吧。

cleos wallet create -n dev --to-console

紅框部分就是錢包的密碼啦屿衅,每個(gè)錢包的密碼都是隨機(jī)生成的埃难。如果使用-f參數(shù)指定了一個(gè)文件,密碼就會(huì)保存到文件中涤久,而不會(huì)顯示在控制臺(tái)涡尘。

新創(chuàng)建的錢包默認(rèn)是解鎖狀態(tài),解鎖時(shí)間由keosd的配置決定响迂,默認(rèn)是15分鐘考抄,如需修改解鎖時(shí)間請(qǐng)參考手動(dòng)啟停錢包服務(wù)

生成私鑰對(duì)

創(chuàng)建私鑰對(duì)是非常實(shí)用的功能栓拜,你新建賬號(hào)座泳,新建權(quán)限都需要配置公鑰,網(wǎng)絡(luò)上有很多生成私鑰對(duì)的開放工具幕与,但是對(duì)于開發(fā)者而言,本地生成無(wú)疑是最佳選擇镇防,相對(duì)安全性要高很多啦鸣。

直接生成

使用cleos的cleos create key命令就可以方便的生成,命令有幾個(gè)參數(shù)来氧。

—r1 指定使用R1曲線算法诫给,默認(rèn)使用的是K1曲線算法

-f 指定輸出的文件,未指定—to-console時(shí)為必須參數(shù)

—to-console 指定輸出到控制臺(tái)中啦扬,優(yōu)先級(jí)高于-f

—r1參數(shù)只在特定的場(chǎng)景下需要使用中狂,默認(rèn)不需要指定。

我們生成一個(gè)新的私鑰對(duì)到控制臺(tái)扑毡。

cleos create key --to-console

Private key就是私鑰胃榕,Public key就是公鑰了。如果使用-f參數(shù)指定了一個(gè)文件瞄摊,密碼就會(huì)保存到文件中勋又,而不會(huì)顯示在控制臺(tái)苦掘。

生成到錢包

我們還可以直接生成到錢包里,使用cleos wallet create_key命令即可楔壤,命令有幾個(gè)參數(shù)鹤啡。

-n 指定錢包名字

key_type 指定使用R1還是K1曲線算法,默認(rèn)K1

我們生成一個(gè)新的私鑰對(duì)到錢包dev中蹲嚣。

cleos wallet create_key -n dev

注意:錢包必須處于解鎖狀態(tài)递瑰。?解鎖錢包可以看解鎖

可以看到隙畜,該方法最大的好處就是直接可以把私鑰導(dǎo)入錢包中抖部,且不會(huì)直接暴露私鑰。如果要查看該公鑰對(duì)應(yīng)的私鑰禾蚕,我們?cè)?a target="_blank">查看當(dāng)前已導(dǎo)入key會(huì)講解您朽。

導(dǎo)入私鑰

錢包的功能就是用來(lái)安全管理公私鑰,且在后續(xù)我們需要簽名的操作時(shí)提供私鑰簽名换淆。所以導(dǎo)入私鑰是非常常用的功能哗总。

使用cleos wallet import命令可以將私鑰導(dǎo)入錢包,命令有幾個(gè)參數(shù)倍试。

-n 指定錢包名字

—private-key WIF格式的私鑰

我們通常情況肯定是不推薦使用—private-key參數(shù)的讯屈,這會(huì)把私鑰明文顯示在命令中。

Private key: 5J4TCnyXzbPLXuXTC4gnPWno1gye2RE1LXzTgXRSPRizHASq89e

Public key: EOS7K78LBkRQD4WA2LUbG6P2KhtKMqhCrbMsxEEYd7dbACqXZytTk

我們嘗試導(dǎo)入上面這組私鑰到dev錢包中县习。

cleos wallet import -n dev

輸入命令后就會(huì)提示輸入private key涮母,此時(shí)是安全輸入,不會(huì)顯示在屏幕上躁愿,你只需粘貼或者輸入私鑰后按回車即可叛本。

導(dǎo)入成功后我們可以核對(duì)一個(gè)公鑰是否一致。

鎖定與解鎖

錢包解鎖后在超過(guò)鎖定時(shí)間時(shí)彤钟,會(huì)自動(dòng)鎖定錢包来候,這是為了增加安全性,在開發(fā)環(huán)境我們可以調(diào)大鎖定時(shí)間逸雹,請(qǐng)參考手動(dòng)啟停錢包服務(wù)营搅。

解鎖

使用命令cleos wallet unlock即可解鎖,命令有幾個(gè)參數(shù)梆砸。

-n 指定錢包名字

—password 錢包密碼

同樣的转质,我們并不建議使用—password參數(shù),這會(huì)把錢包密碼暴露在命令中帖世。

我們來(lái)解鎖dev錢包試試休蟹。

cleos wallet unlock -n dev

輸入命令后就會(huì)提示輸入password,此時(shí)是安全輸入,不會(huì)顯示在屏幕上鸡挠,你只需粘貼或者輸入密碼后按回車即可辉饱。

看到Unlocked就表示已經(jīng)解鎖了。如果錢包已經(jīng)解鎖拣展,再嘗試解鎖時(shí)會(huì)報(bào)錯(cuò)彭沼。

鎖定

在使用完錢包功能后,或者需要切換別的錢包時(shí)备埃,處于安全考慮姓惑,我們可能需要手動(dòng)鎖定指定錢包,不然你只有等自動(dòng)鎖定了按脚。

鎖定錢包有兩個(gè)命令可用于毙,cleos wallet lock_all和cleos wallet lock,前者是直接鎖定所有已解鎖的錢包辅搬,后者則需要指定需要鎖定的錢包名唯沮。

這里只說(shuō)明一下鎖定特定錢包的命令,命令只有一個(gè)參數(shù)-n指定錢包名堪遂。我們鎖定dev錢包介蛉。

cleos wallet lock -n dev

移除私鑰

某個(gè)私鑰不需要保存在錢包中了,我們就需要?jiǎng)h除這個(gè)私鑰溶褪,操作也很簡(jiǎn)單币旧,首先還是要確保錢包已解鎖,然后使用命令cleos wallet remove_key即可猿妈,命令有幾個(gè)參數(shù)吹菱。

-n 指定錢包名字

—password 錢包密碼

key 公鑰(必填)

即使你的錢包已經(jīng)解鎖了,在執(zhí)行時(shí)仍要帶上錢包密碼或者輸入錢包密碼彭则,這是為了二次確認(rèn)鳍刷,畢竟私鑰一旦刪除就沒了。

我們刪除dev錢包中的EOS7mAKAfpgX4uBsSV9rmDYJCK9GjYGSpRLZ7tz5E9W1nR5Uw7pHH這個(gè)公鑰俯抖。

cleos wallet remove_key -n dev \

EOS7mAKAfpgX4uBsSV9rmDYJCK9GjYGSpRLZ7tz5E9W1nR5Uw7pHH

查看

我們需要關(guān)注錢包的解鎖狀態(tài)倾剿,錢包內(nèi)已經(jīng)導(dǎo)入了哪些私鑰對(duì),導(dǎo)入的私有又是什么……所以錢包肯定要提供查看的功能蚌成。

查看當(dāng)前已導(dǎo)入key

我們?nèi)绻枰榭串?dāng)前解鎖的錢包中都有哪些可用的key,只需輸入cleos wallet keys凛捏。

注意:這會(huì)列出所有已解鎖錢包里的key担忧。

查看錢包狀態(tài)

如果你有多個(gè)錢包,而你又需要同時(shí)解鎖多個(gè)錢包坯癣,你可能會(huì)需要查看當(dāng)前個(gè)錢包的解鎖狀態(tài)瓶盛。只要使用命令cleos wallet list即可。

可以看到,這里會(huì)列出所有的錢包惩猫,其中錢包名后面有個(gè)星號(hào)(*)表示這個(gè)錢包當(dāng)前處于解鎖狀態(tài)芝硬。

查看錢包中的私鑰

我們要將私鑰導(dǎo)出或者導(dǎo)入到其他的錢包應(yīng)用里,那么我們就需要查看這個(gè)公鑰的私鑰是什么了轧房。我們?nèi)匀恍枰_保錢包已經(jīng)解鎖拌阴,然后使用命令cleos wallet private_keys即可,命令有幾個(gè)參數(shù)奶镶。

-n 指定錢包名字

—password 錢包密碼

即使你的錢包已經(jīng)解鎖了迟赃,你在執(zhí)行命令時(shí)還是需要帶上錢包密碼或者輸入錢包密碼,同樣是為了安全考慮的二次驗(yàn)證厂镇。

我們查看dev錢包的所有私鑰對(duì)纤壁。

cleos wallet private_keys -n dev

刪除錢包

如果你需要直接刪除整個(gè)錢包里的內(nèi)容,最快的方式就是直接找到錢包文件目錄捺信,然后刪除與錢包名同名的文件酌媒。比如你要?jiǎng)h除dev的錢包文件,你就直接刪除dev.wallet文件就可以了迄靠。

原文鏈接

更多內(nèi)容請(qǐng)關(guān)注微信公眾號(hào)


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末秒咨,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子梨水,更是在濱河造成了極大的恐慌拭荤,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,470評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件疫诽,死亡現(xiàn)場(chǎng)離奇詭異舅世,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)奇徒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門雏亚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人摩钙,你說(shuō)我怎么就攤上這事罢低。” “怎么了胖笛?”我有些...
    開封第一講書人閱讀 162,577評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵网持,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我长踊,道長(zhǎng)功舀,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,176評(píng)論 1 292
  • 正文 為了忘掉前任身弊,我火速辦了婚禮辟汰,結(jié)果婚禮上列敲,老公的妹妹穿的比我還像新娘。我一直安慰自己帖汞,他們只是感情好戴而,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,189評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著翩蘸,像睡著了一般所意。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上鹿鳖,一...
    開封第一講書人閱讀 51,155評(píng)論 1 299
  • 那天扁眯,我揣著相機(jī)與錄音,去河邊找鬼翅帜。 笑死姻檀,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的涝滴。 我是一名探鬼主播绣版,決...
    沈念sama閱讀 40,041評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼歼疮!你這毒婦竟也來(lái)了杂抽?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,903評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤韩脏,失蹤者是張志新(化名)和其女友劉穎缩麸,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體赡矢,經(jīng)...
    沈念sama閱讀 45,319評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡杭朱,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,539評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了吹散。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片弧械。...
    茶點(diǎn)故事閱讀 39,703評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖空民,靈堂內(nèi)的尸體忽然破棺而出刃唐,到底是詐尸還是另有隱情,我是刑警寧澤界轩,帶...
    沈念sama閱讀 35,417評(píng)論 5 343
  • 正文 年R本政府宣布画饥,位于F島的核電站,受9級(jí)特大地震影響浊猾,放射性物質(zhì)發(fā)生泄漏荒澡。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,013評(píng)論 3 325
  • 文/蒙蒙 一与殃、第九天 我趴在偏房一處隱蔽的房頂上張望单山。 院中可真熱鬧,春花似錦幅疼、人聲如沸米奸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)悴晰。三九已至,卻和暖如春逐工,著一層夾襖步出監(jiān)牢的瞬間铡溪,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工泪喊, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留棕硫,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,711評(píng)論 2 368
  • 正文 我出身青樓袒啼,卻偏偏與公主長(zhǎng)得像哈扮,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蚓再,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,601評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容