• <option id="cacee"><noscript id="cacee"></noscript></option>
  • <table id="cacee"><noscript id="cacee"></noscript></table>
  • <td id="cacee"></td>
  • <option id="cacee"></option>
  • <table id="cacee"></table>
  • <option id="cacee"><option id="cacee"></option></option>
  • <table id="cacee"><source id="cacee"></source></table><td id="cacee"><rt id="cacee"></rt></td>
    <option id="cacee"><option id="cacee"></option></option>
     找回密碼
     立即注冊

    掃一掃,登錄網站

    首頁 自媒體 查看內容
    • 4845
    • 0
    • 分享到

    區塊鏈100講:EOS環境搭建入門(私鏈節點-錢包-密鑰-賬號)

    2018-7-16 12:17

    來源: HiBlock-Net

    本文作者:HiBlock區塊鏈技術布道群-輝哥

    原文發布于簡書

    原文鏈接:https://www.jianshu.com/p/533f849489b1



    1

    摘要


    【本文目標】


    通過本文實踐,能在已編譯的EOS V1.0.5版本環境上,完成私鏈節點啟動,錢包創建,密鑰導入和賬號創建等內容。

    【前置條件】


    你已完成了EOS編譯,編譯測試成功。未完成的可參考如何在UBUNTU虛擬機上編譯EOS完成環境搭建?(附代碼)完成相關配置。


    【技術收獲】
    1)EOS的節點,錢包,密鑰,賬號的概念和理解
    2)EOS錢包/賬號的建立和遇到的問題分析及解決方法

    【說明】


    EOS版本還沒有穩定下來,即使完成了V1.0.2版本環境搭建的人,到V1.0.5時還是摔在了坑里。輝哥通過踩坑分析給大家提供盡可能多的知識和解決思路,大家在V1.0.5以后的版本部署可參考文章和以錯誤關鍵字搜索官網的issue網址(https://github.com/EOSIO/eos/issues)獲取更多知識。


    2

    EOSIO總體框架


    EOSIO有多個程序模塊組成,經常會用到的有以下三個模塊:


    • nodeos - EOSIO核心模塊,用于啟動eosio服務,在后臺運行,啟動時可以添加多種插件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 - 管理錢包的各種組件,默認情況下,keosd將隨cleos一起啟動。位于eos/build/programs/keosd


    下圖是上面三個工具的關系:



    另外,還有智能合約的編譯工具eosiocpp


    3

    EOS系統中錢包,密鑰對,賬號,智能合約的關系


    相對其他區塊鏈公鏈,EOS系統的組合關系比較自由,也帶來了理解上的困難。輝哥結合自己的理解,以中國大地上人們最關系的房子為例,做比喻介紹。


    1) 錢包是土豪房東


    土豪可以有很多的房子和各種開門的鑰匙。上海這個城市有很多個土豪房東,所以一個節點可以創建多個錢包。


    cleos wallet create ${參數}


    2)鑰匙用來打開房東門的。


    鑰匙分為私鑰和公鑰。公鑰是別人可以看到的,例如下面圖片是土豪家的橙色鑰匙包,是專門用來存放仁恒濱江的大平層房子鑰匙的,私鑰是鑰匙包里面實際開門的鑰匙。


    你拿到鑰匙包沒有用的,你得拿到鑰匙盒里面的私鑰才可以打開土豪家房子大門。


    土豪房東可以把很多的房子配成一樣的鎖,用一對公鑰/私鑰來開門,也可以不同的房子不同的鑰匙。


    cleos wallet import ${參數} 私鑰


    3) 賬戶是房子


    房東可以給多個房子配一對鑰匙(鑰匙包和鑰匙),也可以不同房子配不同鑰匙。


    另外,一個房子可以用2把鑰匙打開,一把是owner鑰匙對,一把是active鑰匙對。


    房子的owner鑰匙地址表示為房東的公鑰,表示主人產權歸屬,用它對應的私鑰可以打開房子,這個鑰匙包是房東連小姨子也不會給的;


    房子的active鑰匙對表示為房客的公鑰,表示該用戶的私鑰可以打開房子,房子出租后,房東就把這個鑰匙包給租客了;


    cleos create account 節點 賬戶名 Owner的公鑰 Active的公鑰。


    4

    搭建實操


    搭建實操的流程圖如下。



    4. 1 啟動私鏈


    1) 啟動keosd


    keosd --http-server-address=127.0.0.1:8900


    命令行界面錢包程序為 keosd,位于 eos/build/programs/keosd 路徑下,用于存儲交易簽名的私鑰。keosd在本地節點上運行,并將私鑰保存在本地節點上。


    默認情況下,keosd會在目錄 ~/eosio-wallet 中生成一個基礎的配置文件 config.ini。該配置文件中的wallet-dir指定了錢包文件存放目錄。


    另外,在運行命令行錢包時,可通過配置命令行參數 --config-dir指定config.ini配置文件的目錄。該配置文件中保存用于接入http鏈接的服務器配置http-server-address參數,以及其他用于資源共享的配置參數。


    默認情況下,keosd將錢包文件保存在 ~/eosio-wallet 目錄下,錢包文件名為:.wallet。例如,默認錢包文件名為 default.wallet。當建立了其他錢包后,在該目錄下會分別建立每個錢包文件,例如當建立了一個名稱為"duncanwang"的錢包,會生成一個錢包文件duncanwang.wallet。錢包文件可以通過命令行參數--data-dir存放在指定的目錄中。


    【預警】從V1.0.5開始,發現要先運行keosd后在運行nodeos才可以創建錢包。


    成功輸出結果如下:


    (復制代碼點擊“閱讀原文”)


    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時,需要添加參數eosio::wallet_plugin,否則的話,每次節點重啟,之前創建的錢包,賬號都不會加載進來。


    --replay-blockchain表示清除數據庫內鏈的狀態,重新運行,它會導致重新啟動時先讀取之前的區塊進行加載。


    【注意】 節點關閉后,錢包將會被加鎖。重新啟動nodeos后,需要使用unlock命令解鎖錢包。


    例如:


    duncanwang@duncanwang:~/eos$ cleos wallet unlock -n duncanwang

    password: Unlocked: duncanwang


    輸入nodes -help可以看到所有參數的幫助說明。






    4.2 創建錢包


    cleos wallet create -n duncanwang


    創建duncanwang錢包成功,輸出結果如下:


    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"


    【結果確認】


    duncanwang@duncanwang:~$ cleos wallet list

    Wallets:

    [

      "duncanwang *"

    ]


    duanwang錢包已存在了,*表示該賬號已解鎖。


    【問題1】 創建錢包重名,但是cleos wallet list看不到


    duncanwang@duncanwang:~$ cleos wallet create -n duncanwang

    Error 3120001: Wallet already exists
    Try to use different wallet name.


    【解決方法】


    這個主要是運行的命令中沒有導入錢包--plugin eosio::wallet_plugin這個參數,導致已創建錢包未加載,但是目錄下存在已創建的錢包文件。


    ./nodeos -e -p eosio --plugin eosio::chain_api_plugin --plugin eosio::history_api_plugin --replay-blockchain


    ~/eosio-wallet 目錄下刪除文件duncanwang.wallet即可重新創建。


    【問題2】重啟節點后,cleos wallet list發現已創建的錢包等不存在。


    duncanwang@duncanwang:~$ cleos wallet list

    Wallets:

    [
    ]


    【解決方法1】


    運行./nodeos命令時要帶參數--plugin eosio::wallet_plugin

    【解決方法2】


    后來發現這種方法有時也是不可行,cleos wallet list沒有看到錢包。
    采用命令'cleos wallet open -n duncanwang'打開錢包后,就正常加載進來了。


    【問題3】創建錢包時提示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 錢包導入系統賬號私鑰


    1) 找到eosio的系統賬號的默認公鑰/私鑰對


    找到配置文件,例如以下地址,~/.local/share/eosio/nodeosconfig 的 config.ini,默認的私鑰/公鑰是一樣的。


    #signature-provider = EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV=KEY:5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3


    2),錢包導入系統賬號私鑰


    cleos wallet import 5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3 -n duncanwang


    duncanwang@duncanwang:~/eos$ cleos wallet import 5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3 -n duncanwang

    imported private key for: EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV


    3),查看系統賬號信息

    以下命令可以查看eosio系統賬號的密鑰和資源占用情況。


    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合約


    現在我們有一個錢包,并且加載了eosio帳戶的密鑰,我們可以設置一個默認的系統合約。為了開發的目的,可以使用默認的eosio.bios合約。通過此合約,您可以直接控制其他帳戶的資源分配,并調用其他特權API。在公開區塊鏈中,這個系統合約將管理其他賬戶的 token 抵押和解抵押操作,以為合約執行預留CPU、網絡活動帶寬,以及預留內存。


    eosio.bios合約可以在你的EOSIO源代碼文件夾中找到:contracts/eosio.bios。下面的命令序列,都假定是在EOSIO源代碼的根目錄執行。但是您可以通過指定完整路徑,從任意位置執行這個命令:${EOSIO_SOURCE}/build/contracts/eosio.bios。


    這個命令序列的結果是,cleos發起一個包含兩個操作(actions)的交易(transaction):eosio::setcode和eosio::setabi。


    代碼定義了合約如何運行,abi描述了參數如何在二進制和json表示之間進行轉換。雖然abi在技術上是可選的,但為了便于使用,所有的EOSIO工具都依賴于它。


    輸入命令:


    cleos set contract eosio build/contracts/eosio.bios -p eosio


    輸出結果,表示本地執行成功。


    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 創建并導入新的密鑰對


    1)創建新的密鑰對


    cleos create key


    創建密鑰對的輸出結果。


    duncanwang@duncanwang:~/eos$ cleos create key

    Private key: 5JZQmnt6ZtEzUADswgKgBwMp9qAwTSNM9JFHPRFu1FjrLjj49g7

    Public key: EOS6EHAzvrpQ4wo1BPcAk86X6aGDARZgqTcAq1mJRF1SxEYgNGWN1


    2) 導入新的私鑰


    cleos wallet import 5JZQmnt6ZtEzUADswgKgBwMp9qAwTSNM9JFHPRFu1FjrLjj49g7 -n duncanwang


    輸出結果如下:


    duncanwang@duncanwang:~/eos$ cleos wallet import 5JZQmnt6ZtEzUADswgKgBwMp9qAwTSNM9JFHPRFu1FjrLjj49g7 -n duncanwang

    imported private key for: EOS6EHAzvrpQ4wo1BPcAk86X6aGDARZgqTcAq1mJRF1SxEYgNGWN1


    3)查看確認密鑰對是否導入成功


    cleos wallet keys


    用于查看錢包的密鑰對情況。

    【輸出結果】


    duncanwang@duncanwang:~/eos$ cleos wallet keys

     "EOS6EHAzvrpQ4wo1BPcAk86X6aGDARZgqTcAq1mJRF1SxEYgNGWN1", 

     "EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV"

    ]


    4.6  創建新賬號


    創建賬號的命令:


    cleos create account eosio {new_account} ownerkey {active_key}


    其中eosio是超級用戶,需要靠超級用戶來創建其它的新用戶,eosio后面就是你的新用戶的用戶名.


    除了新的賬號之外,命令后面還有兩個key:

    • Owner key

    • Active key


    Owner key是什么意思呢?Owner key表示分配給新賬號的一個Owner認證的公鑰。Active key是分配給新賬號一個Active認證的一個公鑰。


    至于這兩個認證,我后面會給詳細介紹,這是兩個主要的權限。我創建一個賬號,如果這個賬號要有Owner的權限和Active的權限,就必須要用這兩個key才能實現。


    我們來總結一下剛才的操作,我們剛才操作是調用cleos create account創建了一個賬號,這個賬號的命名規則遵守下邊兩個規則:

    • 小于13個字符;

    • 僅包含這些字符:.12345abcdefghijklmnopqrstuvwxyz

    另外,剛才給大家說到Owner key和Active key的概念。Owner key的概念就是你賬號的所有控制權限,你只要有了Owner key,你可以對這個賬號的任何東西做任何的事兒,這是它的所有控制權。


    而Active key只掌握了你的賬號資金的訪問權限,也就是你如果有了Active這個權限的話,你可以對這個賬號的資金進行轉移,但是你不能轉移這個賬號的所有權,或者不能做超過這個Active權限其它的權利。


    如果簡單的理解,Owner key就是對這個賬號的最高權限,Active只是用來轉移資金而已。這也是與以太坊智能合約開發的一個區別,以太坊賬號的權限其實沒有這么細分,它就只有一個賬號,我只要有這個賬號的公鑰和私鑰,我就可以做任何事情。


    具體操作如下。

    cleos create account eosio wangdenghui1 EOS6EHAzvrpQ4wo1BPcAk86X6aGDARZgqTcAq1mJRF1SxEYgNGWN1 EOS6EHAzvrpQ4wo1BPcAk86X6aGDARZgqTcAq1mJRF1SxEYgNGWN1


    【錯誤現象】


    duncanwang@duncanwang:~/eos$ cleos create account eosio wangdenghui1 EOS6EHAzvrpQ4wo1BPcAk86X6aGDARZgqTcAq1mJRF1SxEYgNGWN1 EOS6EHAzvrpQ4wo1BPcAk86X6aGDARZgqTcAq1mJRF1SxEYgNGWN1

    Error 3050000: action exception


    【解決方案-查詢賬號】

    查詢發現該賬號已存在,之前輝哥創建過,忘記了。


    duncanwang@duncanwang:~/eos$ cleos get accounts EOS6EHAzvrpQ4wo1BPcAk86X6aGDARZgqTcAq1mJRF1SxEYgNGWN1

    {

      "account_names": [

        "wangdenghui1" 

     ]

    }


    cleos create account eosio boss EOS6EHAzvrpQ4wo1BPcAk86X6aGDARZgqTcAq1mJRF1SxEYgNGWN1 EOS6EHAzvrpQ4wo1BPcAk86X6aGDARZgqTcAq1mJRF1SxEYgNGWN1


    創建成功輸出結果:


    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


    4.6 總結


    至此,基于私鏈環境搭建和準備工作已經完畢,接下來就可以在上面運行"Hello World"智能合約了。


    5

    參考文檔


    1)eoshackathon/eos_dapp_development_cn 古千峰Github(https://github.com/eoshackathon/eos_dapp_development_cn)


    2) github官網(https://github.com/EOSIO/eos/wiki)


    3)本地環境(https://github.com/EOSIO/eos/wiki/Local-Environment)

    版權申明:本內容來自于互聯網,屬第三方匯集推薦平臺。本文的版權歸原作者所有,文章言論不代表鏈門戶的觀點,鏈門戶不承擔任何法律責任。如有侵權請聯系QQ:3341927519進行反饋。
    相關新聞
    發表評論

    請先 注冊/登錄 后參與評論

      回頂部
    • <option id="cacee"><noscript id="cacee"></noscript></option>
    • <table id="cacee"><noscript id="cacee"></noscript></table>
    • <td id="cacee"></td>
    • <option id="cacee"></option>
    • <table id="cacee"></table>
    • <option id="cacee"><option id="cacee"></option></option>
    • <table id="cacee"><source id="cacee"></source></table><td id="cacee"><rt id="cacee"></rt></td>
      <option id="cacee"><option id="cacee"></option></option>
      妖精视频