electrum

Electrum Bitcoin wallet
git clone https://git.parazyd.org/electrum
Log | Files | Refs | Submodules

commit ff815acbd5619a7caf5c1bb5557e891503dcc43b
parent d878286a3a9a2db673b6fd34e66ab2cb34eac02e
Author: ThomasV <thomasv@electrum.org>
Date:   Sat,  2 Dec 2017 16:57:57 +0100

Merge pull request #3407 from SomberNight/fix_keepkey_p2sh_output

fix: keepkey sending to p2sh output
Diffstat:
Mplugins/trezor/plugin.py | 17+++++++++++++++--
1 file changed, 15 insertions(+), 2 deletions(-)

diff --git 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)