技術詳解波卡新進展:資產中心支持儲備多鏈資產

撰文:Joe Petrowski,Web3 Foundation 系統平行鏈團隊負責人

編譯:OneBlock Community

絕大多數人習慣透過名稱或符號來辨認資產,例如「Tether」 或「USDT」。如果你熟悉以太坊,應該已經習慣0x 合約地址。

在波卡,資產中心(Asset Hub)在協議中直接託管了資產功能,使用簡單的整數作為資產ID。 「1984」這個命名有點厚臉皮,但對人類來說肯定比0xdAC17F958D2ee523a2206206994597C13D831ec7 更容易記住(和驗證)。

現在波卡有了另一個與此資產功能相同的平行實例,不同之處在於此實例使用了一種名為「多位置(multilocation)」的XCM 原語來辨識資產。透過這篇解釋,我希望能傳達出這項特性為波卡網路內,以及網路內可達的資產利用創造了富有表現力和強大的模式。

「多位置」可辨識本地及外部資產

當資產中心首次啟動時,它只託管了一個資產面板(Assets pallet)的實例,允許任何人領取一個可用的資產ID 並創建他們的資產。資產中心沒有為每個資產制定自訂合約,而是嵌入了資產邏輯,將其視為一級原語。每個資產都有相同的功能。

這些可領取的、基於整數的資產ID 的資產稱為「本地資產」。資產中心主要用於這些資產的創建者,通常是有儲備支持的穩定幣,例如USDT。但是,協議只強制執行資產ID(在這種情況下是整數)的唯一性。創建者可以設定資產符號等元資料。因此,用戶仍需要對資產進行一些盡職調查;任何人都可以將其資產命名為USDT,但用戶通常想選擇的是Tether 創建的USDT。

資產中心充當了資產創建者的“管理門戶”,使他們能夠鑄造和銷毀代幣,並了解在整個波卡網絡中的總發行量,包括已發送到網絡中其他位置的代幣。

但是資產ID 本身並不太具表現力。雖然比合約地址更容易驗證,但該ID 並未傳達給用戶有關資產的任何資訊。這時候就輪到XCM(跨共識訊息格式)出場了。

多位置可表達相對路徑。它們相對於解釋的位置:「我怎樣去超市」 將根據起始位置而有不同的方向。在最基本的層面上,這些路徑表示到其他鏈的方向,也可以表達幾乎任何事物的方向:資產、合約、面板索引、治理機構、帳戶等等。

多位置有一系列的交叉點,通常分為兩個部分:「父級(parents)」與延伸的路徑,例如「parents: 1, interior: Parachain(9,000)」。這表示「前往我的父級,然後從那裡轉向平行鏈9,000」。這裡「父級」是一個包含共識的系統。例如,中繼鍊是包含平行鏈的共識系統,而一個平行鏈可以是包含智慧合約的共識系統。在這個範例中,多位置可來自另一個平行鏈,例如資產中心。平行鏈9,000 將是一對兄弟,因為它們共享同一個父級,即中繼鏈。

作為資產標識符,多位置相對於絕對標識符(例如位址、哈希、整數)具有重大優勢。首先,資產的多位置本身就顯示了控制實體。在上面的範例中顯示的是Parachain 9,000 的治理。在查看絕對標識符時,用戶必須信任發行實體及其聲明,例如鏈上代幣與鏈下資產一一對應。多位置則包含平行鏈、智慧合約或其他協議,這實際上顯示了控制資產的邏輯。不過這也不意味用戶可以放棄所有必要盡職調查,例如平行鏈9,000 也許有一個值得信任的「超級用戶」。但多位置是能夠傳達給用戶這個資產是由哪個協議控制的。

在多位置的終點之外,它實際上明確了「指揮鏈」。舉一個更長的例子,平行鏈9,000 上ID 42 的資產:「parents: 1, interior: Parachain(9,000), PalletIndex(99), GeneralIndex(42)」。這個資產由一個面板(pallet)控制,這個面板位於平行鏈的共識內部,而這個共識又位於共享父級(中繼鏈)的共識內部。多位置甚至可以表示完全外部的共識系統,例如「parents: 2, interior: GlobalConsensus(Ethereum)」。 「從平行鏈的角度來看,這意味著「向上兩級(即中繼鏈之上),然後進入以太坊的共識」。

這些位置非常類似於Unix 檔案路徑,例如“../Parachain (9000)/PalletIndex (99)/GeneralIndex (42)” 或“../../GlobalConsensus (Ethereum)”。

最終,波卡的資產中心可以表現任何可從波卡存取的資產。無論是透過本地面板還是合約調用、XCMP 還是橋,協議原生代幣或其他鏈的本地資產,資產中心都為所有資產提供了一個共同的接口,資產的標識符可傳達它的主權位置。

兩類資產轉移關係:傳送和儲備

XCM 語言有兩種表達位置/ 資產對(pair)的資產轉移關係的方式:傳送(teleports)和儲備(reserves)。這些定義了資產中心與其他鏈之間的關係以及它們如何互動。

傳送很簡單。當兩個鏈相互信任給定資產時,發送方可以簡單地銷毀它,並發出一條接收方鑄造它的指令。只要發送方相信接收方不會鑄造超過發送的數量,發送方就可以接受相同的傳送指令。

儲備比較複雜。當資產來源的鏈不信任另一鏈時,它可以將資產放入目標鏈的主權帳戶中,並向目標鏈發送訊息,表示已向其本地帳戶記錄資產。目標鏈隨後可以為其用戶鑄造衍生資產。儲備完成後,目標鏈可發送回覆訊息,指示來源鏈將資產從其帳戶移出(假定它已銷毀了相應的衍生資產)。

在儲備情況下,信任關係是單向的。鑄造衍生資產的鏈信任發行鏈維護其主權帳戶餘額並尊重贖回。但發行鏈不信任目標鏈能如實處理資產。

這裡要注意的一點是,信任關係存在於位置/ 資產對中:也就是說,一條鏈可以信任另一條鏈傳送某些資產,但不信任傳送其他事物。

那麼,誰信任誰?信任什麼事?實體始終信任其多位置範例中的「父級」。例如,位於Parachain 8,000 上的智能合約信任Parachain 8,000 的治理,而Parachain 8,000 則信任波卡中繼鏈。波卡中繼鏈由「根起源」治理,可以執行任何指令,包括將平行鏈踢出。波卡的根起源也管理其所有系統平行鏈(事實上,中繼鏈加上所有系統平行鏈可以被視為單一的「波卡協定」)。

波卡網路中所有鍊和子協議(例如智慧合約)都信任波卡協議,因此它們應該可以與協議傳送資產。事實上,使用儲備將會非常愚蠢:如果波卡協議不喜歡其在起源鏈上的儲備餘額,它可以透過根起源公投直接重寫自己喜歡的餘額。

另一方面,波卡協議無法將這種普遍信任擴展到其中的成員。但它可以信任一個位置,來管理起源於該位置的資產。協議可以信任Parachain 9,000 管理其原生代幣(PNT,「品脫」?)以及在其中創建的資產,例如本地發行的代幣。因此,在與Parachain 9,000 互動時,資產中心將傳送PNT,以認可PNT 起源於該平行鏈。而對於Parachain 9,000,資產中心會使用PET(Parachain 8,000 的代幣,發音不那麼模糊)的儲備轉帳。

資產中心擔任儲備位置,交互無限資產

PET 的創建由Parachain 8,000 的治理控制,後者接受波卡協議的治理。因此,波卡自然信任Parachain 8,000 的PET,因為PET 是Parachain 8,000 協定的一部分。但波卡和Parachain 8,000 都不信任其他平行鏈*能夠充當PET 的儲備位置。

(*附註:不過也可以選擇信任:Parachain 8,000 可能有其他認同其治理起源的兄弟平行鏈,就像許多系統鏈認可波卡OpenGov 起源一樣。在這方面,最好考慮可包含多個鏈的主權系統,而不是單獨的鏈。)

這個概念沿著指揮鏈,延伸到其他在Parachain 8,000 內創建的資產。實際上,這與獨立鍊或非同步無關;同一鏈上的兩個智能合約可能不會互相信任,以管理彼此的資產,但它們都信任它們存在的鏈。

鑑於這種雙向信任關係,資產中心可以充當儲備資產的目的地。 Parachain 8,000 可以將其PET 傳送到資產中心,然後資產中心可以充當其他位置之間轉帳的儲備位置。這意味著Parachain 9,000 可以將資產中心作為其PET 的儲備位置以發送到其他平行鏈。

但是,這些其他位置現在可將Parachain 8,000 和資產中心都視為PET 的儲備位置。

在實踐中,希望以這種方式使用資產中心的協議(平行鏈、智能合約等)將需要管理給定資產的多個儲備位置的想法。實際上,這可能意味著為每項資產選擇一個儲備位置,平行鍊和其他協議之間的共同協議和標準也將簡化它們的交互作用。

在波卡網路中有數千個協議,與所有協議建立通訊管道是笨重、不可取或不切實際的。僅因為一個協議不想與每個協議建立通信渠道,它可能仍然希望免費訪問資產。由於資產中心可以代表和充當任何來自波卡網絡的可達資產的儲備位置,而不僅僅是波卡網絡內部資產,因此資產中心可以充當一個單一的儲備位置,從中一個協議可以管理和交互幾乎無限數量的資產。

代碼實操:將平行鏈資產傳送至資產中心

讓我們來看一個範例,如何寫一個XCM 程序,將平行鏈的資產傳送到資產中心。對於希望將此邏輯新增至平行鏈的開發者,應注意以下兩點。

首先,XCM 程式的執行是以執行程式實例的角度,而不是程式的起源。這意味著應用程式應該從資產中心的角度,發送引用資產和位置的程式。

其次,支付費用可能並不輕鬆。當在系統鏈之間傳送DOT,或對主權帳戶持有DOT 的鏈使用儲備指示時,這些應用可以使用它們正在交易的資產支付費用。然而,資產中心可能不會接受應用的資產用於支付費用,因此應用程式需要用可接受的資產支付費用。增加資產轉換(Asset Conversion)將使這一過程更簡單和靈活,但鏈仍然需要啟動能夠支付費用的交易對。

首先定義一些資產:DOT 和平行鏈9,000 的原生資產PINTs,以及接收資產的受益人來開始我們的程序:

技術詳解波卡新進展:資產中心支持儲備多鏈資產

在建立發送到資產中心的程序之前,發送者需要記帳他們正在傳送的資產。一條鏈還可以配置其XCM 執行器以更優雅地處理。

技術詳解波卡新進展:資產中心支持儲備多鏈資產

現在,開始建置發送到資產中心的XCM 程式:

技術詳解波卡新進展:資產中心支持儲備多鏈資產

這個程序將從平行鏈的主權帳戶取出DOT,以購買執行此程序所需的權重,接收傳送到的PINTs,退還任何未使用的權重,最後將兩張資產(取出DOT 加上PINTs 的所有變化)存入受益人帳戶。

請記住,發送方可能需要在發送此訊息之前進行一些記帳工作。這種類型的程式建置不應該直接提供給用戶,而應該在適當檢查外部程式之後提供。幾乎可以肯定,發送方不是DOT 的可信任傳送者,相反,發送者可能傳送兩種資產,且可能不會在其主權帳戶中存有DOT 供取出。

這意味著,他們的本地鏈上可能有一個由儲備支援的衍生性商品DOT。從其主權帳戶中提取此DOT 並將其轉入費用支付,受益人則將減少其儲備。因此,發送者應在發送此訊息之前就銷毀此儲備支援的描述,以免其鏈在儲備中沒有完整的抵押品。發送者可以從發起傳送的用戶那裡扣除,或保留自己的DOT 庫以供提取(偶爾補充儲備)。有關更完整的範例,請參閱Trappist 中完成的記帳:

🔗https://github.com/paritytech/trappist/pull/266?ref=cms.polkadot.network

結語

將外部資產添加到資產中心開啟了新的範例,如多位置作為資產標識符和多個儲備位置,使得在網路內可以進行富有表現力和便捷的互動。

Parity 將在未來幾個月內發布更多的範例和教程,以展示使用外部資產的一些常見模式。平行鏈開發者應該留意Rococo 上的Trappist,而錢包/整合開發者則應該關注資產轉移API:

🔗https://github.com/paritytech/asset-transfer-api?ref=cms.polkadot.network

Total
0
Shares
Related Posts