P2SH-P2WPKH - hat immer segwit UTXOs?

Ich habe viele Dokumente zur BTC-Transaktionsstruktur gelesen und finde es wirklich verwirrend, wenn es um die SegWit-Geschichte geht.

Das allererste ist also, wenn ich eine P2SH-P2WPKH-Adresse habe, bedeutet das, dass alle Ausgaben an diese Adresse (UTXOs) per Definition segwit UTXOs sind?

In den Dokumenten ( https://bitcoincore.org/en/segwit_wallet_dev/ ) heißt es:

Signaturgenerierung und -überprüfung für P2SH-P2WPKH

Für die Ausgabe von Nicht-Segwit-UTXO bleibt der Signaturgenerierungsalgorithmus unverändert.

Für Ausgaben von P2SH-P2WPKH:

  • Die ScriptSig DARF NUR einen Push des RedeemScript enthalten

...

Also sind entweder alle UTXOs für die P2SH-P2WPKH-Adresse Segwit-Adressen, oder sie sind SegWit, wenn eine SegWit-Transaktion an diese Adresse durchgeführt wurde (was für mich eigentlich wenig Sinn macht, da dann ein Henne-Ei-Problem auftritt).

Warum haben sie diesen Teil "Für die Ausgabe von Nicht-Segwit-UTXO bleibt der Signaturgenerierungsalgorithmus unverändert" geschrieben , welchen Fall deckt er ab? Wenn Sie eine P2SH-P2WPKH-Adresse haben, aber einige ausländische UTXOs ausgeben (die nicht an Ihre Adresse gerichtet waren)?

Ein weiterer nicht klarer Teil sind Skripte für die P2SH-P2WPKH-Adresse. Hier ist also meine Beispieladresse: 3MxYPuvEcKDdaEG1xoGyddqir6C4b66MJi

Und hier ist die Transaktion, die dazu gemacht wurde: https://blockchain.info/rawtx/6c2806587d5cdb3f0363e43f60b4a84baf37b3012fbde02f108f4eb1bdcede42

Basierend darauf ist das pubKeyScript der Ausgabe a914de523116b281c96ff1e204ea2ff435b75d48f0de87 , was übersetzt bedeutet:

OP_HASH160 de523116b281c96ff1e204ea2ff435b75d48f0de OP_EQUAL

Also, de523116b281c96ff1e204ea2ff435b75d48f0de ist Hash160 des Einlösungsskripts. Das einzige Einlösungsskript, das mit diesem Hash übereinstimmt, das ich gefunden habe, ist Folgendes:

0 389f26d8d616cb96df1cfd6d9989248a30b933b9

Welches ist das Zeugen-v0-Programmskript (0 sha160sha256 (pubkey), also bedeutet es, dass ich SegWit-Transaktionen erstellen muss, oder? Ich habe versucht, P2SH-Transaktionen zu erstellen, und es heißt, dass ich nicht nominelle Pushs im Einlöseskript habe, das ist der Grund dafür "0" drücken, glaube ich.

Ich habe das Gefühl, dass ich in diesem Teil etwas falsch mache und als Ergebnis entweder falsch oder falsch unterschreibe ...

Sehr dankbar für Erklärungen.

Antworten (1)

Wenn ich eine P2SH-P2WPKH-Adresse habe, bedeutet das, dass alle Ausgaben an diese Adresse (UTXOs) per Definition segwit UTXOs sind?

Ja, Bitcoin, das an eine P2SH-P2WPKHAdresse gesendet wird, erzeugt einen Segwit UTXO.

Warum haben sie diesen Teil "Für die Ausgabe von Nicht-Segwit-UTXO bleibt der Signaturgenerierungsalgorithmus unverändert" geschrieben, welchen Fall deckt er ab? Wenn Sie eine P2SH-P2WPKH-Adresse haben, aber einige ausländische UTXOs ausgeben (die nicht an Ihre Adresse gerichtet waren)?

Ich denke, Sie haben Recht, es klingt so, als würde es nur sagen, wenn Sie an eine Segwit-Adresse senden möchten, müssen Sie eine Nicht-Segwit-Eingabe nicht anders als zuvor signieren.

Ausgaben P2SH(P2WPKH)

Hier ist ein gutes Referenzbeispiel: BIP 141: P2SH(P2WPKH) . Um an Ihre Adresse gesendete Bitcoin auszugeben 3MxYPuvEcKDdaEG1xoGyddqir6C4b66MJi, müssen Sie Folgendes angeben:

witness:      <signature> <pubkey>
scriptSig:    <0 <20-byte-key-hash>>
              (0x160014{389f26d8d616cb96df1cfd6d9989248a30b933b9})

Vielleicht vergessen Sie die Push-Ops 0x16und/oder 0x14in scriptSig?

Yes, Bitcoin sent to a P2SH-P2WPKH address will produce a segwit UTXO.Technisch gesehen ist der utxo-Typ immer noch p2sh. Es wird nur als Segwit angezeigt, wenn es ausgegeben wird. Sie könnten es vollständig als p2sh ausgeben, wenn Sie ein Einlöseskript brutal erzwingen können, das den Hash erfüllt und von Ihnen lösbar ist, obwohl das ziemlich unmöglich ist. Unabhängig davon ist die Ausgabe selbst p2sh.
@RaghavSood Stimmt, es gäbe keine Möglichkeit zu erkennen, dass es sich um ein Segwit-UTXO handelt, da es sich um das Einlöseskript handelt, das Segwit ist.
Danke für die Antwort und die Kommentare, jetzt ist klarer, was was ist :) Ich habe kein 0x16, hier ist mein vollständiges Skript: "script": "0014389f26d8d616cb96df1cfd6d9989248a30b933b9", Ist 0x16 auch erforderlich?
Basically here is serialized tx I've 0100000000010142decebdb14e8f102fe0bd2f01b337af4ba8b4603fe463033fdb5c7d5806286c00000000160014389f26d8d616cb96df1cfd6d9989248a30b933b9ffffffff0210270000000000001976a914eeba84c4b62a6b6db8f1e0a1daffa0eccde33adf88acbe2100000000000017a914de523116b281c96ff1e204ea2ff435b75d48f0de8702483045022100fc44e10e8ab2e344c7e90f04f4f21a313850cd8eaebb0320edbc5e2d34c749b70220369da1b85125babd90a067d47e4034bc15ca1b9631ed5c8554148be3a4349d19012102ed991ef73f82488def8031fcccc4d51de840e7f17e3ad5d820781df0b4ee6e0600000000
Sie benötigen das 0x16, weil es dem Interpreter mitteilt, die folgenden 22 Bytes (Redeem-Skript) auf den Stack zu schieben.