URI: 
       tserialize value for segwit-p2sh inputs too - electrum - Electrum Bitcoin wallet
  HTML git clone https://git.parazyd.org/electrum
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
       ---
   DIR commit 5416a4ea8a9d3768a4ad3bc18f6c1396c39e86f1
   DIR parent 0abb38cf51daca597997e7baaff5385659168bad
  HTML Author: ThomasV <thomasv@electrum.org>
       Date:   Sun, 17 Sep 2017 16:54:40 +0200
       
       serialize value for segwit-p2sh inputs too
       
       Diffstat:
         M lib/transaction.py                  |      20 ++++++++++++--------
         M lib/wallet.py                       |       5 ++++-
       
       2 files changed, 16 insertions(+), 9 deletions(-)
       ---
   DIR diff --git a/lib/transaction.py b/lib/transaction.py
       t@@ -421,12 +421,15 @@ def parse_input(vds):
                d['type'] = 'unknown'
                d['num_sig'] = 0
                if scriptSig:
       -            if len(scriptSig) == 8:
       -                d['value'] = struct.unpack_from('<Q', scriptSig, 0)[0]
       -                d['scriptSig'] = ''
       -            else:
       +            if scriptSig[0] == 255:
       +                d['value'] = struct.unpack_from('<Q', scriptSig, 1)[0]
       +                scriptSig = scriptSig[9:]
       +            if scriptSig:
                        d['scriptSig'] = bh2u(scriptSig)
                        parse_scriptSig(d, scriptSig)
       +            else:
       +                d['scriptSig'] = ''
       +
            return d
        
        
       t@@ -660,6 +663,8 @@ class Transaction:
                    return txin['scriptSig']
                pubkeys, sig_list = self.get_siglist(txin, estimate_size)
                script = ''.join(push_script(x) for x in sig_list)
       +        if self.is_segwit_input(txin):
       +            segwit_value = '' if self.is_txin_complete(txin) or estimate_size else 'ff' + int_to_hex(txin['value'], 8)
                if _type == 'p2pk':
                    pass
                elif _type == 'p2sh':
       t@@ -670,11 +675,10 @@ class Transaction:
                elif _type == 'p2pkh':
                    script += push_script(pubkeys[0])
                elif _type in ['p2wpkh', 'p2wsh']:
       -            # if it is not complete we store the value
       -            return '' if self.is_txin_complete(txin) or estimate_size else int_to_hex(txin['value'], 8)
       +            return segwit_value
                elif _type in ['p2wpkh-p2sh', 'p2wsh-p2sh']:
                    redeem_script = txin.get('redeemScript') or segwit_script(pubkeys[0])
       -            return push_script(redeem_script)
       +            return segwit_value + push_script(redeem_script)
                elif _type == 'address':
                    script += push_script(pubkeys[0])
                elif _type == 'unknown':
       t@@ -693,7 +697,7 @@ class Transaction:
                # only for non-segwit
                if txin['type'] == 'p2pkh':
                    return bitcoin.address_to_script(txin['address'])
       -        elif txin['type'] in ['p2sh', 'p2wsh']:
       +        elif txin['type'] in ['p2sh', 'p2wsh', 'p2wsh-p2sh']:
                    pubkeys, x_pubkeys = self.get_sorted_pubkeys(txin)
                    return multisig_script(pubkeys, txin['num_sig'])
                elif txin['type'] in ['p2wpkh', 'p2wpkh-p2sh']:
   DIR diff --git a/lib/wallet.py b/lib/wallet.py
       t@@ -1680,8 +1680,11 @@ class Multisig_Wallet(Deterministic_Wallet):
                elif self.txin_type == 'p2wsh':
                    witness_script = self.pubkeys_to_redeem_script(pubkey)
                    return bitcoin.script_to_p2wsh(witness_script)
       +        elif self.txin_type == 'p2wsh-p2sh':
       +            redeem_script = self.pubkeys_to_redeem_script(pubkey)
       +            return bitcoin.hash160_to_p2sh(hash_160(bfh(redeem_script)))
                else:
       -            raise NotImplementedError()
       +            raise NotImplementedError(self.txin_type)
        
            #def redeem_script(self, c, i):
            #    pubkeys = self.get_pubkeys(c, i)