Substrate實戰——真正的從“零“搭建一條區塊鏈
- 波卡介紹
- Substrate 介紹
- 從“零”開始
- 實驗環境
- 系統環境配置
- 安裝Rust
- 安裝前端依賴
- 安裝 node.js
- 安裝 yarn
- 搭建區塊鏈
- 編譯 substrate
- 部署前端代碼
- 參考鏈接
- 總結
- 關于作者
- 我們的公眾號平臺 — (湖師區塊人)
說明
本文適用于虛擬機部署 & 遠程服務器部署
波卡介紹

官方鏈接:https://polkadot.network/
波卡(Polkadot)的核心愿景是跨鏈,它是由多條區塊鏈異構組成的集合,通過波卡網路,不同區塊鏈之間可以進行通信和資料的傳遞,為了實作這一愿景,波卡網路設計了中繼鏈、平行鏈和轉接橋的結構,
中繼鏈是波卡網路的核心樞紐,確保平行鏈的安全并且實作平行鏈之間的通信,維護整個網路的安全,
平行鏈負責處理具體的事物,不同的平行鏈專注于不同的業務,服務于不同的需求,平行鏈的形態非常有利于波卡網路打造自己的生態,
轉接橋則負責連接波卡網路和外部區塊鏈網路,比如位元幣和以太坊網路,
理論上,未來任意兩條平行鏈之間都可以直接或借路中繼鏈完成跨鏈互動,
Substrate 介紹

官方鏈接:https://substrate.dev/en/
Substrate 是一個用于構建區塊鏈的開源,模塊化和可擴展框架,
Substrate 的設計從一開始就是靈活的,而且允許開發者設計和構建滿足其需求的區塊鏈網路,它提供了構建自定義區塊鏈節點所需的所有核心組件,
從“零”開始
實驗環境
centos7虛擬機
系統環境配置
安裝依賴
yum install -y cmake pkg-config libssl-dev git build-essential clang libclang-dev curl
安裝Rust
參考鏈接 https://forge.rust-lang.org/infra/other-installation-methods.html
安裝和配置rustup
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source ~/.cargo/env
rustup換源
在~/.bashrc中寫入
export RUSTUP_DIST_SERVER=https://mirrors.ustc.edu.cn/rust-static
export RUSTUP_UPDATE_ROOT=https://mirrors.ustc.edu.cn/rust-static/rustup
cargo換源
在$HOME/.cargo/下創建config檔案
并寫入以下內容
[source.crates-io]
registry = "https://github.com/rust-lang/crates.io-index"
replace-with = 'ustc'
[source.ustc]
registry = "https://mirrors.ustc.edu.cn/crates.io-index"
[http]
check-revoke = false
tips:這里不換源,
rustup update的時候可能會失敗,
將Rust工具鏈配置為默認為最新的穩定版本:
rustup default stable
安裝前端依賴
substrate自帶的前端模板是基于ReactJS前端模板來構建的,所以這里需要安裝nodejs和yarn來實作部署,
安裝 node.js
node.js 官網:https://nodejs.org/en/download/

在官方上選擇對應的包進行下載,
cd /usr/local
wget https://nodejs.org/dist/v14.15.1/node-v14.15.1-linux-x64.tar.xz
tar -xvf node-v14.15.1-linux-x64.tar.xz
# 建立軟鏈接
ln -s /usr/local/node-v14.15.1-linux-x64/bin/node /usr/local/bin/node
ln -s /usr/local/node-v14.15.1-linux-x64/bin/npm /usr/local/bin/npm
ln -s /usr/local/node-v14.15.1-linux-x64/bin/npx /usr/local/bin/npx
查看是否安裝成功
node -v
npm -v

安裝 yarn
下載yarn
mkdir -p /usr/local/yarn
wget https://github.com/yarnpkg/yarn/releases/download/v1.12.0/yarn-v1.12.0.tar.gz
tar -zxvf yarn-v1.12.0.tar.gz -C /usr/local/yarn
設定一下環境變數(也可以添加軟鏈接,自己選擇)
vi /etc/profile
# 在檔案結尾加入以下內容
export PATH=$PATH:/usr/local/yarn/yarn-1.12.0/bin
source /etc/profile
查看是否安裝成功
yarn -v

*yarn 換源
yarn config set registry https://registry.npm.taobao.org/

搭建區塊鏈
編譯 substrate
- 下載專案代碼
git clone https://github.com/substrate-developer-hub/substrate-node-template
cd substrate-node-template
- 初始化WebAssembly構建環境
make init
# 安裝Rust
# 若失敗了,可以直接參考上文中的Rust安裝,
- 編譯節點模板
make build
# 如果是國內用戶,這里需要先進行cargo的換源,
啟動節點
# Run a temporary node in development mode
./target/release/node-template --dev --tmp

如果之后的finalized:值增加,表示你的區塊鏈將產生新的區塊,并達成共識!

nginx做埠轉發(很重要)
觀察第一張啟動成功的截圖,可以發現服務啟動在127.0.0.1上,這里我們只需要對127.0.0.1:9944做成埠轉發就行,埠我設定為9900,以實作0.0.0.0:9900的效果,
vi /etc/nginx/substrate.conf
### 寫入以下內容
server {
listen 9900; # 將埠轉發為9900
location / {
proxy_pass http://localhost:9944; # 指向本地服務埠
proxy_http_version 1.1;
proxy_read_timeout 120s;
proxy_redirect off;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host:$server_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
配置nginx.conf
vi /etc/nginx/nginx.conf
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/substrate.conf; # 引入substrate.conf
}
重新匯入nginx配置
nginx -s reload
tips:這里做成埠轉發是十分有必要的,因為前端專案在宿主機訪問的時候,會request
ws://127.0.0.1:9944,這里的127.0.0.1:9944 就是我們nginx轉發的埠,而且還是虛擬機的內網ip,所以不替換這里的ip和埠會導致前端專案運行失敗,
部署前端代碼
下載原始碼以及安裝依賴
# Clone the code from github
git clone -b v2.0.0 --depth 1 https://github.com/substrate-developer-hub/substrate-front-end-template
# Install the dependencies
cd substrate-front-end-template
yarn install
啟動服務
yarn start
在宿主機上的瀏覽器進行訪問 – 卻失敗了?

其實這里失敗的原因,我在啟動節點的末尾也提到了,所以對于虛擬機和遠程服務器安裝substrate,nginx那塊配置還是十分重要的,當然,如果是通過mac搭建或者通過虛擬機內部的瀏覽器進行訪問,這里其實是成功了的,那為什么偏偏在宿主機上訪問就有毛病呢?
宿主機訪問失敗的原因
我們通過瀏覽器自帶的抓包的工具跟蹤一下,(F12)

在宿主機上訪問,卻在呼叫ws://127.0.0.1:9944,所以這就是為什么如果用虛擬機內部的瀏覽器訪問就能成功卻用宿主機的瀏覽器無法訪問的原因,很簡單,我們只需要把這里替換成虛擬機的ip(如果是遠程服務器,替換成公網ip即可)以及nginx轉發的埠就行(上文我們提到過,nginx把127.0.0.1:9944轉發到了0.0.0.0:9900)
開始解決問題
cd substrate-front-end-template
- 查看當前的前端代碼配置資訊
cat src/config/development.json

- 查看虛擬機ip(如果是遠程服務器,使用公網ip即可)
ifconfig | grep inet

- 根據ip資訊,修改development.json中的"PROVIDER_SOCKET"關鍵字的值,
vi src/config/development.json
{
"CUSTOM_TYPES": {
"Address": "AccountId",
"LookupSource": "AccountId"
},
"PROVIDER_SOCKET": "ws://192.168.80.144:9900"
}
再次在宿主機上訪問
成功!

參考鏈接
https://substrate.dev/docs/en/tutorials/create-your-first-substrate-chain/setup
https://substrate.dev/docs/en/knowledgebase/getting-started/
https://learnblockchain.cn/article/1069
https://blog.csdn.net/shangsongwww/article/details/90269564
https://blog.csdn.net/weixin_43941564/article/details/102733870
https://mp.weixin.qq.com/s?__biz=Mzg2NzE5NTg3Nw==&mid=2247485864&idx=1&sn=7555a9386e7afc2991a6c1bfee242628&chksm=cebe0722f9c98e345d5271406eabca414c5627357197be25d2aa6576f1b7c8ad993c223414c1&mpshare=1&scene=1&srcid=1210VGiNyQNXsmae0uUdxIsR&sharer_sharetime=1607598594362&sharer_shareid=fde08c1723940f3fd35f1d64a161b285&key=db37f969c9442cd2a9b5d586c913dc5cd45fdb7d53b5b19d7ef7b5ad567111d3b94c25faa6b8ba9a05f71e65803f68adfdd064792b50099e87395cb62490f59029028b947a578504b0beb95fcc1697f31e3f484f94ea97b0a056bbebc9dea1bf1af152a0b00e5699446fbbfaa49ec5ff23c9aedf18e5f5087eeb91868dc484ff&ascene=1&uin=MTA3NjMzNjE2Nw%3D%3D&devicetype=Windows+10+x64&version=6300002f&lang=zh_CN&exportkey=AeyIt%2BieAfIf8UkY2VC%2BNzE%3D&pass_ticket=cYDECbJrOJZhvk%2BBmnUDxzaFUrW3TZ1xJqlUU%2BruXoIjc4KCEBRdIw6%2F8QMaLJvo&wx_header=0
總結
- 如果是使用WSL的用戶,其實可以不用nginx轉發,同事告訴我說”WSL和宿主機是共用網路“
- 不過大多數環境下還是虛擬機或者遠程服務器進行搭建,所以整理這篇文章還是十分有必要的,
- 為了從”零“開始,我選擇了一臺嶄新的centos7虛擬機,如果遇到宿主機可以ping通虛擬機ip卻無法訪問虛擬機的web服務時,請檢查防火墻是否關閉,(
systemctl stop firewalld.service) - 更多總結,,,
關于作者
作者的聯系方式:
微信:thf056
qq:1290017556
郵箱:1290017556@qq.com
你也可以通過 github | csdn | @新浪微博 關注我的動態
我們的公眾號平臺 — (湖師區塊人)
歡迎各位大大關注我們湖州師范區塊鏈協會的公眾號(湖師區塊人),我們會在這里不定期推送區塊鏈相關的“精神食糧”,

歡迎評論關注+點贊啊!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/233548.html
標籤:區塊鏈
上一篇:期貨發展的幾個重要時間點和事件
下一篇:flutter環境配置mac
