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'):