1
0
mirror of https://github.com/trezor/trezor-firmware.git synced 2024-11-26 01:18:28 +00:00

trezorlib: sign_tx only downloads non-segwit transactions.

This should achieve the same goal as PR #193.
In addition, this refactor removes usage of `_extend_` methods
and the unnecessary `_fill_missing` calls.
This commit is contained in:
matejcik 2018-03-20 13:10:08 +01:00
parent afb3e04c24
commit 7e1d962799

View File

@ -773,26 +773,26 @@ class ProtocolMixin(object):
ask_on_decrypt=ask_on_decrypt, ask_on_decrypt=ask_on_decrypt,
iv=iv)) iv=iv))
def _prepare_sign_tx(self, coin_name, inputs, outputs): def _prepare_sign_tx(self, inputs, outputs):
tx = proto.TransactionType() tx = proto.TransactionType()
tx._extend_inputs(inputs) tx.inputs = inputs
tx._extend_outputs(outputs) tx.outputs = outputs
tx._fill_missing()
txes = {} txes = { None: tx }
txes[None] = tx
known_hashes = []
for inp in inputs: for inp in inputs:
if inp.prev_hash in known_hashes: if inp.prev_hash in txes:
continue continue
if self.tx_api: if inp.script_type in (proto.InputScriptType.SPENDP2SHWITNESS,
txes[inp.prev_hash] = self.tx_api.get_tx(binascii.hexlify(inp.prev_hash).decode('utf-8')) proto.InputScriptType.SPENDWITNESS):
txes[inp.prev_hash]._fill_missing() continue
else:
if not self.tx_api:
raise RuntimeError('TX_API not defined') raise RuntimeError('TX_API not defined')
known_hashes.append(inp.prev_hash)
prev_tx = self.tx_api.get_tx(binascii.hexlify(inp.prev_hash).decode('utf-8'))
txes[inp.prev_hash] = prev_tx
return txes return txes
@ -800,7 +800,7 @@ class ProtocolMixin(object):
def sign_tx(self, coin_name, inputs, outputs, version=None, lock_time=None, debug_processor=None): def sign_tx(self, coin_name, inputs, outputs, version=None, lock_time=None, debug_processor=None):
start = time.time() start = time.time()
txes = self._prepare_sign_tx(coin_name, inputs, outputs) txes = self._prepare_sign_tx(inputs, outputs)
# Prepare and send initial message # Prepare and send initial message
tx = proto.SignTx() tx = proto.SignTx()
@ -862,7 +862,7 @@ class ProtocolMixin(object):
elif res.request_type == proto.RequestType.TXINPUT: elif res.request_type == proto.RequestType.TXINPUT:
msg = proto.TransactionType() msg = proto.TransactionType()
msg._extend_inputs([current_tx.inputs[res.details.request_index], ]) msg.inputs = [current_tx.inputs[res.details.request_index]]
if debug_processor is not None: if debug_processor is not None:
# msg needs to be deep copied so when it's modified # msg needs to be deep copied so when it's modified
# the other messages stay intact # the other messages stay intact
@ -879,9 +879,9 @@ class ProtocolMixin(object):
elif res.request_type == proto.RequestType.TXOUTPUT: elif res.request_type == proto.RequestType.TXOUTPUT:
msg = proto.TransactionType() msg = proto.TransactionType()
if res.details.tx_hash: if res.details.tx_hash:
msg._extend_bin_outputs([current_tx.bin_outputs[res.details.request_index], ]) msg.bin_outputs = [current_tx.bin_outputs[res.details.request_index]]
else: else:
msg._extend_outputs([current_tx.outputs[res.details.request_index], ]) msg.outputs = [current_tx.outputs[res.details.request_index]]
if debug_processor is not None: if debug_processor is not None:
# msg needs to be deep copied so when it's modified # msg needs to be deep copied so when it's modified