SegWit 是否允許 n 中的 m 具有非常大的 n 和 m?
通過閱讀這個答案,我了解到在 m-of-n 多重簽名地址中,
m
並且n
受到 P2SH 允許的最大大小redeemScript
(即 520 字節)的限制。但是,在BIP141 的這一部分中,聲明
witnessScript
可以長達 10,000 字節。據我了解,這意味著通過採用 SegWit,應該可以創建和使用非常大的 m-of-n 多重簽名地址,m
這n
將被認為是有效的。根據我的計算,我們將能夠擁有
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 字節。