您好,登錄后才能下訂單哦!
今天小編給大家分享一下區(qū)塊鏈的EOS環(huán)境怎么搭建的相關(guān)知識點,內(nèi)容詳細(xì),邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。
EOSIO有多個程序模塊組成,經(jīng)常會用到的有以下三個模塊:
nodeos - EOSIO核心模塊,用于啟動eosio服務(wù),在后臺運行,啟動時可以添加多種插件plugin。
cleos - 命令行界面錢包工具,見《EOS命令行界面錢包》(https://github.com/eoshackathon/eos_dapp_development_cn/blob/master/docs/eos_command_line_wallet.md),位于eos/build/programs/cleos/cleos
keosd - 管理錢包的各種組件,默認(rèn)情況下,keosd將隨cleos一起啟動。位于eos/build/programs/keosd
下圖是上面三個工具的關(guān)系:
另外,還有智能合約的編譯工具eosiocpp。
相對其他區(qū)塊鏈公鏈,EOS系統(tǒng)的組合關(guān)系比較自由,也帶來了理解上的困難。輝哥結(jié)合自己的理解,以中國大地上人們最關(guān)系的房子為例,做比喻介紹。
1) 錢包是土豪房東
土豪可以有很多的房子和各種開門的鑰匙。上海這個城市有很多個土豪房東,所以一個節(jié)點可以創(chuàng)建多個錢包。
cleos wallet create ${參數(shù)}
2)鑰匙用來打開房東門的。
鑰匙分為私鑰和公鑰。公鑰是別人可以看到的,例如下面圖片是土豪家的橙色鑰匙包,是專門用來存放仁恒濱江的大平層房子鑰匙的,私鑰是鑰匙包里面實際開門的鑰匙。
你拿到鑰匙包沒有用的,你得拿到鑰匙盒里面的私鑰才可以打開土豪家房子大門。
土豪房東可以把很多的房子配成一樣的鎖,用一對公鑰/私鑰來開門,也可以不同的房子不同的鑰匙。
cleos wallet import ${參數(shù)} 私鑰
3) 賬戶是房子
房東可以給多個房子配一對鑰匙(鑰匙包和鑰匙),也可以不同房子配不同鑰匙。
另外,一個房子可以用2把鑰匙打開,一把是owner鑰匙對,一把是active鑰匙對。
房子的owner鑰匙地址表示為房東的公鑰,表示主人產(chǎn)權(quán)歸屬,用它對應(yīng)的私鑰可以打開房子,這個鑰匙包是房東連小姨子也不會給的;
房子的active鑰匙對表示為房客的公鑰,表示該用戶的私鑰可以打開房子,房子出租后,房東就把這個鑰匙包給租客了;
cleos create account 節(jié)點 賬戶名 Owner的公鑰 Active的公鑰。
搭建實操的流程圖如下。
4. 1 啟動私鏈
1) 啟動keosd
keosd --http-server-address=127.0.0.1:8900
命令行界面錢包程序為 keosd,位于 eos/build/programs/keosd 路徑下,用于存儲交易簽名的私鑰。keosd在本地節(jié)點上運行,并將私鑰保存在本地節(jié)點上。
默認(rèn)情況下,keosd會在目錄 ~/eosio-wallet 中生成一個基礎(chǔ)的配置文件 config.ini。該配置文件中的wallet-dir指定了錢包文件存放目錄。
另外,在運行命令行錢包時,可通過配置命令行參數(shù) --config-dir指定config.ini配置文件的目錄。該配置文件中保存用于接入http鏈接的服務(wù)器配置http-server-address參數(shù),以及其他用于資源共享的配置參數(shù)。
默認(rèn)情況下,keosd將錢包文件保存在 ~/eosio-wallet 目錄下,錢包文件名為:<wallet-name>.wallet。例如,默認(rèn)錢包文件名為 default.wallet。當(dāng)建立了其他錢包后,在該目錄下會分別建立每個錢包文件,例如當(dāng)建立了一個名稱為"duncanwang"的錢包,會生成一個錢包文件duncanwang.wallet。錢包文件可以通過命令行參數(shù)--data-dir存放在指定的目錄中。
**【預(yù)警】**從V1.0.5開始,發(fā)現(xiàn)要先運行keosd后在運行nodeos才可以創(chuàng)建錢包。
成功輸出結(jié)果如下:
(復(fù)制代碼點擊“閱讀原文”)
2) 啟動私鏈
在新的命令行窗口輸入以下命令。
cd ~/eos/build/programs/nodeos ./nodeos -e -p eosio --plugin eosio::wallet_plugin --plugin eosio::chain_api_plugin --plugin eosio::history_api_plugin --replay-blockchain
在啟動nodeos時,需要添加參數(shù)eosio::wallet_plugin,否則的話,每次節(jié)點重啟,之前創(chuàng)建的錢包,賬號都不會加載進(jìn)來。
--replay-blockchain表示清除數(shù)據(jù)庫內(nèi)鏈的狀態(tài),重新運行,它會導(dǎo)致重新啟動時先讀取之前的區(qū)塊進(jìn)行加載。
【注意】 節(jié)點關(guān)閉后,錢包將會被加鎖。重新啟動nodeos后,需要使用unlock命令解鎖錢包。
例如:
duncanwang@duncanwang:~/eos$ cleos wallet unlock -n duncanwang
password: Unlocked: duncanwang
輸入nodes -help可以看到所有參數(shù)的幫助說明。
4.2 創(chuàng)建錢包
cleos wallet create -n duncanwang
創(chuàng)建duncanwang錢包成功,輸出結(jié)果如下:
duncanwang@duncanwang:~/eos$ cleos wallet create -n duncanwang Creating wallet: duncanwang Save password to use in the future to unlock this wallet. Without password imported keys will not be retrievable. "PW5JMZdES2Cds5LsPRUBRo2THEXpbFSM17Xmcd2XWG7XBd49wveTo"
【結(jié)果確認(rèn)】
duncanwang@duncanwang:~$ cleos wallet list Wallets: [ "duncanwang *" ]
duanwang錢包已存在了,*表示該賬號已解鎖。
【問題1】 創(chuàng)建錢包重名,但是cleos wallet list看不到
duncanwang@duncanwang:~$ cleos wallet create -n duncanwang
Error 3120001: Wallet already exists Try to use different wallet name.
【解決方法】
這個主要是運行的命令中沒有導(dǎo)入錢包--plugin eosio::wallet_plugin這個參數(shù),導(dǎo)致已創(chuàng)建錢包未加載,但是目錄下存在已創(chuàng)建的錢包文件。
./nodeos -e -p eosio --plugin eosio::chain_api_plugin --plugin eosio::history_api_plugin --replay-blockchain
~/eosio-wallet 目錄下刪除文件duncanwang.wallet即可重新創(chuàng)建。
**【問題2】**重啟節(jié)點后,cleos wallet list發(fā)現(xiàn)已創(chuàng)建的錢包等不存在。
duncanwang@duncanwang:~$ cleos wallet list Wallets: [ ]
【解決方法1】
運行./nodeos命令時要帶參數(shù)--plugin eosio::wallet_plugin
【解決方法2】
后來發(fā)現(xiàn)這種方法有時也是不可行,cleos wallet list沒有看到錢包。 采用命令'cleos wallet open -n duncanwang'打開錢包后,就正常加載進(jìn)來了。
**【問題3】**創(chuàng)建錢包時提示keosd已運行,并且無法連接
duncanwang@duncanwang:~$ cleos wallet create -n duncanwang "/usr/local/bin/keosd" launched Unable to connect to keosd, if keosd is running please kill the process and try again.
【解決方法】
需要輸入以下命令把keosd重啟下。
ps -ef | grep keosd kill -9 pid keosd --http-server-address=127.0.0.1:8900
操作實例如下:
duncanwang@duncanwang:~$ ps -ef | grep keosd duncanw+ 2439 1 0 07:14 pts/1 00:00:00 /usr/local/bin/keosd --http-server-address=::1:8900 duncanw+ 2441 2389 0 07:16 pts/1 00:00:00 grep --color=auto keosd duncanwang@duncanwang:~$ kill -9 2439
4.3 錢包導(dǎo)入系統(tǒng)賬號私鑰
1) 找到eosio的系統(tǒng)賬號的默認(rèn)公鑰/私鑰對
找到配置文件,例如以下地址,~/.local/share/eosio/nodeosconfig 的 config.ini,默認(rèn)的私鑰/公鑰是一樣的。
#signature-provider = EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV=KEY:5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3
2),錢包導(dǎo)入系統(tǒng)賬號私鑰
> cleos wallet import 5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3 -n duncanwang duncanwang@duncanwang:~/eos$ cleos wallet import 5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3 -n duncanwang imported private key for: EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV
3),查看系統(tǒng)賬號信息
以下命令可以查看eosio系統(tǒng)賬號的密鑰和資源占用情況。
> cleos get account eosio duncanwang@duncanwang:~/eos/build$ cleos get account eosio privileged: true permissions: owner 1: 1 EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV active 1: 1 EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV memory: quota: unlimited used: 60.75 KiB net bandwidth: used: unlimited available: unlimited limit: unlimited cpu bandwidth: used: unlimited available: unlimited limit: unlimited
4.4 加載Bios合約
現(xiàn)在我們有一個錢包,并且加載了eosio帳戶的密鑰,我們可以設(shè)置一個默認(rèn)的系統(tǒng)合約。為了開發(fā)的目的,可以使用默認(rèn)的eosio.bios合約。通過此合約,您可以直接控制其他帳戶的資源分配,并調(diào)用其他特權(quán)API。在公開區(qū)塊鏈中,這個系統(tǒng)合約將管理其他賬戶的 token 抵押和解抵押操作,以為合約執(zhí)行預(yù)留CPU、網(wǎng)絡(luò)活動帶寬,以及預(yù)留內(nèi)存。
eosio.bios合約可以在你的EOSIO源代碼文件夾中找到:contracts/eosio.bios。下面的命令序列,都假定是在EOSIO源代碼的根目錄執(zhí)行。但是您可以通過指定完整路徑,從任意位置執(zhí)行這個命令:${EOSIO_SOURCE}/build/contracts/eosio.bios。
這個命令序列的結(jié)果是,cleos發(fā)起一個包含兩個操作(actions)的交易(transaction):eosio::setcode和eosio::setabi。
代碼定義了合約如何運行,abi描述了參數(shù)如何在二進(jìn)制和json表示之間進(jìn)行轉(zhuǎn)換。雖然abi在技術(shù)上是可選的,但為了便于使用,所有的EOSIO工具都依賴于它。
輸入命令:
cleos set contract eosio build/contracts/eosio.bios -p eosio
輸出結(jié)果,表示本地執(zhí)行成功。
duncanwang@duncanwang:~/eos$ cleos set contract eosio build/contracts/eosio.bios -p eosio Reading WAST/WASM from build/contracts/eosio.bios/eosio.bios.wasm...Using already assembled WASM... Publishing contract... executed transaction: f4c1cc4e953710645a4849eb41cf92d9d3881c756b227323a3ade221e3807fbb 3720 bytes 12685 us # eosio <= eosio::setcode {"account":"eosio","vmtype":0,"vmversion":0,"code":"0061736d0100000001621260037f7e7f0060057f7e7e7e7e... # eosio <= eosio::setabi {"account":"eosio","abi":"0e656f73696f3a3a6162692f312e30050c6163636f756e745f6e616d65046e616d650f7065... warning: transaction executed locally, but may not be confirmed by the network yet
4.5 創(chuàng)建并導(dǎo)入新的密鑰對
1)創(chuàng)建新的密鑰對
cleos create key
創(chuàng)建密鑰對的輸出結(jié)果。
duncanwang@duncanwang:~/eos$ cleos create key Private key: 5JZQmnt6ZtEzUADswgKgBwMp9qAwTSNM9JFHPRFu1FjrLjj49g7 Public key: EOS6EHAzvrpQ4wo1BPcAk86X6aGDARZgqTcAq1mJRF1SxEYgNGWN1
2) 導(dǎo)入新的私鑰
cleos wallet import 5JZQmnt6ZtEzUADswgKgBwMp9qAwTSNM9JFHPRFu1FjrLjj49g7 -n duncanwang
輸出結(jié)果如下:
duncanwang@duncanwang:~/eos$ cleos wallet import 5JZQmnt6ZtEzUADswgKgBwMp9qAwTSNM9JFHPRFu1FjrLjj49g7 -n duncanwang imported private key for: EOS6EHAzvrpQ4wo1BPcAk86X6aGDARZgqTcAq1mJRF1SxEYgNGWN1
3)查看確認(rèn)密鑰對是否導(dǎo)入成功
cleos wallet keys
用于查看錢包的密鑰對情況。
【輸出結(jié)果】
duncanwang@duncanwang:~/eos$ cleos wallet keys [ "EOS6EHAzvrpQ4wo1BPcAk86X6aGDARZgqTcAq1mJRF1SxEYgNGWN1", "EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV" ]
4.6 創(chuàng)建新賬號
創(chuàng)建賬號的命令:
cleos create account eosio {new_account} ownerkey {active_key}
其中eosio是超級用戶,需要靠超級用戶來創(chuàng)建其它的新用戶,eosio后面就是你的新用戶的用戶名.
除了新的賬號之外,命令后面還有兩個key:
Owner key
Active key
Owner key是什么意思呢?Owner key表示分配給新賬號的一個Owner認(rèn)證的公鑰。Active key是分配給新賬號一個Active認(rèn)證的一個公鑰。
至于這兩個認(rèn)證,我后面會給詳細(xì)介紹,這是兩個主要的權(quán)限。我創(chuàng)建一個賬號,如果這個賬號要有Owner的權(quán)限和Active的權(quán)限,就必須要用這兩個key才能實現(xiàn)。
我們來總結(jié)一下剛才的操作,我們剛才操作是調(diào)用cleos create account創(chuàng)建了一個賬號,這個賬號的命名規(guī)則遵守下邊兩個規(guī)則:
小于13個字符;
僅包含這些字符:.12345abcdefghijklmnopqrstuvwxyz
另外,剛才給大家說到Owner key和Active key的概念。Owner key的概念就是你賬號的所有控制權(quán)限,你只要有了Owner key,你可以對這個賬號的任何東西做任何的事兒,這是它的所有控制權(quán)。
而Active key只掌握了你的賬號資金的訪問權(quán)限,也就是你如果有了Active這個權(quán)限的話,你可以對這個賬號的資金進(jìn)行轉(zhuǎn)移,但是你不能轉(zhuǎn)移這個賬號的所有權(quán),或者不能做超過這個Active權(quán)限其它的權(quán)利。
如果簡單的理解,Owner key就是對這個賬號的最高權(quán)限,Active只是用來轉(zhuǎn)移資金而已。這也是與以太坊智能合約開發(fā)的一個區(qū)別,以太坊賬號的權(quán)限其實沒有這么細(xì)分,它就只有一個賬號,我只要有這個賬號的公鑰和私鑰,我就可以做任何事情。
具體操作如下。
cleos create account eosio wangdenghui1 EOS6EHAzvrpQ4wo1BPcAk86X6aGDARZgqTcAq1mJRF1SxEYgNGWN1 EOS6EHAzvrpQ4wo1BPcAk86X6aGDARZgqTcAq1mJRF1SxEYgNGWN1
【錯誤現(xiàn)象】
duncanwang@duncanwang:~/eos$ cleos create account eosio wangdenghui1 EOS6EHAzvrpQ4wo1BPcAk86X6aGDARZgqTcAq1mJRF1SxEYgNGWN1 EOS6EHAzvrpQ4wo1BPcAk86X6aGDARZgqTcAq1mJRF1SxEYgNGWN1 Error 3050000: action exception
【解決方案-查詢賬號】
查詢發(fā)現(xiàn)該賬號已存在,之前輝哥創(chuàng)建過,忘記了。
duncanwang@duncanwang:~/eos$ cleos get accounts EOS6EHAzvrpQ4wo1BPcAk86X6aGDARZgqTcAq1mJRF1SxEYgNGWN1 { "account_names": [ "wangdenghui1" ] } > cleos create account eosio boss EOS6EHAzvrpQ4wo1BPcAk86X6aGDARZgqTcAq1mJRF1SxEYgNGWN1 EOS6EHAzvrpQ4wo1BPcAk86X6aGDARZgqTcAq1mJRF1SxEYgNGWN1
創(chuàng)建成功輸出結(jié)果:
duncanwang@duncanwang:~/eos$ cleos create account eosio boss EOS6EHAzvrpQ4wo1BPcAk86X6aGDARZgqTcAq1mJRF1SxEYgNGWN1 EOS6EHAzvrpQ4wo1BPcAk86X6aGDARZgqTcAq1mJRF1SxEYgNGWN1 executed transaction: cb6801fe82816f94b447cbfb903ae8e9477f5c99920322d679a9c8c04347e536 200 bytes 367 us # eosio <= eosio::newaccount {"creator":"eosio","name":"boss","owner":{"threshold":1,"keys":[{"key":"EOS6EHAzvrpQ4wo1BPcAk86X6aGD... warning: transaction executed locally, but may not be confirmed by the network yet
以上就是“區(qū)塊鏈的EOS環(huán)境怎么搭建”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學(xué)習(xí)更多的知識,請關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。