URI: 
       timported addresses - electrum - Electrum Bitcoin wallet
  HTML git clone https://git.parazyd.org/electrum
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
       ---
   DIR commit 29ee4d5a28483b844d234615f089344c35783be5
   DIR parent 0b31c2dd1eba2718d934b43296e2cac0937e7236
  HTML Author: ThomasV <thomasv@gitorious>
       Date:   Sun, 18 Dec 2011 22:49:33 +0100
       
       imported addresses
       
       Diffstat:
         M client/electrum.py                  |      56 +++++++++++++++++++------------
       
       1 file changed, 34 insertions(+), 22 deletions(-)
       ---
   DIR diff --git a/client/electrum.py b/client/electrum.py
       t@@ -248,6 +248,8 @@ class Wallet:
        
                self.init_path(wallet_path)
        
       +        self.imported_addresses = {}
       +
        
            def init_path(self, wallet_path):
        
       t@@ -281,7 +283,7 @@ class Wallet:
                self.master_public_key = master_private_key.get_verifying_key().to_string()
        
            def all_addresses(self):
       -        return self.addresses + self.change_addresses
       +        return self.addresses + self.change_addresses + self.imported_addresses.keys()
        
            def is_mine(self, address):
                return address in self.all_addresses()
       t@@ -306,26 +308,30 @@ class Wallet:
        
            def get_private_key2(self, address, password):
                """  Privatekey(type,n) = Master_private_key + H(n|S|type)  """
       -        if address in self.addresses:
       -            n = self.addresses.index(address)
       -            for_change = False
       -        elif address in self.change_addresses:
       -            n = self.change_addresses.index(address)
       -            for_change = True
       +        if address in self.imported_addresses.keys():
       +            b = ASecretToSecret( self.imported_addresses[address] )
       +            secexp = int( b.encode('hex'), 16)
       +            private_key = ecdsa.SigningKey.from_secret_exponent( secexp, curve=SECP256k1 )
                else:
       -            raise BaseException("unknown address")
       +            if address in self.addresses:
       +                n = self.addresses.index(address)
       +                for_change = False
       +            elif address in self.change_addresses:
       +                n = self.change_addresses.index(address)
       +                for_change = True
       +            else:
       +                raise BaseException("unknown address")
       +            seed = self.pw_decode( self.seed, password)
       +            secexp = self.stretch_key(seed)
       +            order = generator_secp256k1.order()
       +            privkey_number = ( secexp + self.get_sequence(n,for_change) ) % order
       +            private_key = ecdsa.SigningKey.from_secret_exponent( privkey_number, curve = SECP256k1 )
        
       -        seed = self.pw_decode( self.seed, password)
       -        secexp = self.stretch_key(seed)
       -        order = generator_secp256k1.order()
       -        privkey_number = ( secexp + self.get_sequence(n,for_change) ) % order
       -        private_key = ecdsa.SigningKey.from_secret_exponent( privkey_number, curve = SECP256k1 )
                # sanity check
       -        #public_key = private_key.get_verifying_key()
       -        #assert address == public_key_to_bc_address( '04'.decode('hex') + public_key.to_string() )
       +        public_key = private_key.get_verifying_key()
       +        assert address == public_key_to_bc_address( '04'.decode('hex') + public_key.to_string() )
                return private_key
        
       -
            def create_new_address2(self, for_change):
                """   Publickey(type,n) = Master_public_key + H(n|S|type)*point  """
                curve = SECP256k1
       t@@ -694,7 +700,7 @@ if __name__ == '__main__':
            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")
       -    parser.add_option("-f", "--fee", dest="tx_fee", default=0.005, help="set tx fee")
       +    parser.add_option("-f", "--fee", dest="tx_fee", default="0.005", help="set tx fee")
            options, args = parser.parse_args()
            try:
                cmd = args[0]
       t@@ -769,7 +775,8 @@ if __name__ == '__main__':
                    to_address = args[1]
                    amount = int( 100000000 * Decimal(args[2]) )
                    label = ' '.join(args[3:])
       -            if options.tx_fee: options.tx_fee = int( 100000000 * Decimal(options.tx_fee) )
       +            if options.tx_fee: 
       +                options.tx_fee = int( 100000000 * Decimal(options.tx_fee) )
                except:
                    firstarg = cmd
                    cmd = 'help'
       t@@ -842,7 +849,7 @@ if __name__ == '__main__':
                    print addr, "   ", wallet.labels.get(addr)
        
            elif cmd in [ 'addresses']:
       -        for addr in wallet.addresses:
       +        for addr in wallet.all_addresses():
                    if options.show_all or not wallet.is_change(addr):
                        label = wallet.labels.get(addr) if not wallet.is_change(addr) else "[change]"
                        if label is None: label = ''
       t@@ -892,12 +899,17 @@ if __name__ == '__main__':
                        to_address = k
                        print "alias", to_address
                        break
       -        r, h = wallet.mktx( to_address, amount, label, password, fee = options.tx_fee )
       -        if r and cmd=='payto': 
       +        try:
       +            tx = wallet.mktx( to_address, amount, label, password, fee = options.tx_fee )
       +        except BaseException, e:
       +            print e
       +            tx = None
       +
       +        if tx and cmd=='payto': 
                    r, h = wallet.sendtx( tx )
                    print h
                else:
       -            print h 
       +            print tx
        
            elif cmd == 'sendtx':
                tx = args[1]