以下是對Polkadot1、Polkadot2及其如何演變爲JAM的詳細解釋。(詳情請參見:https://www.navalmanack.com/almanack-of-naval-ravikant/how-to-think-clearly)本文面向技術讀者,尤其是那些並不十分熟悉波卡但對區塊鏈系統有一定了解的技術人員,並且可能了解其他生態系統相關技術的讀者。
我認爲,在閱讀JAM灰皮書之前,閱讀本文是一個很好的前奏。(詳情請參見:https://graypaper.com/)
本文假定讀者熟悉以下概念:
首先,回顧一下我認爲Polkadot1最具創新性的特徵。
* 網路開發的大部分工作由Polkadot Fellowship完成(詳情請參見:
https://polkadot-fellows.github.io/dashboard/),而不是由財政支持的公司(如Parity:https://www.parity.io/)進行。
關於“異構分片”的更多信息,請參見相關章節。
目前,我們正在討論一個托管其他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機制實現的。(詳情請參見:https://eprint.iacr.org/2024/961)
簡而言之,ELVES可以被看作一種“懷疑式Rollups”機制。通過幾輪驗證者主動詢問其他驗證者某個Layer2區塊是否有效,我們可以極大概率地確認該Layer2區塊的有效性。實際上,在發生任何爭議時,很快就會要求整個驗證者集合參與。波卡聯合創始人Rob Habermeier在一篇文章中詳細解釋了這一點。(詳情請參見:https://polkadot.com/blog/polkadot-v1-0-sharding-and-economic-security#approval-checking-and-finality)
ELVES使得波卡能夠同時具備兩個以前被認爲是互相排斥的屬性:“分片執行”和“共享安全”。這是Polkadot1在可擴展性方面的主要技術成果。
現在,繼續討論“核心(Core)”類比。
一個執行分片的區塊鏈非常像一個CPU:與CPU可以有多個並行執行指令的核心一樣,波卡可以並行處理Layer2區塊。這就是爲什麼波卡上的Layer2被稱爲平行鏈,而由較小的驗證者子集重新執行單個Layer2區塊的環境被稱爲“核心(core)”。每個核心可以抽象爲“一組協同工作的驗證者”。
你可以把單體區塊鏈想象成在任意時間段內只攝取一個區塊,而波卡則在每個時間段內攝取一個中繼鏈區塊和每個核心的一個平行鏈區塊。
到目前爲止,我們只討論了可擴展性和波卡提供的分片執行。值得注意的是,波卡的每個分片實際上都是完全不同的應用程序。這是通過使用存儲在字節碼中的元協議實現的:一種將區塊鏈定義作爲字節碼存儲在區塊鏈自身狀態中的協議。在Polkadot 1.0中,WASM被用作首選字節碼,而在JAM中,則採用了PVM/RISC-V。
總而言之,這就是爲什麼波卡被稱爲異構分片區塊鏈。(詳情請參見:https://x.com/kianenigma/status/1790763921600606259)每個Layer2都是完全不同的應用程序。
Polkadot2的一個重要部分是讓核心的使用更加靈活。在原始的波卡模型中,核心的租期可以從6個月到2年不等,這適合於資源豐富的企業,但對小團隊來說則不太合適。波卡核心能夠以更靈活方式使用的特性被稱爲“敏捷核心時間”(agile coretime)。(詳情請參見:https://polkadot.com/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 execution)。
接下來,從第2點我們可以推斷出,波卡已經提供了一個原生的數據可用性(Data-Availability,以下簡稱DA)層,並且Layer2自動使用它來確保其執行證據在一段時間內可用。然而,可以發布到該DA層的數據塊是固定的,它始終是重新執行Layer2區塊所需的證據。此外,平行鏈的代碼從未讀取DA層數據。
理解上述內容是理解JAM的基礎。總結如下:
通過前一部分的理解,我們可以順利過渡到對JAM的介紹。
JAM是一個受波卡啓發而設計的新協議,並與其完全兼容,旨在取代波卡中繼鏈,並讓核心的使用變得完全去中心化且無限制。
JAM構建於Polkadot2之上,試圖讓波卡的核心更加易於訪問,但方式上比agile-coretime更加靈活和無固定限制。
這主要通過向開發者暴露前面部分討論的三種主要原始概念來實現:即鏈上執行、核心內執行和DA層。
換句話說,在JAM中,開發者可以接觸到:
這是對JAM目標的基礎描述。無需多言,這裏做了很多簡化,且協議可能仍會演變。
有了這個基礎理解,我們現在可以在接下來的章節中進一步探討JAM的一些細節。
在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)中的內容。
回顧現有關於XCM(波卡選擇的平行鏈通信語言)的資料,其中所有通信都是異步的。(詳情請參見:https://github.com/polkadot-fellows/xcm-format?tab=readme-ov-file#11-xcm-communication-model)也就是說,消息發送後,無法等待其回復。
異步性是系統不一致性的表現,是永久分片系統(如波卡1和波卡2以及以太坊現有的Layer2生態系統)的主要缺點。
然而,正如灰皮書第2.4節中描述的,一個始終爲其所有租戶保持同步的完全一致系統,也只能在不犧牲普遍性、可訪問性或彈性的情況下增長到一定程度。(詳情請參見:https://graypaper.com/graypaper.pdf)
同步≈一致性||異步≈不一致性
這也是JAM脫穎而出的另一個領域:通過引入多種特性,JAM實現了一種新穎的中間狀態,即半一致性系統。在這個系統中,頻繁通信的子系統有機會在彼此之間創建一致的環境,而不強制整個系統保持一致。這在灰皮書作者Gavin Wood博士的採訪中得到了最好的描述:(詳情請參見:https://www.youtube.com/watch?t=1378&v=O3kRAVBTkfs&embeds_referring_euri=https%3A%2F%2Fblog.kianenigma.nl%2F&source_ve_path=OTY3MTQ)
另一種理解方式是將波卡/JAM視爲一個分片系統,其中這些分片的邊界是流動的,並且是動態決定的。
波卡一直是分片的,並且完全異質化。
現在,它將被分片、異構,而且這些分片的邊界可以靈活決定,正如Gavin Wood在推特中所謂的“半一致性”系統。(詳情請參見:https://x.com/gavofyork?ref_src=twsrc%5Etfw、https://graypaper.com/)
使這一切成爲可能的特性包括:
1.訪問無狀態的、並行的核心內執行,其中不同的服務只能與在同一核心中且在特定區塊內的其他服務同步交互,以及鏈上執行,其中服務可以訪問跨所有核心的所有服務的結果。
2.JAM不強制執行任何特定的服務調度。頻繁通信的服務可以爲其排序器提供經濟激勵,創建包含這些頻繁通信服務的工作包。這使這些服務能夠運行在同一個核心內,彼此之間的通信就像是在一個同步環境中進行一樣。
3.此外,JAM服務可以訪問DA層,並可以將其用作一種臨時但極其便宜的數據層。一旦數據被放置在DA中,它最終會傳播到所有核心,但在同一個核心內立即可用。因此,JAM服務可以通過在連續區塊中將自己調度到同一個核心,享受更高程度的數據訪問。
需要注意的是,雖然上述內容在JAM中是可能的,但並未在協議層強制執行。因此,預計某些接口在理論上是異步的,但通過精妙的抽象和激勵措施,可以在實踐中表現爲同步的。接下來的部分將討論的CorePlay就是這樣的一個例子。
本節介紹了CorePlay,這是在JAM環境下的一個實驗性想法,可以描述爲一種新的智能合約編程模型。截至撰寫本文時,CorePlay尚未被詳細說明,仍然是一個設想。
要理解CorePlay,我們首先需要介紹JAM選擇的虛擬機: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的屬性,使這種情況成爲可能。
最後,讓我們總結一下提到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.向外擴展: 1.樂觀Rollups 2.基於SNARK的Rollups 3.ELVES:波卡的諷刺Rollups(Cynical Rollups)
本節基於Rob Habermeier在Sub02023中提供的類比:波卡:Kernel/Userland|Sub02023-YouTube(詳情請參見:https://www.youtube.com/watch?v=15aXYvVMxlw),展示了JAM作爲對波卡的升級:在相同硬件上的內核更新。
在典型的計算機中,我們可以將整個堆棧劃分爲三個部分:
1.硬件2.內核3.用戶空間
在波卡中,硬件,即提供計算和數據可用性的本質,一直是核心(cores),如前面所述。
在波卡中,內核實際上[9]到目前爲止包含了兩個部分:
1.平行鏈(Parachains)協議:一種意見化、固定的使用核心的方式。2.一組低級功能,例如DOT代幣及其可轉移性、質押、治理等。
這兩者都存在於波卡的中繼鏈(Relay Chain)中。
用戶空間應用則是parachains的實例、它們的原生代幣以及在它們之上構建的其他內容。
我們可以如下可視化這一過程:
波卡一直設想將更多的核心功能移至其一類用戶——平行鏈。這正是Minimal Relay RFC旨在實現的目標。(詳情請參見:https://github.com/polkadot-fellows/RFCs/blob/main/text/0032-minimal-relay.md)
這意味着波卡中繼鏈僅處理提供平行鏈協議,從而在一定程度上縮小了內核空間。
一旦實現了這種架構,便更容易可視化JAM遷移的樣子。JAM將大幅縮小波卡的內核空間,使其更具通用性。此外,Parachains協議將移至用戶空間,因爲這是爲數不多的能夠在相同核心(硬件)和內核(JAM)上編寫應用程序的方式之一。
這也再次說明了爲什麼JAM只是波卡中繼鏈的替代品,而不是平行鏈的替代品。
換句話說,我們可以將JAM遷移視爲內核升級。底層硬件保持不變,舊的內核的大部分內容被移至用戶空間,以簡化系統。
本文轉載自[Polkadot生態研究院],著作權歸屬原作者[Polkadot生態研究院],如對轉載有異議,請聯系Gate Learn團隊,團隊會根據相關流程盡速處理。
免責聲明:本文所表達的觀點和意見僅代表作者個人觀點,不構成任何投資建議。
文章其他語言版本由Gate Learn團隊翻譯, 在未提及Gate.io的情況下不得復制、傳播或抄襲經翻譯文章。
Compartilhar
以下是對Polkadot1、Polkadot2及其如何演變爲JAM的詳細解釋。(詳情請參見:https://www.navalmanack.com/almanack-of-naval-ravikant/how-to-think-clearly)本文面向技術讀者,尤其是那些並不十分熟悉波卡但對區塊鏈系統有一定了解的技術人員,並且可能了解其他生態系統相關技術的讀者。
我認爲,在閱讀JAM灰皮書之前,閱讀本文是一個很好的前奏。(詳情請參見:https://graypaper.com/)
本文假定讀者熟悉以下概念:
首先,回顧一下我認爲Polkadot1最具創新性的特徵。
* 網路開發的大部分工作由Polkadot Fellowship完成(詳情請參見:
https://polkadot-fellows.github.io/dashboard/),而不是由財政支持的公司(如Parity:https://www.parity.io/)進行。
關於“異構分片”的更多信息,請參見相關章節。
目前,我們正在討論一個托管其他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機制實現的。(詳情請參見:https://eprint.iacr.org/2024/961)
簡而言之,ELVES可以被看作一種“懷疑式Rollups”機制。通過幾輪驗證者主動詢問其他驗證者某個Layer2區塊是否有效,我們可以極大概率地確認該Layer2區塊的有效性。實際上,在發生任何爭議時,很快就會要求整個驗證者集合參與。波卡聯合創始人Rob Habermeier在一篇文章中詳細解釋了這一點。(詳情請參見:https://polkadot.com/blog/polkadot-v1-0-sharding-and-economic-security#approval-checking-and-finality)
ELVES使得波卡能夠同時具備兩個以前被認爲是互相排斥的屬性:“分片執行”和“共享安全”。這是Polkadot1在可擴展性方面的主要技術成果。
現在,繼續討論“核心(Core)”類比。
一個執行分片的區塊鏈非常像一個CPU:與CPU可以有多個並行執行指令的核心一樣,波卡可以並行處理Layer2區塊。這就是爲什麼波卡上的Layer2被稱爲平行鏈,而由較小的驗證者子集重新執行單個Layer2區塊的環境被稱爲“核心(core)”。每個核心可以抽象爲“一組協同工作的驗證者”。
你可以把單體區塊鏈想象成在任意時間段內只攝取一個區塊,而波卡則在每個時間段內攝取一個中繼鏈區塊和每個核心的一個平行鏈區塊。
到目前爲止,我們只討論了可擴展性和波卡提供的分片執行。值得注意的是,波卡的每個分片實際上都是完全不同的應用程序。這是通過使用存儲在字節碼中的元協議實現的:一種將區塊鏈定義作爲字節碼存儲在區塊鏈自身狀態中的協議。在Polkadot 1.0中,WASM被用作首選字節碼,而在JAM中,則採用了PVM/RISC-V。
總而言之,這就是爲什麼波卡被稱爲異構分片區塊鏈。(詳情請參見:https://x.com/kianenigma/status/1790763921600606259)每個Layer2都是完全不同的應用程序。
Polkadot2的一個重要部分是讓核心的使用更加靈活。在原始的波卡模型中,核心的租期可以從6個月到2年不等,這適合於資源豐富的企業,但對小團隊來說則不太合適。波卡核心能夠以更靈活方式使用的特性被稱爲“敏捷核心時間”(agile coretime)。(詳情請參見:https://polkadot.com/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 execution)。
接下來,從第2點我們可以推斷出,波卡已經提供了一個原生的數據可用性(Data-Availability,以下簡稱DA)層,並且Layer2自動使用它來確保其執行證據在一段時間內可用。然而,可以發布到該DA層的數據塊是固定的,它始終是重新執行Layer2區塊所需的證據。此外,平行鏈的代碼從未讀取DA層數據。
理解上述內容是理解JAM的基礎。總結如下:
通過前一部分的理解,我們可以順利過渡到對JAM的介紹。
JAM是一個受波卡啓發而設計的新協議,並與其完全兼容,旨在取代波卡中繼鏈,並讓核心的使用變得完全去中心化且無限制。
JAM構建於Polkadot2之上,試圖讓波卡的核心更加易於訪問,但方式上比agile-coretime更加靈活和無固定限制。
這主要通過向開發者暴露前面部分討論的三種主要原始概念來實現:即鏈上執行、核心內執行和DA層。
換句話說,在JAM中,開發者可以接觸到:
這是對JAM目標的基礎描述。無需多言,這裏做了很多簡化,且協議可能仍會演變。
有了這個基礎理解,我們現在可以在接下來的章節中進一步探討JAM的一些細節。
在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)中的內容。
回顧現有關於XCM(波卡選擇的平行鏈通信語言)的資料,其中所有通信都是異步的。(詳情請參見:https://github.com/polkadot-fellows/xcm-format?tab=readme-ov-file#11-xcm-communication-model)也就是說,消息發送後,無法等待其回復。
異步性是系統不一致性的表現,是永久分片系統(如波卡1和波卡2以及以太坊現有的Layer2生態系統)的主要缺點。
然而,正如灰皮書第2.4節中描述的,一個始終爲其所有租戶保持同步的完全一致系統,也只能在不犧牲普遍性、可訪問性或彈性的情況下增長到一定程度。(詳情請參見:https://graypaper.com/graypaper.pdf)
同步≈一致性||異步≈不一致性
這也是JAM脫穎而出的另一個領域:通過引入多種特性,JAM實現了一種新穎的中間狀態,即半一致性系統。在這個系統中,頻繁通信的子系統有機會在彼此之間創建一致的環境,而不強制整個系統保持一致。這在灰皮書作者Gavin Wood博士的採訪中得到了最好的描述:(詳情請參見:https://www.youtube.com/watch?t=1378&v=O3kRAVBTkfs&embeds_referring_euri=https%3A%2F%2Fblog.kianenigma.nl%2F&source_ve_path=OTY3MTQ)
另一種理解方式是將波卡/JAM視爲一個分片系統,其中這些分片的邊界是流動的,並且是動態決定的。
波卡一直是分片的,並且完全異質化。
現在,它將被分片、異構,而且這些分片的邊界可以靈活決定,正如Gavin Wood在推特中所謂的“半一致性”系統。(詳情請參見:https://x.com/gavofyork?ref_src=twsrc%5Etfw、https://graypaper.com/)
使這一切成爲可能的特性包括:
1.訪問無狀態的、並行的核心內執行,其中不同的服務只能與在同一核心中且在特定區塊內的其他服務同步交互,以及鏈上執行,其中服務可以訪問跨所有核心的所有服務的結果。
2.JAM不強制執行任何特定的服務調度。頻繁通信的服務可以爲其排序器提供經濟激勵,創建包含這些頻繁通信服務的工作包。這使這些服務能夠運行在同一個核心內,彼此之間的通信就像是在一個同步環境中進行一樣。
3.此外,JAM服務可以訪問DA層,並可以將其用作一種臨時但極其便宜的數據層。一旦數據被放置在DA中,它最終會傳播到所有核心,但在同一個核心內立即可用。因此,JAM服務可以通過在連續區塊中將自己調度到同一個核心,享受更高程度的數據訪問。
需要注意的是,雖然上述內容在JAM中是可能的,但並未在協議層強制執行。因此,預計某些接口在理論上是異步的,但通過精妙的抽象和激勵措施,可以在實踐中表現爲同步的。接下來的部分將討論的CorePlay就是這樣的一個例子。
本節介紹了CorePlay,這是在JAM環境下的一個實驗性想法,可以描述爲一種新的智能合約編程模型。截至撰寫本文時,CorePlay尚未被詳細說明,仍然是一個設想。
要理解CorePlay,我們首先需要介紹JAM選擇的虛擬機: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的屬性,使這種情況成爲可能。
最後,讓我們總結一下提到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.向外擴展: 1.樂觀Rollups 2.基於SNARK的Rollups 3.ELVES:波卡的諷刺Rollups(Cynical Rollups)
本節基於Rob Habermeier在Sub02023中提供的類比:波卡:Kernel/Userland|Sub02023-YouTube(詳情請參見:https://www.youtube.com/watch?v=15aXYvVMxlw),展示了JAM作爲對波卡的升級:在相同硬件上的內核更新。
在典型的計算機中,我們可以將整個堆棧劃分爲三個部分:
1.硬件2.內核3.用戶空間
在波卡中,硬件,即提供計算和數據可用性的本質,一直是核心(cores),如前面所述。
在波卡中,內核實際上[9]到目前爲止包含了兩個部分:
1.平行鏈(Parachains)協議:一種意見化、固定的使用核心的方式。2.一組低級功能,例如DOT代幣及其可轉移性、質押、治理等。
這兩者都存在於波卡的中繼鏈(Relay Chain)中。
用戶空間應用則是parachains的實例、它們的原生代幣以及在它們之上構建的其他內容。
我們可以如下可視化這一過程:
波卡一直設想將更多的核心功能移至其一類用戶——平行鏈。這正是Minimal Relay RFC旨在實現的目標。(詳情請參見:https://github.com/polkadot-fellows/RFCs/blob/main/text/0032-minimal-relay.md)
這意味着波卡中繼鏈僅處理提供平行鏈協議,從而在一定程度上縮小了內核空間。
一旦實現了這種架構,便更容易可視化JAM遷移的樣子。JAM將大幅縮小波卡的內核空間,使其更具通用性。此外,Parachains協議將移至用戶空間,因爲這是爲數不多的能夠在相同核心(硬件)和內核(JAM)上編寫應用程序的方式之一。
這也再次說明了爲什麼JAM只是波卡中繼鏈的替代品,而不是平行鏈的替代品。
換句話說,我們可以將JAM遷移視爲內核升級。底層硬件保持不變,舊的內核的大部分內容被移至用戶空間,以簡化系統。
本文轉載自[Polkadot生態研究院],著作權歸屬原作者[Polkadot生態研究院],如對轉載有異議,請聯系Gate Learn團隊,團隊會根據相關流程盡速處理。
免責聲明:本文所表達的觀點和意見僅代表作者個人觀點,不構成任何投資建議。
文章其他語言版本由Gate Learn團隊翻譯, 在未提及Gate.io的情況下不得復制、傳播或抄襲經翻譯文章。