截止發稿時間為止,Ergo和Cardano均已在eUTXO模型上實現智能合約功能。 Ergo於2019年7月1日主網上線之時已實現智能合約功能。 Cardano於最近(即2021年9月12日)上線智能合約功能。另據國外媒體報導,許多區塊鏈研究員認為eUTXO相當於計算機系統從8位突進到64位的重大飛躍。 Ergo和Cardano兩大公鏈均是這方面的先鋒,已組成eUTXO聯盟,將助力eUTXO模型釋放無限潛能。
介紹
eUTXO模型為智能合約編寫者提供了一個強大而靈活的智能合約構建基礎。與賬戶模型不同,基於UTXO的智能合約沒有在交易中調用函數以進行狀態轉換的概念(譯註:截止發稿時間為止,Ergo和Cardano已在eUTXO模型上實現智能合約功能。Ergo於2019年7月1日主網上線之時已實現智能合約功能。Cardano於今年9月12日實現智能合約功能。)相反,UTXO使用一種功能性更強的方法,每次花費時,舊的UTXO都會被銷毀並創建新的輸出。
在這個花費UTXO的過程中,智能合約會執行以驗證此交易是否有效。因此,與其將智能合約視為會行動的自治實體,將它們視為保障真實和準確執行的守衛,會有效得到多。
雖然有點違反直覺,但實際上這種區別非常有用。與其讓一個試圖實現“成為世界計算機”這一不可能目標的系統陷入不可擴展之混亂,我們還不如現實一點,優化智能合約的設計,使其盡可能可擴展且功能強大。
通過明確對智能合約能作什麼的期望,我們還可以釋放這一能力,即探索其未開發的潛能。這就是eUTXO(擴展未花費交易輸出)模型帶給我們的好處。
在這篇文章中,我們將涉及許多此類創新,這些創新只有基於UTXO系統上的數據輸入概念才有可能實現。
UTXO合約的工作原理
在介紹部分,我們高屋建瓴地快速介紹了UTXO。如果您已經精通該領域固然很好,但是對於大多數讀者來說,UTXO非常抽象,讓他們費腦力理解它也非常困難。因此,讓我們直擊基礎知識,並從那裡逐步了解到新穎的創新。
UTXO指未花費交易輸出。在非常高的層級上,eUTXO系統上的每個UTXO(也稱為幣盒)包括:
1. 裡面的資產。
2. 鎖定UTXO的智能合約(腳本)。 (或P2SH合約的哈希)
3. 保存在幣盒中與智能合約相關的鏈上數據。
取決於現有區塊鏈,UTXO中可能還保存有其他類型的數據(例如元數據)。然而,這些差異通常不會影響該模型本身的表達性,因此本文不考慮這些差異。
在現有區塊鏈(Ergo、Cardano)中,鎖定UTXO的智能合約是由地址定義的。因此,如果UTXO A被發送到智能合約地址Y,則UTXO A被智能合約Y鎖定。該地址通常是合約的哈希(如是P2SH地址)或合約的序列化形式(如是P2S地址)。
當智能合約地址Y的UTXO被用作交易的輸入時,智能合約Y中的代碼/邏輯將被執行以確定交易是否有效。在執行期間,智能合約通常會讀取:
l UTXO中保存的資產。
l UTXO中的附加數據。
l 交易中其他輸入的資產/數據/合約。
l 當前交易的其他上下文。
智能合約讀取上面列出的數據作為輸入,如果它執行到True(真)的等值,則交易有效並通過。這是基於UTXO的智能合約使用的核心工作流程。
這意味著每次您希望更新dApp(在UTXO內部)保存的數據時,您須花費原始UTXO(從而銷毀它)並在同一地址創建新的UTXO並保存相同資產。然而,這個新的UTXO在其數據方面有一個新值,從而導致從舊數據值到新數據值的狀態轉換。
每個UTXO在它所附加的數據方面保存自己的個體狀態。當數據和資產從一個UTXO移動到另一個UTXO時,它們會經歷狀態轉換,這可能導致它們分裂、累積、被刪除或與來自其他UTXO的其他資產/數據一起使用。借助多個輸入UTXO和多個輸出UTXO的潛力,這些高階動作允許對更複雜的邏輯進行編碼。這最終成為開發dApp的關鍵基本構建塊之一。
基礎跨合約互操作性
正如我們所見,花費UTXO是eUTXO智能合約模型的核心。所有執行都發生在UTXO被花費時。
精明的讀者可能已經註意到,由於我們將狀態(數據)單獨附加到每個UTXO,所以每次發生狀態轉換時,結果都會反映在所述數據中。因此,數據通常被“預處理”,其中它已經存在並包含可被其他dApp/合約參考的信息,而無需任何進一步的執行。
作為示例,預言機數據是其他智能合約可使用的有用信息。以簡單直接的方式使用UTXO中保存的此類數據將需要花費UTXO。通過使用UTXO(具有預言機數據)作為輸入,您將花費它,從而為您的其他交易輸入提供對其數據的訪問。當您的dApp要訪問鎖定在其他智能合約下的UTXO中保存的數據時,就採用上述方法。
儘管如此,“須花費您希望從中讀取數據的每個單一UTXO”也有一些大的問題:
l 包含數據的UTXO的智能合約須執行,從而增加計算複雜性/成本。
l UTXO須被花費,這意味著每個區塊/時隙(Slot)只有一個交易可使用UTXO數據。
l 由於輸出數據UTXO的非必要過度執行和重新創建,交易費用會增加。
l 每個希望通過花費允許讀取訪問的UTXO須在其智能合約中對邏輯進行直接編碼。
l 容易遭到想破壞協議的作惡者的惡意攻擊。
l 增加了交易創建和尋找最新UTXO的鏈下複雜性。
上述負面問題清楚地表明,需要採取新的方法來解決上述問題。在UTXO/dApp內讀取數據是一種非常常見的設計模式,在實現非常複雜的協議時將需要這種模式。
數據輸入是一種強大的解決方案
幸運的是,Ergo三位核心開發者Alexander Slesarenko、Alex Chepurnoy和Dmitry Meshkov在構建第一個基於UTXO的智能合約區塊鏈時發現了一項非常有用的創新。
不再像原有基於UTXO的區塊鏈那樣強制所有交易銷毀/花費所有輸入,如果引入“只讀輸入”的概念會怎樣?這些將允許任何交易引用當前在UTXO集中的任何其他幣盒(UTXO)並讀取其中保存的數據,而不會再出現上一部分中列出的任何問題。
這正是數據輸入(data-inputs)的意義。
當幣盒沒有被銷毀/花費時,就不會發生智能合約執行。這意味著給定UTXO可以被區塊/時隙中的每個單一交易並行讀取,因為它們都不消耗數據,而是共享對它的引用。由於沒有合約執行,且不需要創建額外輸出,交易費用則會減少。這還解決了所有進一步的負面問題,使數據輸入成為所有基於UTXO的區塊鏈都應實現的明確設計選擇。
從上圖中可以看出,數據輸入是DeFi等許多用例的主要機制。在此圖中,我們DeFi dApp的利率依賴於來自現實世界的外部預言機數據。 DeFi dApp使用預言機池來獲取上述數據,在圖中示例為12.93美元。
這是現實世界中資產的市場價格,DeFi dApp通過數據輸入訪問它。預言機池的UTXO在交易的數據輸入部分中被引用,因此,數據可供我們的DeFi dApp智能合約使用。
在更新DeFi dApp狀態的狀態轉換(花費交易)期間,我們可以看到預言機數據用於執行利率計算。原利率為3.23%,但在讀取預言機池數據後,利率更新為3.53%。
這是數據輸入在實踐中如何工作的基本過程。在上面的示例中,我們僅展示了一個引用預言機池UTXO作為數據輸入的單個dApp。然而,潛在成千上萬的DeFi dApp可以在同一個區塊/時隙內為自己做同樣的事情(假設區塊鏈吞吐量可以支持)。
釋放數據輸入的潛能
既然我們已經討論了什麼是數據輸入以及它們在基礎層面提供了什麼樣的好處,讓我們瀏覽一下它們賦予基於UTXO的區塊鏈的一些真正新穎的創新:
1、通過並行化鏈上計算來擴展dApp
UTXO系統上的數據輸入提供的關鍵新工具之一是並發性和並行性。
與其在同一個合約/UTXO中按順序執行dApp中的所有操作,不如讓協議中的參與者完全在他們自己的UTXO中執行自己的協議部分。這意味著他們不直接依賴其他人的序列操作(如此可能會阻礙其他人操作),從而增加現有給定dApp的吞吐量。
一旦參與者完成了他們的協議部分,由此產生的UTXO就可以被花費或讀取。前者允許多個複雜的協議並行執行(這些協議具有提供數據和資產的不同參與者),然後將他們的UTXO消耗回核心協議。例如,這對於眾籌或鏈上錦標賽等情況很有用。對於錦標賽,多個用戶並行進行比賽,他們的結果和質押資金在回合結束後被消耗/匯合在一起(這是一個簡單但具有解釋性的例子)。
另一方面,由於引入了數據輸入,後者讀取UTXO可以解鎖更多的能力。通過讀取並行生成的數據,這意味著這些數據的獲取成本更低,可以被其他人重複使用,且大家可以同時訪問。因此,我們釋放了令人印象深刻的潛能,例如在dApp中運行多階段智能合約子協議,這些子協議完全並行執行,但可以訪問彼此的數據,以執行檢查/保證一切正常。
此外,由於來自所有並行運行的UTXO的數據都可以通過數據輸入訪問,因此,我們可以給完全並行化的dApp狀態拍“快照”。與其讓這些並行化的UTXO被阻塞或在協議的核心狀態中等待動作發生以便這些UTXO被進一步花費/使用,它們可以繼續自己的協議部分而不會出現任何問題。之後,快照由區塊鏈上的參與者生成,他們由dApp激勵/支付以查找所有協議相關UTXO。一旦在區塊鏈上的UTXO集中被找到,這些“累加器”將所有這些UTXO引用為數據輸入,並將它們累加到代表協議當前狀態的最終值中。
因此,我們在eUTXO區塊鏈上有一個可行的並發模型,它由於數據輸入而變得更加強大。
2、UTXO模型中的無縫dApp更新
通過使用代理幣盒(Proxy box),數據輸入還可以無縫更新多階段基於UTXO的dApp協議。
代理幣盒內保存有協議中給定階段的計算邏輯,或者可以花費進入的下一階段的地址,通過使用這種代理幣盒,我們有了一個外包UTXO,它為我們提供了更新dApp的能力。
這個外包代理UTXO將實現一個治理方案,該方案允許更新鎖定它的底層腳本,和/或其寄存器中包含後續階段地址的數據。這可以使用多重簽名方案、基於代幣的投票方案或任何其他治理協議,以便向dApp發布更新。
這為擁有治理代幣的dApp(通過治理協議的社區自我更新)打開了大門。如果絕大多數投票將階段X從合約A更新為合約A’,那麼這將反映在代理幣盒中,因此將影響dApp中所有未來的操作/狀態轉換。
通過代理幣盒實現dApp更新的方式的靈活性要歸功於數據輸入為我們提供了一個外包UTXO,它包含核心dApp協議本身之外的所有邏輯。
3、高效且去信任的全局上下文聲明
由於區塊鏈上的任何人和每個人都可以訪問作為數據輸入的任何UTXO中存儲的數據,因此我們可以去信任地對任何dApp之狀態做出有效聲明。
這意味著無需開發者通過編碼額外邏輯(這會增加計算成本)或不必做任何額外工作來提供明確許可,區塊鏈上的用戶就可以在他們自己的合約中訪問任何dApp的當前狀態。
例如,我們可以聲明dApp X的流動性不超過1億美元,並懸賞任何人來反駁這種說法。這意味著,雖然我們提出這一聲明的UTXO存在,但我們可以將其視為所述主張為真的不變量。然後可以將其構建為更複雜協議中的構建塊。
聲明核驗者將不斷掃描UTXO集,以驗證dApp X的流動性不超過1億美元。如果dApp X最終達到了這一點(流動性超過1億美元),那麼所有聲明核驗者都會急於花費聲明UTXO以賺取賞金。這將表明我們的聲明/不變量被反駁,因此我們有一個交互機制來為我們的dApp提供高效的全局UTXO集聲明。
這是一種極其強大的機制,以前在任何其他系統中都不可能實現。它為許多有趣的用例打開了大門,例如無需許可的dApp保險,或關於整個區塊鏈上任何dApp狀態的無需許可/去信任預測市場。這些只是具有重大影響的幾個有趣的可能性,但毫無疑問,還有更多有待發現。
結論
可以看出,由於基於擴展UTXO(eUTXO)的區塊鏈上數據輸入的偉大創新,巨大的潛能已被釋放。上文提到的知識點旨在讓大家了解一下可能的情況,而無需深入研究技術細節。
Emurgo Research的更多文章將在未來發布,其中將深入介紹所有這些創新,且可能會隨著新的發現而增加更多內容。
作者:Robert Kornacki
聲明:本文著作權歸原作者所有,所寫內容僅代表原作者觀點,不做投資理財建議。