Как конвертировать Tx_raw в Tx_ID / HASH - PullRequest
0 голосов
/ 05 июля 2019

У меня есть детали транзакции, и я хочу извлечь хеш транзакции.

У меня проблема с поиском хэша транзакции / идентификатора этой транзакции.Может ли кто-нибудь из вас указать, по какому поводу произошла моя конвертация?потому что я действительно не могу видеть это

<Tx version: 1
 <prevTxIn : 86395c6a5481bd70866f1537caa06bc0533e483cf8358a11081ab4fdd82de601 
 prev_index: 0, 
 script_sig: b'483045022100adaa0921ef15771abc9aeb959fce194b0283852bc336614ffc6deeebc19e21ee0220364135571d7899f3f9709a3e07f419dc62a7cb53eca65a85a3a1129a91d7d01c01210246607e02ba8f5dca52f54d09fce649ba80c711558ccaa0457487462faaf2301f',
 sequence: 4294967295 
> 
<TxOut: 2150152600 
 script_pub_key: b'76a914320a4a30144df4b885080e843e95bb4b3332a68f88ac'> 
,<TxOut: 849837400 
 script_pub_key: b'76a9143810d46cafb8e59d957f9fc47b9a9d22dc14807a88ac'> 
, 
locktime: 0>


def get_hash(raw):
return codecs.encode(double_sha256(raw), "hex_codec")

из этой транзакции, я получил эту транзакцию RAW:

b'010000000101e62dd8fdb41a08118a35f83c483e53c06ba0ca37156f8670bd81546a5c3986000000006b483045022100adaa0921ef15771abc9aeb959fce194b0283852bc336614ffc6deeebc19e21ee0220364135571d7899f3f9709a3e07f419dc62a7cb53eca65a85a3a1129a91d7d01c01210246607e02ba8f5dca52f54d09fce649ba80c711558ccaa0457487462faaf2301fffffffff0298b92880000000001976a914320a4a30144df4b885080e843e95bb4b3332a68f88ac587da732000000001976a9143810d46cafb8e59d957f9fc47b9a9d22dc14807a88ac00000000'>

и когда я делаю get_hash (raw): я получаю:

ID:b'f799bc123ad2e961ed4347a83c933dc931b5d92cadf7c17c3a254b2378ebd036',

, что неверно, потому что фактическая транзакция здесь: https://btc.com/202bf3d8baf05d63ab0e00f3874071a54846e02ea74e87efc6bccb89a491bd71#in_0

с идентификатором 202bf3d8baf05d63ab0e00f3874071a54846e02ea74e87efc6bccb89a491bd71

, пожалуйста, если кто-нибудь может помочь мне указать, на какой части моего процесса этоя испортил бы, я действительно оценил бы это!заранее спасибо

1 Ответ

0 голосов
/ 08 июля 2019

По сути, вы не можете преобразовать шестнадцатеричную строку в двоичную строку через b '.То есть вы говорите функции double_hash, что 'AB1023', это уже двоичная строка, а это не так.Вместо этого вы должны сначала преобразовать шестнадцатеричную строку в двоичную с помощью некоторой функции преобразования.

Мне нравится использовать для этого пакет binascii.binascii.unhexlify(raw)

Итак, ваша новая функция будет выглядеть так:

import binascii

def get_hash(raw):
    return codecs.encode(double_sha256(binascii.unhexlify(raw)), "hex_codec")

Надеюсь, это помогло, или вы уже поняли это.

...