better error messages
[electrum-nvc.git] / lib / wallet.py
index 6c0eb8d..540110c 100644 (file)
@@ -213,10 +213,18 @@ def raw_tx( inputs, outputs, for_sig = None ):
 
 def format_satoshis(x, is_diff=False, num_zeros = 0):
     from decimal import Decimal
-    s = str( Decimal(x) /100000000 )
-    if is_diff and x>0:
+    s = Decimal(x)
+    sign, digits, exp = s.as_tuple()
+    digits = map(str, digits)
+    while len(digits) < 9:
+        digits.insert(0,'0')
+    digits.insert(-8,'.')
+    s = ''.join(digits).rstrip('0')
+    if sign: 
+        s = '-' + s
+    elif is_diff:
         s = "+" + s
-    if not '.' in s: s += '.'
+
     p = s.find('.')
     s += "0"*( 1 + num_zeros - ( len(s) - p ))
     s += " "*( 9 - ( len(s) - p ))
@@ -318,17 +326,19 @@ class Wallet:
 
     def import_key(self, keypair, password):
         address, key = keypair.split(':')
-        if not self.is_valid(address): return False
-        if address in self.all_addresses(): return False
+        if not self.is_valid(address):
+            raise BaseException('Invalid Bitcoin address')
+        if address in self.all_addresses():
+            raise BaseException('Address already in wallet')
         b = ASecretToSecret( key )
         if not b: return False
         secexp = int( b.encode('hex'), 16)
         private_key = ecdsa.SigningKey.from_secret_exponent( secexp, curve=SECP256k1 )
         # sanity check
         public_key = private_key.get_verifying_key()
-        if not address == public_key_to_bc_address( '04'.decode('hex') + public_key.to_string() ): return False
+        if not address == public_key_to_bc_address( '04'.decode('hex') + public_key.to_string() ):
+            raise BaseException('Address does not match private key')
         self.imported_keys[address] = self.pw_encode( key, password )
-        return True
 
     def new_seed(self, password):
         seed = "%032x"%ecdsa.util.randrange( pow(2,128) )
@@ -956,7 +966,7 @@ class Wallet:
 
     def update(self):
         self.interface.poke()
-        self.up_to_date_event.wait()
+        self.up_to_date_event.wait(10000000000)
 
 
     def start_session(self, interface):