Algorand的智慧合約架構-2

買賣虛擬貨幣
Algorand的第1層(鏈上)智慧合約Algorand Layer-1智慧合約直接在區塊鏈本身中執行許多常見的簡單交易。例如,Algorand Layer-1智慧合約使前面提到的原子交換交易變得輕而易舉。第1層合約提供了原子轉移,這是一種內建機制,可確保由可疑雙方授權的多個事務作為單個原子單位執行:要麼全部成功,要麼全部成功。在我們的示例中,愛麗絲建立了一個原子轉移,其中既包含她對鮑勃的付款,也包括鮑勃對她的付款。她簽署了付款,Bob簽署了付款,然後將包含兩次付款的雙重簽名的原子轉移傳送到區塊鏈。再舉一個例子,假設愛麗絲想發行她自己的代幣,其中每個代幣代表她餐廳未來利潤中的份額。以太坊的智慧合約為其自身的以太幣提供內建支援,但希望建立自己的類似幣種的代幣的客戶則留在自己的裝置上。儘管以太坊中使用者定義代幣的標準和約定已經發展,但是編寫此類程式碼仍然存在風險,並且在以太坊中成功攻擊使用者定義代幣的歷史悠久而豐富多彩。相比之下,Algorand智慧合約體系結構為使用者定義的Algorand標準資產提供了內建支援,與Algorand的本機Algo貨幣處於同一級別。Algorand區塊鏈提供內建保護,以防止意外建立或丟棄令牌,並直接支援可選地凍結,收回,鑄造和記錄代幣。如先前文章所述,Algorand Layer-1合約還為常見的“售後”交易,證券化貸款,眾籌,僅授權交易,多簽名錢包以及其他簡單的重複交易提供直接支援型別。
第1層智慧合約用TEAL(一種類似於程式集的堆疊機器語言)編寫。TEAL為程式設計師提供了實現前面提到的各種常見事務的表達能力。即將在2020年夏季完成的TEAL的“有狀態”擴充套件,將允許程式將狀態儲存在第1層中,並檢查帳戶餘額和其他區塊鏈狀態是否具有更強大的表達能力。TEAL還將為鏈下合約提供增強的安全保證。實際上,它為下述鏈下合約提供了強大的基礎。Algorand(第2層)的鏈下合約儘管許多簡單的區塊鏈交易都適合第1層快速路徑,但應用程式的“長尾巴”也需要更專業的工具。例如:合約可能太大。例如,管理私人股票配售的合約可能需要諮詢被允許參加的經認證投資者的資料庫,或者與未經許可的列入黑名單的投資者的資料庫進行查詢。這些資料庫可能太大而無法儲存,或者太敏感而無法公開。合約可能在計算上要求太高。例如,管理提供高度隱私的代幣的合約可能需要計算密集型庫,例如ZK-STARK,ZK-SNARK等。同樣,處理有價值資產的複雜合約可以自由使用斷言來檢查其資料結構的完整性。如此長的計算可能會阻礙其他客戶端的進度,從而降低每個客戶端的塊生成率。合約可能太複雜了。TEAL是用於對簡單的第1層交易進行程式設計的功能強大且安全的工具,但更復雜的應用程式需要使用高階語言。良好的軟體工程實踐通常需要將應用程式分成多個合約,有時由不同的各方提供。任何複雜到足以需要模組化結構的應用程式,最好由高階語言來管理。
鏈上合約與鏈外合約 回想一下,在Algorand區塊鏈中,新區塊是由共識委員會選擇的,該共識委員會由Algorand的密碼自選演算法安全地隨機選擇。當使用者呼叫鏈下合約時,協商會議不會直接由共識委員會執行。而是由一個稱為合約執行委員會的並行委員會執行和驗證請求。該委員會的每個驗證人都執行合約呼叫併產生一系列效果:合約呼叫生成的區塊鏈交易序列。然後,合約執行委員會出示已簽署的證書認可通話的效果。簡單的效果清單,連同簽名的證書和其他驗證條件,然後提交給共識委員會。為了提高效率,可以批次執行多個合約呼叫,因此都可以使用單個證書進行批註。共識委員會驗證者從不執行使用者定義的合約程式碼,就像在鏈上合約體系結構中那樣。取而代之的是,共識委員會驗證者僅需在應用交易的影響之前檢查證書和驗證條件即可。

需要鏈上合約的區塊鏈就像銀行一樣,要求所有金融交易都必須由出納支票進行。在花錢之前,客戶必須與所有其他客戶一起在只有一名出納員的銀行辦公室排隊等候,以保管支票的金額。相比之下,使用鏈下合約的區塊鏈就像使用常規支票帳戶:客戶無需在銀行排隊就可以寫自己的支票,而當支票清算時,資金便會轉移。

執行鏈下合約

圖1顯示了正常的Algorand執行,其中每5秒生成一個包含5000個事務的塊。(一個區塊中的5000個事務確實可能包含Algorand的Layer-1智慧合約,而不會減慢區塊的生產。)圖2顯示了向每個區塊新增10秒合約呼叫的效果:顯然不可能維持5秒區塊時間,如果每次合約通話都需要額外的10秒。圖3顯示了鏈下執行合約呼叫的好處:合約呼叫可以與常規交易並行執行,而不會損害區塊鏈的吞吐量。

就像主要的共識委員會一樣,合約執行委員會由Algorand的安全,隨機,自選演算法選擇。由於合約執行不同於塊共識,而是確定性的,因此合約執行委員會可以使用更少的驗證程式(約150個驗證程式,而不是數千個驗證程式)實現相同的安全級別。

鏈下合約程式碼以高階語言編寫,並由虛擬機器(VM)執行。鏈下合約具有其自身的長期狀態,稱為合約儲存。為了保護隱私,合約儲存本身未出現在區塊鏈上。為了安全起見,每個合約呼叫都會釋出一個承諾到最新的合約儲存。鏈下合約可以讀取賬戶餘額和其他鏈上資訊,並且可以發出交易(例如付款)來修改區塊鏈狀態。與傳統的以太坊式合約不同,這些“效果交易”不是直接執行的。取而代之的是,該請求的效果由合約執行委員會驗證者的法定人數來驗證。通話效果交易被打包為第1層“全有或全無”交易,保證一起成功或失敗。

合約執行委員會還跟蹤每個呼叫的依存關係。例如,將100個令牌從Alice轉移到Bob的合約請求取決於Alice的令牌餘額至少為100。委員會在執行效果之前會生成一個清單,供共識委員會檢查。(這些檢查是快速,簡單,標量的比較。)每個原子事務及其證書和依賴關係,與任何其他事務序列一樣,都提交給共識委員會,後者檢查原子事務的證書和依賴關係,包括未來的原子交易。

鏈下合約呼叫是“投機性的”,從某種意義上來說,鏈上狀態(例如帳戶餘額)可能會在驗證合約呼叫到呼叫效果到達區塊鏈之間的時間間隔內發生變化。即使這樣,也可以保證正確性。鏈外合約實現跟蹤合約呼叫的依賴關係,確保違反依賴關係的呼叫的影響永遠不會包含在區塊鏈中。

如果合約呼叫反覆透過合約執行委員會驗證,但由於反覆違反其鏈上依賴關係而從未進入鏈,該怎麼辦?回到支票的類比,常規支票比收銀員的支票更快,更方便,但是即使支票簽名時帳戶中有足夠的錢,支票仍可能退回。但是,儘管支票有時會退回,但它們比收銀員支票使用更廣泛,因為大多數支票寫者不會透支其帳戶。同樣,鏈下合約有時可能會失敗,但我們希望它們在大多數情況下都能成功,因為它們的依賴關係大部分在使用者的控制之下,並且使用者將避免違反自己的依賴關係。

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;