深入了解波卡跨共識(shí)消息 XCM(1)
加入 PolkaWorld 社區(qū),共建 Web 3.0!

在近期的 Zero Knowledge 播客節(jié)目中,Parity 聯(lián)合創(chuàng)始人 Rob Habermeier 分享了 XCM 如何允許平行鏈相互通信。PolkaWorld 翻譯了該播客內(nèi)容,本文是第一部分,接下來的部分會(huì)在近期發(fā)布在 PolkaWorld 公眾號(hào)上。
AnnaRose:歡迎來到 Zero Knowledge,我是主持人 AnnaRose。在這檔播客中,我們將探索最新的零知識(shí)研究和去中心化網(wǎng)絡(luò),以及有望改變我們?cè)诰€互動(dòng)和交易方式的新范式。
本周,我與來自 Parity 的朋友 Robert Habermeier 聊了聊 XCM,即跨共識(shí)消息傳遞格式。我們討論了 XCM 允許平行鏈通過中繼鏈上的驗(yàn)證人相互傳遞消息的方式,這是 Polkadot 原生互操作性協(xié)議。這里做一個(gè)小修正,在對(duì)話中我混淆了兩個(gè)術(shù)語 —— XCM 代表跨共識(shí)消息,XCMP 代表跨鏈消息傳遞。
Rob 也是我多年的朋友,有時(shí)也和我共同主持這個(gè)節(jié)目。歡迎回來,Rob。
Rob:謝謝,很高興來到這里。
AnnaRose:今天我們將了解 Polkadot 的一些進(jìn)展,回顧一下自從上一次你來到節(jié)目后發(fā)生的事情。我想先深入聊聊 XCM 的定義。
Rob:好的。XCM 代表跨共識(shí)消息,隨著時(shí)間的推移,我們可以用它來連接起許多不同的生態(tài)。一開始,它主要關(guān)注接入到中繼鏈的平行鏈之間的通信,或者說 Polkadot/Kusama 生態(tài)中的區(qū)塊鏈。
AnnaRose:我剛剛提到了 XCM,但還有個(gè)類似但不一樣的術(shù)語叫 XCMP。它們都是什么意思?
Rob:這個(gè)確實(shí)值得注意一下。首先說明一下,我們之后很可能會(huì)把 XCM 的名稱改掉,改成一個(gè)更吸引人的名稱。XCM 代表跨共識(shí)消息,它只是一種格式和協(xié)議,而不是消息的實(shí)際數(shù)據(jù)傳遞。消息的傳遞就是我們所說的 XCMP,即跨共識(shí)消息傳遞或跨鏈消息傳遞,也就是讓 Polkadot 生態(tài)系統(tǒng)中的平行鏈互相發(fā)送基本原始數(shù)據(jù)的機(jī)制,這樣它們就可以發(fā)送任何類型的字節(jié)。但我們還創(chuàng)建了跨共識(shí)消息格式 XCM,它將語義含義附加到這些字節(jié),并且作為生態(tài)系統(tǒng)內(nèi)的標(biāo)準(zhǔn),用于表示鏈可能對(duì)每個(gè)字節(jié)采取的不同類型的操作。
AnnaRose:我們應(yīng)該深入聊聊這一點(diǎn)。但在這之前,我想了解一下,自從我們上次采訪你以來你一直在做什么,上一次采訪應(yīng)該是 2019 年夏天。從那以后發(fā)生了很多事情,可以簡單介紹一下過去快三年里,你經(jīng)歷了什么嗎?
Rob:讓我們把時(shí)間拉回到過去,這中間真的發(fā)生了好多好多事情。2019 年夏天我們聊的時(shí)候,我們的重點(diǎn)主要是在開發(fā) Substrate 上,包括區(qū)塊鏈 SDK、共識(shí)機(jī)制和 Polkadot 平行鏈如何實(shí)際運(yùn)作的研究。所以當(dāng)時(shí),除了平行鏈協(xié)議如何運(yùn)作的原型之外,我們沒有任何東西。那么在 2019 年,我們?cè)谂ψ鍪裁茨??我們?cè)跇?gòu)建可插拔的共識(shí)和 Substrate,我們?cè)跇?gòu)建 WebAssembly 執(zhí)行的東西,用于構(gòu)建我們稱之為 ENCO 的 runtime,即鏈的業(yè)務(wù)邏輯,我們正在致力于讓 libP2P 可以用于生產(chǎn)環(huán)境。這是在 Kusama 發(fā)布前不久,它于 2019 年秋季上線。
Kusama 網(wǎng)絡(luò)本質(zhì)上是 Polkadot 的金絲雀網(wǎng)絡(luò),代碼可以在其中以實(shí)際價(jià)值投入生產(chǎn),它也是權(quán)益證明網(wǎng)絡(luò),只是與 Polkadot 主網(wǎng)不同級(jí)別的權(quán)益。所以簡而言之,在 2019 年我們剛剛起步。我認(rèn)為 Polkadot 在很多方面都是一個(gè)獨(dú)特的項(xiàng)目,因?yàn)槲覀儙缀鯊念^開始構(gòu)建了整個(gè)技術(shù)棧。這包括網(wǎng)絡(luò)、WebAssembly 執(zhí)行、WebAssembly 編譯、區(qū)塊格式、Gossip 協(xié)議。我的意思是,絕對(duì)一切都是內(nèi)部構(gòu)建的代碼。所以我們?cè)谀嵌螘r(shí)間里一直在培養(yǎng),很多專業(yè)知識(shí),但就實(shí)際所做的而言,我覺得今天(5 月 11 日)實(shí)際上是我們談?wù)?XCM 的好日子,因?yàn)榻裉靹偤檬?XCM 在波卡啟動(dòng)的日子。
XCM 已經(jīng)在 Kusama 上啟動(dòng)了幾個(gè)月了,我記得有三四個(gè)月了,平行鏈已經(jīng)能夠相互打開通道并發(fā)送消息。但是今天,一項(xiàng) Runtime 升級(jí)通過了治理的批準(zhǔn)并在 Polkadot 上實(shí)施,這讓平行鏈能夠在 Polkadot 上做完全相同的事情。所以我們現(xiàn)在可以讓價(jià)值在平行鏈之間 “飛行” 了。但與此同時(shí),從 2019 年開始,我們基本構(gòu)建了整個(gè)平行鏈協(xié)議。我們完成了大量的研究,并構(gòu)建了這個(gè)協(xié)議的生產(chǎn)化實(shí)現(xiàn)。這是為了實(shí)際構(gòu)建平行鏈區(qū)塊,發(fā)送給驗(yàn)證人進(jìn)行驗(yàn)證,包括整個(gè)數(shù)據(jù)可用性層和安全協(xié)議、批準(zhǔn)和爭議,我有一個(gè)很長的博客文章總結(jié)了所有這些東西。因此,我們不必在此深入討論所有這些東西,但這些都已經(jīng)處理好了。從去年年底發(fā)布后,我們正在慢慢推出所有剩下的功能。
AnnaRose:酷。你認(rèn)為 Polkadot 的形成方式與其他一些協(xié)議有什么不同嗎?我看到有很多東西是后來新加進(jìn)去的,你覺得這些內(nèi)容都是先計(jì)劃好了,現(xiàn)在只是交付計(jì)劃的內(nèi)容呢,還是你覺得有一些戰(zhàn)略、技術(shù)、概念會(huì)隨著你們不斷前進(jìn)而有所發(fā)展?你們有沒有遇到在實(shí)施過程中需要更改最初計(jì)劃好的內(nèi)容的情況?
Rob:當(dāng)然不同。Polkadot 不是 Geth 的分叉,最大區(qū)別之一是我們擁有自己的代碼庫,我認(rèn)為這可以追溯到 Parity,也就是曾經(jīng)的 EthCore 的精神,它是第一個(gè)真正嚴(yán)肅的以太坊替代客戶端,以 Rust 實(shí)現(xiàn),并且是將 Rust 帶入?yún)^(qū)塊鏈?zhǔn)澜绲氖讋?chuàng)。所以我們本質(zhì)上是區(qū)塊鏈節(jié)點(diǎn)編寫者,這給了我們理由來再次實(shí)現(xiàn)很多東西,并以我們自己的方式去做,從過去編寫區(qū)塊鏈節(jié)點(diǎn)中吸取教訓(xùn)。我們有邊實(shí)踐邊學(xué)嗎?絕對(duì)的。開發(fā)過程中的好玩的地方,但也很煩人的地方就是,你需要面對(duì)現(xiàn)實(shí)情況,面對(duì)碎片化和嵌套的復(fù)雜性。
你可以說 “我們只是要執(zhí)行這段代碼”。那么,你是在一個(gè)單獨(dú)的進(jìn)程中做到這一點(diǎn)的嗎?比如萬一機(jī)器宕機(jī)了,你想怎樣把它持久化到硬盤上?而這些東西,在你剛寫論文,做最小化假設(shè)時(shí),是很難把它們都考慮到的。當(dāng)你寫論文的時(shí)候,你只是說 “不能有三分之一的節(jié)點(diǎn)出故障”。但是在工程實(shí)踐中,你必須非常小心,確保沒有人可以發(fā)送一個(gè)消息包,把所有節(jié)點(diǎn)都宕掉。還要注意你正在使用的資源類型,你的實(shí)際內(nèi)存限制是多少等等。所以我們當(dāng)然必須得適應(yīng)現(xiàn)實(shí)情況。其實(shí) Polkadot 白皮書中描述的內(nèi)容更類似于現(xiàn)在的 Optimistic Rollups。
AnnaRose:哇哦。也就是更像是博弈論性質(zhì)的?中繼鏈和平行鏈之間的安全性不是欺詐證明?
Rob:是的,有點(diǎn)類似。還有很多細(xì)節(jié)還沒有探索,比如鏈如何終結(jié)?終結(jié)的必要先決條件是什么?你需要什么樣的分叉選擇規(guī)則來確保避免壞區(qū)塊,以及類似的事情。因此,我們現(xiàn)在會(huì)解釋說,對(duì)于 Rollup 生態(tài)來說,是一種分割并選擇的 Rollup,我們我們使用隨機(jī)抽樣和主動(dòng)檢查以確保平行鏈區(qū)塊的狀態(tài)轉(zhuǎn)換實(shí)際上是有效的,而不是像欺詐證明機(jī)制那樣,只是做出某種潛在的經(jīng)濟(jì)假設(shè) —— 如果現(xiàn)在還沒有人說這件事是壞的,那它可能是好的。我們實(shí)際上有一個(gè)更主動(dòng)的檢查,就像是 —— 現(xiàn)在有這么多人檢查它,如果他們中的一些人消失了,我們會(huì)招募更多的人來檢查它。如果有人提出異議,就會(huì)升級(jí)到每個(gè)人都檢查。然后我們就知道,這些人都已經(jīng)簽署了良好的區(qū)塊,因此我們可以終結(jié)它。所以在安全模型方面,我們現(xiàn)在更像是 ZK Rollups,而不是 Optimistic Rollups 之類的東西。
AnnaRose:然而它也不是 ZK,它不是有效性證明。你還在做某種檢查,本質(zhì)上是抽樣。
Rob:是的,沒錯(cuò)。你可以在此模型中做 ZK Rollups。當(dāng)然,ZK Rollups 的經(jīng)典問題是你創(chuàng)建的電路的復(fù)雜性。在 Polkadot 模型中,我們提供的是讓你能夠檢查狀態(tài)轉(zhuǎn)換是否有效的見證數(shù)據(jù)。然后大家實(shí)際上必須去檢查并確保它真的是有效的,而不是僅僅在 Layer 1 共識(shí)機(jī)制上執(zhí)行。
AnnaRose:這種新模式是如何產(chǎn)生的?中繼鏈?zhǔn)菙?shù)據(jù)可用性鏈嗎?也就是 Rollups 這類的東西存儲(chǔ)的地方?
Rob:是的,數(shù)據(jù)存儲(chǔ)在中繼鏈的驗(yàn)證人集中。所以我們不做輕客戶端可用性抽樣,這是一種潛在的經(jīng)濟(jì)假設(shè),即會(huì)有足夠的輕客戶端。我們只是說,好吧,這些是中繼鏈的驗(yàn)證人。他們的任務(wù)之一是提供數(shù)據(jù)。因此,我們做了糾刪碼,讓其中任何三分之一的驗(yàn)證人片段都可以重建整個(gè)數(shù)據(jù)。在考慮包含平行鏈區(qū)塊之前,三分之二的驗(yàn)證人必須確認(rèn)他們擁有自己的區(qū)塊。于是就有了這種糾刪碼和代碼塊分配機(jī)制。這是中繼鏈和平行鏈機(jī)制的一部分。
中繼鏈為平行鏈提供了許多服務(wù),但最重要的是數(shù)據(jù)可用性、安全性和分叉選擇規(guī)則。這個(gè)分叉選擇規(guī)則非常重要,因?yàn)槲覀儗?shí)際上已經(jīng)將中繼鏈的分叉選擇規(guī)則與平行鏈或 Rollup 有效性集成在一起,這意味著你可以非常及時(shí)地處理平行鏈之間的消息,甚至在你知道它們是有效的之前,因?yàn)槿绻惆l(fā)現(xiàn)它們是無效的,你只需在那個(gè)無效區(qū)塊處分叉就行。
AnnaRose :這個(gè)過程會(huì)很麻煩嗎?還是說你們把它實(shí)現(xiàn)得很簡單?
Rob:它不是手動(dòng)的,是完全自動(dòng)化的。在良好的網(wǎng)絡(luò)條件下,整個(gè)過程只需要幾分鐘。讓壞區(qū)塊被廢棄,并在其位置上構(gòu)建一個(gè)新區(qū)塊。
AnnaRose:你們真的見過壞區(qū)塊嗎?
Rob:在主網(wǎng)上還沒有,在我們的測(cè)試網(wǎng)上有過。在推出這個(gè)功能之前,我們編寫了一個(gè)測(cè)試網(wǎng),其中包含一千個(gè)全球分布的驗(yàn)證人。我們編寫了惡意驗(yàn)證人,它們會(huì)嘗試以多種不同的方式對(duì)其進(jìn)行攻擊。比如說,假設(shè)不分發(fā)數(shù)據(jù)塊或分發(fā)壞的數(shù)據(jù)塊,或者讓數(shù)據(jù)無效或泄露,還有比如把好的說成壞的,壞的說成好的。我們會(huì)以非常高的速度運(yùn)行這些攻擊,測(cè)試網(wǎng)絡(luò)連續(xù)幾周每 10 秒重組一次。我們以這種方式發(fā)現(xiàn)了許多問題。在我們上線到主網(wǎng)之前,已經(jīng)連續(xù)運(yùn)行了幾周。
AnnaRose:我們又聊回 XCM 吧。你在開頭定義了 XCMP 和 XCM 之間的區(qū)別,我可以把 XCM 看作和 IBC 同類的東西嗎?是不是 XCM 是規(guī)則和標(biāo)準(zhǔn),XCMP 是 action 或者中繼器?
Rob:我們使用的一個(gè)比喻是,XCM 和 XCMP 的關(guān)系,就像 HTTP 服務(wù)器開發(fā)中的 REST 和 RESTful 的關(guān)系。RESTful 是指你如何回答請(qǐng)求,是無狀態(tài)的,接收請(qǐng)求,做出響應(yīng);而 REST API 本身就是 API。
AnnaRose:XCM 是 API,XCMP 是 action 嗎?
Rob:只是數(shù)據(jù),它是數(shù)據(jù)和該數(shù)據(jù)會(huì)送達(dá)的保證。
AnnaRose:好的,我假設(shè)大多數(shù)聽眾都知道 Polkadot 的架構(gòu),有中繼鏈,有平行鏈接入到上面。對(duì)于接入到波卡的平行鏈,除非它們之間打通一種獨(dú)特的橋,否則沒有任何代幣可以在平行鏈之間移動(dòng),是這樣嗎?
Rob:是的,有點(diǎn)像側(cè)通道橋,或者更像是團(tuán)隊(duì)創(chuàng)建的臨時(shí)橋。但安全保障的級(jí)別不同。因此,XCMP 的一個(gè)關(guān)鍵點(diǎn)是,本質(zhì)上每條平行鏈都可以創(chuàng)建連接到其他每條平行鏈的橋,我們稱這些橋?yàn)?“通道”。每條平行鏈的安全保障都是一樣的,都有最高級(jí)別的安全性。因此,它們之間的消息傳遞也有著相同級(jí)別的安全性。所以這里面沒有最薄弱的一環(huán),你可以即時(shí)傳遞消息。
AnnaRose:我猜想 XCM 的主要使用場景之一是移動(dòng)代幣,但你們不稱之為代幣移動(dòng),它不是橋,而是一些消息。如果你要用 XCM 來移動(dòng)代幣的話,這個(gè)過程如何實(shí)際發(fā)生?是不是說,它是一條自動(dòng)路徑,但你還是會(huì)在兩側(cè)構(gòu)建某些東西,例如鎖定/解鎖,鑄造/銷毀等。
Rob:有很多不同的路徑,我解釋一下消息/action 的情況。就像你在郵件中收到一張支票,你可以存入那張支票,你可以用那張支票做你想做的事,但這個(gè)過程獨(dú)立于郵局,對(duì)吧?郵局只是投遞這張紙,但還有一種通用語言,比如支票的語言,和我們知道如何解釋和檢查這些東西上的簽名。所以 XCMP 就像郵政系統(tǒng)一樣,XCM 就像讓我們能理解支票內(nèi)容的文件。那么說到代幣轉(zhuǎn)移,這是你可以使用 XCM 做的事情之一,并且有幾種不同的方法可以做到這一點(diǎn)。
一種方法是我們所說的傳送(Teleport),即銷毀/鑄造。但我們有一個(gè) “值得信賴的傳送者” 的概念,也就是其他鏈信任哪些鏈來實(shí)際鑄造和銷毀他們的代幣。他們不一定能控制代碼,這些代碼在其他人的平行鏈或 Rollup 上執(zhí)行,這些鏈可能有自己的治理系統(tǒng)。這與在以太坊或其他一些智能合約平臺(tái)上的可升級(jí)合約的安全保證級(jí)別相同。因?yàn)榇a可以改變,你也不一定知道一年后會(huì)運(yùn)行什么。所以如果用傳送,你要確保相信這條鏈不會(huì)不負(fù)責(zé)任地鑄造和銷毀代幣。
還有另一種類型的轉(zhuǎn)移,稱為儲(chǔ)備轉(zhuǎn)移。也就是你有另一條鏈充當(dāng)某種代幣的規(guī)范儲(chǔ)備,在波卡中就是中繼鏈,其他鏈的儲(chǔ)備管理帳戶都在上面。因此,他們可以與儲(chǔ)備鏈對(duì)話,來在儲(chǔ)備鏈中移動(dòng)賬戶余額。所以我們有一個(gè)已經(jīng)上線的公共利益鏈,Kusama 上的叫 ?Statemine,波卡上的叫 Statemint。它們是通用的資產(chǎn)儲(chǔ)備鏈,你可以在那里創(chuàng)建一個(gè)代幣,然后它會(huì)自動(dòng)為該代幣提供儲(chǔ)備功能,然后該代幣就可以在生態(tài)系統(tǒng)中的任何地方使用。
PolkaWorld Telegram 群:
t.me/polkaworld
PolkaWorld Youtube 頻道:
https://www.youtube.com/c/PolkaWorld
PolkaWorld Twitter:
@polkaworld_org
PolkaWorld 網(wǎng)站:
https://polkaworld.pro/

更多內(nèi)容
Gavin Wood:Web3 應(yīng)用為何沒有普及?障礙在哪?
關(guān)注 PolkaWorld
發(fā)現(xiàn)?Web 3.0 時(shí)代新機(jī)遇
點(diǎn)個(gè) “在看” 再走吧!
