diff --git a/plugins/trezor/plugin.py b/plugins/trezor/plugin.py index 57986f0d..85453cb6 100644 --- a/plugins/trezor/plugin.py +++ b/plugins/trezor/plugin.py @@ -4,7 +4,8 @@ from binascii import hexlify, unhexlify from electrum.util import bfh, bh2u from electrum.bitcoin import (b58_address_to_hash160, xpub_from_pubkey, - TYPE_ADDRESS, TYPE_SCRIPT, NetworkConstants) + TYPE_ADDRESS, TYPE_SCRIPT, NetworkConstants, + is_segwit_address) from electrum.i18n import _ from electrum.plugins import BasePlugin from electrum.transaction import deserialize @@ -351,7 +352,19 @@ class TrezorCompatiblePlugin(HW_PluginBase): txoutputtype.script_type = self.types.PAYTOOPRETURN txoutputtype.op_return_data = address[2:] elif _type == TYPE_ADDRESS: - txoutputtype.script_type = self.types.PAYTOADDRESS + # trezor would be fine with self.types.PAYTOADDRESS + # for any non-change output + # but we need to maintain keepkey compatibility in this cls + if is_segwit_address(address): + txoutputtype.script_type = self.types.PAYTOWITNESS + else: + addrtype, hash_160 = b58_address_to_hash160(address) + if addrtype == NetworkConstants.ADDRTYPE_P2PKH: + txoutputtype.script_type = self.types.PAYTOADDRESS + elif addrtype == NetworkConstants.ADDRTYPE_P2SH: + txoutputtype.script_type = self.types.PAYTOSCRIPTHASH + else: + raise BaseException('addrtype: ' + str(addrtype)) txoutputtype.address = address outputs.append(txoutputtype)