我试图在bitcoinlib中创建一个具有多个输入的事务。我从bitcoinlib回购中的示例上粘贴了一个例子
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()是真。此外,我还试图通过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指定了txs )。我想使用这个库,但是如果这个库不适合我的任务,我愿意接受其他的建议。
发布于 2022-03-31 11:15:01
我解决了。"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)https://stackoverflow.com/questions/71652047
复制相似问题