Wenn ich diese Antwort lese , verstehe ich, dass m-of-n-Multisig-Adressen m
durch n
die von P2SH maximal zulässige Größe redeemScript
(dh 520 Bytes) begrenzt sind.
In diesem Abschnitt von BIP141 wird jedoch angegeben, dass die witnessScript
Länge bis zu 10.000 Bytes betragen kann. Soweit ich weiß, bedeutet dies, dass es mit der Einführung von SegWit möglich sein sollte, m-of-n-Multisig-Adressen mit sehr großen zu erstellen und zu verwenden m
, n
die als gültig angesehen werden.
Nach meinen Berechnungen können wir n
s so groß wie etwa 300 haben. Verstehe ich das richtig?
Würde zum Beispiel das folgende witnessScript
, das eine 50 von 100 Multisig-Adresse darstellen sollte, unter SegWit als gültig und ausgabefähig angesehen?
0x01 0x32 <100 public keys> 0x01 0x64 OP_CHECKMULTISIG
Wenn ich diese Antwort lese, verstehe ich, dass in m-von-n-Multisig-Adressen m und n durch die maximale Größe begrenzt sind, die das P2SH-Einlöseskript erlaubt (dh 520 Bytes).
Das ist richtig. Obwohl der OP_CHECKMULTISIG
Skript-Opcode mehr Schlüssel unterstützt, passen mehr als 15 öffentliche Schlüssel einfach nicht in ein P2SH-Einlöseskript, was zum limitierenden Faktor wird.
In diesem Abschnitt von BIP141 wird jedoch angegeben, dass das WitnessScript bis zu 10.000 Bytes lang sein kann. Soweit ich weiß, bedeutet dies, dass es mit der Einführung von SegWit möglich sein sollte, m-von-n-Multisig-Adressen mit sehr großen m und n zu erstellen und zu verwenden, die als gültig angesehen werden.
BIP141 beschreibt nur die Konsensregeln – dh welche Transaktionen innerhalb von Blöcken gültig sind. Es gibt eine Reihe von Standardregeln, die für die Weiterleitung und Aufnahme von Transaktionen in Speicherpools gelten, um mögliche Missbrauchswege zu vermeiden, bevor sie verstanden werden. Bitcoin Core 0.13.1 und höher begrenzen Witness-Skripte zu diesem Zweck auf 3600 Bytes.
Würde beispielsweise das folgende WitnessScript, das eine 50-von-100-Multisig-Adresse darstellen sollte, unter SegWit als gültig und ausgabefähig angesehen?
0x01 0x32 <100 signatures> 0x01 0x64 OP_CHECKMULTISIG
Ich nehme an, Sie meinen dort öffentliche Schlüssel anstelle von Signaturen?
Nein. OP_CHECKMULTISIG selbst unterstützt nur bis zu 20 von 20. Wenn Sie also diesen Opcode verwenden möchten, können Sie 20 nicht überschreiten. Sie können jedoch andere Skripts erstellen, die diese Grenzen überschreiten.
Im Speziellen:
<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
würde eine m-of-67-Richtlinie mit weniger als 3600 Bytes implementieren.
Simon Bronzini
Simon Bronzini
n
bis zu 276 zulassen (dhfloor((10,000 - 34 - 3) / 36)
wenn die erste Zeile 34 Bytes groß ist, ist die letzte Zeile 3 Bytes, wennm
man sie als OP_PUSHDATA1 gefolgt von einer Eins betrachtet -Byte-Zahl, und jede zweite Zeile hat 36 Bytes), ist das richtig?Pieter Wuille
Amaclin
Pieter Wuille