比特幣的智慧合約OP_PUSH_TX

買賣虛擬貨幣
關於比特幣指令碼的一個常見誤解是,其訪問僅限於鎖定指令碼和相應的解鎖指令碼中提供的資料。因此其範圍和能力受到極大限制。我們設計了一種演算法來獲取包含正在評估的指令碼的當前事務。我們將其稱為OP_PUSH_TX,因為它用作將當前事務推送到堆疊中的偽操作碼。我們使用sCrypt(一種可編譯為本機指令碼的高階語言)來實現它,並透過示例演示其用法。OP_CHECKSIG

OP_CHECKSIG是驗證ECDSA簽名的操作碼。如果驗證成功,則返回true,否則返回false。它從堆疊中獲取兩個輸入,一個公共金鑰和一個簽名。另外它將當前事務作為輸入。交易是要簽名的訊息。在ECDSA中,對訊息進行雜湊處理,然後將摘要用於簽名生成和驗證。在OP_CHECKSIG中,摘要演算法計算以下原像的double SHA256:

OP_PUSH_TX

通常OP_CHECKSIG中使用的簽名是鏈外生成的,並在解鎖指令碼中推送到堆疊中。為了獲得當前交易,我們改為在ON CHAIN上生成簽名。使用指令碼實現OP_PUSH_TX演算法,如下所示:

1.推送當前事務(更精確地說是摘要preimage)
2.推送一個虛擬私鑰
3.使用指令碼中的ECDSA簽名演算法,使用事務和步驟1和2中推送的私鑰生成簽名。
4.推入從步驟2中推入的私鑰派生的公鑰
5.OP_CHECKSIG

步驟1、2和4在解鎖指令碼中完成,步驟3和5在鎖定指令碼中完成。如果OP_CHECKSIG返回true,則可以確定在步驟1中推送的事務是當前事務,因為OP_CHECKSIG僅在簽名是針對當前事務時才成功,而不管簽名是如何生成的。

值得注意的是,通常在步驟2中的指令碼在此處公開了通常被保密的私鑰。這不是問題,因為它僅用於驗證交易是否最新,而不是證明比特幣的所有權。實際上,它甚至可以重複使用。

指令碼實施

sCrypt實現OP_PUSH_TX演算法並將其打包在稱為Tx的標準智慧合約中。例如我們使用它來開發一個稱為CheckLockTimeVerify的合約,該合約可確保代幣被鎖定時間,並且在達到成熟時間之前不能花費,類似於OP_CLTV。僅需兩行程式碼(第5行和第7行),就可以獲取當前事務。

OP_PUSH_TX允許檢查智慧合約內部的整個交易,包括所有輸入和輸出。我們可以在智慧合約中對它們進行任意約束。這將為比特幣上的各種智慧合約開闢無限的可能性,我們將演示。

本文是有關比特幣智慧合約可以做什麼以及如何實現它們的系列文章的第一篇。

免責聲明:

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

推荐阅读

;