sig_list.append(NO_SIGNATURE)
sig_list = ''.join( map( lambda x: push_script(x), sig_list))
- # extended pubkeys (with bip32 derivation)
- x_pubkeys = txin['x_pubkeys']
+ if len(signatures) < n_sig:
+ # extended pubkeys (with bip32 derivation)
+ x_pubkeys = txin['x_pubkeys']
+ else:
+ # if we have enough signatures, we use the actual pubkeys
+ x_pubkeys = txin['pubkeys']
if not p2sh:
script = sig_list
self.raw = self.serialize( self.inputs, self.outputs )
- def is_complete(self):
- for i, txin in enumerate(self.inputs):
- #redeem_script = txin.get('redeemScript')
- #num, redeem_pubkeys = parse_redeemScript(redeem_script) if redeem_script else (1, [txin.get('redeemPubkey')])
- pubkeys = txin['pubkeys']
- signatures = txin.get("signatures",{})
- if len(signatures) == txin['num_sig']:
- continue
- else:
- return False
- return True
+ def signature_count(self):
+ r = 0
+ s = 0
+ for txin in self.inputs:
+ signatures = txin.get("signatures",[])
+ s += len(signatures)
+ r += txin['num_sig']
+ return s, r
+ def is_complete(self):
+ s, r = self.signature_count()
+ return r == s
+
def sign(self, keypairs):
print_error("tx.sign(), keypairs:", keypairs)
for i, txin in enumerate(self.inputs):
- # if the input is multisig, parse redeem script
- #redeem_script = txin.get('redeemScript')
- #num, redeem_pubkeys = parse_redeemScript(redeem_script) if redeem_script else (1, [txin.get('redeemPubkey')])
redeem_pubkeys = txin['pubkeys']
num = len(redeem_pubkeys)
- # add pubkeys
- ### txin["pubkeys"] = redeem_pubkeys
-
# get list of already existing signatures
signatures = txin.get("signatures",{})
# continue if this txin is complete