Substrate 開發系列 - 環境搭建
學習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