def create_wallet(self): """ Create a new bitcoin wallet. """ from bitcoinlib.wallets import wallet_exists, HDWallet, WalletError if wallet_exists(self.wallet_name, databasefile=self.db_path): return fail(RuntimeError("Bitcoin wallet with name %s already exists." % self.wallet_name)) self._logger.info("Creating wallet in %s", self.wallet_dir) try: self.wallet = HDWallet.create(self.wallet_name, network=self.network, databasefile=self.db_path) self.wallet.new_key('tribler_payments') self.wallet.new_key('tribler_change', change=1) self.created = True except WalletError as exc: self._logger.error("Cannot create BTC wallet!") return fail(Failure(exc)) return succeed(None)
def __init__(self, wallet_dir): super(BitcoinWallet, self).__init__() self.network = 'testnet' if self.TESTNET else 'bitcoin' self.wallet_dir = wallet_dir self.min_confirmations = 0 self.wallet = None self.unlocked = True self.db_path = os.path.join(wallet_dir, 'wallets.sqlite') self.wallet_name = 'tribler_testnet' if self.TESTNET else 'tribler' if wallet_exists(self.wallet_name, databasefile=self.db_path): self.wallet = HDWallet(self.wallet_name, databasefile=self.db_path) self.created = True
def __init__(self, wallet_dir, testnet, network, currency): if network not in SUPPORTED_NETWORKS: raise UnsupportedNetwork(network) super(BitcoinlibWallet, self).__init__() self.network = network self.wallet_name = f'tribler_{self.network}' self.testnet = testnet self.unlocked = True self.currency = currency self.wallet_dir = wallet_dir self.min_confirmations = 0 self.wallet = None self.db_path = os.path.join(wallet_dir, 'wallets.sqlite') if wallet_exists(self.wallet_name, db_uri=self.db_path): self.wallet = HDWallet(self.wallet_name, db_uri=self.db_path) self.created = True self.lib_init()
def get_wallet(self): wallet_id = self.user.wallet_id if wallet_exists(wallet_id): return Wallet(wallet_id)
'key_type': 'bip44', 'key': 'tpubDDqeUityd3vW7JbKsYpd4SDXEPWzBUqJmdYMRkuefbejHkVyNnrWHfwELYu1bbRnjLALYAUfs7Bg69moqpRyYnS31Z6DuYA9r2wZC5sLGAm' }, { 'name': 'Paper-Backup', 'key_type': 'single', 'key': 'tpubD6NzVbkrYhZ4XfKVKY9LUfXh4t3ZHMDw9Q2SUUDTCCXrzFGfLm6v5n4frZWNfc5fwkbc33C3FwvbwbxgrDGKNSL2WcLAhPcZXijrQvLvyYA' }, ] if not wallet_exists(WALLET_NAME): # This wallets key list, use tools/mnemonic_key_create.py to create your own. # cosigners_private = [] key_list = [] for cosigner in cosigners: if not cosigner['key']: raise ValueError( "Please create private keys with mnemonic_key_create.py and add to COSIGNERS definitions" ) hdkey = HDKey(cosigner['key'], key_type=cosigner['key_type']) if hdkey.is_private: cosigners_private.append(cosigner['name']) cosigner['hdkey'] = hdkey key_list.append(hdkey)
def main(): print("Command Line Wallet for BitcoinLib\n") # --- Parse commandline arguments --- args = parse_args() databasefile = DEFAULT_DATABASE if args.database: databasefile = os.path.join(BCL_DATABASE_DIR, args.database) if args.generate_key: passphrase = get_passphrase(args) passphrase = ' '.join(passphrase) seed = binascii.hexlify(Mnemonic().to_seed(passphrase)) hdkey = HDKey.from_seed(seed, network=args.network) print( "Private master key, to create multisig wallet on this machine: %s" % hdkey.wif()) print( "Public account key, to share with other cosigner multisig wallets: %s" % hdkey.public_master(witness_type=args.witness_type, multisig=True)) print("Network: %s" % hdkey.network.name) clw_exit() # List wallets, then exit if args.list_wallets: print("BitcoinLib wallets:") for w in wallets_list(databasefile=databasefile): if 'parent_id' in w and w['parent_id']: continue print("[%d] %s (%s) %s" % (w['id'], w['name'], w['network'], w['owner'])) clw_exit() # Delete specified wallet, then exit if args.wallet_remove: if not wallet_exists(args.wallet_name, databasefile=databasefile): clw_exit("Wallet '%s' not found" % args.wallet_name) inp = input( "\nWallet '%s' with all keys and will be removed, without private key it cannot be restored." "\nPlease retype exact name of wallet to proceed: " % args.wallet_name) if inp == args.wallet_name: if wallet_delete(args.wallet_name, force=True, databasefile=databasefile): clw_exit("\nWallet %s has been removed" % args.wallet_name) else: clw_exit("\nError when deleting wallet") else: clw_exit("\nSpecified wallet name incorrect") wlt = None if args.wallet_name and not args.wallet_name.isdigit( ) and not wallet_exists(args.wallet_name, databasefile=databasefile): if not args.create_from_key and input( "Wallet %s does not exist, create new wallet [yN]? " % args.wallet_name).lower() != 'y': clw_exit('Aborted') wlt = create_wallet(args.wallet_name, args, databasefile) args.wallet_info = True else: try: wlt = HDWallet(args.wallet_name, databasefile=databasefile) if args.passphrase is not None: print( "WARNING: Using passphrase option for existing wallet ignored" ) if args.create_from_key is not None: print( "WARNING: Using create_from_key option for existing wallet ignored" ) except WalletError as e: clw_exit("Error: %s" % e.msg) if wlt is None: clw_exit("Could not open wallet %s" % args.wallet_name) if args.import_private: if wlt.import_key(args.import_private): clw_exit("Private key imported") else: clw_exit("Failed to import key") if args.wallet_recreate: wallet_empty(args.wallet_name) print("Removed transactions and generated keys from this wallet") if args.update_utxos: wlt.utxos_update() if args.update_transactions: wlt.scan(scan_gap_limit=5) if args.export_private: if wlt.scheme == 'multisig': for w in wlt.cosigner: if w.main_key and w.main_key.is_private: print(w.main_key.wif) elif not wlt.main_key or not wlt.main_key.is_private: print("No private key available for this wallet") else: print(wlt.main_key.wif) clw_exit() if args.network is None: args.network = wlt.network.name tx_import = None if args.import_tx_file: try: fn = args.import_tx_file f = open(fn, "r") except FileNotFoundError: clw_exit("File %s not found" % args.import_tx_file) try: tx_import = ast.literal_eval(f.read()) except (ValueError, SyntaxError): tx_import = f.read() if args.import_tx: try: tx_import = ast.literal_eval(args.import_tx) except (ValueError, SyntaxError): tx_import = args.import_tx if tx_import: if isinstance(tx_import, dict): wt = wlt.transaction_import(tx_import) else: wt = wlt.transaction_import_raw(tx_import, network=args.network) wt.sign() if args.push: res = wt.send() if res: print("Transaction pushed to network. Transaction ID: %s" % wt.hash) else: print("Error creating transaction: %s" % wt.error) wt.info() print("Signed transaction:") print_transaction(wt) clw_exit() if args.receive: keys = wlt.get_key(network=args.network, number_of_keys=args.receive) if args.receive != 1: keys += wlt.get_key_change(network=args.network, number_of_keys=args.receive) keys = [keys] if not isinstance(keys, list) else keys print("Receive address(es):") for key in keys: addr = key.address print(addr) if QRCODES_AVAILABLE and args.receive == 1: qrcode = pyqrcode.create(addr) print(qrcode.terminal()) if not QRCODES_AVAILABLE and args.receive == 1: print( "Install qr code module to show QR codes: pip install pyqrcode" ) clw_exit() if args.create_transaction == []: clw_exit("Missing arguments for --create-transaction/-t option") if args.create_transaction: if args.fee_per_kb: clw_exit("Fee-per-kb option not allowed with --create-transaction") try: wt = create_transaction(wlt, args.create_transaction, args) except WalletError as e: clw_exit("Cannot create transaction: %s" % e.msg) wt.sign() print("Transaction created") wt.info() if args.push: wt.send() if wt.pushed: print("Transaction pushed to network. Transaction ID: %s" % wt.hash) else: print("Error creating transaction: %s" % wt.error) else: print( "\nTransaction created but not send yet. Transaction dictionary for export: " ) print_transaction(wt) clw_exit() if args.sweep: if args.fee: clw_exit("Fee option not allowed with --sweep") offline = True print("Sweep wallet. Send all funds to %s" % args.sweep) if args.push: offline = False wt = wlt.sweep(args.sweep, offline=offline, network=args.network, fee_per_kb=args.fee_per_kb) if not wt: clw_exit( "Error occurred when sweeping wallet: %s. Are UTXO's available and updated?" % wt) wt.info() if args.push: if wt.pushed: print("Transaction pushed to network. Transaction ID: %s" % wt.hash) elif not wt: print("Cannot sweep wallet, are UTXO's updated and available?") else: print("Error sweeping wallet: %s" % wt.error) else: print( "\nTransaction created but not send yet. Transaction dictionary for export: " ) print_transaction(wt) clw_exit() # print("Updating wallet") if args.network == 'bitcoinlib_test': wlt.utxos_update() print("Wallet info for %s" % wlt.name) wlt.info()
network = args.network network_obj = Network(network) style_file = args.style template_file = args.template # List wallets, then exit if args.list_wallets: print("\nBitcoinlib wallets:") for w in wallets_list(): print(w['name']) print("\n") sys.exit() if args.wallet_info: print("Wallet info for %s" % args.wallet_name) if wallet_exists(args.wallet_name): wallet = BulkPaperWallet(args.wallet_name) # wallet.utxos_update() wallet.info() else: raise ValueError("Wallet '%s' not found" % args.wallet_name) sys.exit() # Delete specified wallet, then exit if args.wallet_remove: if not wallet_exists(args.wallet_remove): print("Wallet '%s' not found" % args.wallet_remove) sys.exit() inp = input( "\nWallet '%s' with all keys and will be removed, without private key it cannot be restored." "\nPlease retype exact name of wallet to proceed: " %
if args.database: databasefile = DEFAULT_DATABASEDIR + args.database # List wallets, then exit if args.list_wallets: print("Bitcoinlib wallets:") for w in wallets_list(databasefile=databasefile): if 'parent_id' in w and w['parent_id']: continue print("[%d] %s (%s) %s" % (w['id'], w['name'], w['network'], w['owner'])) clw_exit() # Delete specified wallet, then exit if args.wallet_remove: if not wallet_exists(args.wallet_name, databasefile=databasefile): clw_exit("Wallet '%s' not found" % args.wallet_remove) inp = input( "\nWallet '%s' with all keys and will be removed, without private key it cannot be restored." "\nPlease retype exact name of wallet to proceed: " % args.wallet_name) if inp == args.wallet_name: if wallet_delete(args.wallet_name, force=True, databasefile=databasefile): clw_exit("\nWallet %s has been removed" % args.wallet_name) else: clw_exit("\nError when deleting wallet") else: clw_exit("\nSpecified wallet name incorrect")
def __init__(self, wallet_dir): super(BitcoinWallet, self).__init__() bitcoinlib_main.initialize_lib(wallet_dir) from bitcoinlib.wallets import wallet_exists, HDWallet self.network = 'testnet' if self.TESTNET else 'bitcoin' self.wallet_dir = wallet_dir self.min_confirmations = 0 self.wallet = None self.unlocked = True self.db_path = os.path.join(wallet_dir, 'wallets.sqlite') self.wallet_name = 'tribler_testnet' if self.TESTNET else 'tribler' if wallet_exists(self.wallet_name, databasefile=self.db_path): self.wallet = HDWallet(self.wallet_name, databasefile=self.db_path) self.created = True