1. 名詞解釋
-
創世節點(BIOS) 用于創建初始區塊,加載基礎合約,供其它節點同步連接,
-
礦工節點(BP) 主要用于生產同步區塊,計算合約產生的費用歸礦工賬號所有,
-
查詢節點 不產生區塊,同步區塊資訊,提供區塊資訊查詢功能,
-
私鑰 用來進行簽名操作,私鑰可以生成唯一對應公鑰,
-
公鑰 用來對私鑰的簽名進行驗證,
-
錢包 生成和保存私鑰的地方,當需要進行簽名操作時,會從錢包讀取私鑰串列,進行簽名,
-
帶寬 帶寬分為cpu帶寬和net帶寬兩種,每次執行合約都會消耗一定的帶寬(從賬號中扣取),
-
合約 一段在鏈上可執行代碼,系結在賬號上,每個賬號只能系結一份合約,
-
賬號 存盤用戶資訊,包括余額、帶寬、合約(如果有)等,
-
總票數 總票數=總發行的貨幣數量,
-
投票 投票者抵押貨幣投票給礦工,當礦工投票數大于總票數的15%時創世節點停止產生區塊,轉由礦工生產區塊,
所謂的礦工節點與查詢節點,只是為了區分是否生產區塊的不同配置,
2. 節點代碼編譯、程式安裝
注意:后面編譯依賴GIT,所以務必保證代碼根目錄的.git完整,以及系統安裝有git,
以下以ubuntu系統為例,其它系統步驟類似,
-
先安裝GIT,如果已經安裝則忽略這一步
sudo apt update && sudo apt install git -y -
從GIT上克隆最新代碼
git clone https://github.com/eosio/eos --recursive --depth 1 -
使用eosio_build.sh自動編譯
腳本會檢查系統依賴庫,并自動安裝,請注意管理員權限提示,如果下載依賴庫時中斷請檢查網路狀態,然后再次執行,
cd eosio export LOCAL_CMAKE_FLAGS="-DEOSIO_ROOT_KEY=EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV -DCORE_SYMBOL_NAME=EOS" ./script/eosio_build.sh正式環境可以使用
LOCAL_CMAKE_FLAGS環境變數指定根公鑰EOSIO_ROOT_KEY和系統貨幣符號CORE_SYMBOL_NAME -
打包和安裝
編譯成功會出現'EOSIO'的ASCII圖樣提示,請執行以下操作,把程式安裝到系統,如果出現編譯錯誤,請提交錯誤提示給相關人員查看解決,
cd build/packages bash ./generate_package.sh [brew|deb|rpm] ls #ubuntu sudo dpkg -i eosio-v1.7.3.deb #redhat sudo yum install eosio-v1.7.3.rpm #或者 sudo rpm -ivh eosio-v1.7.3.rpm引數說明:
brewmac系統debubuntu系系統rpmredhat系系統
-
重新編譯
如果有修改代碼,或者進行版本更新,請先關閉當前運行的錢包和節點程式,以及清除安裝到系統的想著程式,再編譯,pkill -2 keosd nodeos #ubuntu sudo apt remove eosio #redhat sudo yum remove eosio
3. 默認組態檔所在目錄
Linux: ~/.local/share/eosio/nodeos/config
Mac: ~/Library/Application Support/eosio/nodeos/config
4. 創建默認錢包和公私鑰
-
啟動錢包服務
keosd --unlock-timeout 3600 # 3600秒后錢包重新鎖定 -
創建錢包
請保存輸出的錢包密碼,下次打開錢包時用的到,
cleos wallet create -n default #打開錢包 cleos wallet open -n default -
創建公私鑰
cleos create key -
把上步生成的私鑰匯入錢包
cleos wallet import -n default --private-key [private key]
5. 通用配置
| 引數名 | 示例 | 說明 |
|---|---|---|
| agent-name | p2p網路中標識自己的節點的名字 | "eosio bios" |
| producer-name | 礦工的賬號名 | "eosio" |
| signature-provider | 礦工的公鑰私鑰,用于簽名 | EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV =KEY:5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3 |
| p2p-server-address | p2p服務監聽地址,默認監聽0.0.0.0:9876 | "0.0.0.0:9876" |
| http-server-address | http服務器監聽地址,如果不想提供http服務,可以把地址留空,則不http服務不啟動,注意不填寫會使用默認地址127.0.0.1:8888 | "127.0.0.1:8888" |
| enable-stale-production | 啟動后立即開始生產塊,如果不是BIOS節點,這里填false, | true |
| p2p-peer-address | 其它節點的p2p同步地址,用于同步資料,此引數可以有多個,即連接到多個節點, | "192.168.0.2:9876" |
6. 創世節點配置
6.1. 啟動引數配置
-
創建eosio系統賬號的公私鑰,參見4. 創建錢包和公私鑰
-
修改genesis.json的initial_key為上一步生成的公鑰
-
啟動節點,注意填寫第1步生成的公私鑰
nodeos --agent-name "eosio bios" --producer-name "eosio" \ --signature-provider [public key]=KEY:[private key] \ --plugin eosio::chain_plugin --plugin eosio::chain_api_plugin \ --p2p-server-address "0.0.0.0:9876" --http-server-address "127.0.0.1:8888" --enable-stale-production
6.2. 部署系統合約
-
下載編譯合約編譯器
git clone https://github.com/eosio/eosio.cdt.git --recursive --depth 1 cd eosio.cdt ./build.sh sudo ./install.sh -
下載編譯合約
git clone https://github.com/eosio/eosio.contracts.git --depth 1 cd eosio.contracts ./build.sh -
創建系統賬號
OwnerKey與ActiveKey相同,參見6.1生成的公鑰
cleos create account eosio eosio.token [OwnerKey] [ActiveKey] -p eosio cleos create account eosio eosio.msig [OwnerKey] [ActiveKey] -p eosio cleos create account eosio eosio.bpay [OwnerKey] [ActiveKey] -p eosio cleos create account eosio eosio.names [OwnerKey] [ActiveKey] -p eosio cleos create account eosio eosio.ram [OwnerKey] [ActiveKey] -p eosio cleos create account eosio eosio.ramfee [OwnerKey] [ActiveKey] -p eosio cleos create account eosio eosio.saving [OwnerKey] [ActiveKey] -p eosio cleos create account eosio eosio.stake [OwnerKey] [ActiveKey] -p eosio cleos create account eosio eosio.vpay [OwnerKey] [ActiveKey] -p eosio如果使用
LOCAL_CMAKE_FLAGS引數指定了根公鑰,則這里必須相同, -
部署貨幣合約,請確認在合約代碼根目錄執行,參見6.2.2下載編譯合約
cleos set contract eosio.token build/eosio.token -p eosio.token cleos set contract eosio.msig build/eosio.msig -p eosio.msig -
創建貨幣
cleos push action eosio.token create '["eosio", "1000000000000.0000 EOS", 0, 0, 0]' -p eosio.token cleos push action eosio.token issue '["eosio", "1000000000000.0000 EOS", "issue"]' -p eosio如果使用
LOCAL_CMAKE_FLAGS引數指定了系統貨幣符號,則這里必須相同, -
部署系統合約,請確認在合約代碼根目錄執行,參見6.2.2下載編譯合約
cleos set contract eosio build/eosio.system -p eosio cleos push action eosio init '[0, "4,EOS"]' -p eosio@active cleos push action eosio setpriv '["eosio.msig", 1]' -p eosio@active
7. 礦工節點配置
1. 注冊礦工賬號
-
創建礦工賬號的公私鑰,參見4. 創建錢包和公私鑰
-
創建礦工賬號
cleos system newaccount --stake-net [quantity] --stake-cpu [quantity] --buy-ram-kbytes 8192 \ [creater] [name] [OwnerKey] [ActiveKey] -p [creater] # 引數說明 # creater 礦工賬號的創建者賬號, # name 礦工賬號的名字, # quantity 購買帶寬的資源,從創建者賬號扣取, # OwnerKey與ActiveKey相同,礦工賬號的公鑰,即上步生成的公鑰, # 示例 cleos system newaccount --stake-net "50.0000 EOS" --stake-cpu "50.0000 EOS" --buy-ram-kbytes 8888888 eosio eosnewbpa \ EOS7n1U9Z2NQeVEvQZYjHCedNXRVWshmmuGH2j3r6bD4c8fH4U8QL EOS7n1U9Z2NQeVEvQZYjHCedNXRVWshmmuGH2j3r6bD4c8fH4U8QL -p eosio -
轉賬給礦工賬號
cleos transfer [from] [recipient] [amount] [momo] # 引數說明 # from 轉賬賬號 # recipient 接收轉賬賬號 # amount 金額 # momo 注釋 # 示例 cleos transfer eosio eosnewbpa "9000000000.0000 EOS" "trans to eosnewbpa" -
注冊成礦工
cleos system regproducer [name] [ActiveKey] [url] # 引數說明 # name 礦工賬號 # ActiveKey 礦工賬號的公鑰 # url 礦工的網站 #示例 cleos system regproducer eosnewbpa EOS7n1U9Z2NQeVEvQZYjHCedNXRVWshmmuGH2j3r6bD4c8fH4U8QL https://192.168.0.57:8888 -
抵押相應的資源
cleos system delegatebw [name] [name] [stake_net_quantity] [stake_cpu_quantity] # 引數說明 # name 礦工賬號 # stake_net_quantity 抵押的網路帶寬資源 # stake_cpu_quantity 抵押的CPU帶寬資源 # 示例 cleos system delegatebw eosnewbpa eosnewbpa '4400000000.0000 EOS' '4400000000.0000 EOS' -
投票給自己
cleos system voteproducer prods [voter] [producers] -p [voter] # 引數說明 # voter 礦工賬號 # producers 抵押的網路帶寬資源 #示例 cleos system voteproducer prods eosnewbpa eosnewbpa
2. 啟動引數配置
-
創建eosio系統賬號的公私鑰,參見創建錢包和公私鑰
-
修改genesis.json的initial_key為創世節點(BIOS)生成的公鑰
-
啟動節點,注意填寫第1步生成的公私鑰
假設已知bios節點192.168.0.56:9876,BP節點192.168.0.58:9876,
nodeos --agent-name "eosnewbpa" --producer-name "eosnewbpa" \ --signature-provider [public key]=KEY:[private key] \ --p2p-server-address "0.0.0.0:9876" --http-server-address "127.0.0.1:8888" \ --p2p-peer-address "192.168.0.56:9876" --p2p-peer-address "192.168.0.58:9876"
8. 查詢節點配置
查詢節點配置與礦工節點配置類似,只是不注冊成礦工,查詢節點常用來資料查詢,建議開啟mongo_db_plugin插件,
mongo_db_plugin是保存區塊交易資訊到mongodb的插件,
假設已知bios節點192.168.0.56:9876,BP節點192.168.0.57:9876、192.168.0.58:9876,并且這三個節點都開啟了mongo_db_plugin插件,
nodeos --agent-name "eosnewbpb" --producer-name "eosnewbpb" \
--signature-provider [public key]=KEY:[private key] \
--p2p-server-address "0.0.0.0:9876" --http-server-address "127.0.0.1:8888" \
--p2p-peer-address "192.168.0.56:9876" --p2p-peer-address "192.168.0.57:9876" --p2p-peer-address "192.168.0.58:9876" \
--plugin eosio::mongo_db_plugin --mongodb-uri mongodb://127.0.0.1:27017/EOSIO
9. 建議
-
從安全角度來說,不要私鑰泄露給他人,知道賬戶私鑰后,可以隨意操縱賬戶,
-
如果使用助記詞生成的私鑰,請使用復雜度較高的助記詞,
-
上面傳入很多引數都是演示用的,如果正式部署,建議使用組態檔的方式,
-
建議使用SIGINT信號來關閉節點,防止程式產生臟資料,
pkill -2 keosd nodeos -
如果有臟資料產生,請使用--replay-blockchain引數或者--delete-all-blocks引數啟動節點,重新同步資料,
-
節點啟動前,請確認時間及時區正確,時間有偏移會影響區塊資料驗證,
sudo mv /etc/localtime /etc/localtime.bak sudo ln -s /usr/share/zoneinfo/UTC /etc/localtime # 使用 ntpdate 更新系統時間 sudo apt install ntpdate ntp -y # yum install ntpdate ntp -y sudo timedatectl set-timezone UTC sudo ntpdate -u time.windows.com sudo hwclock --systohc # 寫入硬體 # 啟動ntpd服務 sudo systemctl enable ntp # systemctl enable ntpd sudo systemctl start ntp # systemctl start ntpd
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/5277.html
標籤:區塊鏈
