4 月19 日,在杜拜Token 2049 大會上,Gavin Wood 宣布了對下一代Polkadot 技術的大膽願景。與Polkadot 為市場帶來的其他突破性首創一樣,這個新願景將徹底改變Web3 的未來。它將提供Web3 所需的速度、規模、完全去中心化和易用性,以推動Web3 乃至整個技術領域的深度創新。
這個願景的核心是JAM,它是Polkadot 鏈的新版本,它將推動Polkadot 的功能超越當前Web3 的界限,同時使在Polkadot 上部署廣泛的技術成為可能。透過JAM,目前只能透過rollup 才能看到的突破性可擴展性被帶到了共識層。
在開發完成後,JAM 將成為一台分散式計算機,可以運行幾乎任何類型的任務,這些任務可以表示為服務。 JAM 將Polkadot 推向同步可組合性的世界,這將有助於減少碎片化並整合活動,因此Polkadot 上的應用程式能夠更好地利用整個生態系統的網路。這將為深度創新開啟新的可能性,並為開發者提供一個強大的環境,讓他們能夠以前所未有的方式進行創作。
JAM 目前正處於研究和開發階段。目前,Polkadot 社區有一項提案可供投票(公投682 https://polkadot.polkassembly.io/referenda/682),以確認這一新方向並授權Technical Fellowship 批准JAM。
為了支持JAM 的發展,並確保它以真正的去中心化精神構建,Gavin 在演講中與Web3 基金會聯合宣佈設立JAM 獎金,總共1000 萬DOT 將用於激勵JAM 的其他實現的開發。
在演講的同時,Gavin 也發布了一份技術灰皮書。如果你想深入了解該專案的願景和技術細節,可以在新的JAM Graypaper 網站上找到論文:https://graypaper.com/。
Gavin 和Polkadot 共同引領創新技術的創建,旨在實現創建自由開放網路的願景。 JAM 是不斷發展的Polkadot 故事的下一章。
以下是Polkadot Wiki 中對於JAM 的最新介紹,由Gavin Wood 撰寫。
JAM 的全名為Join-Accumulate Machine,它是一種計劃取代現有中繼鏈的新設計。 JAM 的名稱源自CoreJAM,表示Collect Refine Join Accumulate,描述了機器所體現的計算模型,最初是由Gavin Wood 在RFC 中描述的。然而,在實際的鏈中,僅執行Join 和Accumulate,而Collect 和Refine 過程發生在鏈下。
與目前的迭代方法不同,JAM 將作為一個全面的單一升級引入。這樣做的幾個原因包括:
- 統一的升級可以精確限制升級後的操作,這在迭代方法中很難做到。
- 它減少了經常在幾週或幾個月內定期發生的小升級和重大變更。
雖然這項轉變需要重大的突破性改變,但我們將努力將其影響力降至可管理的水平。將多個較小的突破性變化整合到單一的過渡中是更好的選擇,它引入了一個新的區塊鏈概念,整合了各種現有的想法。
一條Rollup 鏈
JAM 將是一個特定領域的鏈,用於處理特定領域的問題。在這種情況下,就是rollup,以太坊社群稱為optimistic roll-up。 JAM 的rollup 在安全性方面受到很大限制。這就是Polkadot 在過去五年裡一直在做的事情,它已經是一個高度特定領域的rollup 鏈。 JAM 本質上讓它帶有更少的預設偏好,變得更加通用。
JAM 鏈接受rollup 的輸出,更普遍地說,是在其他地方完成的計算位,將輸出整合到共享狀態中,類似於Polkadot 中繼鏈的功能。
JAM 鏈的任務是提供必要的設備,以確保輸出在轉換後正確反映輸入。
與智能合約鏈的相似之處
JAM 與智能合約鏈有幾個相似之處:
- JAM 鏈本身直接執行無需許可的程式碼。
- JAM 鏈的狀態被組織成不同的封裝。
- 除了狀態的封裝之外,還包括代碼和餘額的封裝。
這些狀態的封裝被稱為服務。因此,JAM 的狀態被劃分為服務。創建新服務是無需許可的,類似於在智能合約鏈上部署智能合約。因此,在JAM 鏈中添加新服務不需要任何權威的批准或遵守治理機制,這與基於Substrate 的鏈不同,後者要求添加新pallet 需要治理批准。服務包括代碼、餘額和某些狀態組件,類似於智能合約鏈上常見的結構。
服務入口點
JAM 服務的代碼分為三個不同的入口點:
- Refine 是執行大部分無狀態計算的函數。它為特定服務的rollup 定義轉換。
- Accumulate 函數會取得輸出並將其折疊到服務的整體狀態中
- OnTransfer 處理來自其他服務的資訊。
工作包是服務的輸入。工作包可以包含許多工作項目。每個工作項都與一個服務相關聯,並且它反映了該服務的實際輸入。對於平行鏈服務,這是交易和所有區塊鏈輸入的輸入處。
JAM 的安全裝置包括兩階段處理,其中Refine 函數接受工作項作為輸入,並產生工作結果作為輸出,然後進入Accumulate 函數(先Refine,後Accumulate)。工作項目被細化成工作結果,因此,包含許多工作項目的工作包被細化成工作報告,工作報告是多個工作項目對應的結果。可以分配一個工作包,在特定時間段(通常為6 秒)內使用一個核心。
JAM 是無交易的
JAM 透過無交易(Transactionless)操作來區別於智能合約鏈。 JAM 內沒有交易;所有動作都是無需許可的,並且最初會經歷Refine 階段。在這個階段,服務預先細化輸入數據,將其轉換為包含工作結果的工作報告。隨後,這些工作結果被傳送到鏈上。
儘管沒有交易,JAM 仍然接受特定格式的外部資訊。有五種類型的外部資訊:
1. 保證(Guarantees)
2. 保險(Assurances)
3. 判斷(Judgments)
4. 原像(Preimages)
5. 票據(Tickets)
前三種類型是JAM 鏈安全框架的一部分。 "Guarantees"(保證)和"Assurances"(保險)涉及到驗證者集體證明某個工作結果在透過服務的"Refine" 函數轉換後,準確反映了其對應工作項目的結果。
當工作結果的完整性受到質疑時,就會發生判斷,此時大量驗證者證明其有效性或缺乏有效性。在這種情況下,無效的工作項目可能已經整合到服務的狀態中,可能需要進行回溯。判斷必須在提交工作報告到鏈上的一小時內進行,期間區塊終結暫時暫停。
原像是JAM 鏈為Refine 函數提供的特性。雖然Refine 函數通常是無狀態的,但它可以執行一個有狀態操作:尋找雜湊的原像。這個特性是Refine 函數的唯一有預設偏好的面向。
票據作為匿名條目進入區塊生產機制。它們不是區塊生產的直接要求;相反,系統提前兩個時代(epoch)運作。這個機制是SAFROL 演算法的一部分,是原始SASSAFRAS 演算法的精煉版本。
Refine 函數
在JAM 中,Refine 處理階段可以在每個時間段接受高達15 MB 的數據,每個時間段持續6 秒。然而,Refine 產出的資料最大為90 kB,由於可用性系統的分散特性,需要進行大量的資料壓縮。例如,在平行鏈的背景下,15 MB 的資料代表有效性證明(PoV),而90 kB 的資料對應於候選收據。
Refine 可以使用高達6 秒的PVM Gas,相當於中繼鏈的完整區塊週期。這一延長的執行時間,與PVF 目前的兩秒限制相比,是透過安全計量和其他最佳化來實現的。
Refine 也可以進行原像查找。如果相信某個雜湊及其相關原像在JAM 鏈上可用,可以透過提供雜湊來請求原像。這項能力使得程式碼的高效儲存和檢索成為可能,例如透過在JAM 鏈上儲存平行鏈代碼並在工作包中引用其雜湊。
Refine 是主要的處理主力,處理大部分是無狀態操作的任務。
Accumulate 函數
Accumulate 函數負責將Refine 函數產生的輸出整合到鏈狀態中。 Accumulate 可以接受來自Refine 的多個輸出,所有這些輸出都來自相同服務。 Refine 和Accumulate 都作為來自特定服務程式碼區塊的入口點。
Accumulate 每個輸出的執行時間比Refine 的時間短得多,通常最多只有10 毫秒。然而,持續時間取決於工作包中工作項目的數量。如果工作包包含多個項,可用時間就會在它們之間指派。
與Refine 不同,Accumulate 是有狀態的,它可以存取JAM 鏈的狀態。它可以從任何服務讀取存儲,寫入其鍵入存儲,轉移資金,並在資金轉移時包括備忘錄。此外,Accumulate 可以建立新服務,升級其程式碼,並要求原像的可用性等等。
此外,Refine 可以呼叫PVM 的子實例。這允許創建子實例或虛擬機,在其中可以部署程式碼和數據,自訂記憶體和堆疊配置,並在靈活的框架內執行計算。
onTransfer 函數
JAM 系統中的onTransfer 函數也是有狀態的,使其能夠修改服務的狀態。它具有檢查其他服務狀態並修改自身狀態的能力。這項功能促進了服務之間的通信,儘管是以非同步方式進行的。
與許多互動同步發生的智慧合約平台不同,在JAM 中,封裝元件(例如本例中的智慧合約或服務)之間的互動是非同步發生的。訊息和代幣一起發送,並且在同一六秒執行週期內的某個時刻,接收服務會處理它們。沒有立即的返迴路徑;如果需要返迴路徑,則發送服務必須發起另一次傳輸或以接收服務稍後可以解釋的方式修改其狀態。
Accumulate 和onTransfer 都被設計為可並行執行,允許不同服務的Accumulate 和轉移同時發生。這種設計為未來的增強開啟了可能性,例如分配超過目前10 毫秒的gas 輸入。理論上,一個輔助核心可以用來執行某些Accumulate,為它們提供更多的gas 來利用。
JAM 鏈的通用化
正如原始Polkadot 白皮書中所述,Polkadot 主要針對特定的服務設定檔進行客製化:提供平行鏈。為了實現這項服務,Polkadot 開發了兩個重要的子元件:
- 分散式資料可用性系統
- 為計算提供稽核和保證的系統(即具有強大安全保證的Optimistic rollup 系統)
與Polkadot 相比,JAM 的預設偏好更少,提供了更高程度的抽象和概括。這有助於根據個人喜好更輕鬆地利用底層組件。
JAM 以無需許可的方式運作,類似於智慧合約鏈,允許個人上傳和預期程式碼的執行。此外,它託管數據,啟用原像查找,並管理狀態,類似於鍵值對系統。由於JAM 缺乏直接接受交易的機制,JAM 的創世區塊包含一項促進新服務創建的服務。
JAM 內的服務沒有為程式碼、資料或狀態的數量設定預先定義的限制。它們的能力由加密經濟因素決定;存放的DOT 代幣越多,數據和狀態的容量就越大。例如,平行鏈服務在JAM 上將所有Polkadot 1.1 功能整合到一個服務中,其他服務也可以利用Polkadot 的分散可用性系統,以及計算的審計和保證系統。
Polkadot 虛擬機器(PVM)
PVM 的設計基於RISC-V 指令集架構(ISA),該架構以其簡單性和多功能性而聞名。 RISC-V ISA 提供了幾個優勢:
1. 易於轉譯成常見的硬體格式,如x86、x64 和ARM。
2. 得到像LLVM 等工具的良好支援。
PVM 本身體現了簡單性和安全性,具備沙盒化的能力並提供各種執行保證。它具有確定性、共識敏感且易於計量。與其他虛擬機器相比,PVM 缺乏複雜性和過度的預設偏好。
WASM 雖然針對Web 用例進行了最佳化,但也為堆疊管理帶來了挑戰,特別是在處理連續性方面。 RISC-V 透過將堆疊放置在記憶體中來解決這個問題,從而自然地促進連續處理,而無需增加複雜性。
此外,PVM 在傳統硬體上運行時,尤其是在X64 和ARM 上,展示了卓越的執行速度,提供了免費計量等優勢,這與WASM 相比具有優勢。
支援RISC-V 的連續性將為跨JAM 等多核心平台的可擴展編碼建立新標準。非同步並行架構對於硬體和軟體平台的可擴展性越來越重要,這一趨勢預計將擴展到區塊鏈和共識演算法。
SAFROLE
SAFROLE 是一個區塊生產演算法,簡化了SASSAFRAS。它排除了一些對平行鏈可能有用的組件。所以平行鏈可能會堅持使用SASSAFRAS 而不是SAFROLE。 SAFROLE 會盡量簡單:
- 確保盡可能減少預設偏好,以最大化潛在的未來用例。
- 追隨以太坊黃皮書的腳步,並真正嘗試獲得盡可能多的實現,以嘗試和傳播專業知識。
理解Polkadot 1.0 的端到端工作方式很具挑戰性。有了JAM,能夠閱讀和理解黃皮書的人應該能夠很快地閱讀和理解JAM 的工作方式。所以簡單性至關重要。
SAFROLE 是一個基於SNARK 的區塊生產演算法。它使用SNARK 是因為其匿名特性。並且它提供幾乎完全無分叉的恆定時間區塊生產。可能發生分叉的幾個實例基本上只有在出現網路分裂或有人故意惡意操作時才會發生。匿名的巨大價值不是為了保持驗證者身份的秘密;實際上,當他們產生一個區塊時,他們無論如何都會暴露自己的身份,這麼做其實是為了確保區塊生產機製本身的安全,基本上是為了避免垃圾交易攻擊。
網路
JAM 的網路使用QUIC 協定。這允許在大量驗證者之間直接建立點對點連線。因此,Polkadot 上的1000 多個驗證者可以彼此保持持久連接,而不必擔心可能的套接字問題。由於JAM 不處理交易,基本上不需要八卦(gossip)。在需要分發不是點對點或在非常小的驗證者子集中的情況下,將使用網格擴散,驗證者被排列成一個網格,包按行發送,然後每個節點將其發送到其列的所有成員。
用於高效區塊處理的管線
在類似以太坊這樣的基於狀態的區塊鏈中,區塊的標題通常包含後狀態根,總結了所有區塊計算後的狀態。因此,直到所有計算完成之前,區塊頭不能發送。但是,可以在發送區塊頭之前執行一些計算,因為它們的結果決定了區塊的有效性。
然而,JAM 採用了不同的方法,將前狀態根放在區塊頭中,而不是後狀態根。這意味著標題中顯示的狀態根比一個區塊延遲。因此,可以執行大約佔區塊工作量或執行時間5% 的輕量級計算,並可以立即分發區塊。其餘95% 的區塊運算,主要是Accumulate 任務,可以隨後完成。這使得在執行當前區塊之前可以開始下一個區塊。
這種方法允許更有效地利用區塊之間的時間。在傳統設定中,如Polkadot 的六秒區塊時間,後狀態根必須提供,只能用部分時間進行計算。然而,透過JAM 中的管線,可以有效地利用整個區塊時間進行計算,最大化效率。
雖然使用整個區塊時間進行計算可能不是理想的,因為它可能會導致永久追趕和延遲區塊導入,但與傳統設定相比,JAM 的方法可以顯著延長計算時間。這意味著可以實現大約三到三秒半的有效區塊計算時間,這比目前設定有了很大的改進。
架構差異:JAM 與中繼鏈
JAM 和中繼鏈之間的一個架構上的差異在於功能的固定程度。雖然中繼鏈固定了一些元素,例如用於定義協定的語言(WASM),但JAM 在這方面走得更遠。例如,它規定了用於編碼區塊標題和雜湊方案的類型,使得更改這些方面變得困難。
然而,JAM 透過其服務模型保留了與中繼鏈中的WebAssembly 元協定所實現的靈活性相當的靈活性。在這個模型中,將可升級性責任轉移到服務上,使鏈本身免於承擔升級的負擔。支持這項決定的三個主要理由包括:
- 優先考慮簡單性。維護不可升級的鏈顯著減少了複雜性。
- 中繼鏈傾向於引入複雜的功能,而不刪除舊的功能,這使得事情變得複雜。由於升級容易實現,因此幾乎沒有簡化Substrate SDK 的動機。因此,複製Polkadot 變得不切實際。
- JAM 的固定參數提供了最佳化潛力。透過清楚了解JAM 鏈必須執行的特定任務和能夠設定固定參數,網路拓撲和時序等領域的最佳化變得可行。這與中繼鏈高度可升級的本質形成對比,在那裡,由於每次升級都可能進行頻繁的更改,因此這些優化更複雜。
儘管存在這些差異,JAM 在應用程式層級功能上保持了靈活性,例如核心時間銷售、質押和治理,所有這些都在服務內部管理。此外,JAM 透過將代幣餘額與服務關聯,引入了一個新概念,為在純粹可升級的鏈如中繼鏈中不容易實現的經濟模型調整提供了機會。
JAM Toaster
為了確保JAM 符合其最初的期望,正在進行的工作包括為JAM 鏈建立一個全面的測試環境。與在不可靠的硬體上運行小規模測試網路以管理雲端運算成本不同,這項舉措涉及大量投資。
這裡引入了JAM Toaster,本質上是一個用於進行大規模試驗和性能評估的測試平台。這解決了先前在開發Polkadot 中繼鏈期間遇到的挑戰,當時我們了解到在如此規模上運作網路的緊急效應和動態證明是困難的。先前的嘗試僅限於測試網路上的數十個節點以及Kusama 網絡,由於無法存取驗證節點,Kusama 缺乏全面的監控能力。相較之下,小規模測試網路未能準確模擬大規模部署的網路動態。
JAM Toaster 旨在透過對整個JAM 網路(包括1023 個節點)進行深入研究來彌補這一差距。該平台有助於研究網路行為和效能特徵,為開發人員提供有關平行鏈預期效能的寶貴見解。
JAM 和Substrate
基準測試vs 計量
在JAM 中,基準測試或效能測試可以是可選的。雖然在某些情況下仍可能需要基準測試,但JAM 的計量系統通常可以避免頻繁的基準測試需求。 JAM 運行在一個計量系統上,讓使用者在完成後評估計算工作量。此外,還有一個理論機制可以在區塊建構時控制計算。
然而,在某些情況下,基準測試仍然是需要的。例如,當計量對於某些用例來說過於保守時,可能需要進行基準測試來提高效能。此外,基準測試對於需要延長執行時間的任務很有用,可確保它們不會運行過長。
XCMP
接下來是跨鏈訊息傳遞(XCMP),JAM 要求提供全面的XCMP 支援。這是因為在中繼鏈中,如果所有平行鏈始終傳輸所有數據,則可以透過候選收據傳遞更多數據。 JAM 嚴格遵守規則,即使對於平行鏈服務也是如此,包括對「Refine」 和「Accumulate」 階段之間的資料傳輸的限制。目前,使用水平中繼鏈訊息傳遞(HRMP),所有訊息都會遍歷中繼鏈,將資料有效負載限制為4 kB 或更少,這可能不切實際。因此,XCMP 只通過鏈中繼訊息頭,而實際訊息資料在鏈下傳輸,這是必要且早該進行的改進。
Accords
Accords 本質上封裝了狀態和邏輯,類似於智慧合約,每個平行鏈都有多個實例。它們促進實例之間的訊息交換並實現與平行鏈的同步互動。協議在平行鏈之間缺乏信任的場景中有用,例如代幣轉移。與涉及儲備中介的現有方法不同,Accords 簡化了平行鏈之間的直接代幣傳送,消除了對信任妥協的中介的需求。此外,Accords 可以充當XCM 轉發機制,即使透過第三方中介機構中繼也能確保訊息完整性,從而消除了對明確來源標記的需求。
提高效率
最後,JAM 採用更廣泛、較不預設偏好的方法來利用底層共識機制,有助於實施更具創新性的解決方案。例如,對於像零知識證明這樣的複雜任務,分散式可用性變得更加實用和高效。此外,JAM 支援混合資源消耗模型,其中工作包可以包含運算密集型任務和資料密集型操作。透過將需要大量運算的服務與需要高資料可用性的服務配對,JAM 優化了驗證者資源的利用,從而降低成本。這種靈活的方法使得如分散式可用性和SNARK 驗證與平行鏈工作負載的組合成本更低,同時提高效率。
JAM 的增強和相容性
JAM 的設計優先考慮與現有Polkadot 1 平行鏈的兼容性。雖然它保持與Polkadot SDK 的兼容性,但Polkadot 驗證者函數(PVF)進行了重新定位。它將面向Polkadot 虛擬機器(PVM),而不是WebAssembly。這項過渡得益於PVM 是RISC-V 的輕微修改,RISC-V 已經被正式確定為LLVM 的一個目標。因此,在部署JAM 之前,PVM 可能會成為正式的LLVM 目標。
除了作為平行鏈的宿主外,JAM 引入了顯著的增強功能。它提供了簡化基準測試工作並減輕未來基準測試需求的潛力。此外,JAM 引入了協定、多實例、多分片智慧合約的概念,用於管理和執行平行鏈之間的特定互動協定。此外,全面的跨鏈訊息傳遞(XCMP)支援至關重要,使得可以消除平行鏈之間訊息傳輸的限制,這通常是透過跨鏈訊息(XCM)來促成的。
關於敏捷核心時間(Agile Coretime),JAM 保持了與現有設定的兼容性。然而,它引入了不僅在平行鏈上,而是可以在任意工作包組上定位核心時間的功能。這種靈活性增強了JAM 生態系內資源分配的多功能性和效率。