當(dāng)完成節(jié)點搭建以后(測試單節(jié)點環(huán)境),我們需要給eosio這個賬戶,加載BIOS合約,實際上就是給eosio賬戶賦予了一個超級管理員的角色,這樣就可以對其他賬戶資源進(jìn)行管理以及執(zhí)行一些需要特殊權(quán)限才可以執(zhí)行的API。
首先,不需要啟動nodeos,直接調(diào)用cleos命令:
cleos set contract eosio ../conntract/eosio.bios -p eosio
詳細(xì)解釋一下這句的含義:
首先,cleos是eosio開發(fā)中非常常用的一個工具,工具目錄位于:
~/eos/build/programs/cleos
文件夾內(nèi)
其次,cleos的set命令:“set or update a blockchain state” (設(shè)置或者更新一個區(qū)塊鏈狀態(tài))
contract,智能合約,“set or update blockchain account state" (設(shè)置或更新區(qū)塊鏈賬戶的狀態(tài))
后面跟的參數(shù)1:eosio,即要更新的賬戶名,再后面跟的,是智能合約的路徑。
這個智能合約路徑一般位于:
~/eos/build/contracts目錄下,所以要填好對應(yīng)的目錄
最后的參數(shù) -p,即--permission,“An account and permission level to authorize, as in 'account@permission' (defaults to 'account@active')",授權(quán)賬戶和權(quán)限級別,例如 account@permission,默認(rèn)為accounnt@active。
執(zhí)行該命令后,提示:
~/eos/build/contracts$ cleos set contract eosio eosio.bios # 注意這里我在contracts目錄下
Readinng WASM from eosio.bios/eosio.bios.wasm...
Publishinng contract...
Failed to connect to nodeos at http://127.0.0.1:8888/; is nodeos running?
詢問是否啟動了nodeos,我沒有啟動,所以,去啟動nodeos
~/eos/build/programs/nodeos$ ./nodeos -e -p eosio --plugin eosio::chain_api_plugin --plugin eosio::history_api_plugin
然后再試試剛才的cleos命令:
~/eos/build/contracts$ cleos set contract eosio eosio.bios
Error 3120006: No available wallet
Ensure that you have created a wallet and have it open
沒有可用的錢包,需要確認(rèn)是否創(chuàng)建并能打開了?
前面我們已經(jīng)創(chuàng)建了default錢包(沒有可以去看前面的文章:Ubuntu下安裝eosio1.0.0過程全記錄http://www.itdecent.cn/p/16d0b7e62704)
先看一眼現(xiàn)在錢包有沒有打開的:
cleos wallet list
發(fā)現(xiàn)沒有。
打開錢包:
cleos wallet open # 默認(rèn)就會打開default
然后再看
cleos wallet list
提示發(fā)現(xiàn)default已經(jīng)打開了。
然后給錢包解鎖:
cleos wallet unlock # 默認(rèn)default
password: ***(之前創(chuàng)建時生成的密碼)
Unlocked:default
然后看看錢包狀態(tài):
cleos wallet list
發(fā)現(xiàn)在default后面多了一個*,表示已經(jīng)解鎖
再去執(zhí)行
~/eos/build/contracts$ cleos set contract eosio eosio.bios
Error3090003: Provided keys, permissions, and delays do not satisfy declared authorizations
Ensure that you have the related private keys inside your wallet and your wallet is unlocked.
確認(rèn)錢包解鎖并且有相關(guān)的私鑰。
實際上這是因為我們現(xiàn)在所使用的default錢包,沒有倒入eosio私鑰導(dǎo)致的。
默認(rèn)的eosio初始私鑰:5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3
cleos wallet import
private key: 5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3
imported private key for :EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV
導(dǎo)入成功后,再執(zhí)行難上面的命令:
~/eos/build/contracts$ cleos set contract eosio eosio.bios -p eosio
Readinng WASM from eosio.bios/eosio.bios.wasm...
Publishinng contract...
executed transaction: **** 3720byteeosio <= eosio::setcode {account......
最后提示只是本地執(zhí)行了,還沒得到區(qū)塊確認(rèn),這其實已經(jīng)不重要了,很快就會被確認(rèn)了。
好了,完成了加載bios合約,中間的不少坑,都踩了一個遍。。。
我是王越,歡迎加入EOSIO開發(fā)俱樂部,微信361757(暗號EOS)