import os import pickle from ecdsa import SECP256k1 from ecdsa import SigningKey from ecdsa.util import randrange_from_seed__trytryagain from halocoin import tools class Wallet: def __init__(self, name, privkey=None): """ A wallet object is initialized by a private key. """ self.name = name if privkey is None: secexp = randrange_from_seed__trytryagain(os.urandom(SECP256k1.baselen), SECP256k1.order) self.privkey = SigningKey.from_secret_exponent(secexp, curve=SECP256k1) else: self.privkey = privkey self.pubkey = self.privkey.get_verifying_key() self.address = tools.make_address([self.pubkey], 1) def get_pubkey_str(self): return self.pubkey.to_string() def get_privkey_str(self): return self.privkey.to_string() def to_string(self): return pickle.dumps({ 'name': self.name, 'privkey': self.get_privkey_str() }) @staticmethod def from_string(wallet_string): wallet_dict = pickle.loads(wallet_string) return Wallet(wallet_dict['name'], SigningKey.from_string(wallet_dict['privkey'], curve=SECP256k1))