如何構(gòu)建可以支持Runtime模塊的自定義Substrate鏈
掃描二維碼
隨時(shí)隨地手機(jī)看文章
本文旨在介紹如何開(kāi)始構(gòu)建可支持您自己的Runtime模塊的自定義Substrate鏈:
· 我們將通過(guò)substrate安裝和設(shè)置來(lái)學(xué)習(xí)
· 探索substrate配置以及如何使用Polkadot JS瀏覽鏈狀態(tài)
· 專注于介紹runTIme模塊的結(jié)構(gòu),這是一種為鏈添加功能的方法。
在substrate進(jìn)行開(kāi)發(fā)
substrate和并發(fā)runTIme模塊是用rust開(kāi)發(fā)的,rust是一種靜態(tài)類型語(yǔ)言,具有內(nèi)存安全特性,提供速度和可靠性。
這是一個(gè)在區(qū)塊鏈開(kāi)發(fā)中經(jīng)常被忽視的主題,但對(duì)于采用是至關(guān)重要的:如何解決Rust問(wèn)題。我們不會(huì)在這篇文章中分析Rust代碼,但對(duì)于對(duì)Substrate感興趣的開(kāi)發(fā)人員來(lái)說(shuō),這將是一個(gè)前所未有的關(guān)注點(diǎn)。
如何為新手解決Rust問(wèn)題
對(duì)于編程語(yǔ)言來(lái)說(shuō),rust的學(xué)習(xí)曲線是陡峭的。這可以歸因于它采用的一些語(yǔ)法約定,其中包括對(duì)泛型、特征、生命周期和宏等特性的高度依賴,以及范圍和可變性等其他考慮因素。
其他Substrate學(xué)習(xí)資源,例如Substrate KitTIes聲稱Rust很容易掌握,但除非你有使用低級(jí)語(yǔ)言(如C ++)的具有一定經(jīng)驗(yàn),否則情況并非如此。更細(xì)粒度的API,用于處理系統(tǒng)級(jí)管理。
問(wèn):Rust書(shū)籍能否讓您快速掌握Substrate采用的語(yǔ)言功能和概念?
答:是的,但我們建議您在閱讀本書(shū)時(shí)練習(xí)自己的演示,以鞏固您的理解。這將使Substrate中的編碼更加舒適。
考慮到這一點(diǎn),讓我們?cè)谶M(jìn)入runTIme模塊之前探索一些實(shí)用的Substrate設(shè)置和用法。
安裝substrate
安裝Substrate只需要在getsubstrate.io上調(diào)用Parity托管的一個(gè)bash腳本。 Substrate有兩種方法安裝:
1、快速安裝
更快的Substrate安裝,安裝預(yù)構(gòu)建的Substrate開(kāi)發(fā)鏈,以及Substrate Scripts,一個(gè)用于配置自定義Substrate鏈和runtime模塊的命令行實(shí)用程序。
通過(guò)與Substrate安裝腳本一起使用的--fast標(biāo)志運(yùn)行快速安裝基本上會(huì)跳過(guò)一些非強(qiáng)制運(yùn)行Substrate的實(shí)用程序的安裝:
curl https://getsubstrate.io -sSf | bash -s -- --fast
這將獲取Substrate所需的所有依賴項(xiàng),包括Rust,OpenSSL,LLVM等,如果它們尚未安裝,則安裝它們。
2、整體安裝
完整的Substrate安裝將安裝以上所有內(nèi)容,以及其他兩個(gè)實(shí)用程序:
subkey:生成或恢復(fù)基礎(chǔ)密鑰的實(shí)用程序(用于通過(guò)命令行管理帳戶)
substrate node:可以連接到substrate 測(cè)試網(wǎng)的預(yù)配置substrate 節(jié)點(diǎn)。
運(yùn)行以下命令以安裝這些工具以及Substrate Scripts和開(kāi)發(fā)節(jié)點(diǎn):
// full Substrate installation
curl https://getsubstrate.io -sSf | bash
安裝腳本完成后,更新您的cargo環(huán)境以調(diào)用新安裝的程序:
// update env (alternatively, reboot your system)
source ~/.cargo/env
現(xiàn)在可以通過(guò)Substrate命令訪問(wèn)已編譯的Substrate節(jié)點(diǎn)。要驗(yàn)證是否正確安裝了Substrate和Subkey,請(qǐng)分別檢查兩個(gè)程序,Substrate和subkey的版本控制:
substrate --version
subkey --version
注意:Polkadot JS應(yīng)用程序(我們進(jìn)一步介紹)已在其帳戶管理UI中實(shí)現(xiàn)了Subkey - 可以選擇在瀏覽器中管理帳戶,某些用戶不需要Subkey。這可能有助于它為可選實(shí)用程序的原因。
所有都是Rust編譯的二進(jìn)制文件,默認(rèn)情況下,Substrate和utility工具現(xiàn)在將駐留在?/ .cargo / bin目錄中。檢查自己已安裝的內(nèi)容:
// list installed cargo binaries
cd ~/.cargo/bin
ls
您會(huì)注意到,除了Substrate和Subkey外,我們還可以使用Substrate-node-new和Substrate-module-new的二進(jìn)制文件。我們將進(jìn)一步使用這些來(lái)生成新的自定義節(jié)點(diǎn)和模塊。
注意:另一個(gè)新編譯的二進(jìn)制文件是substrate -ui-new,一種用于克隆前端React app以管理Substrate鏈的工具。當(dāng)我嘗試運(yùn)行應(yīng)用程序時(shí),這標(biāo)記了一個(gè)錯(cuò)誤,因此我們假設(shè)Polkadot JS / Substrate UI應(yīng)用程序 - 另一個(gè)基于Typescript和React的應(yīng)用程序,用于配置和管理Substrate和Polkadot區(qū)塊鏈 - 是管理鏈的首選方法。
更新substrate腳本
更新Substrate腳本(從官方文檔中提?。┬枰獜?fù)制最新版本并使用以下命令替換cargo二進(jìn)制文件:
f=`mktemp -d`
git clone https://github.com/paritytech/substrate-up $f
cp -a $f/substrate-* ~/.cargo/bin
cp -a $f/polkadot-* ~/.cargo/bin
我們已經(jīng)安裝了所需的Substrate工具并準(zhǔn)備好使用。我們現(xiàn)在確實(shí)可以通過(guò)預(yù)先構(gòu)建的開(kāi)發(fā)節(jié)點(diǎn)運(yùn)行Substrate。此節(jié)點(diǎn)將開(kāi)始生成塊,但對(duì)開(kāi)發(fā)用途不大。
注:Substrate開(kāi)發(fā)人員使用此預(yù)構(gòu)建節(jié)點(diǎn),可通過(guò)Substrate路徑訪問(wèn),僅用于開(kāi)發(fā)目的,測(cè)試其最新版本并播放配置。對(duì)于擁有自己的runtime模塊和鏈配置的底層項(xiàng)目,我們將編譯一個(gè)自定義節(jié)點(diǎn)。這需要復(fù)制Substrate源代碼并構(gòu)建我們的自定義節(jié)點(diǎn)。
無(wú)論如何,我們可以驗(yàn)證Substrate dev鏈?zhǔn)欠裾谑褂么嗣睿?/p>
substrate --dev
您的節(jié)點(diǎn)將在終端中運(yùn)行,并且將開(kāi)始生成區(qū)塊。為了查看有關(guān)您的鏈的更多信息,例如每個(gè)支持模塊的狀態(tài),我們將轉(zhuǎn)向Polkadot JS應(yīng)用程序。
有關(guān)Substrate命令行選項(xiàng)的細(xì)分,請(qǐng)查看--help輸出:
substrate --help
熟悉幫助輸出是了解命令行程序功能的一種經(jīng)過(guò)嘗試和測(cè)試的方法。此生成包含一些用于測(cè)試的有用標(biāo)志,例如預(yù)先配置的帳戶--alice,--bob等。該--light標(biāo)志將節(jié)點(diǎn)作為輕型客戶端運(yùn)行,并在框架中內(nèi)置輕型客戶端支持。
這些和其他標(biāo)志使得切換鏈配置變得簡(jiǎn)單,主要用于開(kāi)發(fā)目的。
注意:您甚至可以使用自定義Substrate節(jié)點(diǎn)定義自己的命令行選項(xiàng)。請(qǐng)記住更新--help輸出!rust擁有廣泛的命令行工具,是我個(gè)人最喜歡的命令行實(shí)用程序開(kāi)發(fā)語(yǔ)言。
在進(jìn)入自定義構(gòu)建之前,讓我們回顧一下如何檢查Substrate鏈。今天這樣做的主要方法是通過(guò)使用Typescript和React開(kāi)發(fā)的Polkadot JS應(yīng)用程序。
使用Polkadot JS
Polkadot JS應(yīng)用程序充當(dāng)基本鏈資源管理器,并提供API和接口來(lái)管理Substrate模塊。顧名思義,它也支持Polkadot鏈。我們有兩種使用Polkadot JS的選擇:
使用Parity托管應(yīng)用程序,網(wǎng)址為https://polkadot.js.org/apps復(fù)制項(xiàng)目的存儲(chǔ)庫(kù)并在您的計(jì)算機(jī)上本地運(yùn)行。
讓我們復(fù)制項(xiàng)目并在本地運(yùn)行它。安裝完成后,我們可以將節(jié)點(diǎn)端點(diǎn)指向我們的Substrate鏈,這將是您機(jī)器上的另一個(gè)正在運(yùn)行的進(jìn)程。
// clone and start polkadot.js app
git clone https://github.com/polkadot-js/apps.git
mv apps polkadot.js
cd polkadot.js && yarn start
// start substrate dev chain in another terminal window
substrate --dev
運(yùn)行后,在瀏覽器中轉(zhuǎn)到localhost:3000。 要將應(yīng)用程序連接到本地鏈,請(qǐng)導(dǎo)航到應(yīng)用程序側(cè)面菜單中的“設(shè)置”,然后切換到“本地節(jié)點(diǎn)”端點(diǎn),類似于以下設(shè)置:
當(dāng)點(diǎn)擊save&reload時(shí),您會(huì)注意到現(xiàn)在有許多其他的側(cè)菜單鏈接。這些鏈接將根據(jù)您的鏈支持的功能而變化。
讓我們來(lái)看看幾乎所有連鎖店都會(huì)支持的東西 - 賬戶。轉(zhuǎn)到應(yīng)用程序的“帳戶”部分,您將看到“我的帳戶”標(biāo)簽下的帳戶列表。這些是預(yù)先配置的帳戶,具有預(yù)配置的余額。我們還可以在帳戶之間發(fā)送資金,刪除帳戶和備份帳戶密鑰。這突出了Polkadot JS應(yīng)用程序的用途 - 在UI級(jí)別與您的Substrate鏈進(jìn)行交互。
在繼續(xù)之前,我們將提到Polkadot UI可以做的更多事情,只是為了突出它的一些功能:
· 您可以上載wasm-compiled基于ink的智能合約以與Contracts運(yùn)行時(shí)模塊一起使用。
作為pos共識(shí)區(qū)塊鏈,Staking部分允許您投入資金成為交易的驗(yàn)證者,支持通過(guò)“藏匿賬戶”存儲(chǔ)這些stake資金,可以保持離線的賬戶或存儲(chǔ)這些資金在冷錢(qián)包。提名驗(yàn)證人,也可以查看staking獎(jiǎng)勵(lì)。當(dāng)然您也可以從stake存儲(chǔ)錢(qián)包中提取資金。
· 民主部分的目的是處理行政投票和管理鏈
· 整個(gè)Substrate JSON RPC(通過(guò)一系列端點(diǎn)從外部聯(lián)系Substrate的方法)可以在Toolbox部分進(jìn)行測(cè)試,而對(duì)鏈的管理更改可以在Sudo部分進(jìn)行
· 您可能想知道來(lái)自Substrate dev鏈的那些預(yù)先配置的帳戶來(lái)自哪里,這是正確的。這些帳戶以及更多內(nèi)容(包括運(yùn)行時(shí)邏輯本身的已編譯代碼的“blob”)存儲(chǔ)在“鏈規(guī)范”文件中,也稱為鏈規(guī)范。
來(lái)源: 區(qū)塊鏈研究實(shí)驗(yàn)室