OP_CHECKSIGFROMSTACK 操作碼簡介

作者:Bitcoin Optech

來源:https://bitcoinops.org/en/topics/op_checksigfromstack/

OP_CHECKSIGFROMSTACK(OP_CSFS)是基於 ELEmentsProject.org 的側鏈上的一種操作碼,有時候也被提議在比特幣上實現。這種操作碼可以檢查對任意消息的簽名。它會接收三個參數:一個簽名、一條消息和一個公鑰。

比特幣現有的簽名檢查操作碼,比如 OP_CHECKSIG,是不允許指定任意消息的;它們所驗證的消息是從執行簽名檢查操作碼的交易中派生出來的,這樣它們就能驗證簽名跟一個公鑰相匹配、且該公鑰背後的私鑰生成了授權這次花費的數據(公鑰和簽名)。這套機制足夠強大,足以保護比特幣的 UTXO,但阻止了使用電子簽名來鑑證比特幣系統中的其他類型的數據。使用 OP_CSFS,我們就能驗證對任意消息的簽名,從而給比特幣用戶帶來多項新特性:

  • 為簽名支付:如果 Alice 控制著一個私鑰、該私鑰可以簽名一筆給 Bob 支付的交易,那麼 Bob 可以使用 OP_CSFS 來免信任地承諾會為了 Alice 的簽名而給 Alice 支付。

不過,近期,涉及為簽名支付的協議通常假設使用 “適配器簽名”,那會更加隱私,也只需使用更少的區塊空間。

  • 委託:Alice 可能希望委託授權 Bob 來花費她的資金,但又不想顯式地創建一筆鏈上交易、將資金轉移到她和 Bob 的一個 1-of-2 多簽名地址。如果 Alice 有意將她的腳本設計成帶有這種委託,那麼她可以將 Bob 的公鑰放在一條消息中,然後使用 OP_CSFS 來證明她將花費的權限委託給了這個公鑰。

    另一種可以實現相同效果的替代方案是 graftroot,而且更加隱私、更加靈活,也更節省區塊空間,不過著需要一個軟分叉,而且到目前為止很少關注。

  • 斷言機:斷言機指的是答應會簽名一條消息來見證一個事件(比如體育比賽)的結果的參與者。然後,兩個或更多用戶可以將資金存到一個使用 OP_CSFS 的腳本中,該腳本會基於斷言機所見證的結果觸發支付。

    近期對斷言機主持合約的關注包括 “謹慎日誌合約(DLCs)”,它會更隱私,區塊空間效率也會更高。

  • 防止重複花費的保證金:一個服務商可以承諾永遠不會花費自己的某個 UTXO,以鼓勵其收款方接受其未確認的交易為可靠的支付。為了證明自己的誠意,這個服務商可以使用 OP_CSFS 來承諾將一筆保證金支付給任何能證明同一個密鑰為花費同一個 UTXO 而創建了兩個不同簽名的用戶。

    這種用法可以跟 “single-show signatures” 相類比,後者允許任何人只要看到來自同一密鑰的兩個簽名就能推導出用來創建它們的私鑰,從而可以花費該密鑰所保護的其他資金。

  • 交易內省:如果同一對公鑰和簽名對 OP_CSFSOP_SHECKSIG 兩種操作碼都是有效的,那就說明,傳遞給 OP_CSFS 的消息跟 OP_CHECKSIG 所隱式使用的序列化交易(以及其他數據)是完全一樣的。因此,我們可以利用這一點,將一個經過驗證的花費交易的副本放在腳本求值堆棧 中、使用其它操作碼來運行檢查,從而對實際的花費交易執行一些限制。

    比如說,如果 OP_CSFS 在 2015 和 2016 年就啟用了,那麼,我們只需編寫一種驗證腳本就可以實現 BIP65 OP_CHECKLOCKTIMEVERIFY (CLTV 腳本絕對時間鎖)和 BIP112 OP_CHECKSEQUENCEVERIFY (CSV 腳本相對時間鎖)的特性,無需專門的共識變更。

    展望未來,OP_CSFS 也可以用來編寫能夠實現提議中的 SIGHASH_ANYPREVOUT 特性,以及提議中的其它操作碼(比如 OP_CHECKTEMPLATEVERIFY)特性的腳本。此外,OP_CSFS 還可以用來創建 “限制條款” —— 用來約束一組比特幣被花費的方式 —— 比如,“保險櫃合約” 可以限制花費交易的輸出的腳本公鑰,從而限制被盜的風險。

    OP_CSFS 的強大指出在於,它提供了對運行腳本的交易的完全內省,而且是完全通用的。它的缺點在於,它需要將交易的完整副本添加到堆棧中,可能會極大地增加交易的體積。相比之下,一些單一用途的內省操作碼,比如 CLTV 和 CSV,只有極小的開銷,但是每添加一種特殊的內省操作碼都需要一次共識變更,而且想要禁用就必然要冒讓某些用戶丟失資金的風險(即使它看起來已不再流行)。

來源
免責聲明:以上內容僅為作者觀點,不代表Followin的任何立場,不構成與Followin相關的任何投資建議。
喜歡
收藏
評論