python - 在python中获取Hash160比特币地址

标签 python hash bitcoin bitcoin-testnet

tl;博士 应该如何使用最基本的Python工具来执行Hash160?

================================================== =====

嗨,

我正在尝试弄清楚比特币交易是如何进行的。

当我为新交易选择输入时,我想确保它们属于特定地址。然而,现有的交易并不指定先前输出的地址,而是指定包含地址的哈希值。

例如:

>> bx fetch-tx 11a1b7ac0a65bd50b7094c720aecd77cfd83d84b1707960fd00dd82a888aab5c --config /home/theo/Desktop/bx-testnet.cfg

{
    hash 11a1b7ac0a65bd50b7094c720aecd77cfd83d84b1707960fd00dd82a888aab5c
    inputs
    {
        input
        {
            address_hash f3b7278583827a049d6be894bf7f516178a0c8e6
            previous_output
            {
                hash 4a3532061d43086299ae9b2409a456bb9638dff32e0858c4ccda27203fb2e4f6
                index 1
            }
            script "[30440220146b8b5b014245a9e27e21122d4dded04c3f39c3a49ac2494743d6f6ae8efff602206d417a4be9c7431ea69699132438510ade1cf8d746607f77d114907762ed1eb301] [023dd2e892290e41bb78efce6ea30a97015ef13eaaa9ebb7b0514485fc365cc391]"
            sequence 4294967295
        }
    }
    lock_time 0
    outputs
    {
        output
        {
            address_hash a73706385fffbf18855f2aee2a6168f29dbb597e
            script "dup hash160 [a73706385fffbf18855f2aee2a6168f29dbb597e] equalverify checksig"
            value 130000000
        }
        output
        {
            address_hash ad6e80394af99ece5d7701bf2f457480b93965b7
            script "dup hash160 [ad6e80394af99ece5d7701bf2f457480b93965b7] equalverify checksig"
            value 49525957813
        }
    }
    version 1
}

比如说,我想检查哪些输出可以从地址mvm74FACaagz94rjWbNmW2EmhJdmEGcxpa发送 所以我用Python获取它的Hash160:

>> hashlib.new('ripemd160', hashlib.sha256("mvm74FACaagz94rjWbNmW2EmhJdmEGcxpa".encode('utf-8')).digest()).hexdigest()
'748598cd9b004aecf8a2d97464fb1f2a90562ffe'

这不是我期望的结果:a73706385ffffbf18855f2aee2a6168f29dbb597e

同时,this在线服务可以正确计算哈希值。

如何在 Python 中对比特币地址进行 Hash160 处理?

最佳答案

看起来您在尝试自己完成此操作时遇到了很多麻烦,而且我认为您的解决方案在性能方面不会有效。

您遵循的逻辑是正确的,但是知道有一个用于在 Base58 中进行解码和编码的包(称为 base58),事情可以做得更好

python -m pip install base58

下面是获取以base58(python 2.7)编码的比特币地址的ripemd160哈希值的简单方法:

>>>import base58
>>>adr58 = '1Q2TWHE3GMdB6BZKafqwxXtWAWgFt5Jvm3'
>>>adr160 = base58.b58decode_check(adr58).encode('hex')[2:]
>>>print (adr160)
fc916f213a3d7f1369313d5fa30f6168f9446a2d

注意 decod_check 考虑校验和,[2:] 去掉零

关于python - 在python中获取Hash160比特币地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46328870/

相关文章:

python - scapy 中未定义名称 'raw'

arrays - 删除数组中第一个空格后的所有内容

objective-c - 推荐用于覆盖 NSObject 的哈希方法的哈希函数

php - bitcoind 守护进程和 createrawtransaction 参数

从 Shell 文件启动时 Python 脚本无法运行,但从终端启动时可以运行

python - 关系/时间序列数据库和非常大的 SELECT 查询

iphone - 使用 "hash"方法来跟踪内存中的 NSURLConnections 是否安全?

java - 如何在 Bitcoinj (java) 中查看某个地址的交易?

bitcoin - ethereum,分割数据目录

python - 如何在Python插件中使用多个窗口