use serialized format in signtx
This commit is contained in:
parent
5da3cab24b
commit
64ad3fc28c
18
electrum
18
electrum
|
@ -464,6 +464,7 @@ if __name__ == '__main__':
|
|||
f.write(repr({'seed':wallet.seed, 'imported_keys':wallet.imported_keys})+"\n")
|
||||
f.close()
|
||||
wallet.seed = ''
|
||||
wallet.config.set_key('seed','', True)
|
||||
for k in wallet.imported_keys.keys(): wallet.imported_keys[k] = ''
|
||||
wallet.save()
|
||||
print_msg("Done.")
|
||||
|
@ -636,7 +637,7 @@ if __name__ == '__main__':
|
|||
r, h = wallet.sendtx( tx )
|
||||
print_msg(h)
|
||||
else:
|
||||
print_msg(tx)
|
||||
print_json({"hex":str(tx), "complete":tx.is_complete})
|
||||
|
||||
if is_temporary:
|
||||
wallet.imported_keys.pop(from_addr)
|
||||
|
@ -644,13 +645,8 @@ if __name__ == '__main__':
|
|||
wallet.save()
|
||||
|
||||
elif cmd == 'signtx':
|
||||
filename = args[1]
|
||||
f = open(filename, 'r')
|
||||
d = ast.literal_eval(f.read())
|
||||
f.close()
|
||||
inputs = d['inputs']
|
||||
outputs = d['outputs']
|
||||
tx = wallet.signed_tx( inputs, outputs, password )
|
||||
tx = Transaction(args[1])
|
||||
tx = wallet.sign_tx( tx, password )
|
||||
print_msg(tx)
|
||||
|
||||
elif cmd == 'sendtx':
|
||||
|
@ -761,9 +757,9 @@ if __name__ == '__main__':
|
|||
else:
|
||||
if wallet.transactions.get(txid):
|
||||
# lookup in my own list of transactions
|
||||
txout = wallet.transactions[txid]['outputs'][index]
|
||||
txin['address'] = txout['address']
|
||||
txin['raw_output_script'] = txout['raw_output_script']
|
||||
txout = wallet.transactions[txid].outputs[index]
|
||||
txin['address'] = txout[0]
|
||||
#txin['raw_output_script'] = txout['raw_output_script']
|
||||
|
||||
else:
|
||||
# if neither, we might want to get it from the server..
|
||||
|
|
|
@ -476,6 +476,7 @@ class Transaction:
|
|||
def from_io(klass, inputs, outputs):
|
||||
raw = klass.serialize(inputs, outputs, for_sig = -1) # for_sig=-1 means do not sign
|
||||
self = klass(raw)
|
||||
self.is_complete = False
|
||||
self.inputs = inputs
|
||||
self.outputs = outputs
|
||||
return self
|
||||
|
|
|
@ -665,10 +665,11 @@ class Wallet:
|
|||
print_error( "Sending change to", change_addr )
|
||||
outputs = self.add_tx_change(outputs, amount, fee, total, change_addr)
|
||||
|
||||
tx = Transaction.from_io(inputs, outputs)
|
||||
if not self.seed:
|
||||
return repr({'inputs':inputs, 'outputs':outputs})
|
||||
return tx
|
||||
|
||||
tx = self.signed_tx(inputs, outputs, password)
|
||||
self.sign_tx(tx, password)
|
||||
|
||||
for address, x in outputs:
|
||||
if address not in self.addressbook and not self.is_mine(address):
|
||||
|
@ -680,15 +681,13 @@ class Wallet:
|
|||
|
||||
return tx
|
||||
|
||||
def signed_tx(self, inputs, outputs, password):
|
||||
tx = Transaction.from_io(inputs, outputs)
|
||||
def sign_tx(self, tx, password):
|
||||
private_keys = {}
|
||||
for txin in tx.inputs:
|
||||
addr = txin['address']
|
||||
sec = self.get_private_key(addr, password)
|
||||
private_keys[addr] = sec
|
||||
tx.sign(private_keys)
|
||||
return str(tx)
|
||||
|
||||
def sendtx(self, tx):
|
||||
# synchronous
|
||||
|
|
Loading…
Reference in New Issue