use serialized format in signtx
authorthomasv <thomasv@gitorious>
Sun, 24 Feb 2013 20:31:11 +0000 (21:31 +0100)
committerthomasv <thomasv@gitorious>
Sun, 24 Feb 2013 20:31:11 +0000 (21:31 +0100)
electrum
lib/bitcoin.py
lib/wallet.py

index a43c098..15d9e50 100755 (executable)
--- a/electrum
+++ b/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..
index 3d888bb..a00b88d 100644 (file)
@@ -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
index bea6ca5..6da01bb 100644 (file)
@@ -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