如何在python bitcoilib中创建和广播具有多个输入的tx



我正试图在bitcoinlib中创建一个具有多个输入的事务。我在bitcoilib repo中粘贴了一个例子:

from bitcoinlib.transactions import *
from bitcoinlib.services.services import *
import requests
amount = 19605 # in satoshis
t = Transaction(fee=5000, outputs=[Output(amount, address="to address")])
transaction_inputs = [
("b0514d3d47bffdf588e14e0324c88e4934a36423f011d634b4e379b3a65c5207", 0, "wif private key"),
("4e831f9221470f93cc0cd2e0ef0e2f731c5bbfde0e8fc2ae430b31149ffd25bb", 1, "wif private key")
]
for ti in transaction_inputs:
ki = Key(ti[2])
t.add_input(prev_txid=ti[0], output_n=ti[1], keys=ki.public())
icount = 0
for ti in transaction_inputs:
ki = Key(ti[2])
t.sign(ki.private_byte, icount)
icount += 1
print(t.verify())
rawhextx = t.raw_hex()
tx = Service().sendrawtransaction(rawhextx)
print(tx)

sendrawtransaction返回False。t.verify((为True。此外,我试图通过POST请求向blockchain.info:自己广播tx

>>> resp = requests.post("https://blockchain.info/pushtx", data={"tx": rawhextx})
>>> resp.text
'Code: -25, Error: bad-txns-inputs-missingorspent'

据我所知,这个错误意味着我的UTXO已经用完了,但它们还没有用完(我在上面用UTXO指定了tx(。我想使用这个库,但如果这个库不适合我的任务,我愿意接受替代方案的建议。

我解决了它;output_n";是与"中的发送者地址相关的输出的索引;prev_txid";tx,而不是tx输入的索引。将元组中的所有第二个值更改为0有帮助,因为其地址的输出具有第一个索引。

from bitcoinlib.transactions import *
from bitcoinlib.services.services import *
import requests
amount = 19605 # in satoshis
t = Transaction(fee=5000, outputs=[Output(amount, address="to address")])
transaction_inputs = [
("b0514d3d47bffdf588e14e0324c88e4934a36423f011d634b4e379b3a65c5207", 0, "wif private key"),
("4e831f9221470f93cc0cd2e0ef0e2f731c5bbfde0e8fc2ae430b31149ffd25bb", 0, "wif private key")
]
for ti in transaction_inputs:
ki = Key(ti[2])
t.add_input(prev_txid=ti[0], output_n=ti[1], keys=ki.public())
icount = 0
for ti in transaction_inputs:
ki = Key(ti[2])
t.sign(ki.private_byte, icount)
icount += 1
print(t.verify())
rawhextx = t.raw_hex()
tx = Service().sendrawtransaction(rawhextx)
print(tx)

最新更新