Mir wurde kürzlich (hier) beigebracht, wie man den Hash zum Signieren für ein bestimmtes "Eingabeskript" für eine vorhandene Transaktion erstellt. Ich versuchte dann, meine Fähigkeiten zu testen und suchte nach einer schwierigen Transaktion, um einen Sinn zu finden. Nun, ich habe es auf jeden Fall gefunden, und es beweist, dass mein Verständnis völlig unzureichend ist, um etwas mit mehr als einer einzelnen Eingabeskripttransaktion und / oder mit einer vorherigen Transaktion mit mehr als einem Skript zu handhaben.
Ich habe d1cdb8c3828ee74c22677e705539937d039e6acef19e5f2ac0a2779846e4b6c1 gefunden , das hier "roh" zu finden ist . Dies sind die ersten drei "Eingabeskripte" von buchstäblich Dutzenden:
1
3044022062025a634a2144462cca4b8b0e7b09188b214abb44c8738401bbe03b5df74a59022040fc2c48dc4b940b917c55de3d33861f3d0f21f0807039d5cb6d747af2
02f32fbdcc91934c8ea17cbe3b1ce8bb34cba9f33b959eb5d2d676181466c849ca
2
3044022079b93499324572f031e873c62d12d0207248d2e3d042781db2e6c009325ff6b6022059f81d40a65933bc8ad5f5125432cb5c156d3f64b12ee13f840c649c76
02f32fbdcc91934c8ea17cbe3b1ce8bb34cba9f33b959eb5d2d676181466c849ca
3
3045022100a9c5705ee0427f976fe6f62bb5ab9e1f08a5550149021ef3f275e3f015326786022052e23f2931b7c6697918149cdb34d39884a321305f087e0a292e89dbc089.df087e0a292e89
02f32fbdcc91934c8ea17cbe3b1ce8bb34cba9f33b959eb5d2d676181466c849ca
Viele "Eingabeskripte" und jedes scheint aus einer Multi-Input-Transaktion zu stammen (ich denke, so nennen Sie es). Das Beste, was ich tun kann, ist, für jeden auf der angegebenen Website angezeigten Betrag auf den Link „Ausgabe“ zu klicken, um zu bestätigen, von welcher Transaktion er stammt, aber um zu erkennen, welchen Teil der Rohdaten dieser vorherigen Transaktion ich nehmen soll, um den Hash zu erstellen für das bestimmte Eingabeskript dieser Transaktion signieren? Ich wäre effizienter darin, meinen Kopf gegen die Wand zu schlagen. Mit dem Kopf gegen die Wand zu schlagen wäre im Vergleich dazu auch angenehmer. Und das berücksichtigt nicht einmal, welche anderen Dinge ich ändern müsste, um diese Daten aufzunehmen (wie muss ich ändern, welche Eingabe es in der Gesamtsache ist, bevor ich sie zweimal hash?).
Kann mich bitte jemand durch die Schritte führen (in relativ laienhaften Begriffen), wie man den Hash zum Signieren für die ersten 2-3 Eingabeskripte für diese Transaktion erstellt? Bitte zeigen Sie mir die Arbeit und zeigen Sie mir das Ganze, was ich bekommen soll, bevor ich es zweimal hash, und was ich bekommen soll, nachdem ich es zweimal hash habe (für die ersten 2-3 Eingabeskripte). Sogar im schlimmsten Fall, wenn Sie mir nur das vollständige Ding (das müsste nur kopiert und eingefügt werden müssen, um den doppelten Hash zu erstellen) für die ersten 2-3 Skripte und den resultierenden Hash zum Signieren für die ersten 2-3 Skripte geben, Ich werde Ihre Antwort positiv bewerten, um sie als die richtige Antwort zu identifizieren (vorausgesetzt, Ihre Zahlen sind korrekt).
Ich finde häufig, dass Antworten, die ich hier bekomme, … naja … jenseits dessen sind, was ich verstehen und befolgen kann. Obwohl ich es versuchen könnte, fällt es mir in einem Durcheinander von rohen Transaktionsdaten (insbesondere einer wie dieser Transaktion und ihren vorherigen Transaktionen) schwer, zwischen einer "Eingabe", einem "Seufzer", einer "Skript-Sig" und einer zu unterscheiden "Output", ein "Dingleberry" oder sogar ein "Petit Point", ist für mich alles ein großer Zahlenstrang, bei dem ich Muster erkennen, aber nicht entwirren kann.
Um zu zeigen, dass ich es zumindest versucht habe, habe ich 6fa4c7db52edfd1b20f11185283b600e4015d0ef0da7a6f7ffeae53f53a54d42
den Hash zum Signieren für das erste Eingabeskript bekommen und ich habe 4d76fae4618eb086688f50faa2dcfeb5ed7071030cb87be6905c5910a9901ed3
für das zweite Eingabeskript bekommen, und ich bezweifle, dass ich irgendwo in der Nähe der richtigen Antwort bin, da die rohen Transaktionsdaten des vorherigen TX so verworren waren und lang und hatte so viele Abschnitte, ich habe keine Ahnung, was ich bekommen sollte.
Bitte sagen Sie mir zumindest, welche Hashes ich für die ersten 2-3 Eingaben signieren soll. Auf diese Weise kann ich zumindest meine Arbeit überprüfen und versuchen, es selbst herauszufinden, auch wenn ich die gegebene Erklärung nicht verstehe, wenn ich diese Hashes habe.
Es kann angenommen werden, dass diese Frage anderen Fragen ähnlich ist, aber im Gegensatz dazu bitte ich um ein Schritt-für-Schritt-Beispiel mit den ersten Eingaben dieser Transaktion, wie ich überhaupt weiß, welche Teile ich mir von der vorherigen Transaktion ansehen soll um es wirklich zu zeigen, damit ich mein Verständnis Ihrer Schritte bestätigen kann, indem ich die Ergebnisse dieser Schritte mit den Ergebnissen vergleiche, die Sie erhalten, wenn Sie dieselben Schritte ausführen.
Wenn Sie in Bezug auf ein bestimmtes Eingabeskript oder etwas anderes sagen: "Nun, das kommt von Eingabe 4 aus der vorherigen Transaktion, schauen Sie sich das an", nun, ich weiß nicht, wo sich diese Eingabe in den Rohdaten dieses vorherigen TX befindet! Ich weiß auch nicht, wie ich das herausfinden soll. Wenn Sie es mir zeigen, dann hilft mir das, es zu identifizieren, so dass ich einige Nuancen davon erkennen und anfangen kann zu verstehen, wie ich es verstehen kann. Wenn Sie mir nicht sagen, was es ist, kann ich nicht bestätigen, dass ich Ihre Anweisung verstanden habe.
Wenn Sie sagen "denken Sie daran, das in diesem Teil zu notieren". Notate what, ich weiß nicht, was ich notieren soll oder wie ich es notieren würde, selbst wenn ich es wüsste, wenn Sie es mir nicht zeigen (oder nehmen Sie bitte an, ich weiß es nicht, Sie können es wahrscheinlich nicht in Ihrer Beschreibung der Schritte für mich "zu einfach" sein, da ich bestenfalls ein Amateurprogrammierer und weit entfernt von einem Abschluss als Computeringenieur bin).
Ich weiß, dass meine Bitte um Spezifizierung die Norm für die Beschreibung der Schritte überschreitet, aber ich denke, das kann anderen helfen, die nicht so vertraut sind und nach solchen Antworten suchen, und deshalb frage ich auch nur nach dem Kopieren und Einfügen Ergebnis, das ich für die ersten 2-3 Skripte erhalten soll, die ich zweimal hashen muss, aber auch ihre resultierenden Hashes; damit ich Ihre Informationen nehmen und versuchen kann, es selbst herauszufinden, damit ich Sie nicht mit 16 Kommentaren nerven werde, die versuchen, es herauszufinden, und in einem vergeblichen Versuch stundenlang auf Antworten warten (von denen einige nie kommen). verstehe, was du mir mit Worten sagen willst, die ich nicht ganz verstehe. Stattdessen würden Sie mir mit den Werkzeugen helfen, es selbst herauszufinden.
Danke für Ihre Hilfe.
Haftungsausschluss: Ich gehe davon aus, dass Sie nicht völlig ahnungslos sind und wissen, was ein Array ist, wie man von 0 an zählt und wie man Klammern, Anführungszeichen und Doppelpunkte abgleicht, damit Sie JSON-formatierte Daten lesen können. Wenn Sie nicht wissen, wie man diese Dinge macht, dann googeln Sie sie bitte zuerst, bevor Sie diesen Beitrag lesen.
Außerdem wird dieser Beitrag sehr lang und äußerst technisch sein. Es gibt einfach keine Laiensprache, um dies zu erklären, aber es kann so erklärt werden, dass es sehr einfach zu befolgen ist, vorausgesetzt, Sie wissen, was ich oben gesagt habe. Dinge, die fett gedruckt sind, sind Dinge, an die Sie sich erinnern sollten, da ich diese Begriffe später in diesem Beitrag verwenden werde.
Schließlich gelten diese Anweisungen für Transaktionen, die von Bitcoin-Adressen „ausgeben“, die mit einem beginnen 1
. Das "Ausgeben von" dem anderen Bitcoin-Adresstyp macht diesen Vorgang komplizierter.
Ich werde eine andere Transaktion als die in Ihrer Frage verwenden, da diese Transaktion viel zu groß ist, um sie einfach zu erklären. Stattdessen werde ich ff8766ec873ff55cc0ac17dee7b379a4efa2a5c83dabdd9a30287c7761ad55d5 verwenden , was viel kleiner ist.
Blockchain.info liefert nicht genügend Informationen, um die Hashes einfach zu konstruieren. Stattdessen werde ich die Ausgabe des getrawtransaction
Befehls von Bitcoin Core verwenden, der die Transaktion im JSON-Format aufschlüsselt :
{
"hex": "0100000003b0c03779c38ddabc044947b164adbcffde8e0ddb3678494f4e8b83f13b37629d010000006b483045022100f3c0f555cd39198caf77f6756256801fc57bcabe4892601b9def52259698f40a0220230262841bff151eb617f7d4cdda6bf06d6fa791230c152e47f68bcdd0e6f64a01210204b3506d8903ca601c97a4abab6548e91004c535a5a45e21299a494b146859caffffffff060eeae54b70d12caddcc15f8897ebc2b6c3011c9a600aba74d49b969991cab3000000006b4830450221009dbeb64ddd4646e1118503c87feaa95c531b5178c6e543be782f6ecb05e8fbe602203945570f8dc56c145617f0283fa4032e0b7895a9cf2a81c7b65665b8ac608cb00121026602a5dc59c30f485b2c457ac8e2f617e27b10a1d2ae76f3231f9b01dff08964ffffffff7f715ba408db0289118f9b8578e54e721f1aee10d09844510793b8b20c87903e010000006b48304502210095e300886ec4df78e39d6d0cf5e5e531ded8f42f00e5730c371d8951867dad5b02203c55f9403f6c2aac444213161a93a86661e7367d4007be74ffb3981387cc1c790121023f0aadfeb71a4964c5087fec8b052c8236051dae838d4747543330c6b266ce6effffffff02d5781100000000001976a914342ab422c9e3ef285efe9882ae54269ed9713dd688ac20a10700000000001976a91488d924f51033b74a895863a5fb57fd545529df7d88ac00000000",
"txid": "ff8766ec873ff55cc0ac17dee7b379a4efa2a5c83dabdd9a30287c7761ad55d5",
"hash": "ff8766ec873ff55cc0ac17dee7b379a4efa2a5c83dabdd9a30287c7761ad55d5",
"version": 1,
"size": 522,
"vsize": 522,
"locktime": 0,
"vin": [
{
"txid": "9d62373bf1838b4e4f497836db0d8edeffbcad64b1474904bcda8dc37937c0b0",
"vout": 1,
"scriptSig": {
"asm": "3045022100f3c0f555cd39198caf77f6756256801fc57bcabe4892601b9def52259698f40a0220230262841bff151eb617f7d4cdda6bf06d6fa791230c152e47f68bcdd0e6f64a[ALL] 0204b3506d8903ca601c97a4abab6548e91004c535a5a45e21299a494b146859ca",
"hex": "483045022100f3c0f555cd39198caf77f6756256801fc57bcabe4892601b9def52259698f40a0220230262841bff151eb617f7d4cdda6bf06d6fa791230c152e47f68bcdd0e6f64a01210204b3506d8903ca601c97a4abab6548e91004c535a5a45e21299a494b146859ca"
},
"sequence": 4294967295
},
{
"txid": "b3ca9199969bd474ba0a609a1c01c3b6c2eb97885fc1dcad2cd1704be5ea0e06",
"vout": 0,
"scriptSig": {
"asm": "30450221009dbeb64ddd4646e1118503c87feaa95c531b5178c6e543be782f6ecb05e8fbe602203945570f8dc56c145617f0283fa4032e0b7895a9cf2a81c7b65665b8ac608cb0[ALL] 026602a5dc59c30f485b2c457ac8e2f617e27b10a1d2ae76f3231f9b01dff08964",
"hex": "4830450221009dbeb64ddd4646e1118503c87feaa95c531b5178c6e543be782f6ecb05e8fbe602203945570f8dc56c145617f0283fa4032e0b7895a9cf2a81c7b65665b8ac608cb00121026602a5dc59c30f485b2c457ac8e2f617e27b10a1d2ae76f3231f9b01dff08964"
},
"sequence": 4294967295
},
{
"txid": "3e90870cb2b89307514498d010ee1a1f724ee578859b8f118902db08a45b717f",
"vout": 1,
"scriptSig": {
"asm": "304502210095e300886ec4df78e39d6d0cf5e5e531ded8f42f00e5730c371d8951867dad5b02203c55f9403f6c2aac444213161a93a86661e7367d4007be74ffb3981387cc1c79[ALL] 023f0aadfeb71a4964c5087fec8b052c8236051dae838d4747543330c6b266ce6e",
"hex": "48304502210095e300886ec4df78e39d6d0cf5e5e531ded8f42f00e5730c371d8951867dad5b02203c55f9403f6c2aac444213161a93a86661e7367d4007be74ffb3981387cc1c790121023f0aadfeb71a4964c5087fec8b052c8236051dae838d4747543330c6b266ce6e"
},
"sequence": 4294967295
}
],
"vout": [
{
"value": 0.01145045,
"n": 0,
"scriptPubKey": {
"asm": "OP_DUP OP_HASH160 342ab422c9e3ef285efe9882ae54269ed9713dd6 OP_EQUALVERIFY OP_CHECKSIG",
"hex": "76a914342ab422c9e3ef285efe9882ae54269ed9713dd688ac",
"reqSigs": 1,
"type": "pubkeyhash",
"addresses": [
"15kqJ5UinhstuG1KVCSJDagaUcFJLvhyNx"
]
}
},
{
"value": 0.005,
"n": 1,
"scriptPubKey": {
"asm": "OP_DUP OP_HASH160 88d924f51033b74a895863a5fb57fd545529df7d OP_EQUALVERIFY OP_CHECKSIG",
"hex": "76a91488d924f51033b74a895863a5fb57fd545529df7d88ac",
"reqSigs": 1,
"type": "pubkeyhash",
"addresses": [
"1DUb2YYbQA1jjaNYzVXLZ7ZioEhLXtbUru"
]
}
}
],
"blockhash": "000000000000000000c93a1c73452d4221f8c88a1721072966c38d590b1b34af",
"confirmations": 1,
"time": 1502353841,
"blocktime": 1502353841
}
Die vollständige Rohtransaktion selbst ist das Feld hex
. Die Eingaben , für die wir signieren möchten, befinden sich in einem Array im vin
Feld (das Array wird von eckigen Klammern eingeschlossen [ ]
). Jede Eingabe wird von geschweiften Klammern ( { }
) eingeschlossen.
Das Hash-Preimage sind die Daten, die tatsächlich gehasht werden. Der Algorithmus zur Erzeugung dieses Vorabbildes ist als Sighashing-Algorithmus bekannt . Der Sighashing-Algorithmus für jede Eingabe lautet wie folgt: Nehmen Sie die Transaktion und machen Sie alle scriptSigs leer. Platzieren Sie dann für die Eingabe, die wir signieren, den scriptPubKey der ausgegebenen Ausgabe, hängen Sie den Sighash-Typ an und hashen Sie das Ganze mit sha256d.
Hier gehe ich auf die Besonderheiten ein.
Als erstes wollen wir alle scriptSigs der Transaktion leer machen. Der einfachste Weg, dies zu tun, besteht darin, eine Rohtransaktion zu nehmen und für jede der Eingaben in der Transaktion hex
nach den scriptSig
s zu suchen und diese durch zu ersetzen 00
. Entfernen Sie dann die beiden Zeichen vor dem Ding, das Sie gerade ersetzt haben
Für die erste Eingabe ist das scriptSig
483045022100f3c0f555cd39198caf77f6756256801fc57bcabe4892601b9def52259698f40a0220230262841bff151eb617f7d4cdda6bf06d6fa791230c152e47f68bcdd0e6f64a01210204b3506d8903ca601c97a4abab6548e91004c535a5a45e21299a494b146859ca
Für die zweite Eingabe ist das scriptSig
4830450221009dbeb64ddd4646e1118503c87feaa95c531b5178c6e543be782f6ecb05e8fbe602203945570f8dc56c145617f0283fa4032e0b7895a9cf2a81c7b65665b8ac608cb00121026602a5dc59c30f485b2c457ac8e2f617e27b10a1d2ae76f3231f9b01dff08964
Für die dritte Eingabe ist das scriptSig
48304502210095e300886ec4df78e39d6d0cf5e5e531ded8f42f00e5730c371d8951867dad5b02203c55f9403f6c2aac444213161a93a86661e7367d4007be74ffb3981387cc1c790121023f0aadfeb71a4964c5087fec8b052c8236051dae838d4747543330c6b266ce6e
Nach dem Durchführen des Suchens und Ersetzens ist die unsignierte Transaktion
0100000003b0c03779c38ddabc044947b164adbcffde8e0ddb3678494f4e8b83f13b37629d0100000000ffffffff060eeae54b70d12caddcc15f8897ebc2b6c3011c9a600aba74d49b969991cab30000000000ffffffff7f715ba408db0289118f9b8578e54e721f1aee10d09844510793b8b20c87903e0100000000ffffffff02d5781100000000001976a914342ab422c9e3ef285efe9882ae54269ed9713dd688ac20a10700000000001976a91488d924f51033b74a895863a5fb57fd545529df7d88ac00000000
Sie sollten sich auch die Position jedes dieser Ersetzungen merken; Sie werden diese Positionen später benötigen.
Hängen Sie nun 01000000
an die unsignierte Transaktion an, sodass wir jetzt Folgendes haben:
0100000003b0c03779c38ddabc044947b164adbcffde8e0ddb3678494f4e8b83f13b37629d0100000000ffffffff060eeae54b70d12caddcc15f8897ebc2b6c3011c9a600aba74d49b969991cab30000000000ffffffff7f715ba408db0289118f9b8578e54e721f1aee10d09844510793b8b20c87903e0100000000ffffffff02d5781100000000001976a914342ab422c9e3ef285efe9882ae54269ed9713dd688ac20a10700000000001976a91488d924f51033b74a895863a5fb57fd545529df7d88ac0000000001000000
Bewahren Sie diese ursprüngliche, unveränderte und unsignierte Transaktion irgendwo auf, wir werden sie später brauchen.
Die erste Eingabe ist das erste Element im vin
Array der JSON-Ausgabe der Transaktion:
{
"txid": "9d62373bf1838b4e4f497836db0d8edeffbcad64b1474904bcda8dc37937c0b0",
"vout": 1,
"scriptSig": {
"asm": "3045022100f3c0f555cd39198caf77f6756256801fc57bcabe4892601b9def52259698f40a0220230262841bff151eb617f7d4cdda6bf06d6fa791230c152e47f68bcdd0e6f64a[ALL] 0204b3506d8903ca601c97a4abab6548e91004c535a5a45e21299a494b146859ca",
"hex": "483045022100f3c0f555cd39198caf77f6756256801fc57bcabe4892601b9def52259698f40a0220230262841bff151eb617f7d4cdda6bf06d6fa791230c152e47f68bcdd0e6f64a01210204b3506d8903ca601c97a4abab6548e91004c535a5a45e21299a494b146859ca"
},
"sequence": 4294967295
},
Jetzt müssen wir einige Daten aus der vorherigen Transaktionsausgabe abrufen. Also schlagen wir die txid nach, die diese Eingabe von ausgegeben hat 9d62373bf1838b4e4f497836db0d8edeffbcad64b1474904bcda8dc37937c0b0
, und erhalten eine Aufschlüsselung des JSON-Formats:
{
"hex": "[removed for space]",
"txid": "9d62373bf1838b4e4f497836db0d8edeffbcad64b1474904bcda8dc37937c0b0",
"hash": "9d62373bf1838b4e4f497836db0d8edeffbcad64b1474904bcda8dc37937c0b0",
"version": 1,
"size": 373,
"vsize": 373,
"locktime": 0,
"vin": [
{
"txid": "86efe44adc45a486c51a641cc83612159dc18f31a14da140a24fb4c5623e511a",
"vout": 1,
"scriptSig": {
"asm": "3045022100cf76ad139adc38ae90fd14e6d29ff9bde62e7b3c3ef9880bc41098775100a1d502205a7dfb6aeacd9c58481f317334d5a6edaf2e734053555409550f6d463d9bf5f0[ALL] 030888863fcb4cdf5b7d33b40e613af35df8f39d576e7972238b0d396cd3fcc3f2",
"hex": "483045022100cf76ad139adc38ae90fd14e6d29ff9bde62e7b3c3ef9880bc41098775100a1d502205a7dfb6aeacd9c58481f317334d5a6edaf2e734053555409550f6d463d9bf5f00121030888863fcb4cdf5b7d33b40e613af35df8f39d576e7972238b0d396cd3fcc3f2"
},
"sequence": 4294967295
},
{
"txid": "897817de401d7245912e7add2da98e6d885a50104e147b785116b3a2a295f386",
"vout": 0,
"scriptSig": {
"asm": "30440220633666024ceb08c4e6d076bc158a0dd013be14238afd8157f2b73b5a00aece6d02202a1da4a6def17cba4ae835c07af2b1ebff87bce0c56d21d6d2458cd234d766f6[ALL] 0395aa52bfe17fa8a06cc6b3216210c7ff3254a2095db322250bd2d9148e5b44cd",
"hex": "4730440220633666024ceb08c4e6d076bc158a0dd013be14238afd8157f2b73b5a00aece6d02202a1da4a6def17cba4ae835c07af2b1ebff87bce0c56d21d6d2458cd234d766f601210395aa52bfe17fa8a06cc6b3216210c7ff3254a2095db322250bd2d9148e5b44cd"
},
"sequence": 4294967295
}
],
"vout": [
{
"value": 0.005,
"n": 0,
"scriptPubKey": {
"asm": "OP_DUP OP_HASH160 52fbbe93faca2c57c6d7ccad877e0da4876ce0c8 OP_EQUALVERIFY OP_CHECKSIG",
"hex": "76a91452fbbe93faca2c57c6d7ccad877e0da4876ce0c888ac",
"reqSigs": 1,
"type": "pubkeyhash",
"addresses": [
"18ZmzEy6fzx9afy2LjWhNjttoh2VBpRq84"
]
}
},
{
"value": 0.01001452,
"n": 1,
"scriptPubKey": {
"asm": "OP_DUP OP_HASH160 2c418ec354a1ab688a656d86b16c02abe8f592e9 OP_EQUALVERIFY OP_CHECKSIG",
"hex": "76a9142c418ec354a1ab688a656d86b16c02abe8f592e988ac",
"reqSigs": 1,
"type": "pubkeyhash",
"addresses": [
"1531GU6Ypf66HJ8c9ZyF2rwHyRWUxKSXhb"
]
}
}
],
"blockhash": "00000000000000000083cb57936842737b6b9da889fed3d9beb9661fe9ad458e",
"confirmations": 8,
"time": 1502353082,
"blocktime": 1502353082
}
Das vout
Feld dieser Eingabe gibt an, dass wir die Ausgabe an Index 1 im Ausgabearray der vorherigen Transaktion benötigen. Es ist wichtig, sich daran zu erinnern, dass die Elementindizierung von Arrays bei 0 beginnt. Das erste Element hat einen Index von (nummeriert) 0, das zweite Element ist Index 1 usw. Bei einem Ausgabeindex von 1 benötigen wir also die zweite Ausgabe davon vorherige Transaktion, nämlich:
{
"value": 0.01001452,
"n": 1,
"scriptPubKey": {
"asm": "OP_DUP OP_HASH160 2c418ec354a1ab688a656d86b16c02abe8f592e9 OP_EQUALVERIFY OP_CHECKSIG",
"hex": "76a9142c418ec354a1ab688a656d86b16c02abe8f592e988ac",
"reqSigs": 1,
"type": "pubkeyhash",
"addresses": [
"1531GU6Ypf66HJ8c9ZyF2rwHyRWUxKSXhb"
]
}
}
Das einzige, was wir von dieser Ausgabe brauchen, ist das hex
von scriptPubKey
, das ist
76a9142c418ec354a1ab688a656d86b16c02abe8f592e988ac
Wir müssen die Zahl für die Länge davon hex
in Bytes voranstellen (die Hälfte der Anzahl der Zeichen in der Zeichenfolge). Die Zahl muss in Hex sein, und es ist 19
. Das scriptPubKey
, was wir verwenden werden, ist also
1976a9142c418ec354a1ab688a656d86b16c02abe8f592e988ac
Machen Sie jetzt eine Kopie der unsignierten Transaktion, die wir zuvor gemacht haben, wir werden das Original nicht ändern, das wir für spätere Eingaben benötigen. Nehmen Sie nun die kopierte unsignierte Transaktion und bewegen Sie Ihren Cursor auf die 00
, durch die wir diese erste Eingabe ersetzt haben scriptSig
. Ersetzen Sie das 00
durch das scriptPubKey
, was wir gerade geändert haben. So sieht jetzt unsere kopierte unsignierte Transaktion aus
0100000003b0c03779c38ddabc044947b164adbcffde8e0ddb3678494f4e8b83f13b37629d010000001976a9142c418ec354a1ab688a656d86b16c02abe8f592e988acffffffff060eeae54b70d12caddcc15f8897ebc2b6c3011c9a600aba74d49b969991cab30000000000ffffffff7f715ba408db0289118f9b8578e54e721f1aee10d09844510793b8b20c87903e0100000000ffffffff02d5781100000000001976a914342ab422c9e3ef285efe9882ae54269ed9713dd688ac20a10700000000001976a91488d924f51033b74a895863a5fb57fd545529df7d88ac0000000001000000
Dies ist unser Hash-Preimage . Jetzt müssen wir es als Bytes hashen. Das Tool, das ich verwende, um diese online zu hashen, ist http://www.fileformat.info/tool/hash.htm . Kopieren Sie das Hash-Preimage und fügen Sie es in das Textfeld für Binary Hash
mit der Bezeichnung ein Hex bytes
. Klicken Hash
und nach unten scrollen. Kopieren Sie die Zeichenfolge neben dem SHA-256
Etikett und fügen Sie sie in dasselbe Textfeld ein und klicken Sie Hash
erneut. Scrollen Sie erneut nach unten und die Zeichenfolge neben SHA-256
ist der Hash, der für die erste Eingabe unserer Transaktion signiert wurde. Dieser Hash ist:
0ca51b9a67de27aa35aba665cedea31025f8d40c85669953952b8dcde4242960
Die zweite Eingabe ist das zweite Element des vin
Arrays. Der JSON dafür ist:
{
"txid": "b3ca9199969bd474ba0a609a1c01c3b6c2eb97885fc1dcad2cd1704be5ea0e06",
"vout": 0,
"scriptSig": {
"asm": "30450221009dbeb64ddd4646e1118503c87feaa95c531b5178c6e543be782f6ecb05e8fbe602203945570f8dc56c145617f0283fa4032e0b7895a9cf2a81c7b65665b8ac608cb0[ALL] 026602a5dc59c30f485b2c457ac8e2f617e27b10a1d2ae76f3231f9b01dff08964",
"hex": "4830450221009dbeb64ddd4646e1118503c87feaa95c531b5178c6e543be782f6ecb05e8fbe602203945570f8dc56c145617f0283fa4032e0b7895a9cf2a81c7b65665b8ac608cb00121026602a5dc59c30f485b2c457ac8e2f617e27b10a1d2ae76f3231f9b01dff08964"
},
"sequence": 4294967295
},
Wir benötigen die Informationen aus der vorherigen Transaktionsausgabe, die die Ausgabe bei Index 0 der Transaktion ist b3ca9199969bd474ba0a609a1c01c3b6c2eb97885fc1dcad2cd1704be5ea0e06
. Die JSON-Ausgabe dieser Transaktion lautet:
{
"hex": "[removed for space]",
"txid": "b3ca9199969bd474ba0a609a1c01c3b6c2eb97885fc1dcad2cd1704be5ea0e06",
"hash": "b3ca9199969bd474ba0a609a1c01c3b6c2eb97885fc1dcad2cd1704be5ea0e06",
"version": 1,
"size": 404,
"vsize": 404,
"locktime": 0,
"vin": [
{
"txid": "7195945cfe7d0d5b7e49b35dba8a844ee0ce1fd3b2afdc3e5bf0e3be409080ce",
"vout": 1,
"scriptSig": {
"asm": "30440220234ec20a17fced74c34b94b2c34e77bb1cc824a34916661fa164f4dd47ce4992022078176fe355ccee3675684af148d340c6bc5c039d9e60630b71f789f72edce327[ALL] 026602a5dc59c30f485b2c457ac8e2f617e27b10a1d2ae76f3231f9b01dff08964",
"hex": "4730440220234ec20a17fced74c34b94b2c34e77bb1cc824a34916661fa164f4dd47ce4992022078176fe355ccee3675684af148d340c6bc5c039d9e60630b71f789f72edce3270121026602a5dc59c30f485b2c457ac8e2f617e27b10a1d2ae76f3231f9b01dff08964"
},
"sequence": 4294967295
},
{
"txid": "9dfbb913f9e80d99ec162adce1f61662e99c7a864eb38943135f41b56693a17a",
"vout": 1,
"scriptSig": {
"asm": "3045022100d966ddb0d0ef2f5e09fe88f7a9629409e576f929b10cd33b11d5c2da0fd2bcae022014517f6b43b3c12da786bca5d96de39ab804cd134940815b40bfbf5df336880e[ALL] 026602a5dc59c30f485b2c457ac8e2f617e27b10a1d2ae76f3231f9b01dff08964",
"hex": "483045022100d966ddb0d0ef2f5e09fe88f7a9629409e576f929b10cd33b11d5c2da0fd2bcae022014517f6b43b3c12da786bca5d96de39ab804cd134940815b40bfbf5df336880e0121026602a5dc59c30f485b2c457ac8e2f617e27b10a1d2ae76f3231f9b01dff08964"
},
"sequence": 4294967295
}
],
"vout": [
{
"value": 0.00439481,
"n": 0,
"scriptPubKey": {
"asm": "OP_DUP OP_HASH160 58be4e12275e895c797c9bf7533452c5a41e4551 OP_EQUALVERIFY OP_CHECKSIG",
"hex": "76a91458be4e12275e895c797c9bf7533452c5a41e455188ac",
"reqSigs": 1,
"type": "pubkeyhash",
"addresses": [
"196ESW77sq7iHzLfJub7KDgTGwvJMZwLs6"
]
}
},
{
"value": 0.00,
"n": 1,
"scriptPubKey": {
"asm": "OP_RETURN 6f6d6e6900000000000000010000000011848ee0",
"hex": "6a146f6d6e6900000000000000010000000011848ee0",
"type": "nulldata"
}
},
{
"value": 0.0000273,
"n": 2,
"scriptPubKey": {
"asm": "OP_DUP OP_HASH160 88d924f51033b74a895863a5fb57fd545529df7d OP_EQUALVERIFY OP_CHECKSIG",
"hex": "76a91488d924f51033b74a895863a5fb57fd545529df7d88ac",
"reqSigs": 1,
"type": "pubkeyhash",
"addresses": [
"1DUb2YYbQA1jjaNYzVXLZ7ZioEhLXtbUru"
]
}
}
],
"blockhash": "000000000000000000c0fd6a8fee9df17e59c7243c9fce359324ee0fffc70be3",
"confirmations": 8,
"time": 1502353358,
"blocktime": 1502353358
}
Wir wollen hier die erste Ausgabe im vout
Array, also ist unsere Ausgabe:
{
"value": 0.00439481,
"n": 0,
"scriptPubKey": {
"asm": "OP_DUP OP_HASH160 58be4e12275e895c797c9bf7533452c5a41e4551 OP_EQUALVERIFY OP_CHECKSIG",
"hex": "76a91458be4e12275e895c797c9bf7533452c5a41e455188ac",
"reqSigs": 1,
"type": "pubkeyhash",
"addresses": [
"196ESW77sq7iHzLfJub7KDgTGwvJMZwLs6"
]
}
},
Wie bei der ersten Eingabe benötigen wir nur die hex
dieser scriptPubKey
Ausgabe mit ihrer vorangestellten Länge, also werden wir das Folgende als unsere verwenden scriptPubKey
:
1976a91458be4e12275e895c797c9bf7533452c5a41e455188ac
Jetzt nehmen wir unsere ursprüngliche, unveränderte unsignierte Transaktion und kopieren sie. Gehen Sie nun zu der Position, an der wir das scriptSig
für den zweiten Eingang entfernt haben. Ersetzen Sie die 00
, die wir dort abgelegt hatten, durch die scriptPubKey
. Unsere kopierte unsignierte Transaktion sollte wie folgt aussehen:
0100000003b0c03779c38ddabc044947b164adbcffde8e0ddb3678494f4e8b83f13b37629d0100000000ffffffff060eeae54b70d12caddcc15f8897ebc2b6c3011c9a600aba74d49b969991cab3000000001976a91458be4e12275e895c797c9bf7533452c5a41e455188acffffffff7f715ba408db0289118f9b8578e54e721f1aee10d09844510793b8b20c87903e0100000000ffffffff02d5781100000000001976a914342ab422c9e3ef285efe9882ae54269ed9713dd688ac20a10700000000001976a91488d924f51033b74a895863a5fb57fd545529df7d88ac0000000001000000
Dies ist unser Hash-Preimage. Nehmen Sie das Hash-Preimage und hashen Sie es wie bei der ersten Eingabe. Ihr resultierender Hash sollte sein
46016caa2997dc453420a9af5090cd90c5109a93d525bbc3e9e12f8ec0112d58
Die dritte Eingabe unserer Transaktion ist das dritte Element des vin
Arrays. Dies ist die JSON-formatierte Aufschlüsselung:
{
"txid": "3e90870cb2b89307514498d010ee1a1f724ee578859b8f118902db08a45b717f",
"vout": 1,
"scriptSig": {
"asm": "304502210095e300886ec4df78e39d6d0cf5e5e531ded8f42f00e5730c371d8951867dad5b02203c55f9403f6c2aac444213161a93a86661e7367d4007be74ffb3981387cc1c79[ALL] 023f0aadfeb71a4964c5087fec8b052c8236051dae838d4747543330c6b266ce6e",
"hex": "48304502210095e300886ec4df78e39d6d0cf5e5e531ded8f42f00e5730c371d8951867dad5b02203c55f9403f6c2aac444213161a93a86661e7367d4007be74ffb3981387cc1c790121023f0aadfeb71a4964c5087fec8b052c8236051dae838d4747543330c6b266ce6e"
},
"sequence": 4294967295
}
Jetzt brauchen wir die Ausgabe bei Index 1 von 3e90870cb2b89307514498d010ee1a1f724ee578859b8f118902db08a45b717f
. Das ist die zweite Ausgabe von 3e90870cb2b89307514498d010ee1a1f724ee578859b8f118902db08a45b717f
. Die JSON-formatierte Aufschlüsselung dieser Transaktion lautet:
{
"hex": "[removed for space]",
"txid": "3e90870cb2b89307514498d010ee1a1f724ee578859b8f118902db08a45b717f",
"hash": "3e90870cb2b89307514498d010ee1a1f724ee578859b8f118902db08a45b717f",
"version": 1,
"size": 257,
"vsize": 257,
"locktime": 0,
"vin": [
{
"txid": "1037821442fe684bd87ad790b4f9fd6a07c3f56ac85478e98e6b06c665eda281",
"vout": 1,
"scriptSig": {
"asm": "3045022100ec9ab3692830627c4f76687d9f2e0fde9fba6f11b6a6025cc7f3c3708be8d8e1022076769507eeb04e867e98e543d54ec8a3c91e17eb4560ff7ab1dd2f40ca7b3d3d[ALL] 023f0aadfeb71a4964c5087fec8b052c8236051dae838d4747543330c6b266ce6e",
"hex": "483045022100ec9ab3692830627c4f76687d9f2e0fde9fba6f11b6a6025cc7f3c3708be8d8e1022076769507eeb04e867e98e543d54ec8a3c91e17eb4560ff7ab1dd2f40ca7b3d3d0121023f0aadfeb71a4964c5087fec8b052c8236051dae838d4747543330c6b266ce6e"
},
"sequence": 4294967295
}
],
"vout": [
{
"value": 0.00,
"n": 0,
"scriptPubKey": {
"asm": "OP_RETURN 6f6d6e6900000000000000030000000000004066",
"hex": "6a146f6d6e6900000000000000030000000000004066",
"type": "nulldata"
}
},
{
"value": 0.00458772,
"n": 1,
"scriptPubKey": {
"asm": "OP_DUP OP_HASH160 a4c3d2d77c214b4e212cdcc0331d21b2fbd6f328 OP_EQUALVERIFY OP_CHECKSIG",
"hex": "76a914a4c3d2d77c214b4e212cdcc0331d21b2fbd6f32888ac",
"reqSigs": 1,
"type": "pubkeyhash",
"addresses": [
"1G2CQXJdzzyyUaStUGcsaKLnN5GjD8TeQe"
]
}
},
{
"value": 0.0000273,
"n": 2,
"scriptPubKey": {
"asm": "OP_DUP OP_HASH160 88d924f51033b74a895863a5fb57fd545529df7d OP_EQUALVERIFY OP_CHECKSIG",
"hex": "76a91488d924f51033b74a895863a5fb57fd545529df7d88ac",
"reqSigs": 1,
"type": "pubkeyhash",
"addresses": [
"1DUb2YYbQA1jjaNYzVXLZ7ZioEhLXtbUru"
]
}
}
],
"blockhash": "000000000000000000c0fd6a8fee9df17e59c7243c9fce359324ee0fffc70be3",
"confirmations": 9,
"time": 1502353358,
"blocktime": 1502353358
}
Die zweite Ausgabe dieser Transaktion ist:
{
"value": 0.00458772,
"n": 1,
"scriptPubKey": {
"asm": "OP_DUP OP_HASH160 a4c3d2d77c214b4e212cdcc0331d21b2fbd6f328 OP_EQUALVERIFY OP_CHECKSIG",
"hex": "76a914a4c3d2d77c214b4e212cdcc0331d21b2fbd6f32888ac",
"reqSigs": 1,
"type": "pubkeyhash",
"addresses": [
"1G2CQXJdzzyyUaStUGcsaKLnN5GjD8TeQe"
]
}
},
Wie bei den vorherigen Eingaben benötigen wir das hex
von scriptPubKey
mit seiner vorangestellten Länge, also unser scriptPubKey
ist
1976a914a4c3d2d77c214b4e212cdcc0331d21b2fbd6f32888ac
Kopieren Sie nun die ursprüngliche, unveränderte unsignierte Transaktion. Gehen Sie zu der Stelle, an der Sie das scriptSig
für diesen Eingang durch ersetzt haben 00
. Ersetzen Sie das 00
durch die scriptPubKey
. Jetzt haben wir also eine kopierte unsignierte Transaktion, die so aussieht:
0100000003b0c03779c38ddabc044947b164adbcffde8e0ddb3678494f4e8b83f13b37629d0100000000ffffffff060eeae54b70d12caddcc15f8897ebc2b6c3011c9a600aba74d49b969991cab30000000000ffffffff7f715ba408db0289118f9b8578e54e721f1aee10d09844510793b8b20c87903e010000001976a914a4c3d2d77c214b4e212cdcc0331d21b2fbd6f32888acffffffff02d5781100000000001976a914342ab422c9e3ef285efe9882ae54269ed9713dd688ac20a10700000000001976a91488d924f51033b74a895863a5fb57fd545529df7d88ac0000000001000000
Hashen Sie das Preimage, wie Sie es für die Eingaben 1 und 2 getan haben. Der Hash, den Sie erhalten sollten, ist
b85c3c3b91362e3c8047120152d5d9640a850e1db6d867393ada2e13a6ec079a
Die für jede Eingabe signierten Hashes lauten wie folgt:
0ca51b9a67de27aa35aba665cedea31025f8d40c85669953952b8dcde4242960
46016caa2997dc453420a9af5090cd90c5109a93d525bbc3e9e12f8ec0112d58
b85c3c3b91362e3c8047120152d5d9640a850e1db6d867393ada2e13a6ec079a
Ich habe diese beiden Transaktionen über eine modifizierte Version von Bitcoin Core ausgeführt, die mir die Seufzer gibt.
Für d1cdb8c3828ee74c22677e705539937d039e6acef19e5f2ac0a2779846e4b6c1 sind die Seufzer für jede Eingabe in der Reihenfolge:
36537e9335b00b9627dd067515b85b2dddb3334e946677f5ca01cf07a8de4945
3b10e1e264162eb8fe3011196a756bfea8798775ee5e6c70a107282f74bfd599
fe269a8d6cc3cd801d5c0e0e41c44a32f6fecc0bb7e4909a905e85da43104cf0
166223356d627392d52cd7def6c45a9b7a18bb6cbc628cc1db0db7a1a6c51b19
b42809cd2075ad304fae2205648384b6ac8558dfb17bafc5e2de838af3f5e3bb
d311ba5115ffdce2c73a0e5007b28baa08885cad1a02e719938469fa0e497ccb
43d0509b98408323f6b7ea4ca07d66ad109c647cb9eee413f88464c400371733
6e22e0963dd860525602ad69ab0c9002054588d05c057f51349414ba11f185ab
07f08a0b60a5ebbbe4220e21d912af8c9cbe20f85cfae1cb21171fed8a4b9870
901832f68d7e10e72b57cc029ef161a4044c6fa2633cccf792eccfe34886f075
c5feb7830c2b2f7bd4a604ea3e7497fc8e3e122955c0bf8bd90b7683dc05eee6
f2e29915224de6eec85d7c5fb21e6333dd289b0bb7d07094f0846ca15cab62a1
6ae401edb4c25f7083e59cb0d6145c65d92e749ef93784214aef5e0eba4b38de
2aefa9852164cf75f7a89fd8b0466bb0f49ef2a3bb49243e951611deeafe556d
90698f761a0c6af1de93990e853cf05d760f2c4afce7bf8dc3fa52e8e5ccfa55
f2637c7489c901ce23e133ed252c8084131b8fbeeb604001fda3b2219ed30adc
8430eb0e3576e3a5e376083e7be45725c8a8f6ca3a5d39d97ab13298f82309cf
8da03f6b4f06fb5da308adbad2678f7c6b6ca1bd15bff9accf5dcb404084b214
a2c96c50371204843d9e97848a4afee884f26f3965940db1092bf860736edc11
7f341abb178bac950acd389ce9aa22c8b7bc9982402002f31a5fdbe10db2acff
a6c81aba4d4e08d19f12d02b2651622e5a288f9fac76cb57b930d990a5c18014
d2363eb97fa94ade230a725576a6af91df6c7da516c568195b54d6e3ab7ac97e
570ab2dbb4b4054162617c8c7f95f747a944f39959dc461ce5efce715cac782e
38f638c00eb4f044568ee4d116ebfa9f355cf81ee77237d909d9b0b519edf736
4861a778ad55393bc670e2b73461eedd52d7370b5f86dca2ff319be44bfcb9ea
ea75ff70f64e2a9b2f184c2408c7e28921ddd3c6952f99d193c56134d714839e
ddf948089894409dab74badfcd64055c79b4ba6511b1863eb42bad35bf22d82c
68d4fc82898fae0b41e26affff0fbf37d8c01ecdd416dad299d4fd6837bdddc5
6d5239c61aec375fcf3a13f6ff36660460ebbe49e1372b99cf0ca001381170c8
75bed4705d44d763b9ba59c4a843ba88cc2c58eca1f1c80a683cb02a45052b98
86a6c9a2f5da74825d930d1bf818a9d8bd3f871bc2cb0d71da27940d1d2130cc
9d9537ebb060d5c1bc6c36fd0695833085d753b2860ee3ba9ff65f977b5ab226
f397fea726ddc5a938544283e1dd265aac5ebb8b6856543df48e285f009b4375
120447a585f30f7bb9411f7888b6fcd96862d1cae34ddaadda6291bc46fa36ed
3760ddfd61b0e5f8902195e2b7285da42400446dfd4fcec1ea979ea78c4b32de
271a878980c9087f7004ed21330cd101dd19706513a629eea4cebae9e5e80a56
33c17e7530d3c184acb222165b49155c2a8283032a7ee96ede30546ee571966a
81de851b46bc42b419cdc9905609cc9a4fda206424cbba12626555bf788ba31a
ee864623021df5a2369174f3b8c90f20b6f3021d33f8c9a1ea75698168005626
Für ff8766ec873ff55cc0ac17dee7b379a4efa2a5c83dabdd9a30287c7761ad55d5 lauten die Seufzer:
0ca51b9a67de27aa35aba665cedea31025f8d40c85669953952b8dcde4242960
46016caa2997dc453420a9af5090cd90c5109a93d525bbc3e9e12f8ec0112d58
b85c3c3b91362e3c8047120152d5d9640a850e1db6d867393ada2e13a6ec079a
stderr
. Sie müssen dies vom Terminal aus ausführen.
meshcollider
Mine
Mine
Andreas Chow