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

在近期的 Zero Knowledge 播客節(jié)目中,Parity 聯(lián)合創(chuàng)始人 Rob Habermeier 分享了 XCM 如何允許平行鏈相互通信。本文是該播客的第二部分,點(diǎn)此查看第一部分。
AnnaRose:
有個(gè)概念叫碎片化。例如,如果在兩條鏈之間,你用了多個(gè)橋去連接相同資產(chǎn),這些資產(chǎn)在某一端是合成的,那么如果你有多個(gè)版本的橋接資產(chǎn),就可能會(huì)導(dǎo)致碎片化。這樣可能會(huì)出現(xiàn)有趣的套利機(jī)會(huì),但我認(rèn)為這也削弱了很多東西。你們有一個(gè)儲(chǔ)備的概念,是不是說(shuō)在 Statemine 上可能會(huì)有 USDC,然后其他鏈可以直接通過(guò) XCM 使用它,而不是通過(guò)其他橋,這有點(diǎn)像是網(wǎng)絡(luò)中的規(guī)范 USDC。你們是這樣設(shè)想的嗎?
Rob:
是的,差不多。我們以 USDC 作為例子,各條鏈獲得的本質(zhì)上是 Statemine 上對(duì) USDC 的聲明,那么你就不需要有 USDC 的各種包裝過(guò)的(Wrapped)版本,只需要把 Statemine 作為 USDC 代幣的可信儲(chǔ)備。
AnnaRose:
但是如果有其他橋存在,也還是會(huì)遇到同樣的問(wèn)題。就像如果你用另一個(gè)橋橋接來(lái)自以太坊的 USDC,你又有它的 Statemine 版本,兩種 USDC 都來(lái)了,那么你在平行鏈 X、Y、Z 上還是會(huì)有同樣的碎片。
Rob:
我猜是會(huì)有這種情況的。這是市場(chǎng)需要處理的問(wèn)題。
AnnaRose:
如果你有多個(gè)樞紐,會(huì)出現(xiàn)問(wèn)題嗎?就像你在 Statemine 中有某種規(guī)范的資產(chǎn),它會(huì)移動(dòng)到平行鏈 A,然后使用 XCM 將它更進(jìn)一步移動(dòng)到另一條鏈。這些樞紐是否造成了一些問(wèn)題,還是說(shuō)它總是以某種方式指向原始來(lái)源?
Rob:
是的。這種應(yīng)用的工作方式是,你總是會(huì)接觸到 Statemine/Statemint 鏈的基礎(chǔ)。所以任何樞紐實(shí)際上都是接到儲(chǔ)備資產(chǎn)然后再出去的,而不是從一條鏈直接接到另一條。傳送不是這么運(yùn)作的,但在儲(chǔ)備資產(chǎn)轉(zhuǎn)移中是這樣的。
AnnaRose:
好的。而且你提到了可信傳送者,這是否意味著平行鏈本身是受信任的,是不是你將一些平行鏈列入傳送白名單,但可能還有其他你未列入白名單的平行鏈仍在傳送東西,你只是不認(rèn)可而已。我其實(shí)不明白你如何讓它可信。
Rob:
好吧,舉例來(lái)說(shuō),在 Polkadot 和 Kusama 生態(tài)系統(tǒng)中,DOT 和 KSM 的可信傳送者鏈?zhǔn)俏覀兯f(shuō)的系統(tǒng)級(jí)公共利益鏈,例如 Statemint/Statemine,所以只有它們是 Polkdadot 治理信任的可以正確地鑄造和銷毀 DOT/KSM 的鏈。
你或許可以建立某種側(cè)通道或其他方法,XCM 的其他功能之一是你可以從一個(gè)鏈到另一個(gè)鏈進(jìn)行任意函數(shù)調(diào)用,所以你可以想象兩條鏈建立一個(gè)協(xié)議,他們通過(guò)這個(gè)協(xié)議鑄造/銷毀彼此的代幣。這取決于生態(tài)平行鏈的治理,治理可以決定他們信任哪些其他生態(tài)來(lái)正確鑄造和銷毀他們的代幣。這就是我說(shuō)的 “可信” 的意思,也就是除非通過(guò)了發(fā)行鏈的治理的同意,否則不允許這樣做。
AnnaRose:
我不明白這個(gè)過(guò)程發(fā)生在哪里。這個(gè)規(guī)則是內(nèi)置在 XCM 中的嗎?比如它說(shuō)這些平行鏈可以做出這個(gè)選擇,或者是說(shuō)平行鏈本身可以決定這個(gè),并排除其他鏈。而且我不明白他們?nèi)绾闻懦渌湣?/p>
Rob:
這主要取決于代幣的分類是什么。因?yàn)榇鷰?,例如平行鏈上的一些代幣,通常用于發(fā)行鏈上的某種服務(wù)或流程。重要的是,你在另一條鏈上擁有的代幣,是通過(guò)一系列操作,對(duì)存儲(chǔ)在發(fā)行鏈上的那些服務(wù)或基礎(chǔ)資產(chǎn)的有效聲明。為此,對(duì)于發(fā)行鏈,最終必須將外鏈代幣識(shí)別為自己的。那么,如果是通過(guò)儲(chǔ)備的方法,那么它總是跟蹤余額并確切地知道每個(gè)其他鏈有多少。如果是傳送,比如某個(gè)鏈來(lái)找我說(shuō),“我有一千個(gè)你的代幣,我想傳送過(guò)來(lái)”。你沒(méi)有權(quán)力這樣做,我不認(rèn)這些代幣。這意味著存在于另一條鏈上的代幣實(shí)際上毫無(wú)價(jià)值,它們其實(shí)并不對(duì)應(yīng)于對(duì)服務(wù)或資產(chǎn)的聲明。
AnnaRose:
但你們?cè)趺醋柚惯@種情況呢?我是在想,如果它是一個(gè)智能合約平行鏈,并且可以創(chuàng)建一個(gè)智能合約,這就像充當(dāng)橋的一側(cè)??赡苓@就是我理解錯(cuò)了的地方,我一直認(rèn)為它像智能合約一樣,在另一邊也有一個(gè)智能合約,兩者可以互相交談,但實(shí)際上可能 XCM 的運(yùn)作方式不同?是不是我對(duì)傳送者的工作方式理解錯(cuò)了?
Rob:
首先,你可以在 XCM 上構(gòu)建任何類型的協(xié)議,因?yàn)樗С秩魏螆D靈完備的函數(shù)調(diào)用。它能做的一件事就是支持費(fèi)用支付機(jī)制,就像在其他鏈上支付 gas 費(fèi)一樣。但說(shuō)到儲(chǔ)備資產(chǎn)和傳送資產(chǎn),在 XCM 中什么是優(yōu)先的。我們用 Substrate 處理鏈設(shè)計(jì)的方式是模塊化,你有不同的組件,比如一個(gè)智能合約執(zhí)行組件、一個(gè)治理組件等,打包在一起就形成了你的鏈,而其中一個(gè)組件就是 XCM 執(zhí)行器。
XCM 實(shí)際上是一種編程語(yǔ)言,它不是圖靈完備的編程語(yǔ)言,但的確是一種編程語(yǔ)言。還有一個(gè)跨共識(shí)虛擬機(jī) XCVM,來(lái)執(zhí)行這些指令。當(dāng)你讓一條用 Substrate 編寫(xiě)的鏈?zhǔn)褂?XCM 時(shí),你所做的是將 XCVM 連接到你的鏈,并使其成為你的鏈的一部分。你說(shuō) “這是處理傳入 XCM 指令的東西,它會(huì)執(zhí)行其他鏈給它的命令”,然后我會(huì)繼續(xù)傳遞其中的一些內(nèi)容。就像對(duì)于這個(gè)函數(shù)調(diào)用,你可能會(huì)創(chuàng)建某種自定義適配,比如 “將函數(shù)調(diào)用視為智能合約調(diào)用”,或者你可能會(huì)說(shuō) “將它們視為買(mǎi)單”/“將它們視為賣(mài)單” 等等。所以它是可插拔的,你可以將自己的邏輯插入其中,你可以將這種基礎(chǔ)級(jí)別的虛擬機(jī)引入你的鏈中。
AnnaRose:
XCM 或 XCVM 是否內(nèi)置有白名單和黑名單,它是否已經(jīng)決定了 “這是一個(gè)平行鏈,這是一個(gè)原生平行鏈代幣,它們被允許存在于這些地方”。我覺(jué)得應(yīng)該不是吧,我想象它應(yīng)該是更無(wú)需許可的?有點(diǎn)像每個(gè)鏈都可以決定他們覺(jué)得誰(shuí)是值得信賴的傳送者。我只是不明白為什么你無(wú)法將這些代幣注入到這個(gè)新的平行鏈中,具體是如何防范的?因?yàn)樗坪跏菬o(wú)需許可的。
Rob:
這是一個(gè)很好的問(wèn)題。它是關(guān)于一條鏈如何引用和識(shí)別另一條鏈的解決方法。所以有一個(gè)來(lái)源的概念,即消息的發(fā)起者。如果你只看一個(gè)智能合約系統(tǒng),來(lái)源就是它的賬戶。在以太坊上,它們被稱為 20 字節(jié)十六進(jìn)制字符串,要么是公鑰的哈希,要么是一堆合約創(chuàng)建參數(shù)的哈希。那么現(xiàn)在,當(dāng)你談?wù)搹钠渌溄邮障r(shí),你需要知道從哪個(gè)鏈,以及從該鏈上的哪個(gè)賬戶接收消息,這就是你進(jìn)行許可的方式。如果你收到一條消息,你將驗(yàn)證某些來(lái)源來(lái)做不同的事情。
來(lái)源系統(tǒng)的工作方式有點(diǎn)像文件路徑或 URL。有一種通用的來(lái)源,有點(diǎn)像是整個(gè)世界。然后你在其中有共識(shí)機(jī)制,比如 Polkdadot 或 Kusama,就像主權(quán)區(qū)域。然后下面有平行鏈,再下面有賬戶。在鏈如何確定它們自己的來(lái)源上,是比較靈活的,比如它們鏈上的來(lái)源有什么,取決于它們自己。你可以讓智能合約成為鏈的有效來(lái)源,因?yàn)檫@只是他們自己的鏈的一個(gè)子來(lái)源。XCMP 的職責(zé)之一是維護(hù)來(lái)源 —— 某條消息來(lái)自平行鏈 A,并通過(guò) XCMP 發(fā)送給平行鏈 B,平行鏈 B 接收數(shù)據(jù)和消息的來(lái)源。
你也可以有相對(duì)來(lái)源。比如我要提到我的鄰居,我不需要說(shuō)哪個(gè)國(guó)家、哪個(gè)城鎮(zhèn)、哪個(gè)郵編,我只用說(shuō) “就是住在和我隔了三個(gè)房子的 Joe”。所以你可以對(duì)來(lái)源做同樣的事情,即相對(duì)來(lái)源,比如 “這是來(lái)自你影響范圍內(nèi)的平行鏈 X”。
說(shuō)回到鏈實(shí)際上如何禁止傳送,本質(zhì)上他們可以做的是他們可以配置允許哪些來(lái)源將資產(chǎn)傳送給他們。所以我會(huì)說(shuō) “我相信 Joe 會(huì)在他那邊銷毀代幣并將它們發(fā)送給我”。但是,如果我從 Bob、Alice 或 Eve 那里收到一條消息,上面寫(xiě)著 “嘿,我這邊已經(jīng)銷毀了代幣了,快把這筆記到你的賬戶上”。我會(huì)說(shuō) “我從來(lái)沒(méi)有把我家的鑰匙給過(guò)你們啊,你誰(shuí)啊?”
Joe 沒(méi)有權(quán)力給 Alice、Bob 或 Eve 我的鑰匙。這種許可是不可傳遞的,因?yàn)樽罱K這些代幣必須在我的鏈上可回收?,F(xiàn)在 Joe 可以做一些傻事兒,所以 Joe 有能力在他那邊銷毀和鑄造代幣。他可以創(chuàng)建一個(gè)系統(tǒng),在這個(gè)系統(tǒng)之上還有更多的代幣和衍生品,允許其他鏈參與,但這是 Joe 的事兒。如果我們覺(jué)得 Joe 沒(méi)有能力在這方面做得很好,那么我們一開(kāi)始就不應(yīng)該賦予他鑄造和銷毀代幣的能力。
AnnaRose:
但是,萬(wàn)一 Joe 真的做得很差,衍生品脫離了他的控制,這些衍生品到處都是了。是不是像另一條鏈可以去領(lǐng)取衍生品,然后拿回你這邊說(shuō) “這是從 Joe 那里拿的”,會(huì)不會(huì)有這種互相關(guān)聯(lián)的來(lái)源?原平行鏈真的能夠識(shí)別出這個(gè)來(lái)源是惡意的嗎?或者說(shuō)它會(huì)接受嗎?比如它是基于衍生品的衍生品,是合成的資產(chǎn),但它來(lái)自 Joe 那里。
Rob:
我覺(jué)得你的問(wèn)題可能是,他們可以欺騙 Joe 去做錯(cuò)事嗎?因?yàn)槠鋵?shí)如果有人來(lái)找我說(shuō),“嘿,我有你代幣的衍生代幣,請(qǐng)把你的代幣記入我的地址”。我不會(huì)照做的,因?yàn)槟鞘遣煌拇鷰?。所以他們只能去欺騙 Joe 用這些衍生品做錯(cuò)事。但是你其實(shí)可以有其他防御措施,比如最早就跟蹤代幣的總發(fā)行量,保證它永遠(yuǎn)不會(huì)超發(fā),不會(huì)有無(wú)限印鈔的情況。
如果你使用基于傳送的系統(tǒng)的話,一旦這個(gè)東西進(jìn)入更廣的、復(fù)雜的、圖靈完備的生態(tài),你無(wú)法一直跟蹤到誰(shuí)在哪里 claim 了什么東西。這就是為什么傳送應(yīng)該只在極少數(shù)情況下使用,默認(rèn)的做法應(yīng)該是始終保持儲(chǔ)備余額。平行鏈可能會(huì)成為它自己的代幣的儲(chǔ)備鏈,這是我們看到在興起的模式;對(duì)于在其他鏈上發(fā)行的、不是該鏈的主要代幣的二級(jí)代幣,你可以使用 Statemint 或 Statemine,或者用智能合約來(lái)儲(chǔ)備自己鏈的資產(chǎn)。
AnnaRose:
我在想是否有像 ERC-20 這樣的東西,是不是有 XCM-20?
Rob:
有 XC-20。
AnnaRose:
如果這些現(xiàn)有的平行鏈上有類似 ERC-20 的東西怎么辦?所以對(duì)平行鏈來(lái)說(shuō),它們有自己的儲(chǔ)備和基礎(chǔ)代幣。但是,如果你在它之上構(gòu)建東西,這是否會(huì)產(chǎn)生更多問(wèn)題?還是說(shuō)儲(chǔ)備金仍然可以存在于部署它的第一條鏈上?
Rob:
這其實(shí)是一個(gè)設(shè)計(jì)決策,取決于智能合約的開(kāi)發(fā)者。但我們看到一些標(biāo)準(zhǔn)已經(jīng)開(kāi)始出現(xiàn),比如 ERC-20 加上額外的東西,這對(duì)于讓代幣與 XCM 環(huán)境和跨鏈原生類型更兼容是必要的。但任何方法都有優(yōu)點(diǎn)和缺點(diǎn)。如果你使用智能合約作為儲(chǔ)備金,你最終可能會(huì)為 gas 支付更多費(fèi)用。而如果你有一個(gè)專門(mén)用于儲(chǔ)備的鏈,儲(chǔ)備操作會(huì)相對(duì)便宜,但它們存在于代幣的實(shí)際邏輯之外的其他地方。所以這些是跨鏈 App 開(kāi)發(fā)者必須做出的決定。
AnnaRose:
我在努力地去跟上你的思路??赡苁俏抑白隽颂嗖稍L了,我總是想像它像橋一樣,就像從 A 點(diǎn)到 B 點(diǎn),但在波卡中它是與整個(gè)共識(shí)捆綁在一起的,不僅僅是一條消息,不僅僅是一個(gè)代幣轉(zhuǎn)移。你能幫我梳理一下,消息是如何從一側(cè)到另一側(cè),然后返回的嗎?
Rob:
這是我們區(qū)分消息傳遞層和消息本身的原因之一。
AnnaRose:
順便說(shuō)一句,我知道我一直都混淆了 XCM 和 XCMP,我得對(duì)聽(tīng)眾說(shuō)抱歉。
Rob:
這就是為什么我們?cè)诳紤]改掉這個(gè)名字。這就是為什么做出這些決定很重要的原因,因?yàn)闊o(wú)論何時(shí)你對(duì)任何東西進(jìn)行工程設(shè)計(jì),都會(huì)用到黑箱。你需要了解你的工具,它們的作用,而不一定要了解它們?nèi)绾喂ぷ鞯乃袕?fù)雜細(xì)節(jié)。
從開(kāi)發(fā)應(yīng)用的人的角度來(lái)看,一條消息具體是如何傳遞的并不重要,你只關(guān)心它是否到達(dá),它到達(dá)的速度,以及你必須為此支付多少費(fèi)用。而這些東西都抽象到了 XCMP 協(xié)議中,我們保證消息確實(shí)會(huì)到達(dá)。除了在某些極端情況平行鏈出現(xiàn)故障的情況下,比如平行鏈的租約結(jié)束了且不再續(xù)租,或者他們關(guān)閉了通道,那么在最后的一些消息可能會(huì)被丟棄。但在大多數(shù)情況下,只要兩條鏈都啟動(dòng)了并且通道仍然打開(kāi),那么消息就會(huì)到達(dá),并且會(huì)在幾個(gè)區(qū)塊內(nèi)到達(dá)。
所以你可以有任何類型的確認(rèn)或回調(diào)或任何你需要在協(xié)議之上構(gòu)建的東西。所以關(guān)于 XCM 的一個(gè)很酷的地方是,正如我所提到的,它是一種編程語(yǔ)言,所以你可以寫(xiě) If-Then,或者 If-Then-Else ,即我會(huì)嘗試做這件事,然后如果它成功了,我會(huì)做另一件事,也就是發(fā)回一條消息。或者你可以做 Else,即如果它失敗了,那么就做另一件事。你可以將這些需要在某些遠(yuǎn)程鏈上執(zhí)行的長(zhǎng)條件指令序列串在一起。所以本質(zhì)上就像你正在對(duì)另一條鏈進(jìn)行編程來(lái)做某些事情,并且可以在此之上構(gòu)建一堆更復(fù)雜的協(xié)議。
AnnaRose:
哇,那是不是意味著你不必在兩端都編程了?我顯然還是習(xí)慣用智能合約的模式思考,是不是類似于你有一個(gè)智能合約平臺(tái),你已經(jīng)創(chuàng)建了一個(gè)合約,它與 XCMP 交互。你可以在這個(gè)里面編程,讓它在另一條鏈上做某件事,但你不用在另一套鏈上部署什么東西。你是不是也可以僅使用這套編程語(yǔ)言去另一條鏈上做一些事情,并帶回你需要的任何東西。
Rob:
你可以用它來(lái)做很多事情,現(xiàn)在它還不是圖靈完備的。造成這種情況的原因之一是費(fèi)用支付,因?yàn)檫@樣你就可以提前預(yù)測(cè),你實(shí)際上需要向另一條鏈支付多少,才能執(zhí)行你發(fā)送的所有指令,但你可以構(gòu)建僅使用 XCM 的多功能應(yīng)用程序。
AnnaRose:
無(wú)需在另一條鏈上部署某些東西。
Rob:
對(duì)。我的意思是,這就是它的目的,因?yàn)槿绻覀兛纯次覀兊脑O(shè)計(jì)理念,我們不希望每條鏈都有智能合約。那么你需要有方法,去在不是智能合約平臺(tái)的鏈上執(zhí)行條件邏輯。
對(duì)于本身就是智能合約平臺(tái)的鏈,你可能有不太復(fù)雜的 XCM 程序來(lái)與它們互操作,因?yàn)檫壿嬁梢杂赡阍诮邮真溕习l(fā)送消息的智能合約處理。但對(duì)于那些只是做基本的事情的鏈,你可以利用 XCM 來(lái)實(shí)現(xiàn)與那些確實(shí)有條件的鏈的更復(fù)雜的交互。
原播客:https://zeroknowledge.fm/229-2/
翻譯:PolkaWorld
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)容
波卡官方解讀 XCM 和 Statemint 最新進(jìn)展
關(guān)注 PolkaWorld
發(fā)現(xiàn)?Web 3.0 時(shí)代新機(jī)遇
點(diǎn)個(gè) “在看” 再走吧!
