在上一篇文章她渴,我們下載堕仔、編譯了EOS源碼滥朱,生成了nodeos,keosd,cleos,eosiocpp
等這些工具。同時(shí)我們也配置好了單節(jié)點(diǎn)出塊的nodeos力试。下面我們繼續(xù)徙邻。
區(qū)塊鏈數(shù)據(jù)的位置
上一篇文章中,我們用nodeos
成功啟動(dòng)了一個(gè)測(cè)試節(jié)點(diǎn)畸裳,從終端中可以看到它每隔0.5s出一個(gè)塊缰犁。那么這些出塊的歷史數(shù)據(jù),也就是區(qū)塊鏈數(shù)據(jù)怖糊,都保存在哪里了呢帅容?
不同的操作系統(tǒng),block數(shù)據(jù)默認(rèn)保存的位置不同:
- Mac OS: ~/Library/Application\ Support/eosio/nodeos/data
- Linux: ~/.local/share/eosio/nodeos/data
當(dāng)你把這里面block/
和state/
文件夾刪掉之后伍伤,再重新啟動(dòng)nodeos并徘,你會(huì)發(fā)現(xiàn)它又從0開始出塊了。
創(chuàng)建錢包
$ 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.
"PW5HvGibpV6HtMBYRBocEztAWcnGmSwNukFtRjdvAXf6gywvKnhyY"
上面命令創(chuàng)建了一個(gè)默認(rèn)(default)錢包扰魂,記得把最后一行的錢包密碼好好保存麦乞,以后當(dāng)需要對(duì)錢包解鎖的時(shí)候,都會(huì)用到這個(gè)密碼劝评。
注意姐直,如果你在這一步,看到如下提示:
? ~ cleos wallet create
No wallet service listening on 127.0.0.1:8900. Cannot automatically start keosd because keosd was not found.
Failed to connect to keosd at http://127.0.0.1:8900/; is keosd running?
說明找不到keosd蒋畜,你需要把編譯好的keosd放在/usr/local/bin/
目錄下声畏,或者找到keosd所在的目錄,自己手動(dòng)去運(yùn)行keosd也可以姻成。
在macOS上插龄,我發(fā)現(xiàn),在上一篇的sudo make install
的時(shí)候科展,會(huì)把build/programs/keosd/keosd
拷貝到/usr/local/eosio/bin
里均牢。所以我可以在/usr/local/bin
里面建立一個(gè)符號(hào)鏈接,指向/usr/local/eosio/bin/keosd
:
ln -s /usr/local/eosio/bin/keosd /usr/local/bin/keosd
linux上面辛润,不知道會(huì)不會(huì)遇到這個(gè)問題膨处,如果遇到了,也可以用這種方式去解決砂竖。
另外真椿,也可以手動(dòng)運(yùn)行keosd。
首先修改keosd的配置文件${HOME}/eosio-wallet/config.ini
乎澄。找到里面的http-server-address
配置項(xiàng)突硝,改成下面的值。
# The local IP and port to listen for incoming http connections; set blank to disable. (eosio::http_plugin)
http-server-address = 127.0.0.1:8900
然后置济,直接keosd即可啟動(dòng)解恰。
解鎖錢包
每次你重新啟動(dòng) keosd之后锋八,錢包會(huì)變成lock
狀態(tài);有時(shí)候护盈,當(dāng)你長(zhǎng)時(shí)間沒有操作的時(shí)候挟纱,錢包也會(huì)變成lock
狀態(tài)。這時(shí)你就需要去解鎖(unlock
)它腐宋,可以使用如下命令:
$ cleos wallet unlock
password:
它會(huì)提示你輸入錢包密碼紊服,這時(shí)候只需要把上面創(chuàng)建錢包時(shí)保存的密碼輸入在這里就可以了。
有時(shí)候胸竞,你可能想主動(dòng)鎖住錢包欺嗤,可以這樣:
cleos wallet lock
錢包數(shù)據(jù)的位置
錢包數(shù)據(jù)的位置,默認(rèn)在:$HOME/eosio-wallet
卫枝,當(dāng)你把這個(gè)這個(gè)文件夾刪掉了煎饼,你就需要重新創(chuàng)建錢包。
創(chuàng)建自己的key-pair
$ cleos create key
cleos create key
Private key: 5KWatoy1mpAyUE1uuaCGX39aug9yZ65KW2GWkRdzBCSRMwMD92P
Public key: EOS83sN8bfKGk3jTBezN41UN7LfXSVFa1w3YQcGApE67J26t3HLcr
每次創(chuàng)建的key-pair都會(huì)不同。注意,這里僅僅創(chuàng)建了這一對(duì)ke-pair: 公鑰和私鑰复局。并沒有和賬戶關(guān)聯(lián)。
為了演示方便衰伯,我后面將會(huì)使用這對(duì)key-pair。注意积蔚,如果你打算把一對(duì)key-pair(公鑰和私鑰對(duì))用在主網(wǎng)上,你的私鑰應(yīng)該保密烦周,不應(yīng)該像我這樣把私鑰公開尽爆。
下面為了使用這一對(duì)公鑰和私鑰,我們把它導(dǎo)入錢包读慎,只需要傳入私鑰即可漱贱,它會(huì)自動(dòng)計(jì)算出公鑰:
cleos wallet import --private-key 5KWatoy1mpAyUE1uuaCGX39aug9yZ65KW2GWkRdzBCSRMwMD92P
導(dǎo)入成功后,我們檢查一下:
? eosio-wallet cleos wallet keys
[
"EOS83sN8bfKGk3jTBezN41UN7LfXSVFa1w3YQcGApE67J26t3HLcr"
]
如上所示夭委,我們查看當(dāng)前錢包里的keys幅狮,這里只會(huì)顯示出公鑰,也正是我們前面創(chuàng)建的key-pair里的公鑰株灸。
加載BIOS合約
BIOS合約是一個(gè)系統(tǒng)合約崇摄,因?yàn)槲覀冎皇怯糜陂_發(fā)和測(cè)試,只需要加載默認(rèn)的eosio.bios
合約就好了慌烧,我們可以使用這個(gè)合約來直接控制其他賬戶的資源逐抑,包括CPU、網(wǎng)絡(luò)以及內(nèi)存等屹蚊。在公鏈上厕氨,這個(gè)合約將能夠管理抵押和回收token进每。
eosio.bios
的合約代碼位于contracts/eosio.bios
位置,它編譯之后的位置在這里:build/contracts/eosio.bios
命斧。注意田晚,我給出的這些目錄都是相對(duì)于EOS源碼的根目錄的。
我們?cè)诩虞d這個(gè)合約之前国葬,需要在我們的錢包里導(dǎo)入一個(gè)特殊的key贤徒。還記得我們之前配置nodeos的那個(gè)config.ini嗎?里面有這么一個(gè)配置:
signature-provider = EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV=KEY:5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3
它的格式是這樣的:
signature-provider={public-key}=KEY:{private-key}
配置在這里的key胃惜,哇泞莉,厲害了,它是系統(tǒng)合約的簽名所專用的船殉。我們的eosio.bios
合約就是一個(gè)系統(tǒng)合約鲫趁,所以我們需要用到這組key-pair。當(dāng)然了利虫,因?yàn)槲覀兪菃喂?jié)點(diǎn)挨厚,你是可以任意修改這里的配置的。不過呢糠惫,不羈這里就不做修改了疫剃,保持原樣了。下面我們只需要把這組key導(dǎo)入錢包硼讽,就可以加載bios合約了巢价。
cleos wallet import --private-key 5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3
然后加載 eosio.bios
:
? eos git:(master) ? cleos set contract eosio build/contracts/eosio.bios -p eosio@active
Reading WAST/WASM from build/contracts/eosio.bios/eosio.bios.wasm...
Using already assembled WASM...
Publishing contract...
executed transaction: c5c77223c776cb92ea16d5e17785b5b4338c4f3525b610a432529c9e93afe51c 3720 bytes 3873 us
# eosio <= eosio::setcode {"account":"eosio","vmtype":0,"vmversion":0,"code":"0061736d0100000001621260037f7e7f0060057f7e7e7e7e...
# eosio <= eosio::setabi {"account":"eosio","abi":"0e656f73696f3a3a6162692f312e30050c6163636f756e745f6e616d65046e616d650f7065...
上面這個(gè)加載合約的過程,發(fā)生了兩個(gè)action:一個(gè)是eosio::setcode
固阁,一個(gè)是eosio::setabi
壤躲。
上面你看到了類似這樣的東西:eosio <= eosio::setabi
,這句話的格式這樣的:${executor} <= ${contract}:${action} ${args...}
备燃。比如eosio <= eosio::setabi
可以翻譯為:eosio執(zhí)行了eosio合約里的setabi這個(gè)action碉克。
命令中的-p eosio@active
參數(shù),是告訴cleos用eosio的活動(dòng)賬戶來簽名授權(quán)并齐,也就是使用我們剛剛導(dǎo)入的那個(gè)私鑰來簽名漏麦。
今天就到這里,明天繼續(xù)况褪。
簡(jiǎn)介:不羈撕贞,一名程序員;專研EOS技術(shù)窝剖,玩轉(zhuǎn)EOS智能合約開發(fā)麻掸。
微信公眾號(hào):know_it_well
知識(shí)星球地址:https://t.zsxq.com/QvbuzFM