URI: 
       tfix and simplify tx serialization - electrum - Electrum Bitcoin wallet
  HTML git clone https://git.parazyd.org/electrum
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
       ---
   DIR commit 02c3bc131e5427aa06edc8ac39a774a391b67a5d
   DIR parent 8e644a4dc8bbb7b3e10bda0ad1c474c279cade35
  HTML Author: ThomasV <thomasv@gitorious>
       Date:   Thu,  3 Apr 2014 21:23:35 +0200
       
       fix and simplify tx serialization
       
       Diffstat:
         M lib/transaction.py                  |      32 ++++++++++++++-----------------
       
       1 file changed, 14 insertions(+), 18 deletions(-)
       ---
   DIR diff --git a/lib/transaction.py b/lib/transaction.py
       t@@ -421,6 +421,7 @@ class Transaction:
            @classmethod
            def serialize( klass, inputs, outputs, for_sig = None ):
        
       +        push_script = lambda x: op_push(len(x)/2) + x
                s  = int_to_hex(1,4)                                         # version
                s += var_int( len(inputs) )                                  # number of inputs
                for i in range(len(inputs)):
       t@@ -431,28 +432,23 @@ class Transaction:
                    if for_sig is None:
                        signatures = txin['signatures']
                        pubkeys = txin['pubkeys']
       +                sig_list = ''
       +                for pubkey in pubkeys:
       +                    sig = signatures.get(pubkey)
       +                    if not sig: 
       +                        continue
       +                    sig = sig + '01'
       +                    sig_list += push_script(sig)
       +
                        if not txin.get('redeemScript'):
       -                    pubkey = pubkeys[0]
       -                    script = ''
       -                    if signatures:
       -                        sig = signatures[0]
       -                        sig = sig + '01'                                 # hashtype
       -                        script += op_push(len(sig)/2)
       -                        script += sig
       -                    script += op_push(len(pubkey)/2)
       -                    script += pubkey
       +                    script = sig_list
       +                    script += push_script(pubkeys[0])
                        else:
                            script = '00'                                    # op_0
       -                    for pubkey in pubkeys:
       -                        sig = signatures.get(pubkey)
       -                        if not sig: continue
       -                        sig = sig + '01'
       -                        script += op_push(len(sig)/2)
       -                        script += sig
       -
       +                    script += sig_list
                            redeem_script = klass.multisig_script(pubkeys,2)
       -                    script += op_push(len(redeem_script)/2)
       -                    script += redeem_script
       +                    assert redeem_script == txin.get('redeemScript')
       +                    script += push_script(redeem_script)
        
                    elif for_sig==i:
                        if txin.get('redeemScript'):