學習Substrate 開發的第一步就是環境搭建,本文的目標是把 Substrate 編譯出來,用 substrate 啓動一個區塊鏈開發網絡。

背景

先簡單介紹一下Polkadot 與 Substrate

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(其他平臺 可參考 ), Mac 下安裝軟件包很多使用 brew ,大家的電腦上應該都已經安裝了,如果沒可以可以參考這個 鏈接 安裝。

brew 的下載源在國內下載是龜速,我們可以配置使用清華大學鏡像站的源,配置方式是修改環境變量HOMEBREW_BOTTLE_DOMAIN,例如下方式寫入到 .bash_profile

echo 'export HOMEBREW_BOTTLE_DOMAIN=https://mirrors.tuna.tsinghua.edu.cn/homebrew-bottles' >> ~/.bash_profile
source ~/.bash_profile

現在用brew 安裝openssl cmake llvm:

brew install openssl cmake llvm

Rust 安裝

Rustup 是 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 stable

Rust 提供了三個版本渠道: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

編譯 substrate

cd substrate
cargo 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 Node
2020-05-31 19:34:44 :v:  version 2.0.0-rc2-12b6c5dbe-x86_64-macos
2020-05-31 19:34:44 :heart:  by Parity Technologies <[email protected]>, 2017-2020
2020-05-31 19:34:44 :clipboard: Chain specification: Development
2020-05-31 19:34:44     Node name: homely-volcano-9283
2020-05-31 19:34:44 :bust_in_silhouette: Role: AUTHORITY
2020-05-31 19:34:44 :floppy_disk: Database: RocksDb at /Users/emmett/Library/Application Support/substrate/chains/dev/db
2020-05-31 19:34:44 ⛓  Native runtime: node-251 (substrate-node-1.tx1.au10)
2020-05-31 19:34:44 :package: Highest known block at #173
2020-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 :part_alternation_mark: Prometheus server started at 127.0.0.1:9615
2020-05-31 19:34:44 :baby: Starting BABE Authorship worker
2020-05-31 19:34:45 :raised_hands: 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開發的第一步。

背景

先簡單介紹一下Polkadot 與 Substrate

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(其他平臺 可參考 ), Mac 下安裝軟件包很多使用 brew ,大家的電腦上應該都已經安裝了,如果沒可以可以參考這個 鏈接 安裝。

brew 的下載源在國內下載是龜速,我們可以配置使用清華大學鏡像站的源,配置方式是修改環境變量HOMEBREW_BOTTLE_DOMAIN,例如下方式寫入到 .bash_profile

echo 'export HOMEBREW_BOTTLE_DOMAIN=https://mirrors.tuna.tsinghua.edu.cn/homebrew-bottles' >> ~/.bash_profile
source ~/.bash_profile

現在用brew 安裝openssl cmake llvm:

brew install openssl cmake llvm

Rust 安裝

Rustup 是 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 stable

Rust 提供了三個版本渠道: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

編譯 substrate

cd substrate
cargo 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 Node
2020-05-31 19:34:44 :v:  version 2.0.0-rc2-12b6c5dbe-x86_64-macos
2020-05-31 19:34:44 :heart:  by Parity Technologies <[email protected]>, 2017-2020
2020-05-31 19:34:44 :clipboard: Chain specification: Development
2020-05-31 19:34:44     Node name: homely-volcano-9283
2020-05-31 19:34:44 :bust_in_silhouette: Role: AUTHORITY
2020-05-31 19:34:44 :floppy_disk: Database: RocksDb at /Users/emmett/Library/Application Support/substrate/chains/dev/db
2020-05-31 19:34:44 ⛓  Native runtime: node-251 (substrate-node-1.tx1.au10)
2020-05-31 19:34:44 :package: Highest known block at #173
2020-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 :part_alternation_mark: Prometheus server started at 127.0.0.1:9615
2020-05-31 19:34:44 :baby: Starting BABE Authorship worker
2020-05-31 19:34:45 :raised_hands: 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開發的第一步。

本文參與登鏈社區寫作激勵計劃 ,好文好收益,歡迎正在閱讀的你也加入。

  • 發表於 10分鐘前
  • 閱讀 ( 26 )
  • 學分 ( 0 )
  • 分類:Polkadot
相關文章