URI: 
       tsort signatures for multisig - electrum - Electrum Bitcoin wallet
  HTML git clone https://git.parazyd.org/electrum
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
       ---
   DIR commit 8e644a4dc8bbb7b3e10bda0ad1c474c279cade35
   DIR parent 66e1e2707d4a82ecbe3f2bf7d532036d0a9651a8
  HTML Author: ThomasV <thomasv@gitorious>
       Date:   Thu,  3 Apr 2014 20:48:31 +0200
       
       sort signatures for multisig
       
       Diffstat:
         M lib/transaction.py                  |      14 +++++++++-----
       
       1 file changed, 9 insertions(+), 5 deletions(-)
       ---
   DIR diff --git a/lib/transaction.py b/lib/transaction.py
       t@@ -443,7 +443,9 @@ class Transaction:
                            script += pubkey
                        else:
                            script = '00'                                    # op_0
       -                    for sig in signatures:
       +                    for pubkey in pubkeys:
       +                        sig = signatures.get(pubkey)
       +                        if not sig: continue
                                sig = sig + '01'
                                script += op_push(len(sig)/2)
                                script += sig
       t@@ -511,7 +513,7 @@ class Transaction:
                    # add pubkeys
                    txin["pubkeys"] = redeem_pubkeys
                    # get list of already existing signatures
       -            signatures = txin.get("signatures",[])
       +            signatures = txin.get("signatures",{})
                    # continue if this txin is complete
                    if len(signatures) == num:
                        continue
       t@@ -531,7 +533,9 @@ class Transaction:
                            public_key = private_key.get_verifying_key()
                            sig = private_key.sign_digest_deterministic( Hash( tx_for_sig.decode('hex') ), hashfunc=hashlib.sha256, 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') )
       +
       +                    # insert signature in the list
       +                    signatures[pubkey] = sig.encode('hex')
                            print_error("adding signature for", pubkey)
                    
                    txin["signatures"] = signatures
       t@@ -572,7 +576,7 @@ class Transaction:
                    pubkeys, signatures, address = get_address_from_input_script(scriptSig)
                else:
                    pubkeys = []
       -            signatures = []
       +            signatures = {}
                    address = None
        
                d['address'] = address
       t@@ -681,7 +685,7 @@ class Transaction:
                        'redeemScript':i.get('redeemScript'),
                        'redeemPubkey':i.get('redeemPubkey'),
                        'pubkeys':i.get('pubkeys'),
       -                'signatures':i.get('signatures',[]),
       +                'signatures':i.get('signatures',{}),
                        }
                    info.append(item)
                return info