Wie erzeuge ich das Bitcoin Cash Hash Preimage?

Ich versuche, manuell eine signierte Transaktion zu generieren, die von meiner Adresse im neuen Adressformat gesendet werden 1GiJZtN7wjUuL4V5i7ZYYDAvFtqi5AhCDrsoll . bitcoincash:qzk9nxh6qpd9yt3hvv6vvun78s834f3escdhu2vdjpIch verwende bei dieser Transaktion einen unkomprimierten öffentlichen Schlüssel.

Ich habe die folgende unsignierte Bitcoin Cash-Transaktion. Wie finde ich sein Hash-Preimage, das der Hash ist, der beim Signieren dieser Transaktion verwendet wird?

0100000001fb4a8e5c7ac5311f32fbe127f031134ee3e7490f3308ca19c567f78d6aa96d770000000000ffffffff0100a00700000000001976a914a8e181e0847b495df439066ca8fb36ce093692be88ac00000000

Zerlegt sieht es so aus:

01000000- nVersion

01- Anzahl Eingänge

fb4a8e5c7ac5311f32fbe127f031134ee3e7490f3308ca19c567f78d6aa96d77- txid (Little-Endian)

00000000- vout

00- Größe des SignScripts

ffffffff- Sequenznummer

01- Anzahl Ausgänge

00a0070000000000- Betrag (Hex, Little-Endian)

1976a914a8e181e0847b495df439066ca8fb36ce093692be88ac- scriptPubKey

00000000- timeLock

Ich versuche, die Ausgabe 0 der Transaktion mit txid: zu konsumieren 776da96a8df767c519ca08330f49e7e34e1331f027e1fb321f31c57a5c8e4afb. Der scriptPubKey für die Ausgabe 0 dieser Transaktion lautet:

1976a914ac599afa005a522e376334c6727e3c0f1aa6398688ac

Der Wert der empfangenen Ausgabe beträgt 0,005 BCH

The transaction I am attempting to consume can be found here: https://bch.btc.com/776da96a8df767c519ca08330f49e7e34e1331f027e1fb321f31c57a5c8e4afb And the rawtx for the transaction I want to consume is here: https://bch.btc.com/776da96a8df767c519ca08330f49e7e34e1331f027e1fb321f31c57a5c8e4afb.rawhex

Kann mir jemand helfen?

Antworten (1)

Bitcoin Cash verwendet BIP 143 für die Signatur-Hash-Erstellung.

Von der BIP:

  Double SHA256 of the serialization of:
     1. nVersion of the transaction (4-byte little endian)
     2. hashPrevouts (32-byte hash)
     3. hashSequence (32-byte hash)
     4. outpoint (32-byte hash + 4-byte little endian) 
     5. scriptCode of the input (serialized as scripts inside CTxOuts)
     6. value of the output spent by this input (8-byte little endian)
     7. nSequence of the input (4-byte little endian)
     8. hashOutputs (32-byte hash)
     9. nLocktime of the transaction (4-byte little endian)
    10. sighash type of the signature (4-byte little endian)

Das Hash-Preimage sieht also so aus:

01000000be16f25831b40c713fed6627e39aa7717170f5cdd62c765bd4882abbefdaa50e3bb13029ce7b1f559ef5e747fcac439f1455a2ec7c5f09b72290795e70665044fb4a8e5c7ac5311f32fbe127f031134ee3e7490f3308ca19c567f78d6aa96d77000000001976a914ac599afa005a522e376334c6727e3c0f1aa6398688ac20a1070000000000ffffffffc8e2e71fe663fc91d7aa109feffee0f1497862af35525f68f500cbd55f6ed6620000000041000000

Und hier ist seine Aufschlüsselung:

nVersion: 01000000
hashPrevouts: be16f25831b40c713fed6627e39aa7717170f5cdd62c765bd4882abbefdaa50e
hashSequence: 3bb13029ce7b1f559ef5e747fcac439f1455a2ec7c5f09b72290795e70665044
outpoint: fb4a8e5c7ac5311f32fbe127f031134ee3e7490f3308ca19c567f78d6aa96d7700000000
scriptCode: 1976a914ac599afa005a522e376334c6727e3c0f1aa6398688ac
value: 20a1070000000000
nSequence: ffffffff
hashOutputs: c8e2e71fe663fc91d7aa109feffee0f1497862af35525f68f500cbd55f6ed662
nLocktime: 00000000
sighash: 41000000
I get the "hashPrevouts" to be: "be16f25831b40c713fed6627e39aa7717170f5cdd62c765bd4882abbefdaa50e" which is sha256d("fb4a8e5c7ac5311f32fbe127f031134ee3e7490f3308ca19c567f78d6aa96d7700000000"). Wer von uns hat Recht?
Hm, ja, du hast recht. Ich werde die Antwort bearbeiten
Was genau bedeutet dieser Wert des Sighash-Feldes?
Sighash gibt an, welche Daten genau signiert werden. Es ist ein Typenindikator.