溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

eosio編譯與部署的詳細(xì)步驟

發(fā)布時(shí)間:2021-08-27 14:50:44 來(lái)源:億速云 閱讀:288 作者:chen 欄目:互聯(lián)網(wǎng)科技

這篇文章主要介紹“eosio編譯與部署的詳細(xì)步驟”,在日常操作中,相信很多人在eosio編譯與部署的詳細(xì)步驟問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”eosio編譯與部署的詳細(xì)步驟”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!

1. 名詞解釋

  1. 創(chuàng)世節(jié)點(diǎn)(BIOS) 用于創(chuàng)建初始區(qū)塊,加載基礎(chǔ)合約,供其它節(jié)點(diǎn)同步連接。

  2. 礦工節(jié)點(diǎn)(BP) 主要用于生產(chǎn)同步區(qū)塊,計(jì)算合約產(chǎn)生的費(fèi)用歸礦工賬號(hào)所有。

  3. 查詢節(jié)點(diǎn) 不產(chǎn)生區(qū)塊,同步區(qū)塊信息,提供區(qū)塊信息查詢功能。

  4. 私鑰 用來(lái)進(jìn)行簽名操作,私鑰可以生成唯一對(duì)應(yīng)公鑰。

  5. 公鑰 用來(lái)對(duì)私鑰的簽名進(jìn)行驗(yàn)證。

  6. 錢(qián)包 生成和保存私鑰的地方,當(dāng)需要進(jìn)行簽名操作時(shí),會(huì)從錢(qián)包讀取私鑰列表,進(jìn)行簽名。

  7. 帶寬 帶寬分為cpu帶寬和net帶寬兩種,每次執(zhí)行合約都會(huì)消耗一定的帶寬(從賬號(hào)中扣?。?。

  8. 合約 一段在鏈上可執(zhí)行代碼,綁定在賬號(hào)上,每個(gè)賬號(hào)只能綁定一份合約。

  9. 賬號(hào) 存儲(chǔ)用戶信息,包括余額、帶寬、合約(如果有)等。

  10. 總票數(shù) 總票數(shù)=總發(fā)行的貨幣數(shù)量。

  11. 投票 投票者抵押貨幣投票給礦工,當(dāng)?shù)V工投票數(shù)大于總票數(shù)的15%時(shí)創(chuàng)世節(jié)點(diǎn)停止產(chǎn)生區(qū)塊,轉(zhuǎn)由礦工生產(chǎn)區(qū)塊。

    所謂的礦工節(jié)點(diǎn)與查詢節(jié)點(diǎn),只是為了區(qū)分是否生產(chǎn)區(qū)塊的不同配置。

2. 節(jié)點(diǎn)代碼編譯、程序安裝

注意:后面編譯依賴(lài)GIT,所以務(wù)必保證代碼根目錄的.git完整,以及系統(tǒng)安裝有g(shù)it。 以下以u(píng)buntu系統(tǒng)為例,其它系統(tǒng)步驟類(lèi)似。

  1. 先安裝GIT,如果已經(jīng)安裝則忽略這一步

    sudo apt update && sudo apt install git -y


  2. 從GIT上克隆最新代碼

    git clone https://github.com/eosio/eos --recursive --depth 1


  3. 使用eosio_build.sh自動(dòng)編譯

    腳本會(huì)檢查系統(tǒng)依賴(lài)庫(kù),并自動(dòng)安裝,請(qǐng)注意管理員權(quán)限提示,如果下載依賴(lài)庫(kù)時(shí)中斷請(qǐng)檢查網(wǎng)絡(luò)狀態(tài),然后再次執(zhí)行。

    cd eosio
    export LOCAL_CMAKE_FLAGS="-DEOSIO_ROOT_KEY=EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV -DCORE_SYMBOL_NAME=EOS"
    ./script/eosio_build.sh


    正式環(huán)境可以使用LOCAL_CMAKE_FLAGS環(huán)境變量指定根公鑰EOSIO_ROOT_KEY和系統(tǒng)貨幣符號(hào)CORE_SYMBOL_NAME

  4. 打包和安裝

    編譯成功會(huì)出現(xiàn)'EOSIO'的ASCII圖樣提示,請(qǐng)執(zhí)行以下操作,把程序安裝到系統(tǒng),如果出現(xiàn)編譯錯(cuò)誤,請(qǐng)?zhí)峤诲e(cuò)誤提示給相關(guān)人員查看解決。

     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


    參數(shù)說(shuō)明:

    • brew mac系統(tǒng)

    • deb ubuntu系系統(tǒng)

    • rpm redhat系系統(tǒng)

  5. 重新編譯 如果有修改代碼,或者進(jìn)行版本更新,請(qǐng)先關(guān)閉當(dāng)前運(yùn)行的錢(qián)包和節(jié)點(diǎn)程序,以及清除安裝到系統(tǒng)的想著程序,再編譯。

    pkill -2 keosd nodeos
    #ubuntu
    sudo apt remove eosio
    #redhat
    sudo yum remove eosio


3. 默認(rèn)配置文件所在目錄

Linux: ~/.local/share/eosio/nodeos/config Mac: ~/Library/Application Support/eosio/nodeos/config

4. 創(chuàng)建默認(rèn)錢(qián)包和公私鑰

  1. 啟動(dòng)錢(qián)包服務(wù)

    keosd --unlock-timeout 3600 # 3600秒后錢(qián)包重新鎖定


  2. 創(chuàng)建錢(qián)包

    請(qǐng)保存輸出的錢(qián)包密碼,下次打開(kāi)錢(qián)包時(shí)用的到。

    cleos wallet create -n default
    
    #打開(kāi)錢(qián)包
    cleos wallet open -n default


  3. 創(chuàng)建公私鑰

    cleos create key


  4. 把上步生成的私鑰導(dǎo)入錢(qián)包

    cleos wallet import -n default --private-key [private key]


5. 通用配置

參數(shù)名示例說(shuō)明
agent-namep2p網(wǎng)絡(luò)中標(biāo)識(shí)自己的節(jié)點(diǎn)的名字"eosio bios"
producer-name礦工的賬號(hào)名"eosio"
signature-provider礦工的公鑰私鑰,用于簽名EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV<br>=KEY:5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3
p2p-server-addressp2p服務(wù)監(jiān)聽(tīng)地址,默認(rèn)監(jiān)聽(tīng)0.0.0.0:9876"0.0.0.0:9876"
http-server-addresshttp服務(wù)器監(jiān)聽(tīng)地址,如果不想提供http服務(wù),可以把地址留空,則不http服務(wù)不啟動(dòng)。注意不填寫(xiě)會(huì)使用默認(rèn)地址127.0.0.1:8888"127.0.0.1:8888"
enable-stale-production啟動(dòng)后立即開(kāi)始生產(chǎn)塊。如果不是BIOS節(jié)點(diǎn),這里填false。true
p2p-peer-address其它節(jié)點(diǎn)的p2p同步地址,用于同步數(shù)據(jù),此參數(shù)可以有多個(gè),即連接到多個(gè)節(jié)點(diǎn)。"192.168.0.2:9876"

6. 創(chuàng)世節(jié)點(diǎn)配置

6.1. 啟動(dòng)參數(shù)配置

  1. 創(chuàng)建eosio系統(tǒng)賬號(hào)的公私鑰,參見(jiàn)4. 創(chuàng)建錢(qián)包和公私鑰

  2. 修改genesis.json的initial_key為上一步生成的公鑰

  3. 啟動(dòng)節(jié)點(diǎn),注意填寫(xiě)第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. 部署系統(tǒng)合約

  1. 下載編譯合約編譯器

     git clone https://github.com/eosio/eosio.cdt.git --recursive --depth 1
     cd eosio.cdt
     ./build.sh
     sudo ./install.sh


  2. 下載編譯合約

     git clone https://github.com/eosio/eosio.contracts.git --depth 1
     cd eosio.contracts
     ./build.sh


  3. 創(chuàng)建系統(tǒng)賬號(hào)

    OwnerKey與ActiveKey相同,參見(jiàn)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參數(shù)指定了根公鑰,則這里必須相同。

  4. 部署貨幣合約,請(qǐng)確認(rèn)在合約代碼根目錄執(zhí)行,參見(jiàn)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


  5. 創(chuàng)建貨幣

    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參數(shù)指定了系統(tǒng)貨幣符號(hào),則這里必須相同。

  6. 部署系統(tǒng)合約,請(qǐng)確認(rèn)在合約代碼根目錄執(zhí)行,參見(jiàn)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. 礦工節(jié)點(diǎn)配置

1. 注冊(cè)礦工賬號(hào)

  1. 創(chuàng)建礦工賬號(hào)的公私鑰,參見(jiàn)4. 創(chuàng)建錢(qián)包和公私鑰

  2. 創(chuàng)建礦工賬號(hào)

    cleos system newaccount --stake-net [quantity] --stake-cpu [quantity] --buy-ram-kbytes 8192 \
        [creater] [name] [OwnerKey] [ActiveKey] -p [creater]
    # 參數(shù)說(shuō)明
    # creater 礦工賬號(hào)的創(chuàng)建者賬號(hào)。
    # name 礦工賬號(hào)的名字。
    # quantity 購(gòu)買(mǎi)帶寬的資源,從創(chuàng)建者賬號(hào)扣取。
    # OwnerKey與ActiveKey相同,礦工賬號(hào)的公鑰,即上步生成的公鑰。
    
    # 示例
    cleos system newaccount --stake-net "50.0000 EOS" --stake-cpu "50.0000 EOS" --buy-ram-kbytes 8888888 eosio eosnewbpa \
    EOS7n1U9Z2NQeVEvQZYjHCedNXRVWshmmuGH2j3r6bD4c8fH4U8QL EOS7n1U9Z2NQeVEvQZYjHCedNXRVWshmmuGH2j3r6bD4c8fH4U8QL -p eosio


  3. 轉(zhuǎn)賬給礦工賬號(hào)

    cleos transfer [from] [recipient] [amount] [momo]
    # 參數(shù)說(shuō)明
    # from 轉(zhuǎn)賬賬號(hào)
    # recipient 接收轉(zhuǎn)賬賬號(hào)
    # amount 金額
    # momo 注釋
    
    # 示例
    cleos transfer eosio eosnewbpa "9000000000.0000 EOS" "trans to eosnewbpa"


  4. 注冊(cè)成礦工

    cleos system regproducer [name] [ActiveKey] [url]
    # 參數(shù)說(shuō)明
    # name 礦工賬號(hào)
    # ActiveKey 礦工賬號(hào)的公鑰
    # url 礦工的網(wǎng)站
    
    #示例
    cleos system regproducer eosnewbpa  EOS7n1U9Z2NQeVEvQZYjHCedNXRVWshmmuGH2j3r6bD4c8fH4U8QL https://192.168.0.57:8888


  5. 抵押相應(yīng)的資源

    cleos system delegatebw [name] [name] [stake_net_quantity] [stake_cpu_quantity]
    # 參數(shù)說(shuō)明
    # name 礦工賬號(hào)
    # stake_net_quantity 抵押的網(wǎng)絡(luò)帶寬資源
    # stake_cpu_quantity 抵押的CPU帶寬資源
    
    # 示例
    cleos system delegatebw eosnewbpa eosnewbpa '4400000000.0000 EOS' '4400000000.0000 EOS'


  6. 投票給自己

    cleos system voteproducer prods [voter] [producers] -p [voter]
    # 參數(shù)說(shuō)明
    # voter 礦工賬號(hào)
    # producers 抵押的網(wǎng)絡(luò)帶寬資源
    
    #示例
    cleos system voteproducer prods eosnewbpa eosnewbpa


2. 啟動(dòng)參數(shù)配置

  1. 創(chuàng)建eosio系統(tǒng)賬號(hào)的公私鑰,參見(jiàn)創(chuàng)建錢(qián)包和公私鑰

  2. 修改genesis.json的initial_key為創(chuàng)世節(jié)點(diǎn)(BIOS)生成的公鑰

  3. 啟動(dòng)節(jié)點(diǎn),注意填寫(xiě)第1步生成的公私鑰

    假設(shè)已知bios節(jié)點(diǎn)192.168.0.56:9876,BP節(jié)點(diǎn)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. 查詢節(jié)點(diǎn)配置

查詢節(jié)點(diǎn)配置與礦工節(jié)點(diǎn)配置類(lèi)似,只是不注冊(cè)成礦工,查詢節(jié)點(diǎn)常用來(lái)數(shù)據(jù)查詢。建議開(kāi)啟mongo_db_plugin插件。 mongo_db_plugin是保存區(qū)塊交易信息到mongodb的插件。

假設(shè)已知bios節(jié)點(diǎn)192.168.0.56:9876,BP節(jié)點(diǎn)192.168.0.57:9876、192.168.0.58:9876,并且這三個(gè)節(jié)點(diǎn)都開(kāi)啟了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. 建議

  1. 從安全角度來(lái)說(shuō),不要私鑰泄露給他人,知道賬戶私鑰后,可以隨意操縱賬戶。

  2. 如果使用助記詞生成的私鑰,請(qǐng)使用復(fù)雜度較高的助記詞。

  3. 上面?zhèn)魅牒芏鄥?shù)都是演示用的,如果正式部署,建議使用配置文件的方式。

  4. 建議使用SIGINT信號(hào)來(lái)關(guān)閉節(jié)點(diǎn),防止程序產(chǎn)生臟數(shù)據(jù)。

    pkill -2 keosd nodeos


  5. 如果有臟數(shù)據(jù)產(chǎn)生,請(qǐng)使用--replay-blockchain參數(shù)或者--delete-all-blocks參數(shù)啟動(dòng)節(jié)點(diǎn),重新同步數(shù)據(jù)。

  6. 節(jié)點(diǎn)啟動(dòng)前,請(qǐng)確認(rèn)時(shí)間及時(shí)區(qū)正確,時(shí)間有偏移會(huì)影響區(qū)塊數(shù)據(jù)驗(yàn)證。

    sudo mv /etc/localtime  /etc/localtime.bak
    sudo ln -s /usr/share/zoneinfo/UTC /etc/localtime
    # 使用 ntpdate 更新系統(tǒng)時(shí)間
    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 # 寫(xiě)入硬件
    # 啟動(dòng)ntpd服務(wù)
    sudo systemctl enable ntp # systemctl enable ntpd
    sudo systemctl start ntp # systemctl start ntpd


到此,關(guān)于“eosio編譯與部署的詳細(xì)步驟”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI