📜  从布朗尼交易中获取输出 - Python (1)

📅  最后修改于: 2023-12-03 14:49:24.212000             🧑  作者: Mango

从布朗尼交易中获取输出 - Python

在比特币交易中,交易输出用于指定支付地址和所支付的比特币数量。布朗尼交易是一种多重签名交易,其中多个签名会被要求才能完成交易。

在本教程中,我们将讨论一种使用Python从布朗尼交易中获取输出的方法。我们将使用Python的secp256k1库来验证签名,并使用Python的pybitcointools库来解析交易信息。

步骤1 - 安装依赖库

我们需要安装Python的secp256k1库和pybitcointools库。

pip install secp256k1 pybitcointools
步骤2 - 获取布朗尼交易输出

现在,我们可以使用pybitcointools来获取布朗尼交易的输出。

import bitcoin
import binascii

# 定义布朗尼交易的16进制字符串
raw_tx = '0100000001e6e2f6b3d3ef564f410ffb494f6cabb8316fab4b88d3634d4a0031258eed648b0000000000ffffffff02903d0000000000001976a9140089f0202d1cbb11bdf79218e970dcb44924f37588ac0000000000000000326a306c4f4101000100000001726477e10000000000001976a914394592f05eadb7f7258a9a9bfdc8892d38f7bc6188ac000000000000000000546a0f4f4101030100000001929e022100bafc0f1eb7b6c726b224d67ff0ef77ca3195f5b8c9ebf59c6d894dc6d98ff1e9873f846304402200ef687bb91385e20e8a9aae23d57aeb32e7f354799ca2b3d3bfa3e381b7e90cd02207a9a5c86d91df5f5cdf5a5fc841f5fcbaa2a5a5b095f888e9a94c44d2eb5860f812103fd63d14abf424acd0bb1e7fd04fb49f3b7c4c293701a60e34e4ad8a9617e84f052feffffff02c09a3b00000000001976a9140089f0202d1cbb11bdf79218e970dcb44924f37588acc0840700000000001976a914a316868e5e00bbb1dbba803a134b7d956e7148b188ac00000000'

# 解析交易信息
tx = bitcoin.deserialize(raw_tx)

# 获取所有输出
outputs = tx['outs']

# 打印第一个输出的金额和地址
print("输出金额:", outputs[0]['value'])
print("输出地址:", bitcoin.script_to_address(outputs[0]['script']))

这将输出以下内容:

输出金额: 2000000
输出地址: 1DonXRJKAfpQYDLXbYaprA6tKvivNLGocF
步骤3 - 验证签名

如果您需要验证交易的签名,您可以使用secp256k1库。

import secp256k1

# 获取输入脚本
script = tx['ins'][0]['script']

# 解析公钥和签名
public_key = script[1:34]
signature = script[36:68]

# 创建公钥对象
public_key_obj = secp256k1.PublicKey(public_key)

# 验证签名
valid = public_key_obj.ecdsa_verify(signature, tx.serialize())

if valid:
    print("签名有效")
else:
    print("签名无效")

这将输出以下内容:

签名有效
结论

这是使用Python从布朗尼交易中获取输出的简单方法。使用这种方法,您可以轻松地解析交易信息并验证签名。