Wie erstellen Sie einen Skriptsig für einen neuen Roh-TX?

Könnte jemand bitte erklären, wie dies in einer detaillierten Schritt-für-Schritt-Weise zu tun ist, die mit einer echten verknüpften Transaktion korreliert, so dass ein n00b verstehen kann? Ist es nur das Kopieren und Einfügen eines bestimmten identifizierbaren Teils des vorherigen TX aus dem Roh-TX davon oder ist es aufwändiger?

Antworten (2)

Okay, es stellt sich heraus, dass meine Nachforschungen dazu geführt haben, dass ich meine eigene Frage beantwortet habe, hauptsächlich von hier aus, obwohl es ein wenig Erklärung fehlte oder, glaube ich, nicht so klar wie möglich erklärt wurde. Also hier ist meine Lektüre/Interpretation/Übersetzung davon. (Gehen Sie zu dieser Seite, um bei Bedarf die Quelle meiner Daten zu sehen).

HINWEIS: Dieser Prozess kann sich nach dem Hinzufügen von „segwit“ entweder in seinem „Lock-in“ oder seiner „Aktivierung“ geändert haben. Dazu kann ich nicht sprechen.

Ein Zitat von dieser Seite:

Das endgültige scriptSig enthält die Signatur zusammen mit dem öffentlichen Schlüssel für die Quelladresse (1MMMMSUb1piy2ufrSguNUdFmAcvqrQF8M5). Dies beweist, dass ich diese Bitcoins ausgeben darf, wodurch die Transaktion gültig wird.

Schritt 1. Die Signatur in einer bestimmten Transaktion beginnt mit 473044(diese sind Standard, soweit ich sehen kann).

Schritt 2. Dann müssen Sie 0120an das Ende dieser Nummer anhängen, um sie zu erhalten4730440120

SEITENBEMERKUNG: Es gibt Variationen davon, die in alten Transaktionen demonstriert werden und möglicherweise noch existieren, wo Sie das NICHT eingeben und stattdessen eine andere Nummer eingeben. Ich kann diese Instanzen nicht erklären oder erklären, außer zu sagen, dass die "01" dies als die erste Ganzzahl bezeichnet und "20" die ganzzahlige Länge von 32 Bit bezeichnet (die "20" ist in Hex, konvertieren Sie sie einfach in eine Ganzzahl zu 32 bekommen). 32 Bit bedeutet, dass es 64 hexadezimale alphanumerische Zeichen gibt (0-9 und oder af).

Schritt 3. Dann müssen Sie den Hexadezimalwert von „r“ aus der ECDSA-Signatur (das ist 2cb265bf10707bf49346c3515dd3d16fc454618c58ec0a0ff448a676c54ff713) anhängen, was zu Folgendem führt:47304401202cb265bf10707bf49346c3515dd3d16fc454618c58ec0a0ff448a676c54ff713

Schritt 4. Dann hängen Sie '0220' an das Ende des vorherigen Codes an, was zu führt47304401202cb265bf10707bf49346c3515dd3d16fc454618c58ec0a0ff448a676c54ff7130220

RANDNOTIZ:Es gibt Ausnahmen vom bloßen Hinzufügen von „0220“, die möglicherweise in früheren Transaktionen in der gesamten Blockchain vorhanden sind oder vorhanden waren. Das einzige Werkzeug, das ich geben kann, um sie zu erklären, ist, dass sich die „02“ auf die „zweite Ganzzahl“ bezieht und die „20“ die ganzzahlige Länge von 32 Bit bezeichnet (die „20“ ist in Hex, konvertieren Sie sie einfach in eine Ganzzahl zu 32 bekommen). 32 Bit bedeutet, dass es 64 hexadezimale alphanumerische Zeichen gibt (0-9 und oder af). Dies ist genauso wie die "0120". Wenn es also eine dritte Ganzzahl gibt, würde ihr meiner Meinung nach eine "03" vorangestellt werden, und wenn die Ganzzahl länger oder kürzer als 32 Bit (oder 64 hexadezimale alphanumerische Zeichen) ist, sollte die "20" in den Hexadezimalwert der Hälfte geändert werden die Anzahl der hexadezimalen alphanumerischen Zeichen. Zähle sie einfach, dividiere durch zwei,

Schritt 5. Dann müssen Sie den „s“-Wert aus der ECDSA-Signatur anhängen (auf die ich in diesem Beitrag nicht eingehen werde), was zu Folgendem führt 6c6624d762a1fcef4618284ead8f08678ac05b13c84235f1654e6ad168223e82:47304401202cb265bf10707bf49346c3515dd3d16fc454618c58ec0a0ff448a676c54ff71302206c6624d762a1fcef4618284ead8f08678ac05b13c84235f1654e6ad168223e82

Schritt 6. Als nächstes hängst du ein '01' an, was "SIGHASH_ALL" ist. Ich weiß nicht, was das wirklich bedeutet oder wofür es vollständig steht.

Schritt 7. Hängen Sie „41“ an, was „Pushdata41“ ist. Ich weiß nicht, was das wirklich bedeutet oder wofür es vollständig steht.

Schritt 8. Hängen Sie „04“ an, um auf die Art der öffentlichen Schlüssel zu verweisen, die Sie für den öffentlichen Schlüssel darstellen werden, von dem diese Transaktion stammt.

HINWEIS: „04“ bezieht sich auf einen bestimmten unkomprimierten „öffentlichen Schlüssel“. Bitcoin verwendet zu diesem Zeitpunkt normalerweise "02".

SCHRITT 9. Hängen Sie den X-Wert gefolgt vom Y-Wert des öffentlichen Schlüssels an, in diesem Fall sind die Werte: 14e301b2328f17442c0b8310d787bf3d8a404cfbd0704f135b6ad4b2d3ee7513und10f981926e53a6e8c39bd7d3fefd576c543cce493cbac06388f2651d1aacbfcd

HINWEIS: Wenn Sie einen komprimierten öffentlichen Schlüssel verwenden, würden Sie nur den ersten anzeigen.

Ergebnis: 47304401202cb265bf10707bf49346c3515dd3d16fc454618c58ec0a0ff448a676c54ff71302206c6624d762a1fcef4618284ead8f08678ac05b13c84235f1654e6ad168223e8201410414e301b2328f17442c0b8310d787bf3d8a404cfbd0704f135b6ad4b2d3ee751310f981926e53a6e8c39bd7d3fefd576c543cce493cbac06388f2651d1aacbfcd

SIch bin nicht auf die Erstellung von oder eingegangen, Rda ich der Meinung war, dass sie in einem separaten Beitrag erledigt werden sollten, um die Dinge zu organisieren.

+1 für die Lösung Ihrer eigenen Frage. Eine sehr gute "Referenz" gibt es hier:

http://www.righto.com/2014/02/bitcoins-hard-way-using-raw-bitcoin.html
https://en.bitcoin.it/wiki/Protocol_specification#tx 
http://bitcoin.stackexchange.com/questions/3374/how-to-redeem-a-basic-tx

Die 47 am Anfang ist die Länge des folgenden Strings (in Hex), hier ist eine Erklärung dieser ASN.1-Struktur:

# ASN.1 STRUCTURE FOR PRIVATE KEY:
#   30  <-- declares the start of an ASN.1 sequence
#   74  <-- length of following sequence 
#   02  <-- declares the start of an integer
#   01  <-- length of integer in bytes (1 byte)
#   01  <-- value of integer (1)
#   04  <-- declares the start of an "octet string"
#   20  <-- length of string to follow (32 bytes)
#           7d 86 0c 9a 9b 19 47 9b 19 1f 99 23 a7 12 ... df f9 43 43 58 f2 26 23 bc 
#           \----------------------------------------------------------------------/
#            this is the private key 
#   a0   <-- declares the start of context-specific tag 0
#   07   <-- length of context-specific tag 
#   06   <-- declares the start of an object ID
#   05   <-- length of object ID to follow 
#   2b 81 04 00 0a <-- the object ID of the curve secp256k1
#   a1   <-- declares the start of context-specific tag 1
#   44   <-- declares the length of context-sepcifc tag (68 bytes)
#   03   <-- declares the start of a bit string
#   42   <-- length of bit string to follow (66 bytes)
#   00   <-- ??
#            04 f1 44 f0 dc 00 80 af d2 b7 3f 13 37 6c ... 05 49 cd 83 f4 58 56 1e
#            \-------------------------------------------------------------------/
#             this is the public key