Transactions
Multisig vs 多輸入交易簽名
假設我們有一個 2 之 2 的多重簽名地址,我們想從中花費,所以交易應該由兩個私鑰簽名。
現在假設我們有一個包含兩個輸入的交易,所以交易應該由輸入的兩個私鑰再次簽名。
那麼這兩者在實現上有何不同呢?即使在概念層面上?這些程序是否相同?
它們是完全不同的東西,代表著非常不同的案例。
想像一下,您是黨的計劃委員會的負責人,您有兩個工人(A 和 B)幫助您為黨購買物品。您將獲得 1 個比特幣來資助聚會。
你有兩個選擇。
- 您可以在 A 和 B 之間分配資金。例如,您可以在兩個單獨的輸出中分別給 A 和 B 0.5 個比特幣。如果他們需要購買價值超過 0.5 個比特幣的東西,他們將需要將他們的輸出作為輸入組合到同一筆交易中。但是,對於少於 0.5 個比特幣的物品,A 和 B 將能夠獨立行動來購買物品(或竊取資金!)。
- 您可以在 2 of 2 的多重簽名地址中共同給 A 和 B 1 個比特幣。現在,對於任何購買,他們都需要同意才能從黨委的資金中支出。
總結一下:
花費 2/2 的多重簽名輸出:
花費一個先前的 UTXO 並需要兩個密鑰來簽名。
花費多個輸入:
花費多個先前的 UTXO,並要求每個輸入單獨簽名。
關於簽署這些類型的交易,它們必須稍有不同。
當對花費 2/2 多重簽名輸出的輸入進行簽名時,交易由兩個密鑰簽名,並且它們被編碼為與
scriptSig
一個輸入相同的密鑰。只有當兩個密鑰都使用有效簽名進行簽名時,交易才會生效。例如,假設前面 2/2 multisig 輸出的 scriptPubKey 是:
OP_2 {pubkey1} {pubkey2} OP_2 OP_CHECKMULTISIG
花費該輸出的 scriptSig 將是:
{pubkey1's signature} {pubkey2's signature}
注意它們是如何在同一個輸入的 scriptSig 中的。
在簽署兩個不同的輸入時,假設它們之前的 scriptPubKey 看起來像這樣:
{pubkey1} OP_CHECKSIG
和
{pubkey2} OP_CHECKSIG
然後兩個輸入將具有這種格式的 scripSigs(分別):
{pubkey1 signature}
和
{pubkey2 signature}
注意:我使用了簡單的 scriptPubKey 來嘗試清楚它通常是如何工作的,但是您可能應該使用 Pay-to-script-hash multisig address 和 pay-to-pubkey-hash 地址,而不是原始的 multisig 和 pay我在此範例中使用的 -to-pubkey scriptPubKeys。