[ad_1]
Because the title states, I am attempting to ship a Litecoin transaction utilizing the Blockcypher API Python SDK, and utilizing Bitcoinlib for key administration. I’ve extensively reviewed the documentation and supply code for the instruments I am working with, and I’ve tried researching this particular error however nonetheless have but to get previous this roadblock.
I’ve gotten to a degree the place the transaction is constructed and and signatures are created, however once I strive broadcasting it, the API returns this error to my console:
{'errors': [{'error': 'Error validating generated transaction:
Error running script for input 0 referencing 79d841bf41ead0e4ecbb58197c289ec9cc087e85cf1a98196e2e415b8990357a at 0:
Script was NOT verified successfully.'}],
'tx': {'block_height': -1, 'block_index': -1,
'hash': 'f2ae95498b3b209ee077ad8a32292a0461ab2d37b807a647520aee31e9c62d29',
'addresses': ['ltc1q7nyvlc6jkznpemw3g0n8f3z5z4eatfhevy07au', 'ltc1qxdvtqt9tm7rwplk8upezujtjsh6k3l85tw39ue'],
'whole': 98100,
'charges': 1900,
'measurement': 221,
'vsize': 140,
'desire': 'low',
'relayed_by': '35.226.89.167',
'obtained': '2023-07-05T08:53:48.287727164Z',
'ver': 1,
'double_spend': False,
'vin_sz': 1,
'vout_sz': 2,
'confirmations': 0,
'inputs': [
{'prev_hash': '79d841bf41ead0e4ecbb58197c289ec9cc087e85cf1a98196e2e415b8990357a',
'output_index': 0,
'output_value': 100000,
'sequence': 4294967295,
'addresses': ['ltc1q7nyvlc6jkznpemw3g0n8f3z5z4eatfhevy07au'],
'script_type': 'pay-to-witness-pubkey-hash',
'age': 2502561,
'witness':
['3044022077515b45f26a56b0dfff42eb94b69d98dbf8fb896fda079ea7e99a17a768fd6f022008b3c435ee0816801e1eea22871cb935a7eaaa8df6ad472eab19b096fb62cd82'
, '034b3110d0be2b52a14c4bbccef285396c67c29586463f278a8d1efacb3c33f439']}],
'outputs': [{
'value': 10000,
'script': '00143358b02cabdf86e0fec7e0722e497285f568fcf4',
'addresses': ['ltc1qxdvtqt9tm7rwplk8upezujtjsh6k3l85tw39ue'],
'script_type': 'pay-to-witness-pubkey-hash'},
{'worth': 88100,
'script': '0014f4c8cfe352b0a61cedd143e674c4541573d5a6f9',
'addresses': ['ltc1q7nyvlc6jkznpemw3g0n8f3z5z4eatfhevy07au'],
'script_type': 'pay-to-witness-pubkey-hash'}]},
'tosign': ['']}
First, I attempted utilizing the simple_spend methodology as proven beneath…
from blockcypher import simple_spend
simple_tx = simple_spend(api_key = API_KEY, from_privkey=priv_key_hex,
to_address="ltc1qxdvtqt9tm7rwplk8upezujtjsh6k3l85tw39ue", to_satoshis=10000, coin_symbol="ltc")
print('tx:', simple_tx)
… and this error was produced:
TX Error(s): Tx NOT Signed or Broadcast
Unable to discover a transaction to spend for deal with LhYFhgm6iai5da8ADeoUjs2BnAPoPm74cm.
Not sufficient funds in 0 inputs to pay for 1 outputs, lacking -10000.
Not sufficient funds after charges in 0 inputs to pay for 1 outputs, lacking -11400.
Error validating generated transaction: Transaction lacking enter or output.
Traceback (most up-to-date name final):
File "most important.py", line 33, in <module>
simple_tx = simple_spend(api_key = API_KEY, from_privkey=priv_key_hex, to_address="ltc1qxdvtqt9tm7rwplk8upezujtjsh6k3l85tw39ue", to_satoshis=10000, coin_symbol="ltc")
File "/residence/runner/sendltc/venv/lib/python3.10/site-packages/blockcypher/api.py", line 1684, in simple_spend
elevate Exception('Construct Unsigned TX Error')
Exception: Construct Unsigned TX Error
This means that the non-public key I offered is routinely being formatted as a legacy deal with, the place no funds for the enter transaction exist as a result of I funded the segwit by-product of the non-public key. I’ve since verified that this code will correctly execute transactions once I fund the legacy by-product of the non-public key. Nevertheless it doesn’t work once I try and contain a segwit addresses because the sender or receiver.
Since I’m not sure of how to make sure that the simple_spend methodology makes an attempt a segwit transaction, I attempted developing it piece-by-piece.
Here is the code for that:
from bitcoinlib.keys import Key
from blockcypher import create_unsigned_tx, make_tx_signatures, broadcast_signed_transaction
API_KEY = '<api_key>'
wif="<compressed_wif>"
priv_key_hex = Key(wif, community = 'litecoin').private_hex
pub_key_hex = Key(wif, community = 'litecoin').public_hex
sender = Key(priv_key_hex, community = 'litecoin').deal with(prefix='ltc', script_type="p2wpkh", encoding='bech32')
inputs = [{'address': f"{sender}"}]
outputs = [{'address': 'ltc1qxdvtqt9tm7rwplk8upezujtjsh6k3l85tw39ue', 'value': 10000}]
unsigned_tx = create_unsigned_tx(inputs=inputs, outputs=outputs, include_tosigntx=True, coin_symbol="ltc", api_key = API_KEY)
print(unsigned_tx)
privkey_list = [str(priv_key_hex)]
pubkey_list = [str(pub_key_hex)]
tx_signatures = make_tx_signatures(txs_to_sign=unsigned_tx['tosign'], privkey_list=privkey_list, pubkey_list=pubkey_list)
print('')
print(tx_signatures)
tx = broadcast_signed_transaction(unsigned_tx=unsigned_tx, signatures=tx_signatures, pubkeys=pubkey_list, coin_symbol="ltc", api_key = API_KEY)
print('')
print(tx)
So when I attempt to run this, the aforementioned error is returned, stating that the script couldn’t be verified. My hunch is that it has one thing to do with trying to broadcast a legacy transaction whereas I offered a segwit deal with. Upon viewing related threads on right here, it could appear that the signature is being malformed both as a result of there’s a downside with how I am deriving my keys, or by some means I have to set a flag indicating a segwit transaction. This might result in the foundation of the issue, however I is also overlooking different points.
Any recommendation, pointers, or solutions could be enormously appreciated. Thanks to your time.
[ad_2]