如何从公钥哈希获得比特币地址?
我正在使用这个链接的工具: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表示的哈希值是两个不同的哈希值。