mirror of
https://github.com/trezor/trezor-firmware.git
synced 2024-11-29 19:08:12 +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:
parent
afb3e04c24
commit
7e1d962799
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user