Wird SegWit m von n Multisig mit sehr großen n und m zulassen?

Wenn ich diese Antwort lese , verstehe ich, dass m-of-n-Multisig-Adressen mdurch ndie von P2SH maximal zulässige Größe redeemScript(dh 520 Bytes) begrenzt sind.

In diesem Abschnitt von BIP141 wird jedoch angegeben, dass die witnessScriptLä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, ndie als gültig angesehen werden.

Nach meinen Berechnungen können wir ns 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

Antworten (1)

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_CHECKMULTISIGSkript-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.

Vielen Dank für Ihre tolle Antwort. Ja, ich meinte "100 öffentliche Schlüssel", ich habe es in der ursprünglichen Frage behoben.
Also, wenn ich Ihre alternative Lösung richtig verstehe, würden 10000-Byte-Skripte Multisig-Adressen mit nbis zu 276 zulassen (dh floor((10,000 - 34 - 3) / 36)wenn die erste Zeile 34 Bytes groß ist, ist die letzte Zeile 3 Bytes, wenn mman sie als OP_PUSHDATA1 gefolgt von einer Eins betrachtet -Byte-Zahl, und jede zweite Zeile hat 36 Bytes), ist das richtig?
Ja, aber das würde die Grenze von 201 Skriptoperationen überschreiten.
Ist es nicht zu spät, das Limit für Zeugenskripte zu erhöhen? (Ich frage nur, ich brauche diese Erhöhung nicht) Und was ist mit der Grenze von 20 Sigop-Operationen für ein Skript?
Jede dieser Grenzen kann in einer neuen Softwareversion (für Standardgrenzen wie 3600 Bytes) oder einer neuen Skriptversion (für Konsensgrenzen wie 10.000 Bytes oder 201 Operationen) problemlos geändert werden. Angesichts der Skriptversionierung, die Segwit einführt, sollte letzteres einfach sein.