mirror of
https://github.com/LBRYFoundation/LBRY-Vault.git
synced 2025-09-05 05:15:12 +00:00
fix and simplify tx serialization
This commit is contained in:
parent
8e644a4dc8
commit
02c3bc131e
1 changed files with 14 additions and 18 deletions
|
@ -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']
|
||||||
|
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'):
|
if not txin.get('redeemScript'):
|
||||||
pubkey = pubkeys[0]
|
script = sig_list
|
||||||
script = ''
|
script += push_script(pubkeys[0])
|
||||||
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:
|
else:
|
||||||
script = '00' # op_0
|
script = '00' # op_0
|
||||||
for pubkey in pubkeys:
|
script += sig_list
|
||||||
sig = signatures.get(pubkey)
|
|
||||||
if not sig: continue
|
|
||||||
sig = sig + '01'
|
|
||||||
script += op_push(len(sig)/2)
|
|
||||||
script += sig
|
|
||||||
|
|
||||||
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…
Add table
Reference in a new issue