在本篇文章中,我將會以一種讓任何擁有哪怕一點點技術(shù)經(jīng)驗的人都能理解的方式,來試著解釋 Substrate 區(qū)塊鏈框架。
你也許已經(jīng)聽說過Substrate是一個用來搭建區(qū)塊鏈的可擴(kuò)展的、模塊化的以及開源的框架。但這到底是什么意思呢?
Substrate提供了搭建一個分布式區(qū)塊鏈網(wǎng)絡(luò)所需的全部核心組件:
數(shù)據(jù)庫
網(wǎng)絡(luò)連接
交易隊列
共識
雖然這些層級是可擴(kuò)展的,Substrate 通常假定一般的區(qū)塊鏈開發(fā)人員不應(yīng)該關(guān)心這些核心組件的具體實現(xiàn)細(xì)節(jié)。反之,Substrate 的核心理念是使一個區(qū)塊鏈的狀態(tài)轉(zhuǎn)換功能的開發(fā)盡可能的靈活和簡便。該層級被稱為 Substrate 的運(yùn)行環(huán)境然而在我們詳細(xì)了解所有這些細(xì)節(jié)之前,首先需要達(dá)成一個關(guān)于 “區(qū)塊鏈?zhǔn)鞘裁础?的共識。
什么是區(qū)塊鏈?
從最基本的形式來看,區(qū)塊鏈?zhǔn)且粋€簡單的數(shù)據(jù)結(jié)構(gòu),其中數(shù)據(jù)的區(qū)塊聯(lián)結(jié)在一起形成一個有序的鏈。區(qū)塊鏈的具體細(xì)節(jié)因鏈的功能性不同而有所差異。然而,總的來說,所有區(qū)塊鏈應(yīng)該擁有一些共同的屬性。
區(qū)塊
區(qū)塊鏈中每個區(qū)塊都擁有一些能夠被用來生成一個對應(yīng)該區(qū)塊唯一識別符的數(shù)據(jù)。這些數(shù)據(jù)的其中一部分是前一個區(qū)塊,即 “父塊” 的唯一識別符。由于每個區(qū)塊都有一個指示器連接它的父塊,所有的區(qū)塊都能以一個確定性的方式有序排列。
任何單一區(qū)塊內(nèi)數(shù)據(jù)的細(xì)微變化將更改它的唯一ID。由于該區(qū)塊的ID被更改,在其后生成的區(qū)塊(子區(qū)塊)將也被更改。下一個子區(qū)塊也同樣,以及接下來的一個,再下一個。..。.. 事實上,所有在被改進(jìn)的原始區(qū)塊之后生成的區(qū)塊將必須更改它們的唯一ID以維持整條鏈的穩(wěn)定。這意味著通過簡單檢查鏈上最后一個區(qū)塊的唯一識別符便能夠輕松驗證兩條區(qū)塊鏈?zhǔn)欠駬碛型耆嗤臄?shù)據(jù)。
區(qū)塊的生成
因為這些特性,區(qū)塊鏈系統(tǒng)被普遍用于記錄一個共享分類賬。該分類賬的內(nèi)容并非通過更改一個現(xiàn)有的區(qū)塊來更改,而是根據(jù)有關(guān)如何在塊與塊之間更改分類賬狀態(tài)的指令說明,通過向區(qū)塊鏈中添加新的區(qū)塊來進(jìn)行更改。這些指令通常被稱為交易。
通常存在與分類賬如何進(jìn)行更改相關(guān)的規(guī)則,這些規(guī)則由一個狀態(tài)轉(zhuǎn)換功能來定義。對于加密貨幣系統(tǒng)來說,這些規(guī)則非常簡單。例如:
規(guī)則:用戶只能花費(fèi)他們自己的資金。
這些規(guī)則也可以更加復(fù)雜,甚至允許區(qū)塊鏈系統(tǒng)作為一個圖靈完備的計算機(jī),同時分類賬作為該臺計算機(jī)的存儲。
一旦收集到一組有效的交易,它們將會被放入一個區(qū)塊內(nèi),然后將該區(qū)塊置于鏈的末端。這一區(qū)塊生成的過程允許區(qū)塊鏈的潛在狀態(tài)隨時間變化。
區(qū)塊的最終確認(rèn)
現(xiàn)在一個新的區(qū)塊已經(jīng)被生成了,它可以與其他趨于搭建相同共享分類賬的區(qū)塊共享數(shù)據(jù)。然而,由于區(qū)塊鏈本質(zhì)上是去中心化的,有時候會出現(xiàn)兩個有差異卻仍舊有效的區(qū)塊在鏈的末端競爭同一個位置的情況。不同的區(qū)塊的最終確認(rèn)機(jī)制能夠被用來決定哪些區(qū)塊所屬的鏈?zhǔn)且?guī)范化的區(qū)塊鏈。對于任何現(xiàn)有的區(qū)塊鏈,共享分類賬的真實最終狀態(tài)應(yīng)該只有一個。任何區(qū)塊鏈的可替代狀態(tài)都被稱為“分叉”。
分叉是正常的、可預(yù)期的,且一般來說不是威脅。區(qū)塊的最終確認(rèn)過程旨在幫助非標(biāo)準(zhǔn)化鏈重新同步。我們將會在本文后半部分繼續(xù)講解分叉的內(nèi)容。
節(jié)點
到了現(xiàn)在,你應(yīng)該能夠了解到區(qū)塊鏈具有分布式和去中心化的特點。你希望全世界的多樣化用戶無需第三方中介機(jī)構(gòu)便能夠記錄這一共享分類賬。通過遵循以上的規(guī)則,每個該共享分類賬的參與者能夠運(yùn)行一個節(jié)點。該節(jié)點是一個遵循區(qū)塊鏈網(wǎng)絡(luò)規(guī)則,并與其它有著相同目的的節(jié)點相連接的計算機(jī)程序。所有的節(jié)點都無需中心化服務(wù)。
區(qū)塊鏈系統(tǒng)通常是 “開源” 的系統(tǒng),這意味著任何人都能夠參與。為了阻止惡意行為者,激勵良好行為并懲罰不良行為的機(jī)制被建立。伴隨著以上這些機(jī)制的就位,一個區(qū)塊鏈系統(tǒng)將成為一臺不可阻擋的機(jī)器。
Substrate 組件
現(xiàn)在你有了一個對區(qū)塊鏈?zhǔn)鞘裁吹母邔蛹壍恼J(rèn)識,我們可以開始了解 Substrate 是如何作為一個框架來進(jìn)行搭建工作的。對于 Substrate 框架的第一個解釋是可擴(kuò)展性。這意味著它對如何設(shè)計區(qū)塊鏈做了盡可能少的假設(shè),并試圖盡可能變得通用化。
數(shù)據(jù)庫
就像我們曾梳理的那樣,區(qū)塊鏈的核心是它的共享分類賬,必須對其進(jìn)行維護(hù)和存儲。Substrate 不對區(qū)塊鏈中數(shù)據(jù)的內(nèi)容或結(jié)構(gòu)做出任何假設(shè)。底層的數(shù)據(jù)庫使用簡單的鍵值存儲,并在其上實現(xiàn)了改進(jìn)的 Patricia Merkle tree (trie)。這一特殊的存儲結(jié)構(gòu)使我們可以輕松地驗證某元素是否在該存儲中。這對支持輕量級客戶端特別重要,輕量級客戶端將依據(jù)這些存儲證明與區(qū)塊鏈網(wǎng)絡(luò)進(jìn)行輕量級但去信任的交互。
網(wǎng)絡(luò)連接
為了去中心化的區(qū)塊鏈系統(tǒng)能夠通信,需要搭建一個點對點的網(wǎng)絡(luò)連接協(xié)議。Substrate 使用 libp2p 作為模塊化的點對點網(wǎng)絡(luò)連接堆棧。通過這一網(wǎng)絡(luò)連接層,基于 Substrate 的區(qū)塊鏈能夠共享交易、區(qū)塊、節(jié)點以及其他系統(tǒng)的關(guān)鍵細(xì)節(jié)而無需中心化的服務(wù)器。
遵循 Substrate 的理念,libp2p 的獨(dú)特性在于它對任何特定的網(wǎng)絡(luò)協(xié)議不帶任何假設(shè)。因此,你能夠在基于 Substrate 的區(qū)塊鏈上實現(xiàn)及使用不同的協(xié)議。
如上所述,交易被收集、形成區(qū)塊,并最終定義了區(qū)塊鏈狀態(tài)的變化。然而,這些交易的順序會對分類賬的最終狀態(tài)造成影響。Substrate 使你能夠全權(quán)控制網(wǎng)絡(luò)中交易的獨(dú)立性和隊列管理。Substrate 只假定一筆交易具有權(quán)重和一組用于創(chuàng)建從屬關(guān)系圖表的先決條件標(biāo)簽。這些從屬關(guān)系圖表在最簡單的情況下是線性的,但它們也可能變得更復(fù)雜。Substrate 將自動為你處理這些復(fù)雜的從屬關(guān)系。
共識
區(qū)塊鏈網(wǎng)絡(luò)可以通過不同的方式依據(jù)鏈的變化達(dá)成共識。傳統(tǒng)意義上,這些共識引擎與其它區(qū)塊鏈組件緊密耦合。然而,Substrate 花費(fèi)了額外的精力設(shè)計了一個能夠在開發(fā)期間輕松更改的共識層。實際上,該設(shè)計的最終目的是在鏈上線后能夠進(jìn)行共識的熱交換!Substrate 中內(nèi)建了多種不同的共識引擎比如傳統(tǒng)的工作證明機(jī)制(POW),Aura (Authority Round),以及 Polkadot 共識。它的獨(dú)特性在于將區(qū)塊的生成過程(BABE)與區(qū)塊的終結(jié)過程(GRANDPA)區(qū)分開來。
Substrate 運(yùn)行環(huán)境
目前為止,我們已經(jīng)講解了所有 Substrate 能夠提供的所有核心區(qū)塊鏈組件。正如你曾讀到的那樣,Substrate 已經(jīng)為保持通用性和可擴(kuò)展性竭盡所能。然而,可以說 Substrate 最能體現(xiàn)其定制化特點的部分是它的模塊化運(yùn)行環(huán)境。運(yùn)行環(huán)境指的是早先提到的 Substrate 的狀態(tài)轉(zhuǎn)換功能。
Substrate 相信一般的區(qū)塊鏈開發(fā)人員不需要對以上列出的區(qū)塊鏈組件關(guān)心得太多。只要這些組件久經(jīng)沙場且可以投入生產(chǎn),實現(xiàn)過程的細(xì)節(jié)常常就沒那么重要了。然而,決定一個網(wǎng)絡(luò)中的內(nèi)容是否有效的區(qū)塊鏈的核心邏輯對于任何鏈來說通常都是相當(dāng)重要的。
因此,Substrate 的核心理念是使得區(qū)塊鏈運(yùn)行的開發(fā)盡可能的靈活和簡易。
Substrate Runtime Module Library (SRML)
一個區(qū)塊鏈的運(yùn)行環(huán)境可被分為不同的邏輯化組件,它們被稱為運(yùn)行模塊。這些模塊將控制區(qū)塊鏈管理的鏈上邏輯的某些部分。你可以將這些模塊想象成你系統(tǒng)中的“插件”。作為一名 Substrate 開發(fā)者,你可以挑選你希望加入鏈中的模塊和功能。
比如,有個叫做“余額”的模塊管理著鏈上的貨幣。同時也有一組模塊比如“收集”、“民主”以及“選舉”處理著鏈上的決策和治理過程。甚至還有一個被稱為“合約”的模塊能夠?qū)⑷魏位?Substrate 的鏈轉(zhuǎn)到一個智能合約平臺中。當(dāng)你在 Substrate 上搭建時,將自動為你提供這些模塊。
然而,你并不局限于使用 Substrate 提供的模塊。事實上,開發(fā)者們可以輕松地搭建他們自己的運(yùn)行模塊,將其作為獨(dú)立的邏輯化組件,甚至能夠與其他運(yùn)行模塊直接進(jìn)行交互以構(gòu)建更復(fù)雜的邏輯。我們相信長此以往,Substrate 中的模塊系統(tǒng)將會變得更像一個“應(yīng)用商店”,用戶在其中可以輕松的挑選想囊括的功能,并以入門級的技術(shù)知識部署分布式區(qū)塊鏈網(wǎng)絡(luò)!
無分叉的運(yùn)行更新
如果我們遵循 Substrate 模塊化生態(tài)系統(tǒng)與應(yīng)用商店的類比,那么我們還必須解決如何更新運(yùn)行環(huán)境的問題。無論是漏洞修復(fù),現(xiàn)有模塊的常規(guī)改進(jìn),甚至是添加區(qū)塊鏈的新功能,Substrate已經(jīng)具備了一流的更改運(yùn)行環(huán)境的能力。
然而,鏈上狀態(tài)轉(zhuǎn)換功能的更改也會影響網(wǎng)絡(luò)的共識。如果運(yùn)行在網(wǎng)絡(luò)中的某個節(jié)點具有一個版本的運(yùn)行邏輯,同時另一個節(jié)點擁有另一個不同的版本的運(yùn)行邏輯,那么這兩個節(jié)點將無法達(dá)成共識。它們將從根本上否決分布賬的真實狀態(tài),導(dǎo)致產(chǎn)生我們之前定義過的分叉的結(jié)果。這些不可協(xié)調(diào)的分叉會降低網(wǎng)絡(luò)的安全性從而造成很壞的影響,導(dǎo)致只有一部分的節(jié)點會正確地生成和驗證新區(qū)塊。
Substrate 已經(jīng)通過讓網(wǎng)絡(luò)就運(yùn)行邏輯本身達(dá)成共識的方式解決了這個問題!通過使用 Wasm 二進(jìn)制格式,我們能夠?qū)?Substrate 運(yùn)行代碼作為共享分類賬的一部分放在區(qū)塊鏈上。這意味著任何運(yùn)行一個節(jié)點的人都能夠驗證他們的節(jié)點是否擁有最新的邏輯。如果沒有,鏈上的 Wasm 將會被直接執(zhí)行!這意味著你的區(qū)塊鏈的運(yùn)行環(huán)境將能夠在即時網(wǎng)絡(luò)上實時更新,避免了產(chǎn)生分叉的風(fēng)險!
Substrate 秉承著靈活性的精神,使你根本無需手動啟動此功能。如果你想要禁用鏈上升級,你也可以做到。事實上,Substrate 將預(yù)先為你提供你的鏈所需的全部工具。
免費(fèi)和開源
Substrate 是一個完全免費(fèi)且開源的項目。它通過使用 Rust 編程語言來搭建,該語言旨在幫助開發(fā)快速和固有安全性的軟件。Substrate 的協(xié)調(diào)和開發(fā)通過 Github 和 Riot 等公共社區(qū)的超過100多位個人貢獻(xiàn)者的幫助來進(jìn)行。
Substrate 是 Polkadot 中孵化出的項目,Polkadot 是一個擁有許多可互操作區(qū)塊鏈的更廣闊的世界愿景。Substrate 除了能夠幫助大多數(shù)成熟的鏈連接到 Polkadot 上之外,還賦予了生產(chǎn)級區(qū)塊鏈項目連接到該網(wǎng)絡(luò)的能力。當(dāng) Polkadot 主網(wǎng)啟動,你將因支持你的區(qū)塊鏈的技術(shù)與為其他多種生產(chǎn)級區(qū)塊鏈賦能的技術(shù)一致而感到安心。
Substrate 旨在成為區(qū)塊鏈革新者的無可反駁的最佳平臺和任何考慮搭建一個區(qū)塊鏈網(wǎng)絡(luò)的人的必然選擇。
總結(jié)
此時此刻,我希望你能夠明白為什么我們說 Substrate 是一個搭建區(qū)塊鏈系統(tǒng)的可擴(kuò)展的、模塊化的以及開源的平臺。Substrate 開發(fā)過程中的每個時點都以保持通用性為首要前提。因此,Substrate 將作為一個平臺被用于構(gòu)建未來的技術(shù),甚至是還從未被提及的那些。
責(zé)任編輯;zl
評論
查看更多