Substrate 開發系列 - 環境搭建

買賣虛擬貨幣
背景先簡單介紹一下Polkadot[1] 與Substrate[2] 。Polkadot 目標是成為一個連線各區塊鏈的區塊鏈(網路),Substrate 是 Polkadot 生態中重要的一環, 他是一套工具與框架的集合,讓我們以模組化的方式來構建自己的區塊鏈。Polkadot本身也是基於 Subsstrate 建立的。學習Substrate 開發的第一步就是環境搭建,本文的目標是把Substrate編譯出來,用 substrate 啟動一個區塊鏈開發網路。安裝依賴項Substrate 本身是由 Rust 開發, 也依賴很多其他的模組,Substrate編譯需要先安裝依賴。
方式 1:用官方指令碼自動安裝Substrate 官方提供了一個安裝指令碼,只需要使用下面一個命令就可以安裝好編譯Substrate所需要的全部依賴。curl https://getsubstrate.io -sSf | bash -s -- --fast有興趣的同學可以開啟:https://getsubstrate.io 檢視指令碼詳情。指令碼安裝依賴包括如:openssl(密碼學庫)、cmake(編譯工具)、 llvm(編譯器框架)、Rust。使用指令碼很簡單,不過國內網路網路環境,下載依賴包可能非常慢,甚至無法下載,那麼就只能使用下面的方式 2 了。
方式 2:手動安裝Brew 安裝庫我的環境是 Mac(其他平臺可參考[3]), Mac 下安裝軟體包很多使用 brew[4] ,大家的電腦上應該都已經安裝了,如果沒可以可以參考這個連結[5]安裝。brew 的下載源在國內下載是龜速,我們可以配置使用清華大學映象站的源,配置方式是修改環境變數HOMEBREW_BOTTLE_DOMAIN,例如下方式寫入到 .bash_profileecho 'export HOMEBREW_BOTTLE_DOMAIN=https://mirrors.tuna.tsinghua.edu.cn/homebrew-bottles' >> ~/.bash_profilesource ~/.bash_profile
現在用brew 安裝openssl cmake llvm:brew install openssl cmake llvmRust 安裝Rustup[6] 是 Rust 官方的跨平臺 Rust 安裝工具, cargo 是Rust 的包管理工具。我們需要用 rustup 安裝 Rust, cargo 本身在安裝 Rust 的時候就會自帶安裝,之後用 cargo 去安裝 Rust 軟體包(庫)。rustup 和 cargo 就像 nvm 和 npm 的區別。
使用 rustup 安裝 rust 時,同樣可以啟用清華源,執行:$ echo 'export RUSTUP_DIST_SERVER=https://mirrors.tuna.tsinghua.edu.cn/rustup' >> ~/.bash_profile使用 rustup 安裝 Rust 語言環境:curl https://sh.rustup.rs -sSf | sh rustup default stableRust 提供了三個版本渠道:nightly,beta,stable, 預設啟用stable(穩定版)。
Wasm 編譯Substrate 使用 Wasm 作為智慧合約的執行環境,wasm 是一個虛擬機器環境。最初是想為瀏覽器提供一個高效能的執行環境,不過現在也可以使用非瀏覽器環境。wasm目前僅在 nightly 版本上支援,因此需要配置一下:wasm 目前僅在 nightly 上支援,Substrate uses WebAssembly (Wasm), and you will need to configure your Rust compiler to use nightly to support this build target.rustup update nightly
rustup target add wasm32-unknown-unknown --toolchain nightly配置 cargo 源在後面編譯substrate, 需要安裝大量的 Rust 依賴包,同樣為了避免龜速訪問的問題,配置一下cargo 源為清華大學映象源:編輯 ~/.cargo/config 檔案,新增以下內容:[source.crates-io]replace-with = 'tuna'
[source.tuna]registry = "https://mirrors.tuna.tsinghua.edu.cn/git/crates.io-index.git"編譯 substrate下載substrate程式碼先 git clone substrate 的程式碼:git clone https://github.com/paritytech/substrate.git
github.com 在國內也是龜速,因此我在 gitee.com fork 了一份,大家可以用以下命令 clone 程式碼:git clone https://gitee.com/lbc-team/substrate.git編譯 substratecd substratecargo build --release大約半小時,可以去喝個茶, 出現以下提示就成功了;
Finished release [optimized] target(s) in 29m 46s編譯完之後,在 /target/release/會生成 substrate 可執行檔案。執行 substrate 節點網路現在可以使用 substrate 來啟動網路了,substrate用很多個命令(引數),可使用./target/release/substrate --help檢視用法。這裡使用 --dev 以開發者模式執行節點網路:./target/release/substrate --dev
substrate 啟動後,會輸出如:當前的客戶端版本,節點名,資料庫目錄,節點身份 ID等等:2020-05-31 19:34:44 Running in --dev mode, RPC CORS has been disabled.2020-05-31 19:34:44 Substrate Node2020-05-31 19:34:44  version 2.0.0-rc2-12b6c5dbe-x86_64-macos2020-05-31 19:34:44  by Parity Technologies <admin@chaindaily>, 2017-20202020-05-31 19:34:44  Chain specification: Development
2020-05-31 19:34:44  Node name: homely-volcano-92832020-05-31 19:34:44  Role: AUTHORITY2020-05-31 19:34:44  Database: RocksDb at /Users/emmett/Library/Application Support/substrate/chains/dev/db2020-05-31 19:34:44   Native runtime: node-251 (substrate-node-1.tx1.au10)2020-05-31 19:34:44  Highest known block at #1732020-05-31 19:34:44 Using default protocol ID "sup" because none is configured in the chain specs
2020-05-31 19:34:44  Local node identity is: 12D3KooWEE4Gd4isn28sPsXQ3YBSPUqfpxmfVvKHzBxjWhEQPxV9 (legacy representation: QmVDyLimoKQjaGttsnvSdjLeJUkdxReUL6eDrF4LB7BL1h)2020-05-31 19:34:44 〽️ Prometheus server started at 127.0.0.1:96152020-05-31 19:34:44  Starting BABE Authorship worker

2020-05-31 19:34:45 Starting consensus session on top of parent 0x8c3fffd67f59db85fd468dc5a4386ccaf58dc2841ab0370f8d94b6f5413a511f


我們可以透過 https://polkadot.js.org/apps/ 檢視當前節點的執行狀態(也可以進行簡單的互動), 開啟 https://polkadot.js.org/apps/ 可以看到如下介面:

預設時瀏覽器是連線當前的Polkadot CC1 候選主網,不過我們可以讓他連線到本地節點,點設定->選擇節點及配置地址字首, 方法如下:

節點依然下拉框拉到最下面,選擇 Local Node(Own, 127.0.0.1:9944) , 地址字首選:Substrate(generic) 如下圖:

配置好,別忘了點儲存哦,連線好,就可以看到本地網路的塊高了,如下圖:

我們還可以測試一下轉賬功能:

執行多節點

在本地啟動一個多節點連線的網路也是可以的,可以先以alice的名義啟動一個驗證人節點:

./target/release/substrate --alice --chain local
--chain local 表示是一個本地的網路模式,之前我們是開發者模式,這個時候不會出塊, 需要等待另一個節點加入才能出塊。

再(在另一個終端)啟動另一個節點, 注意這裡需要用 -d 來定義一個資料目錄:

./target/release/substrate --bob  --chain local  -d ./bob
現在可以看到瀏覽器可以開始出塊了。

好了, 已經踏入了Substrate開發的第一步。

References
[1] Polkadot: https://learnblockchain.cn/categories/Polkadot
[2] Substrate: https://learnblockchain.cn/tags/Substrate
[3] 可參考: https://www.substrate.io/kb/getting-started
[4] brew: https://brew.sh/
[5] 連結: https://zhuanlan.zhihu.com/p/59805070
[6] Rustup: https://rustup.rs/

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;