Script

CHECKSIGADD 操作碼是如何工作的?它與其前身 CHECKMULTISIG 相比如何?

  • July 15, 2022

CHECKSIGADD 操作碼(在 Tapscript BIP 中定義)BIP342是如何工作的?它與其前身 CHECKMULTISIG 相比如何?

CHECKSIGADD 的設計在此 StackExchange 問題中進行了討論

James Chiang 在這個 Bitcoin Optech研討會中解釋了 CHECKSIGADD 操作碼是如何工作的。(比特幣核心程式碼庫中 CHECKSIGADD 的程式碼在這裡。)

正如您在左側看到的,我們有一個輸出腳本,它使用 CHECKSIGADD 和 CHECKSIG 操作碼來表示 n-of-n 多重簽名輸出。

pk0
checksig
pk1
checksigadd
pk2
checksigadd
3
equal

這是我們的初始堆棧,其中填充了 3 個簽名:

sig0
sig1
sig2

在第一步中,我們將把這個公鑰 (pk0) 壓入堆棧,並使用操作碼 CHECKSIG 對 sig0 進行評估。讓我們假設這評估為 TRUE。由於它的計算結果為 TRUE,我們現在將1在堆棧頂部有一個字節:

1
sig1
sig2

我們將使用計數器。

2
sig2

當我們根據其他公鑰評估簽名時,如果該腳本評估成功,我們將3在堆棧上擁有一個計數器,然後可以將該計數器與輸出腳本中編碼的計數器進行比較。如果它們相等,我們就成功地使用了 3-of-3 的多重簽名輸出,該輸出使用 CHECKSIGADD 對該多重簽名進行編碼。

3

它與其前身 CHECKMULTISIG 相比如何?

CHECKMULTISIG 不(它仍然用於 SegWit v0 支出)使用遞增計數器。使用 CHECKMULTISIG 的等效鎖定腳本將是:

3
pk0
pk1
pk2
3
checkmultisig

CHECKMULTISIG 還包含一個長期存在的錯誤,這意味著解鎖腳本需要0底部的 a 才能滿足鎖定腳本。

sig0
sig1
sig2
0

這個 StackExchange question 解釋了 CHECKMULTISIG 的操作

引用自:https://bitcoin.stackexchange.com/questions/114465