Browse Source

fix and simplify tx serialization

283
ThomasV 11 years ago
parent
commit
02c3bc131e
  1. 30
      lib/transaction.py

30
lib/transaction.py

@ -421,6 +421,7 @@ class Transaction:
@classmethod @classmethod
def serialize( klass, inputs, outputs, for_sig = None ): 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 = int_to_hex(1,4) # version
s += var_int( len(inputs) ) # number of inputs s += var_int( len(inputs) ) # number of inputs
for i in range(len(inputs)): for i in range(len(inputs)):
@ -431,28 +432,23 @@ class Transaction:
if for_sig is None: if for_sig is None:
signatures = txin['signatures'] signatures = txin['signatures']
pubkeys = txin['pubkeys'] pubkeys = txin['pubkeys']
if not txin.get('redeemScript'): sig_list = ''
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
else:
script = '00' # op_0
for pubkey in pubkeys: for pubkey in pubkeys:
sig = signatures.get(pubkey) sig = signatures.get(pubkey)
if not sig: continue if not sig:
continue
sig = sig + '01' sig = sig + '01'
script += op_push(len(sig)/2) sig_list += push_script(sig)
script += sig
if not txin.get('redeemScript'):
script = sig_list
script += push_script(pubkeys[0])
else:
script = '00' # op_0
script += sig_list
redeem_script = klass.multisig_script(pubkeys,2) redeem_script = klass.multisig_script(pubkeys,2)
script += op_push(len(redeem_script)/2) assert redeem_script == txin.get('redeemScript')
script += redeem_script script += push_script(redeem_script)
elif for_sig==i: elif for_sig==i:
if txin.get('redeemScript'): if txin.get('redeemScript'):

Loading…
Cancel
Save