2011-11-04 18:00:37 +01:00
#!/usr/bin/env python
#
# Electrum - lightweight Bitcoin client
# Copyright (C) 2011 thomasv@gitorious
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
2012-02-01 20:27:03 +01:00
import re , sys , getpass
2011-11-06 11:13:58 +01:00
2012-05-14 14:09:50 +02:00
try :
import ecdsa
except :
print " python-ecdsa does not seem to be installed. Try ' sudo pip install ecdsa ' "
sys . exit ( 1 )
try :
import aes
except :
print " AES does not seem to be installed. Try ' sudo pip install slowaes ' "
sys . exit ( 1 )
2012-05-10 14:38:49 +02:00
import electrum
2011-11-14 20:35:54 +01:00
from optparse import OptionParser
2012-02-06 07:48:52 +01:00
from decimal import Decimal
2012-05-10 14:38:49 +02:00
2012-05-14 21:31:37 +02:00
from electrum import Wallet , WalletSynchronizer , format_satoshis
2012-02-03 08:02:12 +01:00
2012-05-13 01:32:28 +02:00
known_commands = [ ' help ' , ' validateaddress ' , ' balance ' , ' contacts ' , ' create ' , ' restore ' , ' payto ' , ' sendtx ' , ' password ' , ' addresses ' , ' history ' , ' label ' , ' mktx ' , ' seed ' , ' import ' , ' signmessage ' , ' verifymessage ' , ' eval ' , ' deseed ' , ' reseed ' ]
2012-05-14 14:54:36 +02:00
offline_commands = [ ' password ' , ' mktx ' , ' label ' , ' contacts ' , ' help ' , ' validateaddress ' , ' signmessage ' , ' verifymessage ' , ' eval ' , ' create ' , ' addresses ' , ' import ' , ' seed ' , ' deseed ' , ' reseed ' ]
2012-03-23 13:55:27 +01:00
protected_commands = [ ' payto ' , ' password ' , ' mktx ' , ' seed ' , ' import ' , ' signmessage ' ]
2011-11-04 18:00:37 +01:00
if __name__ == ' __main__ ' :
2011-11-14 20:35:54 +01:00
2012-05-14 17:35:38 +02:00
usage = " usage: % prog [options] command \n Commands: " + ( ' , ' . join ( known_commands ) )
2011-11-14 20:35:54 +01:00
parser = OptionParser ( usage = usage )
2012-02-14 16:57:34 +01:00
parser . add_option ( " -g " , " --gui " , dest = " gui " , default = " qt " , help = " gui " )
2011-11-29 11:23:49 +01:00
parser . add_option ( " -w " , " --wallet " , dest = " wallet_path " , help = " wallet path (default: electrum.dat) " )
2012-05-13 10:19:28 +02:00
parser . add_option ( " -o " , " --offline " , action = " store_true " , dest = " offline " , default = False , help = " remain offline " )
2011-11-14 20:35:54 +01:00
parser . add_option ( " -a " , " --all " , action = " store_true " , dest = " show_all " , default = False , help = " show all addresses " )
parser . add_option ( " -b " , " --balance " , action = " store_true " , dest = " show_balance " , default = False , help = " show the balance at listed addresses " )
parser . add_option ( " -k " , " --keys " , action = " store_true " , dest = " show_keys " , default = False , help = " show the private keys of listed addresses " )
2011-12-18 22:49:33 +01:00
parser . add_option ( " -f " , " --fee " , dest = " tx_fee " , default = " 0.005 " , help = " set tx fee " )
2012-02-08 09:36:19 +01:00
parser . add_option ( " -s " , " --fromaddr " , dest = " from_addr " , default = None , help = " set source address for payto/mktx. if it isn ' t in the wallet, it will ask for the private key unless supplied in the format public_key:private_key. It ' s not saved in the wallet. " )
parser . add_option ( " -c " , " --changeaddr " , dest = " change_addr " , default = None , help = " set the change address for payto/mktx. default is a spare address, or the source address if it ' s not in the wallet " )
2012-02-22 15:39:06 +01:00
parser . add_option ( " -r " , " --remote " , dest = " remote_url " , default = None , help = " URL of a remote wallet " )
2011-11-14 20:35:54 +01:00
options , args = parser . parse_args ( )
2011-11-04 18:00:37 +01:00
2012-03-12 17:55:33 +01:00
wallet = Wallet ( )
2011-12-19 13:48:51 +01:00
wallet . set_path ( options . wallet_path )
2012-03-12 17:55:33 +01:00
wallet . read ( )
2012-02-22 16:17:24 +01:00
wallet . remote_url = options . remote_url
2012-03-12 17:55:33 +01:00
2012-02-14 12:45:39 +01:00
if len ( args ) == 0 :
url = None
cmd = ' gui '
elif len ( args ) == 1 and re . match ( ' ^bitcoin: ' , args [ 0 ] ) :
url = args [ 0 ]
cmd = ' gui '
else :
cmd = args [ 0 ]
firstarg = args [ 1 ] if len ( args ) > 1 else ' '
if cmd == ' gui ' :
if options . gui == ' gtk ' :
2012-05-10 14:38:49 +02:00
import electrum . gui as gui
2012-02-14 12:45:39 +01:00
elif options . gui == ' qt ' :
2012-05-10 14:38:49 +02:00
import electrum . gui_qt as gui
2012-02-14 12:45:39 +01:00
else :
print " unknown gui " , options . gui
exit ( 1 )
2012-02-11 13:14:12 +01:00
2012-02-14 09:52:03 +01:00
gui = gui . ElectrumGui ( wallet )
2012-03-31 11:47:16 +02:00
WalletSynchronizer ( wallet , True ) . start ( )
2012-02-14 09:52:03 +01:00
2012-02-11 13:14:12 +01:00
try :
2012-03-12 17:55:33 +01:00
found = wallet . file_exists
2012-02-11 13:14:12 +01:00
if not found :
2012-02-14 09:52:03 +01:00
found = gui . restore_or_create ( )
2012-03-23 19:32:16 +01:00
except SystemExit , e :
exit ( e )
2012-02-11 13:14:12 +01:00
except BaseException , e :
2012-02-14 09:52:03 +01:00
import traceback
traceback . print_exc ( file = sys . stdout )
#gui.show_message(e.message)
2012-02-11 13:14:12 +01:00
exit ( 1 )
2012-02-14 09:52:03 +01:00
if not found : exit ( 1 )
2012-02-14 12:45:39 +01:00
gui . main ( url )
2011-11-09 23:21:27 +01:00
wallet . save ( )
2011-11-10 09:34:27 +01:00
sys . exit ( 0 )
2011-11-04 18:00:37 +01:00
2012-01-15 18:45:30 +01:00
if cmd not in known_commands :
cmd = ' help '
2012-03-12 17:55:33 +01:00
if not wallet . file_exists and cmd not in [ ' help ' , ' create ' , ' restore ' ] :
2011-11-16 18:41:33 +03:00
print " Wallet file not found. "
2012-02-25 07:51:45 +01:00
print " Type ' electrum create ' to create a new wallet, or provide a path to a wallet with the -w option "
2011-11-16 18:26:06 +03:00
sys . exit ( 0 )
2012-02-21 14:36:45 +01:00
if cmd in [ ' create ' , ' restore ' ] :
2012-05-11 10:16:39 +02:00
from electrum import mnemonic
2012-03-12 17:55:33 +01:00
if wallet . file_exists :
2011-11-16 18:26:06 +03:00
print " remove the existing wallet first! "
sys . exit ( 0 )
2011-11-29 10:26:47 +01:00
password = getpass . getpass ( " Password (hit return if you do not wish to encrypt your wallet): " )
if password :
password2 = getpass . getpass ( " Confirm password: " )
if password != password2 :
print " error "
sys . exit ( 1 )
2011-11-04 18:00:37 +01:00
else :
password = None
2012-03-31 06:39:23 +02:00
w_host , w_port , w_protocol = wallet . server . split ( ' : ' )
host = raw_input ( " server (default: %s ): " % w_host )
port = raw_input ( " port (default: %s ): " % w_port )
protocol = raw_input ( " protocol [t=tcp;h=http;n=native] (default: %s ): " % w_protocol )
2012-02-06 07:48:52 +01:00
fee = raw_input ( " fee (default: %s ): " % ( str ( Decimal ( wallet . fee ) / 100000000 ) ) )
2012-02-19 14:31:21 +02:00
gap = raw_input ( " gap limit (default 5): " )
2012-03-31 06:39:23 +02:00
if host : w_host = host
if port : w_port = port
if protocol : w_protocol = protocol
wallet . server = w_host + ' : ' + w_port + ' : ' + w_protocol
2012-02-21 14:36:45 +01:00
if fee : wallet . fee = float ( fee )
2012-02-19 14:31:21 +02:00
if gap : wallet . gap_limit = int ( gap )
2012-02-21 14:36:45 +01:00
if cmd == ' restore ' :
seed = raw_input ( " seed: " )
try :
seed . decode ( ' hex ' )
except :
print " not hex, trying decode "
seed = mnemonic . mn_decode ( seed . split ( ' ' ) )
if not seed :
print " no seed "
sys . exit ( 1 )
wallet . seed = str ( seed )
2012-03-23 20:58:54 +01:00
wallet . init_mpk ( wallet . seed )
2012-05-13 10:19:28 +02:00
if not options . offline :
WalletSynchronizer ( wallet ) . start ( )
print " recovering wallet... "
wallet . up_to_date_event . clear ( )
wallet . up_to_date = False
wallet . update ( )
if wallet . is_found ( ) :
print " recovery successful "
else :
print " found no history for this wallet "
wallet . fill_addressbook ( )
wallet . save ( )
2012-05-16 19:49:41 +02:00
print " Wallet saved in ' %s ' " % wallet . path
2011-11-06 11:13:58 +01:00
else :
wallet . new_seed ( None )
2012-03-23 20:58:54 +01:00
wallet . init_mpk ( wallet . seed )
wallet . synchronize ( ) # there is no wallet thread
2012-02-21 17:13:34 +01:00
wallet . save ( )
2012-02-21 14:36:45 +01:00
print " Your wallet generation seed is: " + wallet . seed
print " Please keep it in a safe place; if you lose it, you will not be able to restore your wallet. "
print " Equivalently, your wallet seed can be stored and recovered with the following mnemonic code: "
print " \" " + ' ' . join ( mnemonic . mn_encode ( wallet . seed ) ) + " \" "
2012-05-15 07:23:29 +02:00
print " Wallet saved in ' %s ' " % wallet . path
2011-11-04 18:00:37 +01:00
2011-11-12 00:07:41 +01:00
# check syntax
2012-02-08 09:36:19 +01:00
if cmd in [ ' payto ' , ' mktx ' ] :
2011-11-12 00:07:41 +01:00
try :
2012-02-08 09:36:19 +01:00
to_address = args [ 1 ]
amount = int ( 100000000 * Decimal ( args [ 2 ] ) )
2012-02-08 04:22:18 +01:00
change_addr = None
2012-02-08 09:36:19 +01:00
label = ' ' . join ( args [ 3 : ] )
2011-12-18 22:49:33 +01:00
if options . tx_fee :
options . tx_fee = int ( 100000000 * Decimal ( options . tx_fee ) )
2011-11-12 00:07:41 +01:00
except :
2011-11-16 18:12:13 +03:00
firstarg = cmd
cmd = ' help '
2011-11-12 00:07:41 +01:00
2011-11-14 20:35:54 +01:00
# open session
2012-05-13 10:19:28 +02:00
if cmd not in offline_commands and not options . offline :
2012-03-31 11:47:16 +02:00
WalletSynchronizer ( wallet ) . start ( )
2012-03-23 16:34:34 +01:00
wallet . update ( )
2011-11-14 20:35:54 +01:00
wallet . save ( )
2012-02-11 06:48:44 +01:00
# check if --from_addr not in wallet (for mktx/payto)
is_temporary = False
from_addr = None
if options . from_addr :
from_addr = options . from_addr
if from_addr not in wallet . all_addresses ( ) :
is_temporary = True
2011-11-14 20:35:54 +01:00
# commands needing password
2012-03-23 13:55:27 +01:00
if cmd in protected_commands or ( cmd == ' addresses ' and options . show_keys ) :
2012-02-11 06:48:44 +01:00
password = getpass . getpass ( ' Password: ' ) if wallet . use_encryption and not is_temporary else None
2011-12-20 14:22:31 +01:00
# check password
2011-12-20 12:37:48 +01:00
try :
2011-12-20 14:22:31 +01:00
wallet . pw_decode ( wallet . seed , password )
2011-12-20 12:37:48 +01:00
except :
print " invalid password "
exit ( 1 )
2011-12-20 14:22:31 +01:00
if cmd == ' import ' :
2011-12-20 12:37:48 +01:00
keypair = args [ 1 ]
if wallet . import_key ( keypair , password ) :
print " keypair imported "
else :
print " error "
wallet . save ( )
2011-11-16 18:12:13 +03:00
if cmd == ' help ' :
cmd2 = firstarg
if cmd2 not in known_commands :
2012-05-14 17:35:38 +02:00
print " type ' electrum help <command> ' to see the help for a specific command "
print " type ' electrum --help ' to see the list of options "
print " list of commands: " , ' , ' . join ( known_commands )
2011-11-16 18:12:13 +03:00
elif cmd2 == ' balance ' :
2012-05-14 17:15:59 +02:00
print " Display the balance of your wallet or of an address. "
2012-01-16 02:02:48 +02:00
print " syntax: balance [<address>] "
2011-11-16 18:12:13 +03:00
elif cmd2 == ' contacts ' :
print " show your list of contacts "
elif cmd2 == ' payto ' :
print " payto <recipient> <amount> [label] "
print " create and broadcast a transaction. "
print " <recipient> can be a bitcoin address or a label "
2012-05-14 17:15:59 +02:00
print " options: \n --fee, -f: set transaction fee \n --fromaddr, -s: send from address - \n --changeaddr, -c: send change to address "
2011-11-16 18:12:13 +03:00
elif cmd2 == ' sendtx ' :
print " sendtx <tx> "
print " broadcast a transaction to the network. <tx> must be in hexadecimal "
elif cmd2 == ' password ' :
print " change your password "
elif cmd2 == ' addresses ' :
2012-05-14 17:15:59 +02:00
print " show your list of addresses. "
print " options: \n -a: show all addresses, including change addresses \n -k: show private keys \n -b: show the balance of addresses "
2011-11-16 18:12:13 +03:00
elif cmd2 == ' history ' :
print " show the transaction history "
elif cmd2 == ' label ' :
print " assign a label to an item "
2012-02-11 13:14:12 +01:00
elif cmd2 == ' gtk ' :
2011-11-16 18:12:13 +03:00
print " start the GUI "
elif cmd2 == ' mktx ' :
print " create a signed transaction. password protected "
print " syntax: mktx <recipient> <amount> [label] "
2012-05-14 17:15:59 +02:00
print " options: \n --fee, -f: set transaction fee \n --fromaddr, -s: send from address - \n --changeaddr, -c: send change to address "
2011-11-16 18:12:13 +03:00
elif cmd2 == ' seed ' :
2012-05-14 17:15:59 +02:00
print " print the generation seed of your wallet. "
2012-05-13 00:43:22 +02:00
elif cmd2 == ' deseed ' :
2012-05-14 17:15:59 +02:00
print " remove seed from the wallet. The seed is stored in a file that has the name of the wallet plus ' .seed ' "
elif cmd2 == ' reseed ' :
print " restore seed of the wallet. The wallet must have no seed, and the seed must match the wallet ' s master public key. "
2012-02-06 18:13:33 +01:00
elif cmd2 == ' eval ' :
2012-02-08 17:11:20 +01:00
print " Run python eval() on an object \n Syntax: eval <expression> \n Example: eval \" wallet.aliases \" "
2011-11-16 18:12:13 +03:00
elif cmd == ' seed ' :
2012-05-11 10:16:39 +02:00
from electrum import mnemonic
2011-11-18 13:07:28 +01:00
seed = wallet . pw_decode ( wallet . seed , password )
2012-05-16 19:33:42 +02:00
print seed + ' " ' + ' ' . join ( mnemonic . mn_encode ( seed ) ) + ' " '
2011-11-14 20:35:54 +01:00
2012-05-13 00:43:22 +02:00
elif cmd == ' deseed ' :
2012-05-13 01:32:28 +02:00
if not wallet . seed :
2012-05-14 17:35:38 +02:00
print " Error: This wallet has no seed "
2012-05-13 02:36:44 +02:00
elif wallet . use_encryption :
print " Error: This wallet is encrypted "
2012-05-13 00:43:22 +02:00
else :
2012-05-16 19:49:41 +02:00
ns = wallet . path + ' .seed '
print " Warning: you are going to extract the seed from ' %s ' \n The seed will be saved in ' %s ' " % ( wallet . path , ns )
2012-05-13 01:32:28 +02:00
if raw_input ( " Are you sure you want to continue? (y/n) " ) in [ ' y ' , ' Y ' , ' yes ' ] :
f = open ( ns , ' w ' )
f . write ( wallet . seed )
f . close ( )
wallet . seed = ' '
wallet . save ( )
print " Done. "
else :
print " Action canceled. "
elif cmd == ' reseed ' :
if wallet . seed :
2012-05-16 19:33:42 +02:00
print " This wallet already has a seed " , wallet . seed
2012-05-13 01:32:28 +02:00
else :
2012-05-16 19:49:41 +02:00
ns = wallet . path + ' .seed '
2012-05-13 01:32:28 +02:00
try :
f = open ( ns , ' r ' )
seed = f . read ( )
f . close ( )
except :
print " seed file not found "
sys . exit ( )
mpk = wallet . master_public_key
wallet . seed = seed
wallet . use_encryption = False
wallet . init_mpk ( seed )
if mpk == wallet . master_public_key :
wallet . save ( )
2012-05-16 19:51:00 +02:00
print " Done: " + wallet . path
2012-05-13 01:32:28 +02:00
else :
print " error: master public key does not match "
2011-11-17 01:55:29 +01:00
elif cmd == ' validateaddress ' :
addr = args [ 1 ]
print wallet . is_valid ( addr )
2011-11-16 17:16:36 +03:00
elif cmd == ' balance ' :
2012-01-16 02:02:48 +02:00
try :
addrs = args [ 1 : ]
except :
pass
if addrs == [ ] :
c , u = wallet . get_balance ( )
if u :
2012-02-06 07:48:52 +01:00
print Decimal ( c ) / 100000000 , Decimal ( u ) / 100000000
2012-01-16 02:02:48 +02:00
else :
2012-02-06 07:48:52 +01:00
print Decimal ( c ) / 100000000
2011-11-04 18:00:37 +01:00
else :
2012-01-16 02:02:48 +02:00
for addr in addrs :
c , u = wallet . get_addr_balance ( addr )
if u :
2012-02-06 07:48:52 +01:00
print " %s %s , %s " % ( addr , str ( Decimal ( c ) / 100000000 ) , str ( Decimal ( u ) / 100000000 ) )
2012-01-16 02:02:48 +02:00
else :
2012-02-06 07:48:52 +01:00
print " %s %s " % ( addr , str ( Decimal ( c ) / 100000000 ) )
2011-11-04 18:00:37 +01:00
2011-11-14 20:35:54 +01:00
elif cmd in [ ' contacts ' ] :
2011-11-12 00:07:41 +01:00
for addr in wallet . addressbook :
print addr , " " , wallet . labels . get ( addr )
2012-02-06 18:13:33 +01:00
elif cmd == ' eval ' :
print eval ( args [ 1 ] )
2012-02-06 18:55:25 +01:00
wallet . save ( )
2012-02-03 17:38:43 +01:00
2011-11-14 20:35:54 +01:00
elif cmd in [ ' addresses ' ] :
2011-12-18 22:49:33 +01:00
for addr in wallet . all_addresses ( ) :
2011-11-14 20:35:54 +01:00
if options . show_all or not wallet . is_change ( addr ) :
2011-12-21 17:56:26 +01:00
label = wallet . labels . get ( addr )
_type = ' '
if wallet . is_change ( addr ) : _type = " [change] "
if addr in wallet . imported_keys . keys ( ) : _type = " [imported] "
2011-11-04 18:00:37 +01:00
if label is None : label = ' '
2011-11-14 20:35:54 +01:00
if options . show_balance :
2011-12-21 17:58:14 +01:00
h = wallet . history . get ( addr , [ ] )
2011-11-14 20:35:54 +01:00
ni = no = 0
for item in h :
2012-04-30 11:48:02 +02:00
if item [ ' is_input ' ] : ni + = 1
2011-11-14 20:35:54 +01:00
else : no + = 1
2012-02-06 07:48:52 +01:00
b = " %d %d %s " % ( no , ni , str ( Decimal ( wallet . get_addr_balance ( addr ) [ 0 ] ) / 100000000 ) )
2011-11-14 20:35:54 +01:00
else : b = ' '
2011-12-20 14:07:37 +01:00
if options . show_keys :
2012-05-14 21:31:37 +02:00
addr + = ' : ' + str ( wallet . get_private_key_base58 ( addr , password ) )
2011-12-21 17:56:26 +01:00
print addr , b , _type , label
2011-11-04 18:00:37 +01:00
if cmd == ' history ' :
lines = wallet . get_tx_history ( )
b = 0
for line in lines :
import datetime
2012-02-06 07:48:52 +01:00
v = line [ ' value ' ]
2011-11-04 18:00:37 +01:00
b + = v
try :
2012-04-03 09:29:36 +02:00
time_str = str ( datetime . datetime . fromtimestamp ( line [ ' timestamp ' ] ) )
2011-11-04 18:00:37 +01:00
except :
2012-04-03 09:29:36 +02:00
print line [ ' timestamp ' ]
2011-11-04 18:00:37 +01:00
time_str = ' pending '
label = line . get ( ' label ' )
if not label : label = line [ ' tx_hash ' ]
else : label = label + ' ' * ( 64 - len ( label ) )
2012-02-06 07:48:52 +01:00
print time_str , " " + label + " " + format_satoshis ( v ) + " " + format_satoshis ( b )
print " # balance: " , format_satoshis ( b )
2011-11-04 18:00:37 +01:00
elif cmd == ' label ' :
try :
2011-11-14 20:35:54 +01:00
tx = args [ 1 ]
label = ' ' . join ( args [ 2 : ] )
2011-11-04 18:00:37 +01:00
except :
print " syntax: label <tx_hash> <text> "
2011-11-10 09:34:27 +01:00
sys . exit ( 1 )
2011-11-04 18:00:37 +01:00
wallet . labels [ tx ] = label
wallet . save ( )
2012-02-08 09:36:19 +01:00
elif cmd in [ ' payto ' , ' mktx ' ] :
2012-02-11 06:48:44 +01:00
if from_addr and is_temporary :
if from_addr . find ( " : " ) == - 1 :
keypair = from_addr + " : " + getpass . getpass ( ' Private key: ' )
else :
keypair = from_addr
from_addr = keypair . split ( ' : ' ) [ 0 ]
if not wallet . import_key ( keypair , password ) :
print " invalid key pair "
exit ( 1 )
wallet . history [ from_addr ] = interface . retrieve_history ( from_addr )
wallet . update_tx_history ( )
change_addr = from_addr
2012-02-10 13:23:39 +01:00
2012-02-08 09:36:19 +01:00
if options . change_addr :
change_addr = options . change_addr
2012-02-10 13:23:39 +01:00
2011-11-12 00:07:41 +01:00
for k , v in wallet . labels . items ( ) :
if v == to_address :
to_address = k
2011-11-17 01:55:29 +01:00
print " alias " , to_address
2011-11-12 00:07:41 +01:00
break
2012-02-08 04:22:18 +01:00
if change_addr and v == change_addr :
change_addr = k
2011-12-18 22:49:33 +01:00
try :
2012-02-08 04:22:18 +01:00
tx = wallet . mktx ( to_address , amount , label , password ,
2012-02-10 13:23:39 +01:00
fee = options . tx_fee , change_addr = change_addr , from_addr = from_addr )
except :
import traceback
traceback . print_exc ( file = sys . stdout )
2011-12-18 22:49:33 +01:00
tx = None
2012-02-08 09:36:19 +01:00
if tx and cmd == ' payto ' :
2011-11-16 17:16:36 +03:00
r , h = wallet . sendtx ( tx )
print h
else :
2011-12-18 22:49:33 +01:00
print tx
2011-11-16 17:16:36 +03:00
2012-02-10 13:23:39 +01:00
if is_temporary :
wallet . imported_keys . pop ( from_addr )
2012-02-11 05:50:07 +01:00
del ( wallet . history [ from_addr ] )
2012-02-10 13:23:39 +01:00
wallet . save ( )
2011-12-15 15:41:50 +01:00
elif cmd == ' sendtx ' :
2011-11-16 17:16:36 +03:00
tx = args [ 1 ]
r , h = wallet . sendtx ( tx )
print h
2011-11-04 18:00:37 +01:00
elif cmd == ' password ' :
try :
2011-11-05 15:06:43 +01:00
seed = wallet . pw_decode ( wallet . seed , password )
2011-11-04 18:00:37 +01:00
except :
print " sorry "
2011-11-10 09:34:27 +01:00
sys . exit ( 1 )
2011-11-04 18:00:37 +01:00
new_password = getpass . getpass ( ' New password: ' )
if new_password == getpass . getpass ( ' Confirm new password: ' ) :
2012-05-17 08:32:49 +02:00
wallet . update_password ( seed , password , new_password )
2011-11-04 18:00:37 +01:00
else :
print " error: mismatch "
2012-02-01 20:27:03 +01:00
elif cmd == ' signmessage ' :
address , message = args [ 1 : 3 ]
print wallet . sign_message ( address , message , password )
elif cmd == ' verifymessage ' :
address , signature , message = args [ 1 : 4 ]
2012-02-03 11:48:09 +01:00
try :
wallet . verify_message ( address , signature , message )
print True
except :
print False
2012-02-01 20:27:03 +01:00