Wie kann ich feststellen, welchen Teil des vorherigen tx ich für den Hash zum Signieren eines alten gegebenen tx erstellen muss?

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 6fa4c7db52edfd1b20f11185283b600e4015d0ef0da7a6f7ffeae53f53a54d42den Hash zum Signieren für das erste Eingabeskript bekommen und ich habe 4d76fae4618eb086688f50faa2dcfeb5ed7071030cb87be6905c5910a9901ed3fü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.

Sie haben Recht, es ist verwandt, es erklärt jedoch nicht den schrittweisen Prozess und wie man erkennt, welcher Wert in den Rohdaten des alten TX benötigt wird. In einem "relativ laienhaften" Kontext tut es dies definitiv auch nicht.
Ich weiß, dass Sie dieses Zeug MeshCollider verstehen, wenn Sie mir eine Antwort geben, die die endgültige Iteration davon für die ersten 3 Eingabeskripte UND den resultierenden Hash zum Signieren für jedes der ersten 3 Eingabeskripte enthält (wie in der Frage angegeben) I würde das total positiv bewerten und es als die Antwort betrachten. Dann könnte ich zumindest versuchen, es selbst herauszufinden.
Wenn Sie die technischen Details des rohen Transaktionsformats, die Bedeutung der Terminologie und die Teile der Transaktion, auf die sie sich beziehen, nicht verstehen können oder wollen, kann Ihnen niemand helfen. Was Sie fragen, ist von Natur aus technisch und steht im Mittelpunkt der Funktionsweise von Bitcoin. Es gibt keine Möglichkeit, dies laienhaft zu erklären und trotzdem in der Lage zu sein, alles richtig zu verstehen und später den Haschisch selbst herzustellen.

Antworten (1)

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.


Die Transaktion

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 getrawtransactionBefehls 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 vinFeld (das Array wird von eckigen Klammern eingeschlossen [ ]). Jede Eingabe wird von geschweiften Klammern ( { }) eingeschlossen.

Das allgemeine Hash-Preimage

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.

Signieren der Eingaben

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 hexnach den scriptSigs 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 01000000an 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

Die erste Eingabe ist das erste Element im vinArray 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 voutFeld 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 hexvon scriptPubKey, das ist

76a9142c418ec354a1ab688a656d86b16c02abe8f592e988ac

Wir müssen die Zahl für die Länge davon hexin 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 00durch 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 Hashmit der Bezeichnung ein Hex bytes. Klicken Hashund nach unten scrollen. Kopieren Sie die Zeichenfolge neben dem SHA-256Etikett und fügen Sie sie in dasselbe Textfeld ein und klicken Sie Hasherneut. Scrollen Sie erneut nach unten und die Zeichenfolge neben SHA-256ist der Hash, der für die erste Eingabe unserer Transaktion signiert wurde. Dieser Hash ist:

0ca51b9a67de27aa35aba665cedea31025f8d40c85669953952b8dcde4242960

Der zweite Eingang

Die zweite Eingabe ist das zweite Element des vinArrays. 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 voutArray, 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 hexdieser scriptPubKeyAusgabe 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 scriptSigfü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

Der dritte Eingang

Die dritte Eingabe unserer Transaktion ist das dritte Element des vinArrays. 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 hexvon scriptPubKeymit seiner vorangestellten Länge, also unser scriptPubKeyist

1976a914a4c3d2d77c214b4e212cdcc0331d21b2fbd6f32888ac

Kopieren Sie nun die ursprüngliche, unveränderte unsignierte Transaktion. Gehen Sie zu der Stelle, an der Sie das scriptSigfür diesen Eingang durch ersetzt haben 00. Ersetzen Sie das 00durch 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

Fazit

Die für jede Eingabe signierten Hashes lauten wie folgt:

  • Erste Eingabe:0ca51b9a67de27aa35aba665cedea31025f8d40c85669953952b8dcde4242960
  • Zweiter Eingang:46016caa2997dc453420a9af5090cd90c5109a93d525bbc3e9e12f8ec0112d58
  • Dritter Eingang: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
+1 sehr gründliche und gut erklärte Antwort, du bist mir zuvorgekommen;)
Die von mir verwendete Transaktion entspricht logischerweise der von Ihnen ausgewählten, sie ist nur viel kürzer und kann tatsächlich in eine Stackexchange-Antwort passen. Der JSON-Code der von Ihnen ausgewählten Transaktion hatte zu viele Zeichen.
Jede Eingabe entspricht nur einer vorherigen Transaktionsausgabe. Die Adressen spielen keine Rolle; Alles, was Sie suchen müssen, ist die vorherige Transaktion, die durch die Eingabe angegeben ist, und dann den Ausgabeindex, den sie angibt. Jede Eingabe erfolgt unabhängig von anderen Eingaben, sodass sich alles, was Sie an einer Eingabe vornehmen, nicht auf die anderen Eingaben überträgt. Aus diesem Grund gebe ich an, dass Sie die ursprüngliche unveränderte unsignierte Transaktion kopieren . Diese Kopie wird zu einer lokalen Kopie für diese Eingabe und wird verworfen, nachdem die Eingabe signiert wurde.
Adressen sind eine menschliche Abstraktion; sie spielen bei Transaktionen überhaupt keine Rolle. Die einzigen Dinge, die zählen, sind frühere Transaktionsergebnisse.
Welcher Schritt fehlt? Ich sehe keinen fehlenden Schritt.
"Entfernen Sie dann die beiden Zeichen vor dem Ding, das Sie gerade ersetzt haben". Ich sage das direkt bevor ich die scriptSigs aufliste.
Das ist alles, was Sie tun müssen. Übertragen Sie jedoch nichts von anderen Eingaben. Anstatt also den unsignierten tx der ersten Eingabe zu nehmen und die von Ihnen hinzugefügten Dinge rückgängig zu machen, nehmen Sie den ursprünglichen unsignierten Text, bei dem alle Skriptsignaturen entfernt wurden, und arbeiten Sie von dort aus weiter. So stellen Sie sicher, dass Sie nicht versehentlich Daten übertragen.
Was für eine Signaturbestätigung? Stimmt der Hash, den Sie erhalten, mit dem überein, den ich bereitgestellt habe?
Ich habe diese erhalten, indem ich Bitcoin Core so modifiziert habe, dass es Sighashes auf mein Terminal druckt, während es Signaturen überprüft. Dies ist jedoch nicht besonders benutzerfreundlich und die Hashes werden tatsächlich in Byte-vertauschter Reihenfolge gedruckt (wegen Endianness der internen Strukturen). Darüber hinaus erfordert das Erhalten der Seufzer bereits bestätigter Transaktionen das Zurückspulen der Blockchain und das erneute Abspielen, damit alle Seufzer gedruckt werden können.
Der Code ist hier: github.com/achow101/bitcoin/tree/give-sighashes Sie müssen ihn selbst kompilieren. Die txid, der Eingabeindex und der Sighash für diese Eingabe werden in gedruckt stderr. Sie müssen dies vom Terminal aus ausführen.
tyvm wieder. Ja, das Kompilieren wird definitiv eine große Herausforderung darstellen, aber genau wie bei dieser ganzen Sache werden mich vielleicht Neugier und der Wunsch, Zeit zu sparen, dazu zwingen, es zu versuchen.