commit 6f9d7fee94c2862af79674cf8adb75e2d61a406c
parent c0bf69e3b36ca0023651ee759d23a11c11a25f35
Author: thomasv <thomasv@gitorious>
Date: Fri, 16 Dec 2011 15:40:05 +0100
cannot handle old versions
Diffstat:
3 files changed, 27 insertions(+), 58 deletions(-)
diff --git a/client/electrum.py b/client/electrum.py
@@ -211,8 +211,6 @@ def raw_tx( inputs, outputs, for_sig = None ):
if for_sig is not None: s += int_to_hex(1, 4) # hash type
return s
-class InvalidPassword(Exception):
- pass
@@ -330,6 +328,9 @@ class Wallet:
def create_new_address2(self, for_change):
""" Publickey(type,n) = Master_public_key + H(n|S|type)*point """
+ if self.master_public_key is None:
+ raise BaseException("Cannot create new addresses with this wallet.\nIf this is an old wallet, please move your complete balance to a new wallet.")
+
curve = SECP256k1
n = len(self.change_addresses) if for_change else len(self.addresses)
z = self.get_sequence(n,for_change)
@@ -351,7 +352,8 @@ class Wallet:
def synchronize(self):
-
+ if self.master_public_key is None: return False # will be None if we read an older format
+
while True:
if self.change_addresses == []:
self.create_new_address2(True)
@@ -408,6 +410,7 @@ class Wallet:
f.close()
def read(self):
+ upgrade_msg = """This wallet seed is deprecated. Please run upgrade.py for a diagnostic."""
try:
f = open(self.path,"r")
data = f.read()
@@ -431,15 +434,12 @@ class Wallet:
self.labels = d.get('labels')
self.addressbook = d.get('contacts')
except:
- raise BaseException("Error; could not parse wallet. If this is an old wallet format, please use upgrade.py.",0)
+ raise BaseException(upgrade_msg)
self.update_tx_history()
if self.seed_version != SEED_VERSION:
- raise BaseException("""Seed version mismatch: your wallet seed is deprecated.
-Please create a new wallet, and send your coins to the new wallet.
-We apologize for the inconvenience. We try to keep this kind of upgrades as rare as possible.
-See the release notes for more information.""",1)
+ raise BaseException(upgrade_msg)
return True
@@ -612,7 +612,7 @@ See the release notes for more information.""",1)
try:
d.decode('hex')
except:
- raise InvalidPassword()
+ raise BaseException("Invalid password")
return d
else:
return s
@@ -662,14 +662,13 @@ See the release notes for more information.""",1)
def mktx(self, to_address, amount, label, password, fee=None):
if not self.is_valid(to_address):
- return False, "Invalid address"
+ raise BaseException("Invalid address")
inputs, total, fee = wallet.choose_tx_inputs( amount, fee )
- if not inputs: return False, "Not enough funds %d %d"%(total, fee)
- try:
- outputs = wallet.choose_tx_outputs( to_address, amount, fee, total )
- s_inputs = wallet.sign_inputs( inputs, outputs, password )
- except InvalidPassword:
- return False, "Wrong password"
+ if not inputs:
+ raise BaseException("Not enough funds")
+ outputs = wallet.choose_tx_outputs( to_address, amount, fee, total )
+ s_inputs = wallet.sign_inputs( inputs, outputs, password )
+
tx = filter( raw_tx( s_inputs, outputs ) )
if to_address not in self.addressbook:
self.addressbook.append(to_address)
@@ -677,7 +676,7 @@ See the release notes for more information.""",1)
tx_hash = Hash(tx.decode('hex') )[::-1].encode('hex')
wallet.labels[tx_hash] = label
wallet.save()
- return True, tx
+ return tx
def sendtx(self, tx):
tx_hash = Hash(tx.decode('hex') )[::-1].encode('hex')
@@ -848,7 +847,6 @@ if __name__ == '__main__':
print addr, " ", wallet.labels.get(addr)
elif cmd in [ 'addresses']:
- if options.show_keys: private_keys = ast.literal_eval( wallet.pw_decode( wallet.private_keys, password ) )
for addr in wallet.addresses:
if options.show_all or not wallet.is_change(addr):
label = wallet.labels.get(addr) if not wallet.is_change(addr) else "[change]"
@@ -861,8 +859,7 @@ if __name__ == '__main__':
else: no += 1
b = "%d %d %f"%(no, ni, wallet.get_addr_balance(addr)[0]*1e-8)
else: b=''
- pk = private_keys[wallet.addresses.index(addr)] if options.show_keys else ''
- print addr, pk, b, label
+ print addr, b, label
if cmd == 'history':
lines = wallet.get_tx_history()
diff --git a/client/gui.py b/client/gui.py
@@ -84,13 +84,8 @@ def init_wallet(wallet):
try:
found = wallet.read()
except BaseException, e:
- show_message(e.args[0])
- if e.args[1] == 0: exit(1)
- found = 1
- except:
- exit()
-
-
+ show_message(e.message)
+ exit(1)
if not found:
# ask if the user wants to create a new wallet, or recover from a seed.
@@ -662,11 +657,13 @@ class BitcoinGUI:
password = password_dialog() if self.wallet.use_encryption else None
- status, tx = self.wallet.mktx( to_address, amount, label, password, fee )
- self.update_session = True # we created a new change address
- if not status:
- self.show_message(tx)
+ try:
+ tx = self.wallet.mktx( to_address, amount, label, password, fee )
+ except BaseException, e:
+ self.show_message(e.message)
return
+
+ self.update_session = True # we created a new change address
status, msg = self.wallet.sendtx( tx )
if status:
diff --git a/client/upgrade.py b/client/upgrade.py
@@ -67,33 +67,8 @@ if __name__ == "__main__":
if type(x) == tuple:
seed_version, use_encryption, fee, host, port, blocks, seed, all_addresses, private_keys, change_indexes, status, history, labels, addressbook = x
- addresses = []
- change_addresses = []
- for i in range(len(all_addresses)):
- if i in change_indexes:
- change_addresses.append(all_addresses[i])
- else:
- addresses.append(all_addresses[i])
- s = {
- 'seed_version':seed_version,
- 'use_encryption':use_encryption,
- 'master_public_key':None,
- 'fee':fee,
- 'host':host,
- 'port':port,
- 'blocks':blocks,
- 'seed':seed,
- 'addresses':addresses,
- 'change_addresses':change_addresses,
- 'status':status,
- 'history':history,
- 'labels':labels,
- 'contacts':addressbook
- }
- f = open(path,"w")
- f.write( repr(s) )
- f.close()
- print "wallet format was upgraded."
+ print """This wallet is deprecated.
+Please create a new wallet, open the old wallet with Electrum 0.33, and send your coins to your new wallet"""
exit(1)
wallet = electrum.Wallet(path)