EOS錢包開發:EOS開發環境搭建
本課程是eos錢包開發,可以選擇以下三種網路進行開發:
- 主網
- Jungle 測試網路
- 本地網路
咱們在開發階段一般選擇測試網路和本地網路皆可,測試完成後在部署到主網。這裡我們先選擇在本地網路上進行開發,因為在Jungle 測試網路中不支援wallet的RPC介面,因為它作為一個公共的服務節點,是不可能幫助大家管理私鑰的,那樣會非常不安全,大家都會共用相同的錢包和私鑰。最後我們將使用本地搭建的keosd服務管理錢包,並連線到Jungle 測試網路中。
EOS支援的作業系統
- Amazon 2017.09 and higher
- Centos 7
- Fedora 25 and higher (Fedora 27 recommended)
- Mint 18
- Ubuntu 16.04 (Ubuntu 16.10 recommended)
- MacOS Darwin 10.12 and higher (MacOS 10.13.x recommended)
本教程的開發環境選擇為:Ubuntu 16.04、本地網路、RPC+eosjs、eosV1.2.2。接下來開始搭建EOS本地環境將它部署在單個主機。
一、下載和編譯EOS
獲取EOS指定版本原始碼及其所有子模組,若不加入--recursive引數,則不能下載EOS關聯的子專案。指定版本原始碼使用-b
指定版本號。
<img alt="" src="1" /><code>git clone https://github.com/EOSIO/eos -b v1.2.2 --recursive</code>
編譯原始碼生成可執行檔案
cd eos
./eosio_build.sh 編譯時間比較長,需一兩個小時不等,若編譯順利成功後,則會看到如下顯示

在編譯的過程中很有可能會出現各種錯誤,由於系統、EOS版本的差異出現的錯誤也會不一樣,下面列出了常見的多種錯誤的解決辦法。
二、編譯時報錯的解決辦法
1. 實體記憶體RAM不足

解決辦法:
修改檔案原始碼 eos/scripts/eosio_build_ubuntu.sh
中的 if [ "${MEM_MEG}" -lt 7000 ]; then
,將7000改為自己系統的記憶體大小,如4000,如還報錯,那麼繼續減小。
2. 可用記憶體不足
You must have at least 20GB of available storage to install EOSIO.
Exiting now.
解決辦法:
在檔案原始碼 eos/scripts/eosio_build_ubuntu.sh
中增加如下一行程式碼程式碼前面。
DISK_MIN=1
3. 無法下載(MongoDB等)
無法下載MongoDB等是由於翻牆配置的問題。
解決辦法:
Mac的Shadowsocks使用“PAC自動模式”,另外偏好設定配置如下
Ubuntu的配置如下,其中的192.168.1.116 是Mac的區域網地址。
4. 不能建立/tmp/llvm-compiler資料夾

解決辦法:
進入 /tmp
目錄,刪除 llvm-compiler
資料夾即可。
三、安裝EOSIO
安裝所有依賴庫並構建EOSIO,使用如下命令
sudo ./eosio_install.sh
file INSTALL cannot make directory "/usr/local/eosio/etc/eosio"
,加上sudo即可。

安裝完在根目錄新增了build資料夾,最後EOS的目錄結構如下。
1. 配置Nodeos
Nodeos
是用來執行節點的EOSIO程式。執行一下步驟進行配置:
- 找到如下config.ini檔案的位置,然後開啟config.ini檔案
~/Library/Application\ Support/eosio/nodeos/config/config.ini ~/.local/share/eosio/nodeos/config/config.ini
- 將文中
enable-stale-production
所在行用#
註釋,producer-name
所在行也用#
註釋 - 再最後面新增如下內容
<a href="https://cdn.8btc.com/wp-content/uploads/2018/11/201811090842465668.png"><img alt="111" src="https://cdn.8btc.com/wp-content/uploads/2018/11/201811090842465668.png" width="817" height="259" /></a>若是v1.2之前的版本需新增
plugin = eosio::wallet_api_plugin
外掛。
2. 配置Keosd
keosd
是一個輕客戶端錢包,負責管理錢包,以便在廣播到網路之前保護金鑰和簽署交易,在本地計算機上執行並在本地儲存您的私鑰。
~/eosio-wallet/config.ini http-server-address = 127.0.0.1:8889
五、啟動節點
1. 啟動nodeos
使用以下命令啟動自己的單節點區塊鏈:
nodeos -e -p eosio --plugin eosio::chain_api_plugin --plugin eosio::history_api_plugin
- 1使用了
plugin
載入一些可選外掛,在V1.2之前版本需要新增--plugin eosio::wallet_api_plugin
外掛。啟動後應該每0.5秒生成一個塊並有日誌輸出到終端,如下

如果報如下錯誤,則新增引數 --delete-all-blocks
2. 啟動keosd
可以直接輸入命令keosd
即可啟動keosd。
$ keosd 停止keosd,因為cleos可以自動啟動keosd,最終可能會有多個keosd正在執行。
$ pkill keosd 注意:當使用RPC介面時,需要另起keosd,且埠與nodeos的不能一樣。在使用cleos連線wallet時不用另外單獨啟動keosd,它連線的是nodeos的keosd服務。若使用cleos時報如下錯誤,則須停止keosd。
lixu@ubuntu:~$ cleos wallet create "/usr/local/eosio/bin/keosd" launched Unable to connect to keosd, if keosd is running please kill the process and try again.
六、使用Cleos建立錢包
下面我們使用命令列進行操作,需要使用到Cleos,它是一個命令列工具,可以與nodeos公開的REST API進行互動,前提是nodeos需要配置eosio :: chain_api_plugin
外掛。
1. 建立錢包
錢包是授權私鑰的儲存庫,與區塊鏈互動所必需的。通過如下命令建立錢包,可以通過-n
引數指定建立的錢包名稱。如果不指定錢包名稱,則會建立一個名為
default
的預設錢包。
cleos wallet create若是1.2以上版本,則需新增引數
--to-console
,輸出如下
lixu@ubuntu:~$ cleos wallet create --to-console Creating wallet: default Save password to use in the future to unlock this wallet. Without password imported keys will not be retrievable. "PW5J5SSUrU3sGBonpxjxbn9QXGPdpAsCkWowmjCcLyBPUu5Y5uvvv"
成功後將會生成錢包的解鎖密碼,錢包15分鐘不用將會自動鎖定,注意一定要儲存最後一行的密碼,需要使用它解鎖這個錢包。
2. 解鎖錢包
可以通過兩種方式解鎖錢包,推薦使用第二種方式解鎖。
- 直接在命令列上新增密碼引數,可以通過
-n
引數指定錢包名稱
cleos wallet unlock --password PW5JCEkVgzoBHUVCzbEwT9es6agM6NRPv6n21wgbzVaem6rWE4akS
- 在互動模式下解鎖
cleos wallet unlock接著提示
password:
,然後輸入密碼即可
lixu@ubuntu:~$ cleos wallet unlock password:兩種方式解鎖成功後都會輸出
Unlocked: default
。
注意:
出於安全考慮,最好在不使用錢包時使用命令 cleos wallet lock
將錢包鎖定。
3. 檢視錢包列表
使用命令cleos wallet lock
檢視錢包列表,在列表中解鎖後的錢包將在錢包名後面有
*
標記。
lixu@ubuntu:~/Desktop/sourcecode/eos$ cleos wallet list Wallets: [ "default *", ]
4. 匯入金鑰到錢包
上述步驟中啟動的私有區塊鏈是使用預設初始金鑰建立的,必須將其載入到錢包中。
使用命令 cleos wallet import --private-key ******
。可以通過 -n
引數指定錢包名稱
lixu@ubuntu:~$ cleos wallet import --private-key 5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3 imported private key for: EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV
注意:此時匯入的私鑰並不是建立錢包時生成的密碼。
這個金鑰 5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3
在以下配置檔案中可以檢視
~/Library/Application\ Support/eosio/nodeos/config/config.ini ~/.local/share/eosio/nodeos/config/config.ini
開啟檔案後滑動到最下面即可檢視到私鑰。
注意該祕鑰對正是超級賬戶 eosio的祕鑰對。接下來就會用到eosio賬戶。
cleos create account eosio eosio.bios EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV
七、部署系統合約
現在我們有一個擁有帳戶eosio金鑰的錢包defualt
,那麼接下來用eosio賬戶部署預設的系統合約,確保錢包
defualt
處於解鎖狀態。
eosio賬戶是預設就有的,在系統啟動的時候就自動被建立的超級使用者。
1. eosio.bios合約
出於開發目的,eosio.bios
可以使用系統提供的合約,通過此合約可以通過確認使用者持有的token直接控制其他帳戶的資源分配,包括管理鏈上的堆疊和非堆疊資源,頻寬、CPU以及記憶體資源。該
eosio.bios
合約可以在
contracts/eosio.bios
中找到原始碼。
先進入到eos根目錄,再使用命令 cleos set contract eosio build/contracts/eosio.bios -p eosio@active
部署BIOS合約。
lixu@ubuntu:~/Desktop/sourceeos/eos$ cleos create account eosio eosio.bios EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV executed transaction: af3bc248ca73d14c644fca863f4f82135bb72582b7f2be0dbec73a41c4f6438a 200 bytes 422 us # eosio <= eosio::newaccount "0000000000ea30550000a6ee00ea305501000000010002c0ded2bc1f1305fb0faac5e6c03ee3a1924234985427b6167ca56... 2018-10-12T09:15:03.461 thread-0 main.cpp:458 print_result warning: transaction executed locally, but may not be confirmed by the network yet lixu@ubuntu:~/Desktop/sourceeos/eos$ cleos set contract eosio.bios build/contracts/eosio.bios Reading WASM from build/contracts/eosio.bios/eosio.bios.wasm... Publishing contract... executed transaction: cf23d3be8d6195d5e12a2ada7411a6a2cd825fb941b89bd2c1c359d31fa0d7513728 bytes887 us #eosio <= eosio::setcode"0000a6ee00ea30550000e62e0061736d0100000001621260037f7e7f0060057f7e7e7e7e0060047f7e7e7e0060027f7f006... #eosio <= eosio::setabi"0000a6ee00ea3055b10d0e656f73696f3a3a6162692f312e30050c6163636f756e745f6e616d65046e616d650f7065726d6... 2018-10-12T09:15:25.278 thread-0main.cpp:458print_resultwarning: transaction executed locally, but may not be confirmed by the network yet
命令中的引數說明:
-
eosio
:部署合約的賬戶 -
build/contracts/eosio.bios
:合約路徑 -
-p eosio@active
:作用是告訴cleos
使用eosio
帳戶部署此合約,將使用我們之前匯入的帳戶eosio
的active許可權的私鑰對該操作進行簽名。 -
3. eosio.msig合約
實現的是多籤系統合約,實現了一個多籤功能,由於EOS要求系統的每一次更新都需要出塊節點完成一次多籤,當簽名數達到2/3+1時,更新才能生效。所以出塊節點可以呼叫這個合約實現多籤功能。cleos create account eosio eosio.msig EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV cleos set contract eosio.msig build/contracts/eosio.msig
2. eosio.system合約
eosio.system是EOS系統合約中最重要的部分,實現了EOS專案的所有基本功能:如:建立新賬戶、部署智慧合約、交易RAM、抵押獲取資源(net、cpu)、投票、領取節點獎勵等;
cleos create account eosio eosio.system EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV
4. eosio.token合約
用來發布代幣的合約。
cleos create account eosio eosio.token EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV cleos set contract eosio.tokenbuild/contracts/eosio.token
cleos set contract eosio.system build/contracts/eosio.system
5. exchange合約
合約提供的功能來建立代幣。
cleos create account eosio exchange EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV cleos set contract exchange build/contracts/exchange
八、EOS v1.1與v1.2版本的差異
在~/eosio-wallet/config.ini
中可以修改keosd應用程式的埠,可以通過keosd命令單獨啟動。
在 ~/.local/share/eosio/nodeos/config/config.ini
中可以修改nodeos應用程式的埠,可以通過nodeos命令啟動,一般需要新增外掛啟動,如:
nodeos -e -p eosio --plugin eosio::chain_api_plugin --plugin eosio::history_api_plugin --plugin eosio::wallet_api_plugin
v1.1版本
支援wallet RPC API,在nodeos中新增eosio::wallet_api_plugin外掛以啟動keosd,那麼keosd的埠與nodeos一致,同時也可以再通過命令keosd單獨啟動keosd應用程式,此時可以通過兩種途徑訪問keosd,一是使用nodeos的外掛方式訪問,得用nodeos的埠訪問keosd,二是使用keosd的埠訪問。
通過RPC訪問錢包資料的時候目錄在 ~/.local/share/eosio/nodeos/data
。通過 cleos
命令訪問錢包資料的時候目錄在 ~/eosio-wallet
。
v1.2版本
nodeos已經刪除了錢包API,應該直接在keosd中使用API。它的API定義與之前一樣,可以在v1.2之前的版本中檢視錢包API,所以在nodeos中不能再新增錢包外掛以啟動keosd了,需要通過命令keosd單獨啟動keosd應用程式,注意它的埠不能與nodeos一樣。
通過RPC和 cleos
命令訪問錢包資料的目錄都在 ~/eosio-wallet
。
版權宣告:部落格中的文章版權歸博主所有,未經授權禁止轉載,轉載請聯絡作者(微信:lixu1770105)取得同意並註明出處。
未經授權禁止轉載、改編,轉載請註明出處!