比特幣SV上的有狀態智慧合約

買賣虛擬貨幣

比特幣上的智慧合約與流行的看法相反,比特幣自誕生以來就具有智慧簽約功能,具有一種稱為指令碼的基於堆疊的本地程式語言。每個比特幣交易都由輸入和輸出組成。每個輸出都使用指示合約義務的指令碼鎖定某些比特幣。如果輸入中包含執行輸出智慧合約的指令碼,則它將解鎖該輸出中的比特幣,並將其移至新的輸出中。這就是比特幣所有權轉讓的工作方式。

指令碼通常被認為是極其有限的,因此無法進行復雜的智慧合約。人們經常提到的比特幣智慧合約的缺陷是缺乏狀態。以太坊應該克服的主要限制之一就是證明它的存在。有些智慧合約本質上是有狀態的,因為它們要求締約方在多個階段進行互動並依賴於時變狀態,例如鏈上投票和博彩。我們展示了一種維護比特幣智慧合約狀態的通用機制。我們還使用sCrypt(一種可編譯為本機指令碼的高階語言)實現有狀態合約。先決條件:OP_PUSH_TX在介紹如何維護比特幣智慧合約的狀態之前,我們介紹了一種稱為OP_PUSH_TX的強大技術。可以將其視為偽操作碼,它將當前事務推送到堆疊中,然後可以在執行時對其進行檢查。更準確地說,它可以檢查在BIP143中定義的簽名驗證中使用的原影象。原像的格式如下:

狀態合約實施一旦我們可以檢查智慧合約的交易環境,就可以對智慧合約的輸入和輸出施加任意約束。在合約中實現狀態的一種方法是將鎖定指令碼中的合約分為兩部分:資料和程式碼。資料部分是狀態,程式碼部分包含對狀態轉換規則進行編碼的合約的業務邏輯。資料作為OP_RETURN <data>或OP_PUSHDATA <data> OP_DROP被動地附加到程式碼中。即使未評估它,它仍然會影響合約的有效性,因為前面的程式碼部分對其進行了驗證。使用OP_PUSH_TX,我們可以從第5部分中獲取正在使用的輸出的鎖定指令碼,並從第8部分中獲取新輸出的鎖定指令碼。為了保持狀態,我們要求鎖定指令碼的程式碼部分不得更改並且資料/狀態更改必須符合,在程式碼部分中包含狀態轉換規則。

這類似於物件導向程式設計中的物件概念,其中程式碼是方法,而資料是物件的成員變數 方法是一成不變的。成員變數被封裝並且只能透過方法進行突變。從解鎖指令碼中呼叫方法,對要呼叫的方法及其引數進行編碼。

示例合約:Counter

第3行和第4行確保原映像來自當前事務。我們在第9行中獲得了先前的鎖定指令碼,在原映像的第5部分中也稱為scriptCode。從第12行的scriptCode中提取先前的計數器狀態,然後將其遞增並放入第14行的新鎖定指令碼中。請注意,計數器是鎖定指令碼中唯一更改的部分。其餘部分確保輸出包含新的鎖定指令碼。這是部署智慧合約並重復呼叫其函式increment()的程式碼。可以找到計數器從0到9遞增的合約例項:0-> 1-> 2-> 3-> 4-> 5-> 6-> 7-> 8->9。請注意,計數器狀態 在第一個事務輸出的指令碼的末尾。

結 論

指令碼的許多假定限制是由於無法實現其潛力。當我們對指令碼可以實現的內容進行解釋和演示時,人們會發現它非常可擴充套件,通用且面向未來。我們將證明,比特幣沒有人為限制,可以執行其他區塊鏈可以執行的任何智慧合約,同時可以無限擴充套件。透過經濟激勵,可以利用它來使整個行業的許多應用程式更加高效和安全。

免責聲明:

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

推荐阅读

;