|
|
@ -380,13 +380,8 @@ class TrezorPlugin(HW_PluginBase): |
|
|
|
return inputs |
|
|
|
|
|
|
|
def tx_outputs(self, derivation, tx, script_gen=SCRIPT_GEN_LEGACY): |
|
|
|
outputs = [] |
|
|
|
has_change = False |
|
|
|
|
|
|
|
for _type, address, amount in tx.outputs(): |
|
|
|
info = tx.output_info.get(address) |
|
|
|
if info is not None and not has_change: |
|
|
|
has_change = True # no more than one change address |
|
|
|
def create_output_by_derivation(info): |
|
|
|
index, xpubs, m = info |
|
|
|
if len(xpubs) == 1: |
|
|
|
if script_gen == SCRIPT_GEN_NATIVE_SEGWIT: |
|
|
@ -420,7 +415,9 @@ class TrezorPlugin(HW_PluginBase): |
|
|
|
amount=amount, |
|
|
|
address_n=self.client_class.expand_path(derivation + "/%d/%d" % index), |
|
|
|
script_type=script_type) |
|
|
|
else: |
|
|
|
return txoutputtype |
|
|
|
|
|
|
|
def create_output_by_address(): |
|
|
|
txoutputtype = self.types.TxOutputType() |
|
|
|
txoutputtype.amount = amount |
|
|
|
if _type == TYPE_SCRIPT: |
|
|
@ -429,7 +426,40 @@ class TrezorPlugin(HW_PluginBase): |
|
|
|
elif _type == TYPE_ADDRESS: |
|
|
|
txoutputtype.script_type = self.types.OutputScriptType.PAYTOADDRESS |
|
|
|
txoutputtype.address = address |
|
|
|
return txoutputtype |
|
|
|
|
|
|
|
def is_any_output_on_change_branch(): |
|
|
|
for _type, address, amount in tx.outputs(): |
|
|
|
info = tx.output_info.get(address) |
|
|
|
if info is not None: |
|
|
|
index, xpubs, m = info |
|
|
|
if index[0] == 1: |
|
|
|
return True |
|
|
|
return False |
|
|
|
|
|
|
|
outputs = [] |
|
|
|
has_change = False |
|
|
|
any_output_on_change_branch = is_any_output_on_change_branch() |
|
|
|
|
|
|
|
for _type, address, amount in tx.outputs(): |
|
|
|
use_create_by_derivation = False |
|
|
|
|
|
|
|
info = tx.output_info.get(address) |
|
|
|
if info is not None and not has_change: |
|
|
|
index, xpubs, m = info |
|
|
|
on_change_branch = index[0] == 1 |
|
|
|
# prioritise hiding outputs on the 'change' branch from user |
|
|
|
# because no more than one change address allowed |
|
|
|
# note: ^ restriction can be removed once we require fw |
|
|
|
# that has https://github.com/trezor/trezor-mcu/pull/306 |
|
|
|
if on_change_branch == any_output_on_change_branch: |
|
|
|
use_create_by_derivation = True |
|
|
|
has_change = True |
|
|
|
|
|
|
|
if use_create_by_derivation: |
|
|
|
txoutputtype = create_output_by_derivation(info) |
|
|
|
else: |
|
|
|
txoutputtype = create_output_by_address() |
|
|
|
outputs.append(txoutputtype) |
|
|
|
|
|
|
|
return outputs |
|
|
|