URI: 
       tfix is_complete: count number of valid signatures - electrum - Electrum Bitcoin wallet
  HTML git clone https://git.parazyd.org/electrum
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
       ---
   DIR commit a0455725bd32cc71810c7db353ad1f8f6fba180e
   DIR parent 30b6d9b64e1034301ae834789d24ffb88a86c332
  HTML Author: ThomasV <thomasv@gitorious>
       Date:   Sat, 23 Feb 2013 17:36:32 +0100
       
       fix is_complete: count number of valid signatures
       
       Diffstat:
         M lib/bitcoin.py                      |      17 +++++------------
         M lib/deserialize.py                  |       2 +-
       
       2 files changed, 6 insertions(+), 13 deletions(-)
       ---
   DIR diff --git a/lib/bitcoin.py b/lib/bitcoin.py
       t@@ -18,7 +18,7 @@
        
        
        import hashlib, base64, ecdsa, re
       -
       +from util import print_error
        
        def rev_hex(s):
            return s.decode('hex')[::-1].encode('hex')
       t@@ -605,13 +605,10 @@ class Transaction:
        
                        # list of already existing signatures
                        signatures = txin.get("signatures",[])
       -                found = False
       -                complete = True
       +                print_error("signatures",signatures)
        
       -                # check if we have a key corresponding to the redeem script
                        for pubkey in redeem_pubkeys:
                            public_key = ecdsa.VerifyingKey.from_string(pubkey[2:].decode('hex'), curve = SECP256k1)
       -
                            for s in signatures:
                                try:
                                    public_key.verify_digest( s.decode('hex')[:-1], Hash( tx_for_sig.decode('hex') ), sigdecode = ecdsa.util.sigdecode_der)
       t@@ -619,6 +616,7 @@ class Transaction:
                                except ecdsa.keys.BadSignatureError:
                                    continue
                            else:
       +                        # check if we have a key corresponding to the redeem script
                                if pubkey in keypairs.keys():
                                    # add signature
                                    sec = keypairs[pubkey]
       t@@ -630,16 +628,11 @@ class Transaction:
                                    sig = private_key.sign_digest( Hash( tx_for_sig.decode('hex') ), sigencode = ecdsa.util.sigencode_der )
                                    assert public_key.verify_digest( sig, Hash( tx_for_sig.decode('hex') ), sigdecode = ecdsa.util.sigdecode_der)
                                    signatures.append( sig.encode('hex') )
       -                            found = True
       -                        else:
       -                            complete = False
                                
       -                if not found:
       -                    raise BaseException("public key not found", keypairs.keys(), redeem_pubkeys)
       -
                        # for p2sh, pubkeysig is a tuple (may be incomplete)
                        self.inputs[i]["signatures"] = signatures
       -                self.is_complete = complete
       +                print_error("signatures",signatures)
       +                self.is_complete = len(signatures) == num
        
                    else:
                        sec = private_keys[txin['address']]
   DIR diff --git a/lib/deserialize.py b/lib/deserialize.py
       t@@ -240,7 +240,7 @@ def parse_redeemScript(bytes):
            match = [ opcodes.OP_2, opcodes.OP_PUSHDATA4, opcodes.OP_PUSHDATA4, opcodes.OP_PUSHDATA4, opcodes.OP_3, opcodes.OP_CHECKMULTISIG ]
            if match_decoded(dec, match):
                pubkeys = [ dec[1][1].encode('hex'), dec[2][1].encode('hex'), dec[3][1].encode('hex') ]
       -        return 3, pubkeys
       +        return 2, pubkeys