Installation process requires admin rights
[electrum-nvc.git] / electrum
index 9b40bab..be0a944 100755 (executable)
--- a/electrum
+++ b/electrum
@@ -17,7 +17,7 @@
 # along with this program. If not, see <http://www.gnu.org/licenses/>.
 
 import re
-import sys, os
+import sys, os, time
 import optparse
 
 try:
@@ -67,6 +67,7 @@ options:
 Syntax: mktx <recipient> <amount> [label]
 options:\n  --fee, -f: set transaction fee\n  --fromaddr, -s: send from address -\n  --changeaddr, -c: send change to address
         """,
+    'signtx':"Sign an unsigned transaction created by a deseeded wallet\nSyntax: signtx <filename>",
     'seed':
             "Print the generation seed of your wallet.",
     'import': 
@@ -93,7 +94,7 @@ options:\n  --fee, -f: set transaction fee\n  --fromaddr, -s: send from address
 
 
 
-offline_commands = [ 'password', 'mktx',
+offline_commands = [ 'password', 'mktx', 'signtx',
                      'label', 'contacts',
                      'help', 'validateaddress',
                      'signmessage', 'verifymessage',
@@ -104,7 +105,7 @@ offline_commands = [ 'password', 'mktx',
                      'prioritize','unprioritize']
 
 
-protected_commands = ['payto', 'password', 'mktx', 'seed', 'import','signmessage' ]
+protected_commands = ['payto', 'password', 'mktx', 'signtx', 'seed', 'import','signmessage' ]
 
 # get password routine
 def prompt_password(prompt, confirm=True):
@@ -136,6 +137,7 @@ def arg_parser():
     parser.add_option("-s", "--server", dest="server", default=None, help="set server host:port:protocol, where protocol is t or h")
     parser.add_option("-p", "--proxy", dest="proxy", default=None, help="set proxy [type:]host[:port], where type is socks4,socks5 or http")
     parser.add_option("-v", "--verbose", action="store_true", dest="verbose", default=False, help="show debugging information")
+    parser.add_option("-P", "--portable", action="store_true", dest="portable", default=False, help="portable wallet")
     return parser
 
 
@@ -147,7 +149,7 @@ if __name__ == '__main__':
 
     # config is an object passed to the various constructors (wallet, interface, gui)
     if 'ANDROID_DATA' in os.environ:
-        config_options = {'wallet_path':"/sdcard/electrum.dat", 'blockchain_headers_path':'/sdcard/sl4a/scripts/e4a-%s'%ELECTRUM_VERSION, 'gui':'android'}
+        config_options = {'wallet_path':"/sdcard/electrum.dat", 'portable':True, 'verbose':True, 'gui':'android'}
     else:
         config_options = eval(str(options))
         for k, v in config_options.items():
@@ -256,6 +258,9 @@ if __name__ == '__main__':
         synchronizer.stop()
         interface.stop()
 
+        # we use daemon threads, their termination is enforced.
+        # this sleep command gives them time to terminate cleanly. 
+        time.sleep(0.1)
         sys.exit(0)
 
     if cmd not in known_commands:
@@ -573,7 +578,7 @@ if __name__ == '__main__':
             if change_addr and v == change_addr:
                 change_addr = k
         try:
-            tx = wallet.mktx( to_address, amount, label, password,
+            tx = wallet.mktx( [(to_address, amount)], label, password,
                 fee = options.tx_fee, change_addr = change_addr, from_addr = from_addr )
         except:
             import traceback
@@ -591,6 +596,17 @@ if __name__ == '__main__':
             del(wallet.history[from_addr])
         wallet.save()
 
+    elif cmd == 'signtx':
+        import ast
+        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 )
+        print_msg(tx)
+
     elif cmd == 'sendtx':
         tx = args[1]
         r, h = wallet.sendtx( tx )