fix #2352
This commit is contained in:
parent
7c93d787ed
commit
9140c1fc89
|
@ -11,7 +11,7 @@ from electrum.bitcoin import TYPE_ADDRESS, int_to_hex, var_int
|
||||||
from electrum.i18n import _
|
from electrum.i18n import _
|
||||||
from electrum.plugins import BasePlugin, hook
|
from electrum.plugins import BasePlugin, hook
|
||||||
from electrum.keystore import Hardware_KeyStore, parse_xpubkey
|
from electrum.keystore import Hardware_KeyStore, parse_xpubkey
|
||||||
from electrum.transaction import push_script
|
from electrum.transaction import push_script, Transaction
|
||||||
from ..hw_wallet import HW_PluginBase
|
from ..hw_wallet import HW_PluginBase
|
||||||
from electrum.util import format_satoshis_plain, print_error, is_verbose
|
from electrum.util import format_satoshis_plain, print_error, is_verbose
|
||||||
|
|
||||||
|
@ -300,11 +300,14 @@ class Ledger_KeyStore(Hardware_KeyStore):
|
||||||
self.give_error("No matching x_key for sign_transaction") # should never happen
|
self.give_error("No matching x_key for sign_transaction") # should never happen
|
||||||
|
|
||||||
redeemScript = txin.get('redeemScript')
|
redeemScript = txin.get('redeemScript')
|
||||||
if segwitTransaction and not redeemScript:
|
if not redeemScript:
|
||||||
pkh = bitcoin.hash_160(pubkeys[0].decode('hex')).encode('hex')
|
if segwitTransaction:
|
||||||
redeemScript = '76a9' + push_script(pkh) + '88ac'
|
pkh = bitcoin.hash_160(pubkeys[0].decode('hex')).encode('hex')
|
||||||
|
redeemScript = '76a9' + push_script(pkh) + '88ac'
|
||||||
|
elif p2shTransaction:
|
||||||
|
redeemScript = Transaction.get_preimage_script(txin)
|
||||||
|
|
||||||
inputs.append([txin['prev_tx'].raw, txin['prevout_n'], redeemScript, txin['prevout_hash'], signingPos, txin['sequence'] ])
|
inputs.append([txin['prev_tx'].raw, txin['prevout_n'], redeemScript, txin['prevout_hash'], signingPos, txin.get('sequence', 0xffffffff) ])
|
||||||
inputsPaths.append(hwAddress)
|
inputsPaths.append(hwAddress)
|
||||||
pubKeys.append(pubkeys)
|
pubKeys.append(pubkeys)
|
||||||
|
|
||||||
|
@ -429,29 +432,10 @@ class Ledger_KeyStore(Hardware_KeyStore):
|
||||||
finally:
|
finally:
|
||||||
self.handler.clear_dialog()
|
self.handler.clear_dialog()
|
||||||
|
|
||||||
# Reformat transaction
|
for i, txin in enumerate(tx.inputs()):
|
||||||
inputIndex = 0
|
signingPos = inputs[i][4]
|
||||||
if segwitTransaction:
|
txin['signatures'][signingPos] = str(signatures[i]).encode('hex')
|
||||||
for txin in tx.inputs():
|
tx.raw = tx.serialize()
|
||||||
txin['signatures'] = [str(signatures[inputIndex][0:-1]).encode('hex')]
|
|
||||||
inputIndex = inputIndex + 1
|
|
||||||
else:
|
|
||||||
while inputIndex < len(inputs):
|
|
||||||
if p2shTransaction:
|
|
||||||
signaturesPack = [signatures[inputIndex]] * len(pubKeys[inputIndex])
|
|
||||||
inputScript = get_p2sh_input_script(redeemScripts[inputIndex], signaturesPack)
|
|
||||||
preparedTrustedInputs.append([ ("\x00" * 4) + chipInputs[inputIndex]['value'], inputScript ])
|
|
||||||
else:
|
|
||||||
inputScript = get_regular_input_script(signatures[inputIndex], pubKeys[inputIndex][0].decode('hex'))
|
|
||||||
preparedTrustedInputs.append([ chipInputs[inputIndex]['value'], inputScript ])
|
|
||||||
inputIndex = inputIndex + 1
|
|
||||||
updatedTransaction = format_transaction(transactionOutput, preparedTrustedInputs)
|
|
||||||
updatedTransaction = hexlify(updatedTransaction)
|
|
||||||
|
|
||||||
if reorganize:
|
|
||||||
tx.update(updatedTransaction)
|
|
||||||
else:
|
|
||||||
tx.update_signatures(updatedTransaction)
|
|
||||||
self.signing = False
|
self.signing = False
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue