從技術角度揭祕波卡的 JAM

文是 Parity 核心開發者 Kian Paimani 從技術角度解讀波卡最新提出的 JAM 協議,以幫助人們更好地瞭解 JAM 如何為波卡生態系統帶來全新的可擴展性。

撰文:Kian Paimani,Parity 核心開發者

編譯:Polkadot Labs

***「波卡知識圖譜」****是我們針對波卡從零到一的入門級文章,我們嘗試從波卡最基礎的部分講起,為大家提供全方位瞭解波卡的內容,當然這是一項巨大的工程,也充滿了挑戰,然而我們希望通過這樣的努力讓大家能夠正確認知波卡,也讓不瞭解波卡的人方便快速掌握波卡相關知識,*今天是該欄目的第 148 期,本文是 Parity 核心開發者 Kian Paimani 從技術角度解讀波卡最新提出的 JAM 協議,以幫助人們更好地瞭解 JAM 如何為波卡生態系統帶來全新的可擴展性,本文是以作者第一人稱視角寫作的。

以下是對 Polkadot1、Polkadot2 及其如何演變為 JAM 的詳細解釋。(詳情請參見:**)本文面向技術讀者,尤其是那些並不十分熟悉波卡但對區塊鏈系統有一定了解的技術人員,並且可能瞭解其他生態系統相關技術的讀者。

我認為,在閱讀 JAM 灰皮書之前,閱讀本文是一個很好的前奏。(詳情請參見:**

背景知識

本文假定讀者熟悉以下概念:

  • 將區塊鏈描述為狀態轉換函數。
  • 理解什麼是「狀態」。(詳情請參見:_sdk_docs/reference_docs/blockchain_state_machines/index.html)
  • 經濟安全和權益證明。(詳情請參見:、)

前言:Polkadot1

首先,回顧一下我認為 Polkadot1 最具創新性的特徵。

社會層面:

  • 波卡是一個龐大的去中心化自治組織(DAO)。該網絡實現了完全基於鏈上、實現自我執行的治理,包括無需分叉的運行時升級。
  • 美國證券交易委員會(SEC)將 DOT 視為軟件而非證券。(詳情請參見:)
  • 網絡開發的大部分工作由 Polkadot Fellowship 完成(詳情請參見:),而不是由財政支持的公司(如 Parity:)進行。

技術層面:

  • 波卡實現了共享安全和分片執行。
  • 使用基於 WASM 的元協議(詳情請參見:_sdk_docs/reference_docs/wasm_meta_protocol/index.html),將區塊鏈的代碼以字節碼的形式存儲在狀態中。這使得大多數升級都無需分叉,還能實現異構分片。

關於「異構分片」的更多信息,請參見相關章節。

分片執行:核心要點

目前,我們正在討論一個託管其他 Layer2「區塊鏈」網絡的 Layer1 網絡,類似於波卡和以太坊。因此,Layer2 和平行鏈(Parachain)這兩個詞可以互換使用。

區塊鏈可擴展性的核心問題可以表述為:存在一組驗證者,他們可以通過權益證明(Proof-of-Stake)的 Crypto 經濟性來確保某些代碼的執行是可信的。默認情況下,這些驗證者需要重新執行彼此的全部工作。因此,只要我們強制所有驗證者始終重新執行一切,整個系統就不可擴展。

請注意,只要上述絕對重新執行原則保持不變,那麼在這個模型中增加驗證者的數量並不會真正提高系統的吞吐量。

以上展示的是一個單體區塊鏈(與分片區塊鏈相對)。所有網絡驗證者都會逐一處理輸入(即區塊)。

在這樣的系統中,如果 Layer1 想要託管更多的 Layer2,那麼所有驗證者現在都必須重新執行所有 Layer2 的工作。顯然,這種方法無法擴展。Optimistic Rollups 是規避這個問題的一種方式,因為只有在有人聲稱發生了欺詐時,才會重新執行(欺詐證明)。基於 SNARK 的 Rollups 通過利用驗證 SNARK 證明的成本遠低於生成它的這一事實來規避這一問題,因此允許所有驗證者驗證 SNARK 證明是合理的。有關此方面的更多信息,請參閱「附錄:可擴展性空間圖」。

分片的一個簡單解決方案是僅僅將驗證者集合分割成更小的子集,並讓這個較小的子集重新執行 Layer2 區塊。這個方法的問題是什麼?我們正在對網絡的執行和經濟安全性進行分片。這樣的 Layer2 的安全性低於 Layer1,並且隨著我們將驗證者集合分割為更多的分片,其安全性會進一步下降。

與無法始終重新執行成本的 Optimistic Rollups 不同,波卡在設計時就考慮了執行分片,因此它可以讓一部分驗證者重新執行 Layer2 區塊,同時向所有網絡參與者提供足夠的 Crypto 經濟學證據,證明該 Layer2 區塊的真實性與整個驗證者集合重新執行它時一樣安全。這通過一種新穎的(最近正式發佈的)ELVES 機制實現的。(詳情請參見:)

簡而言之,ELVES 可以被看作一種「懷疑式 Rollups」機制。通過幾輪驗證者主動詢問其他驗證者某個 Layer2 區塊是否有效,我們可以極大概率地確認該 Layer2 區塊的有效性。實際上,在發生任何爭議時,很快就會要求整個驗證者集合參與。波卡聯合創始人 Rob Habermeier 在一篇文章中詳細解釋了這一點。(詳情請參見:)

ELVES 使得波卡能夠同時具備兩個以前被認為是互相排斥的屬性:「分片執行」和「共享安全」。這是 Polkadot1 在可擴展性方面的主要技術成果。

現在,繼續討論「核心(Core)」類比。

一個執行分片的區塊鏈非常像一個 CPU:與 CPU 可以有多個並行執行指令的核心一樣,波卡可以並行處理 Layer2 區塊。這就是為什麼波卡上的 Layer2 被稱為平行鏈,而由較小的驗證者子集重新執行單個 Layer2 區塊的環境被稱為「核心(core)」。每個核心可以抽象為「一組協同工作的驗證者」。

你可以把單體區塊鏈想象成在任意時間段內只攝取一個區塊,而波卡則在每個時間段內攝取一箇中繼鏈區塊和每個核心的一個平行鏈區塊。

異構性

到目前為止,我們只討論了可擴展性和波卡提供的分片執行。值得注意的是,波卡的每個分片實際上都是完全不同的應用程序。這是通過使用存儲在字節碼中的元協議實現的:一種將區塊鏈定義作為字節碼存儲在區塊鏈自身狀態中的協議。在 Polkadot 1.0 中,WASM 被用作首選字節碼,而在 JAM 中,則採用了 PVM/RISC-V。

總而言之,這就是為什麼波卡被稱為異構分片區塊鏈。(詳情請參見:)每個 Layer2 都是完全不同的應用程序。

Polkadot2

Polkadot2 的一個重要部分是讓核心的使用更加靈活。在原始的波卡模型中,核心的租期可以從 6 個月到 2 年不等,這適合於資源豐富的企業,但對小團隊來說則不太合適。波卡核心能夠以更靈活方式使用的特性被稱為「敏捷核心時間」(agile coretime)。(詳情請參見:)在這種模式下,波卡核心的租期可以短至一個區塊,也可以長達一個月,併為那些希望長期租用的用戶提供價格上限保障。

Polkadot 2 的其他特性正在我們討論的過程中逐漸展現,因此在這裡不需要過多贅述。

核心內部與鏈上操作

為了理解 JAM,首先需要了解當一個 Layer2 區塊進入波卡核心時會發生什麼。

以下內容進行了大量簡化。

回顧一下,核心主要由一組驗證者組成。因此,當我們說「數據被髮送到核心」時,實際上是指這些數據被傳遞給這組驗證者。

0.一個 Layer2 區塊加上該 Layer2 的一部分狀態被髮送到核心。這些數據是執行該 Layer2 區塊所需的全部信息。

1.核心內的一部分驗證者會重新執行 Layer2 區塊,並繼續處理與共識相關的任務。

2.核心驗證者將重新執行所需的數據提供給其他驗證者(核心外部的驗證者)。其他驗證者可能根據 ELVES 規則決定是否重新執行該 Layer2 區塊,並且他們需要這些數據來完成此操作。

注意,到目前為止,所有操作都在波卡的主區塊和狀態轉換函數之外進行。一切都發生在核心內部以及數據可用性層上。

3.最終,Layer2 最新狀態的一小部分會在波卡主中繼鏈上可見。與之前的所有操作不同,這項操作比實際重新執行 Layer2 區塊便宜得多,它會影響波卡的主狀態,在波卡區塊中可見,並由所有波卡驗證者執行。

從上述內容中,我們可以探討波卡正在執行的一些操作:

首先,從第 1 步我們可以得出,波卡中存在一種與傳統區塊鏈狀態轉換函數不同的新型執行方式。通常,當網絡中的所有驗證者執行某項工作時,主區塊鏈狀態會更新。我們稱這種情況為鏈上操作(on-chain operation),這就是第 3 步中發生的事情。然而,在核心內部發生的情況(第 1 步)與此不同。我們稱這種新型區塊鏈計算為核心內執行(in-core ution)。

接下來,從第 2 點我們可以推斷出,波卡已經提供了一個原生的數據可用性(Data-Availability,以下簡稱 DA)層,並且 Layer2 自動使用它來確保其執行證據在一段時間內可用。然而,可以發佈到該 DA 層的數據塊是固定的,它始終是重新執行 Layer2 區塊所需的證據。此外,平行鏈的代碼從未讀取 DA 層數據。

理解上述內容是理解 JAM 的基礎。總結如下:

  • 核心內執行(in-core ution):指核心內部發生的操作。其特點是豐富、可擴展,並通過 Crypto 經濟學和 ELVES 實現與鏈上執行同樣的安全性。
  • 鏈上執行(on-chain ution):指所有驗證者執行的操作。通過經濟保障的驗證者默認獲得安全性,但成本更高且限制更多,因為所有人都在執行所有操作。
  • 數據可用性(Data Availability):波卡驗證者在一定時間內承諾一些數據的可用性,並向其他驗證者提供這些數據的能力。

JAM

通過前一部分的理解,我們可以順利過渡到對 JAM 的介紹。

JAM 是一個受波卡啟發而設計的新協議,並與其完全兼容,旨在取代波卡中繼鏈,並讓核心的使用變得完全去中心化且無限制。

JAM 構建於 Polkadot2 之上,試圖讓波卡的核心更加易於訪問,但方式上比 agile-coretime 更加靈活和無固定限制。

  • Polkadot2 使得 Layer2 在核心上的部署更加靈活。
  • JAM 則旨在讓任何應用程序都能部署在波卡核心上,即使這些應用程序並不像區塊鏈或 Layer2 那樣。

這主要通過向開發者暴露前面部分討論的三種主要原始概念來實現:即鏈上執行、核心內執行和 DA 層。

換句話說,在 JAM 中,開發者可以接觸到:

  • 完全可編程化核心內和鏈上的工作。
  • 允許任意數據被讀寫至波卡的 DA 層。

這是對 JAM 目標的基礎描述。無需多言,這裡做了很多簡化,且協議可能仍會演變。

有了這個基礎理解,我們現在可以在接下來的章節中進一步探討 JAM 的一些細節。

1 服務與工作項

在 JAM 的背景下,過去被稱為 Layer2/ 平行鏈的現在稱為「服務(Service)」,過去被稱為區塊 / 交易的現在稱為「工作項(Work-Item)」或「工作包(Work-Package)」。具體來說,工作項屬於某個服務,而工作包則是工作項的集合。這些術語被有意設計得足夠通用,以涵蓋超越區塊鏈 /Layer2 的各種用例。

一個服務由三個入口點描述,其中兩個分別是 fn refine() 和 fn accumulate()。前者描述服務在核心內執行的內容,後者描述服務在鏈上執行的內容。

最後,兩個入口點的名稱也是協議被稱為 JAM(Join Accumulate Machine)的原因。Join 即 fn refine(),當所有波卡核心並行處理不同服務的大量工作時,這一階段被稱為 Join。數據經過篩選後,進入下一個階段。Accumulate 則指的是所有上述結果被累積到主 JAM 狀態中的過程,也就是鏈上執行部分。

工作項可以精確指定它們在核心內、鏈上執行什麼代碼,並指明它們如何 / 是否 / 從哪裡讀寫分佈式數據湖(Distributed Data Lake)中的內容。

2 半一致性

回顧現有關於 XCM(波卡選擇的平行鏈通信語言)的資料,其中所有通信都是異步的。(詳情請參見:)也就是說,消息發送後,無法等待其回覆。

異步性是系統不一致性的表現,是永久分片系統(如波卡 1 和波卡 2 以及以太坊現有的 Layer2 生態系統)的主要缺點。

然而,正如灰皮書第 2.4 節中描述的,一個始終為其所有租戶保持同步的完全一致系統,也只能在不犧牲普遍性、可訪問性或彈性的情況下增長到一定程度。(詳情請參見:)

同步≈一致性||異步≈不一致性

這也是 JAM 脫穎而出的另一個領域:通過引入多種特性,JAM 實現了一種新穎的中間狀態,即半一致性系統。在這個系統中,頻繁通信的子系統有機會在彼此之間創建一致的環境,而不強制整個系統保持一致。這在灰皮書作者 Gavin Wood 博士的採訪中得到了最好的描述:(詳情請參見:_referring_euri=https%3A%2F%2Fblog.kianenigma.nl%2F&source_ve_path=OTY3MTQ)

另一種理解方式是將波卡 /JAM 視為一個分片系統,其中這些分片的邊界是流動的,並且是動態決定的。

波卡一直是分片的,並且完全異質化。

現在,它將被分片、異構,而且這些分片的邊界可以靈活決定,正如 Gavin Wood 在推特中所謂的「半一致性」系統。(詳情請參見:_src=twsrc%5Etfw、)

使這一切成為可能的特性包括:

1.訪問無狀態的、並行的核心內執行,其中不同的服務只能與在同一核心中且在特定區塊內的其他服務同步交互,以及鏈上執行,其中服務可以訪問跨所有核心的所有服務的結果。

2.JAM 不強制執行任何特定的服務調度。頻繁通信的服務可以為其排序器提供經濟激勵,創建包含這些頻繁通信服務的工作包。這使這些服務能夠運行在同一個核心內,彼此之間的通信就像是在一個同步環境中進行一樣。

3.此外,JAM 服務可以訪問 DA 層,並可以將其用作一種臨時但極其便宜的數據層。一旦數據被放置在 DA 中,它最終會傳播到所有核心,但在同一個核心內立即可用。因此,JAM 服務可以通過在連續區塊中將自己調度到同一個核心,享受更高程度的數據訪問。

需要注意的是,雖然上述內容在 JAM 中是可能的,但並未在協議層強制執行。因此,預計某些接口在理論上是異步的,但通過精妙的抽象和激勵措施,可以在實踐中表現為同步的。接下來的部分將討論的 CorePlay 就是這樣的一個例子。

3 CorePlay

本節介紹了 CorePlay,這是在 JAM 環境下的一個實驗性想法,可以描述為一種新的智能合約編程模型。截至撰寫本文時,CorePlay 尚未被詳細說明,仍然是一個設想。

要理解 CorePlay,我們首先需要介紹 JAM 選擇的虛擬機:PVM。

4 PVM

PVM 是 JAM 和 CorePlay 中的一個重要細節。PVM 的低層次細節超出了本文的範圍,最好查看領域專家在灰皮書中的描述。不過,為了本文的需要,我們只需闡述 PVM 的幾個屬性:

  • 高效計量
  • 暫停和恢復執行的能力

後者對於 CorePlay 尤為重要。

CorePlay 是使用 JAM 的靈活原語創建一個同步且可擴展的智能合約環境的一個例子,具有非常靈活的編程接口。CorePlay 建議將基於 Actor 的智能合約直接部署在 JAM 核心上,使它們能夠享受同步編程接口,在其中可以像普通的 fn main() 一樣進行編寫,並通過 let_result=other_coreplay_actor(data).await?進行通信。如果 other_coreplay_actor 在同一個 JAM 區塊中的核心上,這個調用是同步的;如果在另一個核心上,該 Actor 會被暫停,並在後續的 JAM 區塊中恢復。這正是因為 JAM 服務及其靈活的調度,以及 PVM 的屬性,使這種情況成為可能。

5 CoreChains 服務

最後,讓我們總結一下提到 JAM 完全兼容波卡的主要原因。波卡的主要產品是以敏捷核心時間方式運行的平行鏈(Parachains),而這一產品在 JAM 中得以延續。

在 JAM 中最早部署的服務很可能會被稱為 CoreChains 或 Parachains。這項服務將允許現有的波卡 -2 風格的 parachains 在 JAM 上運行。

進一步的服務可以在 JAM 上部署,並且現有的 CoreChains 服務可以與它們通信,但波卡現有的產品仍將保持強勁,只會為現有的 Parachain 團隊開啟新的大門。

附錄:數據分片

本文大部分內容從執行分片的角度探討了可擴展性。我們也可以從數據的角度來審視相同的問題。有趣的是,我們發現這與前面提到的半一致性情況類似:原則上,完全一致的系統更好,但無法擴展;完全不一致的系統可擴展,但不理想,而 JAM 以其半一致性模型提出了一種新的可能性。

完全一致系統:這是我們在完全同步的智能合約平臺上看到的,如 Solana 或那些勇敢地僅部署在以太坊 Layer1 上的平臺。所有應用數據都存儲在鏈上,並且可以輕鬆訪問到所有其他應用。這是一個程序化的完美屬性,但不可擴展。

不一致系統:應用數據保存在 Layer1 外部,以及不同的、隔離的分片中。極具可擴展性,但在可組合性方面表現不佳。波卡和以太坊的 Rollup 模型屬於這種情況。

JAM 除了提供上述兩種功能外,還允許開發者將任意數據發佈到 JAM DA 層,這在某種程度上是鏈上數據和鏈下數據之間的中間地帶。可以編寫利用 DA 層的大部分應用數據的新型應用,同時只將絕對關鍵的數據持久化到 JAM 狀態中。

附錄:可擴展性空間圖

這一部分重新解釋了我們對區塊鏈可擴展性領域的觀點。這在灰皮書中也有說明,這裡提供了一個更簡潔的版本。

區塊鏈的可擴展性在很大程度上遵循了傳統分佈式系統中使用的方法:向上擴展(垂直)和向外擴展(水平)。

向上擴展是像 Solana 這樣的平臺所做的工作。通過對代碼和硬件進行極限優化,以實現最大吞吐量。

向外擴展是以太坊和波卡所採用的策略:減少每個人需要完成的工作量。在傳統的分佈式系統中,這通過增加更多的複製機器來實現。在區塊鏈中,「計算機」是整個網絡的驗證者集合。通過在它們之間分配工作(如 ELVES 所做的),或通過樂觀地減少它們的職責(如樂觀 Rollups 所做的),我們減少了整個驗證者集合的工作負載,從而實現了系統的向外擴展。

在區塊鏈中,向外擴展類似於「減少需要執行所有操作的機器數量」。

總結如下:

  1. 向上擴展:高性能硬件 + 單體區塊鏈的優化。
  2. 向外擴展:
  3. 樂觀 Rollups
  4. 基於 SNARK 的 Rollups
  5. ELVES:波卡的諷刺 Rollups(Cynical Rollups)

附錄:相同硬件,內核更新

本節基於 Rob Habermeier 在 Sub02023 中提供的類比:波卡:Kernel/Userland|Sub02023-YouTube(詳情請參見:),展示了 JAM 作為對波卡的升級:在相同硬件上的內核更新。

在典型的計算機中,我們可以將整個堆棧劃分為三個部分:

1.硬件

2.內核

3.用戶空間

在波卡中,硬件,即提供計算和數據可用性的本質,一直是核心(cores),如前面所述。

在波卡中,內核實際上[9]到目前為止包含了兩個部分:

1.平行鏈(Parachains)協議:一種意見化、固定的使用核心的方式。

2.一組低級功能,例如 DOT 代幣及其可轉移性、質押、治理等。

這兩者都存在於波卡的中繼鏈(Relay Chain)中。

用戶空間應用則是 parachains 的實例、它們的原生代幣以及在它們之上構建的其他內容。

我們可以如下可視化這一過程:

波卡一直設想將更多的核心功能移至其一類用戶——平行鏈。這正是 Minimal Relay RFC 旨在實現的目標。(詳情請參見:)

這意味著波卡中繼鏈僅處理提供平行鏈協議,從而在一定程度上縮小了內核空間。

一旦實現了這種架構,便更容易可視化 JAM 遷移的樣子。JAM 將大幅縮小波卡的內核空間,使其更具通用性。此外,Parachains 協議將移至用戶空間,因為這是為數不多的能夠在相同核心(硬件)和內核(JAM)上編寫應用程序的方式之一。

這也再次說明了為什麼 JAM 只是波卡中繼鏈的替代品,而不是平行鏈的替代品。

換句話說,我們可以將 JAM 遷移視為內核升級。底層硬件保持不變,舊的內核的大部分內容被移至用戶空間,以簡化系統。

想參與到本文的討論,歡迎到論壇中發表自己的意見:

關於如何參與到論壇的討論中,請參看我們推出的波卡論壇使用指南:

《如何參與波卡的討論:波卡官方論壇使用指南》

查看原文
本頁面內容僅供參考,非招攬或要約,也不提供投資、稅務或法律諮詢。詳見聲明了解更多風險披露。
  • 讚賞
  • 留言
  • 分享
留言
0/400
暫無留言
交易,隨時隨地
qrCode
掃碼下載 Gate.io APP
社群列表
繁體中文
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)