Browse Source

use serialized format in signtx

283
thomasv 12 years ago
parent
commit
64ad3fc28c
  1. 18
      electrum
  2. 1
      lib/bitcoin.py
  3. 9
      lib/wallet.py

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..

1
lib/bitcoin.py

@ -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

9
lib/wallet.py

@ -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…
Cancel
Save