Ich versuche, mehr über das Bitcoin-Protokoll zu erfahren, und ich schreibe eine Python-Software, um eine leichte Brieftasche zu erstellen. Ich bin ziemlich weit fortgeschritten und bin auf etwas gestoßen, das ich nicht wirklich verstehe, während ich über Änderungen des getrennten Zeugenprotokolls in Bezug auf Transaktionen lese.
https://bitcoincore.org/en/segwit_wallet_dev/
Wenn Sie hierher gehen und den Teil mit der Überschrift "Transaktionsserialisierung" lesen, lautet der Text folgendermaßen:
Wenn ein Txin keinen Witness-Daten zugeordnet ist, ist sein entsprechendes Witness-Feld genau 0x00, was anzeigt, dass die Anzahl der Witness-Stack-Elemente Null ist.
Woher weiß ich, ob eine Eingabe, die ich in meinem Skript verwende, Zeugendaten zugeordnet ist? Ich habe versucht, öffentliche APIs zu verwenden, um die von mir verwendeten Ausgaben zu betrachten, und ich kann nicht verstehen, was das bedeutet. Ich sehe Zeugenfelder, die den Eingaben der Transaktion zugeordnet sind, die die Ausgaben erzeugt haben, die ich in meine Transaktion einzubeziehen versuche, aber nicht umgekehrt.
Woher weiß ich, ob eine Eingabe, die ich in meinem Skript verwende, Zeugendaten zugeordnet ist? Ich habe versucht, öffentliche APIs zu verwenden, um die von mir verwendeten Ausgaben zu betrachten, und ich kann nicht verstehen, was das bedeutet. Ich sehe Zeugenfelder, die mit den Eingaben der Transaktion verbunden sind, die die Ausgaben erzeugt haben, die ich in meine Transaktion einzubeziehen versuche, aber nicht umgekehrt.
Ich glaube, Ihre Verwirrung ist auf diese Zeile zurückzuführen
Wenn ein Txin keinen Witness-Daten zugeordnet ist, ist sein entsprechendes Witness-Feld genau 0x00, was anzeigt, dass die Anzahl der Witness-Stack-Elemente Null ist.
bezieht sich nicht auf das Serialisierungsformat, sondern auf den Inhalt.
Ein Zeuge wird immer wie folgt serialisiert:
Eine Folge davon ist, dass ein leerer Zeuge immer nur als 0x00-Byte serialisiert wird (was darauf hinweist, dass keine Stapelelemente vorhanden sind).
Ihr Serialisierungs- und Parsing-Code muss also nicht wissen, ob ein bestimmtes TXin zugehörige Zeugendaten hat. Es serialisiert/parst nur den Zeugen, der leer sein kann.
Es kommt vor, dass die Gültigkeitsregeln erfordern, dass der Zeuge für eine Nicht-Segwit-Ausgabe immer leer sein muss, und die Serialisierung eines solchen Zeugen daher immer nur 0x00 ist.
Pieter Wuille
Kryptodeskriptor
Pieter Wuille
Kryptodeskriptor
Pieter Wuille
Kryptodeskriptor
Pieter Wuille
Kryptodeskriptor
Kryptodeskriptor
Pieter Wuille
Kryptodeskriptor
Pieter Wuille
Kryptodeskriptor
Pieter Wuille