如何将Tx_raw转换为Tx_ID / HASH

时间:2019-07-05 14:42:25

标签: python hash transactions bitcoin

我有交易明细,我想提取交易哈希。

我在查找此交易的交易哈希/ ID时遇到问题。谁能指定我的转换出错了吗?因为我真的看不到

<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")

从那笔交易中我得到了这笔原始交易:

b'010000000101e62dd8fdb41a08118a35f83c483e53c06ba0ca37156f8670bd81546a5c3986000000006b483045022100adaa0921ef15771abc9aeb959fce194b0283852bc336614ffc6deeebc19e21ee0220364135571d7899f3f9709a3e07f419dc62a7cb53eca65a85a3a1129a91d7d01c01210246607e02ba8f5dca52f54d09fce649ba80c711558ccaa0457487462faaf2301fffffffff0298b92880000000001976a914320a4a30144df4b885080e843e95bb4b3332a68f88ac587da732000000001976a9143810d46cafb8e59d957f9fc47b9a9d22dc14807a88ac00000000'>

当我执行get_hash(raw)时: 我得到:

ID:b'f799bc123ad2e961ed4347a83c933dc931b5d92cadf7c17c3a254b2378ebd036',

这是错误的,因为实际的交易在这里: https://btc.com/202bf3d8baf05d63ab0e00f3874071a54846e02ea74e87efc6bccb89a491bd71#in_0

ID为202bf3d8baf05d63ab0e00f3874071a54846e02ea74e87efc6bccb89a491bd71

如果有人能帮助我指定我搞砸的那一部分,我将非常感谢! 预先感谢

1 个答案:

答案 0 :(得分:0)

本质上,您不能通过b'将十六进制字符串转换为二进制字符串。也就是说,您要告诉double_hash函数'AB1023'已经是二进制字符串,而实际上不是。相反,您必须首先通过某个转换函数将十六进制字符串转换为二进制。

我喜欢为此使用binascii软件包。 binascii.unhexlify(raw)

因此您的新功能将如下所示:

import binascii

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

希望这会有所帮助,或者您已经知道了。