Multi-Signature

SegWit 是否允許 n 中的 m 具有非常大的 n 和 m?

  • November 20, 2018

通過閱讀這個答案,我了解到在 m-of-n 多重簽名地址中,m並且n受到 P2SH 允許的最大大小redeemScript(即 520 字節)的限制。

但是,在BIP141 的這一部分中,聲明witnessScript可以長達 10,000 字節。據我了解,這意味著通過採用 SegWit,應該可以創建和使用非常大的 m-of-n 多重簽名地址,mn將被認為是有效的。

根據我的計算,我們將能夠擁有n大約 300 的 s。我是否正確理解這一點?

例如,以下witnessScript應該代表 100 個多重簽名地址中的 50 個的,在 SegWit 下是否被認為是有效和可使用的?

0x01 0x32 <100 public keys> 0x01 0x64 OP_CHECKMULTISIG

通過閱讀這個答案,我了解到在 m-of-n 多重簽名地址中,m 和 n 受到 P2SH 贖回腳本允許的最大大小(即 520 字節)的限制。

這是正確的。即使OP_CHECKMULTISIG腳本操作碼支持更多密鑰,超過 15 個公鑰根本不適合 P2SH 贖回腳本,因此這成為限制因素。

但是,在 BIP141 的這一部分中,聲明見證腳本可以長達 10,000 字節。據我了解,這意味著通過採用 SegWit,應該可以創建和使用 m-of-n 的多重簽名地址,其中 m 和 n 非常大,這將被認為是有效的。

BIP141 只描述了共識規則——即哪些交易在區塊內是有效的。有許多標準規則適用於將交易轉發並接受到記憶體池中,以避免在被理解之前潛在的濫用途徑。為此,Bitcoin Core 0.13.1 及更高版本將見證腳本限制為 3600 字節。

例如,下面的見證腳本應該代表 100 個多重簽名地址中的 50 個,在 SegWit 下是否被認為是有效和可使用的?

0x01 0x32 <100 signatures> 0x01 0x64 OP_CHECKMULTISIG

我假設您的意思是那裡的公鑰而不是簽名?

不,OP_CHECKMULTISIG 本身最多只支持 20-of-20,因此如果您想使用該操作碼,則不能超過 20。但是,您可以建構超出這些限制的其他腳本。

特別是:

<pubkey1> OP_CHECKSIG
OP_SWAP <pubkey2> OP_CHECKSIG OP_ADD
OP_SWAP <pubkey3> OP_CHECKSIG OP_ADD
...
OP_SWAP <pubkey67> OP_CHECKSIG OP_ADD
<m> OP_NUMEQUALVERIFY

將實施 m-of-67 策略,少於 3600 字節。

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