EOS開發教程(3.0):啟動序列

in #eoslast month

註意
本文的內容可以很容易的拓展到聯網的情況。本文就涉及的各方如何協調會做壹些假設。不過,社區可以選擇多種協調的方式。本流程在技術方面是客觀的;協調的假設則是推測的。社區已經提出了幾種方法。我們鼓勵您查看不同的方法,並參與到討論中來。
BIOS 啟動序列包含兩個重要的步驟::

  1. 創建,配置,啟動創世節點
  2. 從單個創世生產者轉向多個生產者。
  3. 創建,配置以及啟動創世節點
    本部分的內容將引導您完成以下的準備步驟:
    · 設置妳的 eos 環境
    · 開啟妳的 eos 創世節點
    · 設置附屬的節點,使它鏈接到創世節點上。
    完成這些步驟後,妳的eos 區塊鏈就是功能完全的了.
    Python 腳本
    如果妳像自動完成這些步驟,妳可以使用bios-boot-tutorial.py python腳本。不過,這個腳本使用了不同的附加的數據值。查看accounts.json文件,裏面列出了這個腳本文件使用的生產者名字以及賬戶名。
    如果妳想自動地在妳本地的機器上運行全功能的eos 區塊鏈,那麽妳可以按照README.md文件的指示,直接運行bios-boot-tutorial.py腳本。
    如果妳不滿足於自動完成所有步驟,而是想了解腳本背後的原理,那麽妳可以跟著本教程,壹起去探尋背後的每壹個步驟。
    1.1. 安裝二進制文件
    預編譯EOSIO 二進制文件
    要知道怎麽安裝nodeos二進制文件,請參看安裝EOSIO預編譯二進制文件( Install EOSIO pre-compiled binaries)教程,但此時還不要開啟nodeos。
    EOSIO.CDT 二進制文件
    要知道怎麽安裝EOSIO.CDT二進制文件,請參看安裝EOSIO.CDT二進制文件(Install EOSIO.CDT binaries)教程。
    1.2. 創建壹個開發錢包
    創建並配置妳的默認錢包,然後創建壹個開發公鑰和私鑰。密鑰對創建完成之後,把公鑰和私鑰導入妳的錢包。為了方便,我們把公鑰稱為EOS_PUB_DEV_KEY,把私鑰稱為EOS_PRIV_DEV_KEY。
    關於如何創建錢包以及導入密鑰,請參看創建開發錢包教程。
    1.3. 創建 ~/biosboot/genesis 文件夾
    創建壹個新文件夾: ~/biosboot/genesis,執行帶有指定參數的nodeos命令,創建區塊鏈數據庫,log文件,以及配置文件,以啟動創世節點。
    cd ~
    mkdir biosboot
    cd biosboot
    mkdir genesis
    cd genesis
    1.4. 在 ~/biosboot/ 文件夾中創建壹個JSON 文件
  4. 在 ~/biosboot/ 文件夾中創建壹個空的genesis.json文件,並打開它(本例我們使用nano編輯器):
    cd ~/biosboot
    touch genesis.json
    nano genesis.json
  5. 將以下json代碼復制到剪切板:
    {
    “initial_timestamp”: “2018–12–05T08:55:11.000”,
    “initial_key”: “EOS_PUB_DEV_KEY”,
    “initial_configuration”: {
    “max_block_net_usage”: 1048576,
    “target_block_net_usage_pct”: 1000,
    “max_transaction_net_usage”: 524288,
    “base_per_transaction_net_usage”: 12,
    “net_usage_leeway”: 500,
    “context_free_discount_net_usage_num”: 20,
    “context_free_discount_net_usage_den”: 100,
    “max_block_cpu_usage”: 100000,
    “target_block_cpu_usage_pct”: 500,
    “max_transaction_cpu_usage”: 50000,
    “min_transaction_cpu_usage”: 100,
    “max_transaction_lifetime”: 3600,
    “deferred_trx_expiration_window”: 600,
    “max_transaction_delay”: 3888000,
    “max_inline_action_size”: 4096,
    “max_inline_action_depth”: 4,
    “max_authority_depth”: 6
    },
    “initial_chain_id”: “0000000000000000000000000000000000000000000000000000000000000000”}
  6. 把json代碼黏貼到genesis.json文件中去。把 EOS_PUB_DEV_KEY替換為妳之前創建的公鑰.
  7. 保存並退出編輯器:
    [CTRL]+X
    y[ENTER]
    1.5. 啟動創世節點
    要啟動創世節點,需要:
  8. 在~/biosnode/genesis/文件夾中創建預告shell腳本文件,並打開該文件(本例我們使用nano編輯器):
    cd ~/biosboot/genesis
    touch genesis_start.sh
    nano genesis_start.sh
  9. 把下面的shell 腳本復制並黏貼到 genesis_start.sh shell腳本文件中去.
    #!/bin/bashDATADIR=”./blockchain”
    if [ ! -d $DATADIR ]; then
    mkdir -p $DATADIR;fi
    nodeos
    — genesis-json $DATADIR”/../../genesis.json”
    — signature-provider EOS_PUB_DEV_KEY=KEY:EOS_PRIV_DEV_KEY
    — plugin eosio::producer_plugin
    — plugin eosio::producer_api_plugin
    — plugin eosio::chain_plugin
    — plugin eosio::chain_api_plugin
    — plugin eosio::http_plugin
    — plugin eosio::history_api_plugin
    — plugin eosio::history_plugin
    — data-dir $DATADIR”/data”
    — blocks-dir $DATADIR”/blocks”
    — config-dir $DATADIR”/config”
    — producer-name eosio
    — http-server-address 127.0.0.1:8888
    — p2p-listen-endpoint 127.0.0.1:9010
    — access-control-allow-origin=*
    — contracts-console
    — http-validate-host=false
    — verbose-http-errors
    — enable-stale-production
    — p2p-peer-address localhost:9011
    — p2p-peer-address localhost:9012
    — p2p-peer-address localhost:9013 >> $DATADIR”/nodeos.log” 2>&1 & \echo $! > $DATADIR”/eosd.pid”
    註意:把EOS_PUB_DEV_KEY 和 EOS_PRIV_DEV_KEY替換為妳之前創建的公鑰和私鑰。
  10. 保存並退出編輯器:
    [CTRL]+X
    y[ENTER]
  11. 將執行優先權賦予genesis_start.sh shell 腳本文件,然後執行 genesis_start.sh腳本,啟動創世 nodeos :
    cd ~/biosboot/genesis/
    chmod 755 genesis_start.sh
    ./genesis_start.sh
    創世節點:
    · 名稱為 eosio
    · 生產區塊
    · 在127.0.0.1:8888 監聽HTTP請求
    · 在127.0.0.1:9010監聽鏈接請求
    · 定期地初始化鏈接到localhost:9011, localhost:9012, 以及localhost:9013上; 這些節點現在還沒有運行,所以如果妳看到有鏈接錯誤的話,請忽略它們。
    · 把打印合約的參數 — contracts-console 輸出到控制臺;在本例中,這些信息對於發現和修復問題是很有用的。
    1.5.1 停止創世節點
    想要停止 nodeos,你需要:
  12. 在~/biosnode/genesis/文件夾中創建壹個stop.sh shell腳本文件,並把下面的腳本復制到該文件中去。
    #!/bin/bashDATADIR=”./blockchain/”
    if [ -f $DATADIR”/eosd.pid” ]; thenpid=cat $DATADIR”/eosd.pid”echo $pidkill $pidrm -r $DATADIR”/eosd.pid”echo -ne “Stoping Node”while true; do[ ! -d “/proc/$pid/fd” ] && breakecho -ne “.”sleep 1doneecho -ne “\rNode Stopped. \n”fi
  13. 在~/biosboot/genesis/文件夾中執行 stop.sh shell腳本:
    cd ~/biosboot/genesis/
    chmod 755 stop.sh
    ./stop.sh
    1.5.2 重啟nodeos
    停掉nodeos 之後,妳不能使用之前創建的.genesis_start.sh腳本來重啟他,因為壹旦壹個節點開始運行並生產區塊了,區塊鏈數據庫就已經完成了初始化,並有了數據。因此,不能使用 — genesis-json參數來啟動nodeos。因此,我們推薦創建壹個新的腳本,start.sh,創建的步驟跟之前的壹樣,然後把下面的腳本內容復制到這個腳本文件中去。同時,指定執行優先權到該腳本文件,以後停止了節點後,都可以使用這個文件來重啟nodeos。。
    #!/bin/bashDATADIR=”./blockchain”
    if [ ! -d $DATADIR ]; then
    mkdir -p $DATADIR;fi
    nodeos
    — signature-provider EOS_PUB_DEV_KEY=KEY:EOS_PRIV_DEV_KEY
    — plugin eosio::producer_plugin
    — plugin eosio::producer_api_plugin
    — plugin eosio::chain_plugin
    — plugin eosio::chain_api_plugin
    — plugin eosio::http_plugin
    — plugin eosio::history_api_plugin
    — plugin eosio::history_plugin
    — data-dir $DATADIR”/data”
    — blocks-dir $DATADIR”/blocks”
    — config-dir $DATADIR”/config”
    — producer-name eosio
    — http-server-address 127.0.0.1:8888
    — p2p-listen-endpoint 127.0.0.1:9010
    — access-control-allow-origin=*
    — contracts-console
    — http-validate-host=false
    — verbose-http-errors
    — enable-stale-production
    — p2p-peer-address localhost:9011
    — p2p-peer-address localhost:9012
    — p2p-peer-address localhost:9013 >> $DATADIR”/nodeos.log” 2>&1 & \echo $! > $DATADIR”/eosd.pid”