以太坊價格 以太坊價格
Ctrl+D 以太坊價格
ads
首頁 > ICP > Info

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

Author:

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

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

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

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

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

執行模型

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

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

Fairyproof:Hundred Finance與Agave遭遇攻擊原因是由于轉移ERC677代幣引起的:3月16日消息,Gnosis Chain上的DeFi協議Agave和Hundred Finance遭到重入攻擊,共計損失約1100萬美元。造成此次重入攻擊的原因是由于轉移ERC677代幣引起的,該代幣有一個轉移后調用函數叫 transferAndCall。

Fairyproof 推薦所有合約開發者三點注意:

1、合約內改變狀態要放在對外交互之前(包括轉移代幣) ;

2、注意ERC20代幣和ERC677代幣的區別;

3、重要用戶接口增加防重入鎖。[2022/3/16 13:59:33]

權重

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

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

流量控制和例外情況

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

Gavin Wood:或將在治理機制管控下給Kusama授予1000萬DOT:波卡創始人Gavin Wood最近在談話節目中被問到“誰在負責和治理Kusama?是Polkadot嗎?”Gavin Wood表示,不是Polkadot。Kusama理事會現在有19個人,他們沒有任何實權,但有一定程度的行政權力。這和英國的體制有點相似,有些人可能對它很熟悉。基本上,任何立法都必須通過全體議院或公投,就像我們在Kusama網絡上那樣。Kusama的理事會有點類似于政府這樣的執行機構,一個在大多數情況下,推動事情的投票表決的機構。一件有趣的事情是,我們最初提到過,我們將以某種方式給Kusama網絡1000萬個DOT代幣。我們一年半前宣布的時候還沒有決定。現在的可能性是,我們將在Kusama治理機制的管控下,給Kusama網絡授予1000萬DOT代幣。這是完全去中心化的。在現實中,Kusama或Kusama治理機制將對Polkadot如何運行具有發言權。(PolkaWorld)[2021/2/17 17:24:50]

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

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

Gavin Wood:未來理事會將有更復雜支出機制 或將使用多種貨幣:1月18日消息, 波卡Polkadot創始人Gavin Wood在接受采訪時表示,希望看到更多的服務,包括鏈下服務(如staking工具)和鏈上服務(如pallets模塊)以及其他有助于公共利益的平行鏈,如連接到其他鏈的橋。他表示,未來可能會在理事會中增加更復雜的預算、監督和支出機制,允許它使用多種貨幣,根據階段性的milestone付款,根據特定的目標和用途來儲存和分配資金,通過選舉或任命產生的委員會和開放投票系統來部署已經給定的預算。Gavin Wood還表示,波卡和Kusama網絡上的提案總體標準是相同的,但是如果說Polkadot是一個為行業領先的應用程序而構建的穩定和高度可靠的區塊鏈,那么Kusama則是一個快速發展和實驗性的區塊鏈,面向更不工業化和更加 “人類化” 的應用程序。他希望看到一類不同類型的支出議案進入到Kusama的生態系統,它可能有更少的純技術和實用的元素,而是更多偏向社會實驗和新型治理結構的方向,可以最大限度地容納參與、拓展和討論,和一些推進公眾理解(包括藝術和音樂方向)的舉措。(波卡中國社區PolkaWorld)[2021/1/18 16:27:52]

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

Gavin Wood指責幣安提前上線新面額DOT 導致幣價大跌:波卡創始人Gavin Wood在推特發文職責一些中心化交易所“不道德”。據悉,導致Gavin Wood不滿的原因是本周四(8月20日)部分交易所(幣安和Kraken)上線了新DOT代幣,而不是按此前約定的8月21日周五上線。Gavin Wood認為由于中心化交易所無法控制,很可能會導致社區面臨風險,而且本次違規上線新代幣也違背了波卡社區的利益,在 DOT 持有者中制造了混亂和困惑,這種行為是不負責任且具有欺騙性的,后續可能會讓交易所承擔責任。按照最初計劃,重新計價后 DOT 代幣將會被以 1:100 的比例進行拆分,單個DOT價值也相應會被縮減。[2020/8/20]

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

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

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

聲音 | 以太坊聯合創始人Gavin Wood:加密分權只是一個神話 以太坊并非去中心化:據LongHash消息,以太坊聯合創始人兼Polkadot創始人Gavin Wood在接受采訪時表示,大部分加密社區均已經背叛“加密貨幣應該打破邊界并將人們聚集在一起”的理想。其認為加密分權只是一個神話,以太坊也不是去中心化的。“比特幣基本上由少數人控制。比特幣至少在理論上是由比特幣核心決定的,比特幣核心是一個GitHub存儲庫。” 此外,其表示對區塊鏈在跨境貿易、跨境互動等方面的應用更感興趣,區塊鏈有可能增加互連性,并保持最大化。因此盡管Gavin Wood對加密社區的分歧感到沮喪,但其總體基調是樂觀的。在介紹Polkadot時,其承認至少在項目上線之前,Polkadot依然受到“仁慈的獨裁者”的統治。[2019/5/12]

拋出錯誤

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

舉例如下:

Trap將導致跳過最終的DepositAsset并運行錯誤處理程序的DepositAsset,將1DOT(減去執行成本)置于Parachain2000的所有權之下。我們總是傾向于在錯誤處理程序代碼的開頭使用RefundSurplus,因為如果它正在運行,我們就知道所使用的預測權重(以及由此購買的權重)可能是過高的估計。

錯誤報告

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

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

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

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

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

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

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

資產陷阱

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

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

索賠制度

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

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

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

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

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

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

將向Parachain2000發送一條類似如下的消息:

Parachain2000將在稍后階段,就能夠用一個相當簡單的方法回收這100個單元:

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

結論

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

Tags:DOTXCVSETSAMDOT幣是什么幣xcv幣介紹Contraction Dynamic Set DollarOpen Sesame

ICP
FILE:金色觀察|甘肅省“十四五”數字經濟規劃中的區塊鏈

9月26日,甘肅省人民政府辦公廳印發了《甘肅省“十四五”數字經濟創新發展規劃》,《規劃》要求加快推廣區塊鏈在農業生產經營中的融合運用,大力發展區塊鏈等數字產業.

1900/1/1 0:00:00
Blox:元宇宙深度報告:6層框架、4大賽道一文看懂

原標題:《探索元宇宙框架,生產力的第三次革命》 元宇宙框架全探索。 近期,元宇宙的概念引爆了互聯網,元宇宙是一個可以映射現實世界、又獨立于現實世界的虛擬空間.

1900/1/1 0:00:00
DEFI:金色DeFi日報 | SBI集團收購NFT市場運營商 正式進軍NFT領域

DeFi數據 1.DeFi總市值:1173.62億美元 DeFi總市值數據來源:Coingecko2.過去24小時去中心化交易所的交易量:31.

1900/1/1 0:00:00
TRA:元宇宙將如何塑造未來商業 并影響營銷業的發展?

想象一下在不久的將來,一個二月的陰雨天,您醒來,戴上智能眼鏡,接收每日天氣通知、會議、任務和其他日常待辦事項,然后這個設備會詢問您想在哪里喝每天早晨的咖啡.

1900/1/1 0:00:00
GOV:河北省網信辦聯合有關部門開展虛擬貨幣挖礦和交易行為整治行動

日前,河北省互聯網信息辦公室聯合省教育廳、省廳、省地方金融監督管理局、中國人民銀行石家莊中心支行、省通信管理局、國家計算機網絡應急技術處理協調中心河北分中心等部門針對虛擬貨幣挖礦和交易行為部.

1900/1/1 0:00:00
以太坊:以太坊2.0信標鏈將迎來Altair升級 一文了解相關變化

注:對于即將到來的Altair升級對以太坊2.0信標鏈的影響,作者pintail撰文介紹了一些具體的變化.

1900/1/1 0:00:00
ads