如何从公钥哈希获得比特币地址?

1 投票
1 回答
2901 浏览
提问于 2025-04-18 13:29

我正在使用这个链接的工具:https://github.com/bitcoin-abe/bitcoin-abe,把区块链导入到mysql数据库里,花了我整整5天,快完成了。然后我开始查看数据,但没有看到任何地址。我知道比特币客户端不使用这些地址,但如果能在另一个表里有它们就好了。我在代码里找了一下,发现了这个:

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)放进那个函数里时,结果并不是我期待的地址。比如说,我用这个公钥哈希: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'))

1 个回答

2

你没有得到预期结果的原因是因为编码问题。

这是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))

decode和unhexlify这两个函数可以把十六进制的ASCII表示转换成二进制的字节串。

你遇到的问题是,二进制字符串的哈希值和它的十六进制ASCII表示的哈希值是两个不同的哈希值。

撰写回答