From 14b4955a6f21b466b612a0eb12da568100420d63 Mon Sep 17 00:00:00 2001 From: "Peter D. Gray" Date: Thu, 18 Oct 2018 12:38:47 -0400 Subject: [PATCH 1/2] Fix p2wpkh-p2sh support per issue #4729 --- electrum/plugins/coldcard/coldcard.py | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/electrum/plugins/coldcard/coldcard.py b/electrum/plugins/coldcard/coldcard.py index 5327aa5eb..e38012c13 100644 --- a/electrum/plugins/coldcard/coldcard.py +++ b/electrum/plugins/coldcard/coldcard.py @@ -423,13 +423,10 @@ class Coldcard_KeyStore(Hardware_KeyStore): for txin in inputs: if txin['type'] == 'coinbase': - self.give_error("Coinbase not supported") # but why not? + self.give_error("Coinbase not supported") - if txin['type'] in ['p2sh']: - self.give_error('Not ready for multisig transactions yet') - - #if txin['type'] in ['p2wpkh-p2sh', 'p2wsh-p2sh']: - #if txin['type'] in ['p2wpkh', 'p2wsh']: + if txin['type'] in ['p2sh', 'p2wsh-p2sh', 'p2wsh']: + self.give_error('No support yet for inputs of type: ' + txin['type']) # Construct PSBT from start to finish. out_fd = io.BytesIO() @@ -452,6 +449,7 @@ class Coldcard_KeyStore(Hardware_KeyStore): @classmethod def input_script(cls, txin, estimate_size=False): return '' + unsigned = bfh(CustomTXSerialization(tx.serialize()).serialize_to_network(witness=False)) write_kv(PSBT_GLOBAL_UNSIGNED_TX, unsigned) @@ -471,6 +469,12 @@ class Coldcard_KeyStore(Hardware_KeyStore): for k in pubkeys: write_kv(PSBT_IN_BIP32_DERIVATION, subkeys[k], k) + if txin['type'] == 'p2wpkh-p2sh': + assert len(pubkeys) == 1, 'can be only one redeem script per input' + pa = hash_160(k) + assert len(pa) == 20 + write_kv(PSBT_IN_REDEEM_SCRIPT, b'\x00\x14'+pa) + out_fd.write(b'\x00') # outputs section @@ -595,7 +599,7 @@ class ColdcardPlugin(HW_PluginBase): ] #SUPPORTED_XTYPES = ('standard', 'p2wpkh-p2sh', 'p2wpkh', 'p2wsh-p2sh', 'p2wsh') - SUPPORTED_XTYPES = ('standard', 'p2wpkh') + SUPPORTED_XTYPES = ('standard', 'p2wpkh', 'p2wpkh-p2sh') def __init__(self, parent, config, name): HW_PluginBase.__init__(self, parent, config, name) From bf18e2bbc9d469fead4701ce154ebaabbe2e8ee5 Mon Sep 17 00:00:00 2001 From: SomberNight Date: Fri, 19 Oct 2018 22:23:50 +0200 Subject: [PATCH 2/2] follow-up prev --- electrum/plugins/coldcard/coldcard.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/electrum/plugins/coldcard/coldcard.py b/electrum/plugins/coldcard/coldcard.py index e38012c13..902d6f2a7 100644 --- a/electrum/plugins/coldcard/coldcard.py +++ b/electrum/plugins/coldcard/coldcard.py @@ -31,7 +31,7 @@ try: from ckcc.constants import ( PSBT_GLOBAL_UNSIGNED_TX, PSBT_IN_NON_WITNESS_UTXO, PSBT_IN_WITNESS_UTXO, PSBT_IN_SIGHASH_TYPE, PSBT_IN_REDEEM_SCRIPT, PSBT_IN_WITNESS_SCRIPT, - PSBT_IN_BIP32_DERIVATION, PSBT_OUT_BIP32_DERIVATION) + PSBT_IN_BIP32_DERIVATION, PSBT_OUT_BIP32_DERIVATION, PSBT_OUT_REDEEM_SCRIPT) from ckcc.client import ColdcardDevice, COINKITE_VID, CKCC_PID, CKCC_SIMULATOR_PATH @@ -497,9 +497,14 @@ class Coldcard_KeyStore(Hardware_KeyStore): assert 0 <= bb < 0x80000000 deriv = base_path + pack('