sort signatures for multisig
authorThomasV <thomasv@gitorious>
Thu, 3 Apr 2014 18:48:31 +0000 (20:48 +0200)
committerThomasV <thomasv@gitorious>
Thu, 3 Apr 2014 18:48:31 +0000 (20:48 +0200)
lib/transaction.py

index 533d67f..fe1f125 100644 (file)
@@ -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
@@ -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
@@ -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
@@ -572,7 +576,7 @@ class Transaction:
             pubkeys, signatures, address = get_address_from_input_script(scriptSig)
         else:
             pubkeys = []
-            signatures = []
+            signatures = {}
             address = None
 
         d['address'] = address
@@ -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