以太幣交易所 以太幣交易所
Ctrl+D 以太幣交易所
ads
首頁 > ETH > Info

Gavin Wood:XCM 第三部分 執行和錯誤管理_XCV

Author:

Time:1900/1/1 0:00:00

在我前兩篇文章里(?介紹了 XCM 的設計和版本結構的基礎知識。在本文中,我們將深入研究它的底層設計和執行模型。因為XCM 基于 XCVM (一個非常高級的虛擬機)指令集,希望本文可以幫助你熟悉這個機器架構。

XCVM 是一個高級別、非 Turing 的完整虛擬機。它是基于寄存器的(而不是基于堆棧的),并且有幾個專用寄存器,其中大部分持有高度結構化的數據。與通用處理器不同, XCVM 的寄存器不能隨意設置為任意值,但有嚴格的機制來控制它們的變化。除了某些與本地鏈狀態交互的方法(如我們已經看到的 With draw Asset 和 Deposit Asset 指令)之外,沒有額外的“內存”。沒有循環的可能,也沒有顯式的分支指令。

我們已經介紹了其中兩個登記冊:持有登記冊,能夠臨時持有一項或多項資產,并可以通過從本地鏈中提取資產來填充,或者通過從可信的外部來源(例如另一個鏈)接收資產;以及來源登記冊,在執行開始時,該登記冊持有共識系統的位置,從該系統當前XCM執行起源,并可能只突變到一個內部位置或完全清除。

在其他寄存器中,三個涉及異常/錯誤管理,兩個涉及跟蹤執行權重。我們將在本文中了解它們。

如前所述,沒有顯式條件指令或循環原語可以多次重新執行相同的指令。這使得預先確定程序的控制流變得相當瑣碎。該屬性非常有用,因為我們希望確定 XCM 消息在執行點之前可以使用多少執行時間(稱為整個 Substrate / Polkadot 的權重)。

允許圖靈完備語言的系統(如 Ethereum )實際上不能直接從程序中計算最壞情況的執行時間,這是由于圖靈的完備性。他們通過要求用戶預先確定程序的執行資源來解決這個問題,然后在程序執行時對其進行計量,如果超出了所支付的金額,就中斷它。有時,在事務執行之前,事情會發生變化,權重會變得不正確。令人高興的是,像 XCVM 這樣的非 Turing - Complete 的虛擬機可以避免這種度量和權重的需要。

Gavin Wood:監管往往會更多地針對被認為非常中心化的項目:金色財經現場報道,10月26日,由萬向區塊鏈實驗室主辦的第七屆區塊鏈全球峰會在上海舉行,Polkadot創始人Gavin Wood表示,我認為對行業項目來說,監管要求往往會更多地針對被認為是非常中心化一些項目。比如銀行,如果這樣的理論和想法是對的,意味著整個生態系統,很多項目會不復存在,至少從長期來說情況是如此。就時間表來說,還需要一年、兩年甚至三年的時間,才會看到對于這些中心化,或基于中心化的項目有實質性的監管行動。但是如果我們放眼長遠的話,很多項目需要做出改變。[2021/10/26 20:57:54]

權重通常表示為一個代表性硬件執行給定操作所需的整數。正如我們在 Buy Execution 指令中看到的,在處理某些指令時, XCVM 包含了執行時間 / 權重的概念。

沒有權重計量,但是考慮到 XCVM 程序最終獲得的可能性小于最壞情況下的重量預測,我們有一個名為剩余權重寄存器的寄存器。因為我們可以準確地預測他們將占據多少權重,所以大多數指令不接觸它。然而,有時候,最壞情況下的權重預測是一個高估的情況,只有在執行時,我們才知道有多少。雖然占塊執行時間的權重估計過高的 XCM 消息,跟蹤原始權重被高估的數量,并從帳戶中減去它,允許鏈優化其塊執行時間的配額。

到目前為止,我們對 XCVM 的處理中已經隱含了另外兩個寄存器,但是了解它仍然很重要。首先,有一個程序登記冊,它存儲當前正在執行的 XCVM 程序。其次是程序計數器,它存儲當前正在執行的指令索引。當程序寄存器被更改時,這將被重置為零,并在每個成功執行的指令結束時增加一個。

在編寫代碼時,處理“異常”情況的能力是至關重要的。當在遠程系統上發生了一些您沒有預料到(或者實際上無法預測)的事情時,那么您就需要某種方法來管理它,即使它只是簡單地將一個報告發送回源,聲明同樣的內容。

Gavin Wood:未來一周左右將上線Kusama首條平行鏈Shell:波卡創始人兼 Web3 基金會主席 Gavin Wood 在Web 3.0訓練營二期開幕儀式上表示:過去幾個星期,我們在 Rococo 進行了拍賣測試,也在 Rococo 上上線了測試平行鏈。驗證者數量增加到 900 個,達到了 Kusama 的水平,這也增強了我們的信心,我們相信即它很快就可以正式上線了。此外他還透露,Kusama上的第一條平行鏈將被命名為Shell。“我計劃在接下來一周左右的時間里,驗證者完成更新后,我們給驗證者充裕的時間推進 0.9 版本,進行運行環境升級,做最后的檢查,在 Kusama 上上線第一條平行鏈,這第一條平行鏈將命名為'Shell'。”[2021/5/14 22:03:23]

雖然 XCVM 指令集不包含任何顯式的通用分支指令,但它的執行模型中確實內置了一個通用異常處理框架。XCVM 還包括兩個代碼寄存器,每個寄存器都包含一個像 Programme Register 這樣的 XCVM 程序。這兩個寄存器稱為附錄寄存器和錯誤處理程序寄存器。如果您熟悉幾種流行語言中的 try / catch / finally 異常系統,那么接下來要做的事情可能會讓人想起很多事情。

如前所述, XCVM 程序的執行遵循其中的每一條指令,一步一步地執行。當它按照這些指令執行到程序結束時,將發生兩種情況之一:要么成功地到達程序結束,要么發生錯誤。在第一個成功執行的情況下,錯誤寄存器被清除,其重量添加到剩余重量寄存器。附錄登記冊也被清除,其內容被放入方案登記冊。如果節目登記冊空著,我們就停止。否則,節目計數器復位為零。簡單地說,我們扔掉當前的程序和錯誤處理程序,開始執行附錄程序(如果有的話)。

ins3.finance核心開發者Gavin:現有DeFi保險不夠去中心化:3月15日19:00,一站式DeFi門戶DeFiBox在線上舉辦DeFi Demo Day第二期——Heco專場, 去中心化保險與信用衍生品發行平臺ins3.finance受邀參與了本次圓桌討論環節。

ins3.finance核心開發者Gavin在圓桌中介紹到,ins3.finance是去中心化保險與信用衍生品發行平臺,可以滿足加密數字資產行業各種尾部極端風險的對沖需求,為各種加密數字資產場景提供保障服務。

Gavin認為當前DeFi保險賽道都無法解決一個問題:目前的DeFi保險不夠去中心化,償付使用治理代幣投票決定是否償付,缺少公正性。 在傳統金融,交易(證券)、借貸(銀行)、風險管理(保險)是現代金融的三駕馬車,但是在DeFi領域,交易、借貸各方面的市值遠超保險,出現這種情況的原因是目前DeFi保險不如交易和借貸賽道去中心化。[2021/3/15 18:46:55]

這個功能本身并不是很有用,但是如果與發生錯誤時發生的情況相結合,它就很有用。在這里,任何尚未執行的指令的權重被添加到剩余權重寄存器中。清除“錯誤處理程序寄存器”,將其內容放入“程序登記器”并將“程序計數器”重置為零。簡單地說,我們拋出當前的程序,并開始執行錯誤處理程序。因為我們沒有清除附錄寄存器,所以除非它被錯誤處理程序重置,否則它將在成功完成后執行。

由于其組成結構,它允許錯誤處理程序的任意“嵌套”:如果需要,錯誤處理程序也可以有錯誤處理函數,而附錄可以有自己的附錄。

有兩個指令允許對這些寄存器進行操作:SetAppendix 和 SetErrorHandler。如您所料,其中一個設置了附錄寄存器,另一個設置了錯誤處理程序寄存器。每個參數的預測權重都比它們的參數的權重大一些。但是,在執行時,將被替換的寄存器中 XCM 消息的權重添加到剩余權重寄存器中,允許回收任何未使用的附錄或錯誤處理程序的權重。

Gavin Wood:未來波卡最大目標之一是與其他區塊鏈建立鏈橋:1月4日,波卡Polkadot官方社區PolkaBase發布Gavin Wood的文章,Gavin Wood稱,今年Polkadot的發展明顯加快了步伐,但波卡生態仍有潛力尚未爆發。未來數月乃至數年間,波卡最大的目標之一就是與其他區塊鏈項目之間建立鏈橋,“雖然Polkadot首先是兼容異構的分片式多鏈結構,但Polkadot的主要目標之一仍是促進互操作性。”同時Parity正在開發的一個名為Frontier的以太坊-Substrate兼容項目現在已基本完成,該程序將允許任何基于Substrate構建的鏈在以太坊上像其他主流鏈一樣出現,并托管任何利用Web3 RPC的工具,例如MetaMask和Truffle。此外,Gavin Wood還表示,2020年推出的所有核心技術都將在2021年整合到Polkadot主網中。[2021/1/4 16:25:30]

有時,實際確保發生錯誤并定制該錯誤的某些方面可能是有用的。這是在編寫測試代碼時使用的但它可能最終會在一個活動鏈中找到用途,這并非不可能。這可以通過指令 Trap 在 XCVM 中完成。拋出的錯誤類型共享一個名稱 Trap 。指令和錯誤都帶有一個整數參數,允許在拋出錯誤者和外部觀察者之間傳遞某種形式的信息。

舉例如下:

能夠引入代碼來處理錯誤是非常有用的,但是一個經常被要求的特性是能夠報告XCM 消息返回給原始發件人。我們遇到了上一篇文章中的 Query Response 指令,它允許一個共識系統向另一個報告一些信息,剩下的就是能夠以某種方式插入 XCM 進入這個 Query Response ,并將其發送給希望被告知結果的人。

Gavin Wood:交易化存儲變更等是Web3.0技術棧中仍然缺失的部分:在10月17日由Polkaworld主辦的“波卡中國行”深圳站上,波卡創始人Gavin Wood列舉了他認為波卡和Web3.0技術棧中仍然缺失,目前正在努力的部分:簡化從基準得到Weight的流程、交易化存儲變更、讓交易能夠并行運行的workerthread、改進runtime編寫框架FRAME、重啟加密DHT“Whisper”項目。[2020/10/17]

事實證明,只有一個名為 Report Error 的指令可以執行此操作。它通過使用我們尚未遇到的寄存器工作:錯誤寄存器。錯誤寄存器是一個可選類型(可以設置或清除)。如果已設置,則它包含兩條信息:一個數字索引和一個 XCM 錯誤類型。

它的操作原理極其簡單。首先,每當一條指令產生錯誤時,它總是被設置;錯誤類型被設置為該錯誤的類型,數值索引被設置成程序計數器寄存器的值。其次,只有在執行 Clear Error 指令時,它才會被清除。這條指令是絕對正確的指令之一 —— 它永遠不允許自己導致錯誤。這就是所有-它得到設置時,一個錯誤發生,得到清除時,你發出適當的指令。

現在應該清楚地了解 ReportError 指令是如何工作的:它簡單地使用錯誤寄存器的內容組成一個 QueryResponse 指令,并將其發送到特定的目的地。當然,在執行之前發生的任何錯誤都會導致指令被跳過,因為執行首先跳到 Error Handler 寄存器的代碼,然后跳到附錄寄存器的代碼。但是,這方面的解決方案很簡單:將 ReportError 放在附錄中將確保它被執行,而不管主代碼是否導致執行錯誤。

讓我們看一個簡單的例子。我們將一個資產 (1DOT) 從中繼鏈傳送到 Statemint (Parachain 1000),在那里購買一些執行時間,然后使用 Statemint 作為儲備,我們將把資產存放在 Parachain 2000 上。原始 (無錯誤報告) 消息如下所示:

對于基本的錯誤報告,我們將使用以下方法:

正如您所看到的,唯一的變化是引入了兩個 Set Appendix 指令,確保 Statemint 和 parachain 2000 中的錯誤或缺乏錯誤將報告給中繼鏈。這假設中繼鏈已經設置為能夠識別和處理來自 Statemint 和 parachain 2000 的 Query Response 消息,查詢 ID 為 42 ,權重限制為 1000 萬。令人高興的是,這確實是基板支持的東西,但超出了范圍。

當在處理資產的程序中發生錯誤時(大多數程序都是這樣做的,因為它們經常需要用 Buy Execution 來支付執行費用),那么它可能會非常有問題。可能存在 Buy Execution 指令本身導致錯誤的情況,可能是因為重量限制不正確或用于支付的資產不足。或者一個資產被送到一個無法有效處理的鏈。在這些情況下,消息的 XCVM 執行結束時,資產仍保留在 Holding Register 中,與其他寄存器一樣,這些寄存器是暫時的,我們可能會忘記。

XCM 允許鏈完全避免這種損失。該機制分兩步工作。首先,持有登記冊中的任何資產在獲得批準后都不會被完全遺忘。如果在 XCVM 停止時持有登記冊不是空的,那么就會發出一個包含三條信息的事件:持有寄存器的值;原產地登記冊的原始值;以及這兩條信息的散列。然后,XCM 系統將此散列放置在存儲中。該機制的這一部分稱為資產陷阱 (AssetTrap)。

該機制的第二步是能夠要求持有登記冊的一些以前的內容。這實際上不是通過任何專門為此目的設計的東西來實現的,而是通過一個我們尚未遇到的通用指令,稱為 Claim Asset 。在 Rust 中是這樣聲明的:

這個指令的名稱可能會讓人想起我們遇到過的某些其他“資金”指令,如 With draw Asset 和 Receive Teleported Asset 。如果是這樣,那么它有一個很好的理由:它是。像其他人一樣,它試圖將資產(由這里的資產參數給出)放入持有登記冊。不像 With draw Asset 那樣會減少帳戶上的資產余額, Claim Asset 尋找這些資產的有效索賠,無論這些資產在原始登記冊中的價值是多少。為了幫助系統找到有效的索賠,可以通過票證參數提供信息。如果找到有效的債權,則從鏈中刪除該債權,并將該資產列入持有登記冊。

到底什么構成索賠,完全取決于鏈條本身。不同的鏈可能支持不同類型的聲明,并且 Substrate 允許您輕松地組合它們。但是,正如您可能猜到的那樣,一種特殊的聲明已經準備好了,當然,是先前刪除的 Holding Register 內容。

因此,讓我們來看看這在實踐中是如何工作的。假設我們的用戶的 paracha in 2000 向 Statemint 發送一條消息,在該消息中,它從其主權帳戶中提取 0.01 DOT 來支付費用,并通知它將 100 單位自己的本機令牌的儲備資產轉移到其在 Stat emint 的主權帳戶。可能是這樣的:

假設 0.01 DOT 就足夠了,并且 Statemint 支持 Parachain 2000 的本地資產的鏈上存款(以及使用 Parachain 2000 作為它的儲備),那么這應該可以正常工作。然而,也許 Statemint 還沒有建立起來承認 parachain 2000 的原生資產。在這種情況下,Deposit Asset 將不知道如何處理該資產,并因此拋出一個錯誤。在執行了將通知 parachain 2000 這個失敗的附錄之后,我們將剩下 100 個 paracha in 2000 的本機資產以及可能在持有登記簿中的一些 DOT。讓我們假設費用只達到 0.005 DOT ,剩下的 0.005 DOT。

然后,Statemint 的 Pallet 會記錄一個關于這些新可索賠資產的事件,類似于:

將向 Paracha in 2000 發送一條類似如下的消息:

Parachain 2000 將在稍后階段(也許一旦它確定 Statemint 能夠接受其原生資產的存款),就能夠用一個相當簡單的方法回收這 100 個單元:

在這種情況下,沒有通過 ticket 參數提供特殊信息來幫助查找索賠。對于 Asset Trap 索賠,這通常是很好的,盡管對于其他類型的索賠可能需要使用它。

希望本篇文章可以幫助你更好地理解 ?XCM 的底層虛擬機以及它如何幫助您從意外情況中管理和恢復。本系列的下一篇文章將討論 XCM 以及如何改進格式、采取更深入的研究 XCMRust 實現路徑,以及我們如何使用它為鏈提供易于解釋的能力。

Tags:XCVPARDOTVINxcv幣最新價格Parm Financedot幣發行總量KEVIN

ETH
在Eth2 最終敲定后會發生什么?_ETH

區塊鏈的一個基本屬性是“最終確定性 (finality)”,它的大概意思是經過一定時間后,被打包到權威鏈的交易是極其困難,甚至幾乎不可能回滾的.

1900/1/1 0:00:00
TapMonster:來自賽博朋克的召喚 一款值得等待的Game+NFTs的戰斗世界_BSP

在已經過去的幾個月時間里,我們見證了NFT 與 GameFi 成功。尤其是 GameFi,讓所有人看到了更加公平的游戲商業模式.

1900/1/1 0:00:00
STO 遇冷 SEC 挑戰重重_STO

"監管收緊,交易所調整航向,舊事重提 STO。"美國證監會 SEC 與加密領域的對話更加頻繁了,最先接收到監管加強信號的是中心化交易所.

1900/1/1 0:00:00
金色觀察丨Pantera Capital合伙人:利用智能合約推動音樂版稅范式轉變_ROYAL

金色財經 區塊鏈9月24日訊  現階段,數字藝術的主要商業用例就是收取版稅,創作者會向平臺收取少量使用費用。版稅使藝術家能夠通過原創作品,從數字媒體中獲得長期且穩定的收入.

1900/1/1 0:00:00
金色早報 | 富途將于10月1日起禁止新開倉GBTC、ETHE等股票交易_區塊鏈

頭條 ▌央行:虛擬貨幣不具有與法定貨幣等同的法律地位9月24日消息,中國人民銀行發布進一步防范和處置虛擬貨幣交易炒作風險的通知.

1900/1/1 0:00:00
劉慈欣等16位頂級科幻作家限量版簽名數字卡牌內有乾坤_COIN

近日,由上海浦東新區科幻協會和上億傳媒聯合推出的2021科幻影視產業論壇紀念卡牌(數字科幻卡牌)正式上架螞蟻鏈粉絲粒銷售(上支付寶搜索“螞蟻鏈粉絲粒”即可參與).

1900/1/1 0:00:00
ads