URI: 
       tMerge pull request #3125 from SomberNight/sweep_p2pk - electrum - Electrum Bitcoin wallet
  HTML git clone https://git.parazyd.org/electrum
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
       ---
   DIR commit 6f3c822867bd512e276ef63ad7b8c2af2fa40927
   DIR parent 7dcd01356a10b632516742a86b9d8c6251e9f70a
  HTML Author: ThomasV <thomasv@electrum.org>
       Date:   Fri, 27 Oct 2017 21:01:56 +0200
       
       Merge pull request #3125 from SomberNight/sweep_p2pk
       
       ttry to sweep p2pk outputs from old type WIF privkeys
       Diffstat:
         M lib/bitcoin.py                      |       3 +++
         M lib/wallet.py                       |      41 ++++++++++++++++++++-----------
       
       2 files changed, 29 insertions(+), 15 deletions(-)
       ---
   DIR diff --git a/lib/bitcoin.py b/lib/bitcoin.py
       t@@ -411,6 +411,9 @@ def address_to_script(addr):
        
        def address_to_scripthash(addr):
            script = address_to_script(addr)
       +    return script_to_scripthash(script)
       +
       +def script_to_scripthash(script):
            h = sha256(bytes.fromhex(script))[0:32]
            return bh2u(bytes(reversed(h)))
        
   DIR diff --git a/lib/wallet.py b/lib/wallet.py
       t@@ -870,27 +870,38 @@ class Abstract_Wallet(PrintError):
                self.sign_transaction(tx, password)
                return tx
        
       +    def _append_utxos_to_inputs(self, inputs, network, pubkey, txin_type, imax):
       +        address = None
       +        if txin_type != 'p2pk':
       +            address = bitcoin.pubkey_to_address(txin_type, pubkey)
       +            sh = bitcoin.address_to_scripthash(address)
       +        else:
       +            script = bitcoin.public_key_to_p2pk_script(pubkey)
       +            sh = bitcoin.script_to_scripthash(script)
       +        u = network.synchronous_get(('blockchain.scripthash.listunspent', [sh]))
       +        for item in u:
       +            if len(inputs) >= imax:
       +                break
       +            if address is not None:
       +                item['address'] = address
       +            item['type'] = txin_type
       +            item['prevout_hash'] = item['tx_hash']
       +            item['prevout_n'] = item['tx_pos']
       +            item['pubkeys'] = [pubkey]
       +            item['x_pubkeys'] = [pubkey]
       +            item['signatures'] = [None]
       +            item['num_sig'] = 1
       +            inputs.append(item)
       +
            def sweep(self, privkeys, network, config, recipient, fee=None, imax=100):
                inputs = []
                keypairs = {}
                for sec in privkeys:
                    txin_type, privkey, compressed = bitcoin.deserialize_privkey(sec)
                    pubkey = bitcoin.public_key_from_private_key(privkey, compressed)
       -            address = bitcoin.pubkey_to_address(txin_type, pubkey)
       -            sh = bitcoin.address_to_scripthash(address)
       -            u = network.synchronous_get(('blockchain.scripthash.listunspent', [sh]))
       -            for item in u:
       -                if len(inputs) >= imax:
       -                    break
       -                item['type'] = txin_type
       -                item['address'] = address
       -                item['prevout_hash'] = item['tx_hash']
       -                item['prevout_n'] = item['tx_pos']
       -                item['pubkeys'] = [pubkey]
       -                item['x_pubkeys'] = [pubkey]
       -                item['signatures'] = [None]
       -                item['num_sig'] = 1
       -                inputs.append(item)
       +            self._append_utxos_to_inputs(inputs, network, pubkey, txin_type, imax)
       +            if txin_type == 'p2pkh':  # WIF serialization is ambiguous :(
       +                self._append_utxos_to_inputs(inputs, network, pubkey, 'p2pk', imax)
                    keypairs[pubkey] = privkey, compressed
        
                if not inputs: