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