我正在使用:https://github.com/bitcoin-abe/bitcoin-abe将区块链导入到mysql数据库中,这几乎在5天后就完成了。因此,我开始查看数据,但没有看到任何地址。我知道BTC客户端不使用那些,但是将它们放在另一个表中仍然会很好。我四处查看代码,发现了这一点:

def hash_to_address(version, hash):
    vh = version + hash
    return base58.b58encode(vh + double_sha256(vh)[:4])


在:https://github.com/bitcoin-abe/bitcoin-abe/blob/3004fe4bad6f64d4c032c735ee23bf9f052d825b/Abe/util.py

当我通过该函数运行pubkey_hash时,没有得到预期的地址结果。例如,使用以下pubkey_hash:62E907B15CBF27D5425399EBF6F0FB50EBB88F18

我应该得到:1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa

但是我却得到了:6GEZdxx5UiTk3U3LaLfsWwRaFAvXEpPNS5R4mqsJDXVJcTNNngTyB5i9S76MLTq

我创建的脚本是:

import util
hash = '62E907B15CBF27D5425399EBF6F0FB50EBB88F18'
print util.hash_to_address("00", hash)


有什么想法或还有其他可以正确做到的事情吗?

Appleman1234为我指明了正确的方向:

import util
hash = '62E907B15CBF27D5425399EBF6F0FB50EBB88F18'
hash = '00' + hash
print "Util: ", util.hash_to_address("", hash.decode('hex'))

最佳答案

无法获得预期结果的原因是由于编码。

Python 2的正确代码

import util
hash = '62e907b15cbf27d5425399ebf6f0fb50ebb88f18'
print util.hash_to_address("00".decode('hex'), hash.decode('hex'))


Python 3的正确代码

import util
import binascii
hash = '62e907b15cbf27d5425399ebf6f0fb50ebb88f18'
print util.hash_to_address(binascii.unhexlify("00"), binascii.unhexlify(hash))


解码和取消十六进制功能将十六进制ASCII表示形式转换为二进制字节字符串。

您遇到的问题是二进制字符串的哈希值及其十六进制ASCII表示形式的哈希值是两个不同的哈希值。

07-26 00:41