def get(self, request): print('Started ' + self.__class__.__name__ + ' get method') try: wallet_id = request.GET.get('wallet_id') just_address = request.GET.get('just_address') print( 'Started ', self.__class__.__name__, ' wallet_id=%s, just_address=%s ' % (str(wallet_id), bool(str(just_address)))) if wallet_id: wallet = HDWallet(wallet_id, db_uri=db_uri) keys = wallet.keys(include_private=True) keys = [x.__dict__ for x in keys] address_list = [] if bool(just_address) == True: for key in keys: address_list.append(key['address']) else: for key in keys: address_list.append({ 'address_id': key['address'], 'private_key': key['private'], 'public_key': key['public'] }) return JsonResponse(address_list, safe=False) else: raise ValidationError( get_env_var('exception.validation.address.no_wallet')) except Exception as e: raise e
def get(self, request): print('Started ' + self.__class__.__name__ + ' get method') try: network = request.GET.get('network') wallet_id = request.GET.get('wallet_id') withsum = request.GET.get('withsum') withsum = bool(withsum) print('Started ', self.__class__.__name__, ' wallet_id=%s, withsum=%s, network=%s ' % (str(wallet_id), bool(str(withsum)),network)) address_list = [] if wallet_id and network : wallet = HDWallet(wallet_id, db_uri=db_uri) wallet_address_list = wallet.addresslist() print('Wallet=%s, with unspent value=%s' %(wallet_id,str(wallet.balance()))) address_list = '|'.join([str(a) for a in wallet_address_list]) block_service_url = get_env_var( 'blockchain.service.url') + '/multiaddr?active=' + address_list print('service_url for get balance', block_service_url) resp = requests.get(block_service_url) print('\nreceived for blcokchain multiaddr resp', resp.status_code) address_list = json.loads(resp.text) address_list = self.getunspent(wallet_address_list,address_list,withsum) return JsonResponse(address_list, safe=False) else: raise ValidationError(get_env_var('exception.validation.unspent.no_wallet_or_no_network')) except ServiceException as e: track = traceback.format_exc() print(track) raise ServiceException(e) except Exception as e: track = traceback.format_exc() print(track) raise ServiceException(get_env_var('exception.business.unspent.serviceexception'))
def getNewAddress(account_id,wallet_id): try: wallet = HDWallet(wallet_id, db_uri=db_uri) address = wallet.new_key(account_id=account_id) address = Address(address_id=address.address, network_name=address.network_name) return address except Exception as e: raise ServiceException(get_env_var('exception.business.newaddress.dumpkey.serviceexception'))
def post(self, request): print("enter wallet send") try: data = JSONParser().parse(request) wallet_id = data.get('wallet_id') address = data.get('address') amount = data.get('amount') print('wallet_id ' + str(wallet_id)) print('address ' + str(address)) ''' print('wallet starts') srv = BitcoindClient() print(srv.getutxos('1CRkjhJgWC6tPNdfqnXRgYDPniSScHenuP')) print('bitcoin fee created') ''' wallet = HDWallet(wallet_id, db_uri=db_uri) print(' wallet.username ', wallet.key_for_path('m/44\'/0\'/1\'/0/0')) user = User.objects.filter(username=wallet.username) print('user', user) if user.count() > 0: user = user[0] print('wallets ', wallet, ' user_id ', user.user_id) from_wallet_key = wallet.key(wallet.name) print('from wallet key', from_wallet_key.key_id) print('to wallet key as same ', wallet.key(address)) # print('performing txn update update db') # wallet.transactions_update(account_id=user.user_id,key_id=from_wallet.key_id) utx = wallet.utxos_update(account_id=user.user_id) wallet.info() wallet.get_key() print('key change', wallet.get_key_change()) utxos = wallet.utxos(account_id=user.user_id) res = wallet.send_to(address, amount) print("Send transaction result:") if res.hash: print("Successfully send, tx id:", res.hash) else: print("TX not send, result:", res.errors) return JsonResponse(res.as_dict(), safe=False) except Exception as e: track = traceback.format_exc() logger.exception(track) raise e
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()
# raise ValueError("It is strongly advised to use not more then 1 private key per wallet.") if len(key_list) != SIGS_N: raise ValueError( "Number of cosigners (%d) is different then expected. SIG_N=%d" % (len(key_list), SIGS_N)) wallet3o5 = HDWallet.create_multisig(WALLET_NAME, key_list, SIGS_REQUIRED, sort_keys=True, network=NETWORK) wallet3o5.new_key() print("\n\nA multisig wallet with 1 key has been created on this system") else: wallet3o5 = HDWallet(WALLET_NAME) print("\nUpdating UTXO's...") wallet3o5.utxos_update() wallet3o5.info() utxos = wallet3o5.utxos() # Creating transactions just like in a normal wallet, then send raw transaction to other cosigners. They # can sign the transaction with there on key and pass it on to the next signer or broadcast it to the network. # You can use sign_raw.py to import and sign a raw transaction. # Example # if utxos: # print("\nNew unspent outputs found!") # print("Now a new transaction will be created to sweep this wallet and send bitcoins to a testnet faucet") # send_to_address = 'mv4rnyY3Su5gjcDNzbMLKBQkBicCtHUtFB'
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()
def post(self, request): print('Started ' + self.__class__.__name__ + ' get method') try: data = JSONParser().parse(request) network = data.get('network') output_address = data.get('address_id') wallet_id = data.get('wallet_id') send_amount = int(data.get('amount')) print( 'Started ', self.__class__.__name__, ' wallet_id=%s, withsum=%s, network=%s ' % (str(wallet_id), (str(output_address)), network)) wallet = HDWallet(wallet_id, db_uri=db_uri) change_address = wallet.get_key_change() change_address = change_address.address print('change_address ', change_address) if wallet_id: service_url = get_env_var( 'service.url') + '/unspent/?wallet_id=' + str( wallet_id) + '&network=' + network print('service_url for unspent', service_url) resp = requests.get(service_url, auth=service_auth) print('received status code for unspent resp', resp.status_code, ' and response %s' % (resp.text)) if resp.status_code != 200: raise ServiceException( get_env_var('exception.business.fee.serviceexception')) else: wallet_address_list = json.loads(resp.text) service_url = get_env_var( 'service.url') + '/address/?wallet_id=' + str(wallet_id) print('service_url for address', service_url) resp = requests.get(service_url, auth=service_auth) print('received status code for address resp', resp.status_code) if resp.status_code != 200: private_input_address_list = json.loads(resp.text) return JsonResponse(private_input_address_list, safe=False) else: private_input_address_list = json.loads(resp.text) blocks = 2 fee_per_kb = 0 if network == 'bitcoin': fee_per_kb = btc_srv.estimatefee(blocks) elif network == 'litecoin': fee_per_kb = ltc_srv.estimatefee(blocks) print('Fee per kb %s' % (str(fee_per_kb))) t = self.create_transaction(wallet_address_list, private_input_address_list, output_address, change_address, send_amount, fee_per_kb, network) return JsonResponse(t.as_dict(), safe=False) else: raise ValidationError( get_env_var('exception.validation.fee.no_coin_type')) except ServiceException as e: track = traceback.format_exc() print(track) raise ServiceException(e) except Exception as e: track = traceback.format_exc() print(track) return HttpResponse(status=404)
# # © 2017 November - 1200 Web Development <http://1200wd.com/> # # TODO: Outdated, need to update example from bitcoinlib.wallets import HDWallet from bitcoinlib.mnemonic import Mnemonic from bitcoinlib.keys import HDKey try: input = raw_input except NameError: pass WALLET_NAME = "Multisig_3of5" wlt = HDWallet(WALLET_NAME) # If you want to sign on an offline PC, export utxo dictionary to offline PC # utxos = {...} # wlt.utxos_update(utxos=utxos) wlt.utxos_update() wlt.info() # Paste your raw transaction here or enter in default input raw_tx = '' if not raw_tx: raw_tx = input("Paste raw transaction hex: ") passphrase = input("Enter passphrase: ") password = input("Enter password []:")
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 input("Wallet %s does not exist, create new wallet [yN]? " % args.wallet_name).lower() == 'y': 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 or args.passphrase_strength is not None: print( "WARNING: Using passphrase options 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.receive: addr = wlt.get_key().address print("Receive address is %s" % addr) if QRCODES_AVAILABLE: qrcode = pyqrcode.create(addr) print(qrcode.terminal())
for key in key_lists['Online PC']: if key.key_type == 'single': print(" HDKey('%s', key_type='single', witness_type='%s')" % (key.wif_private(), WITNESS_TYPE)) else: print(" '%s'," % key.wif_private()) print("]") print( "wlt = HDWallet.create('%s', key_list, sigs_required=2, witness_type='%s', network='%s')" % (WALLET_NAME, WITNESS_TYPE, NETWORK)) print("wlt.get_key()") print("wlt.info()") else: from bitcoinlib.config.config import BITCOINLIB_VERSION, BCL_DATABASE_DIR online_wallet = HDWallet(WALLET_NAME, db_uri=BCL_DATABASE_DIR + '/bitcoinlib.tmp.sqlite') online_wallet.utxos_update() online_wallet.info() utxos = online_wallet.utxos() if utxos: print("\nNew unspent outputs found!") print( "Now a new transaction will be created to sweep this wallet and send bitcoins to a testnet faucet" ) send_to_address = 'n2eMqTT929pb1RDNuqEnxdaLau1rxy3efi' t = online_wallet.sweep(send_to_address, min_confirms=0) print(t.raw_hex()) print( "Now copy-and-paste the raw transaction hex to your Offline PC and sign it there with a second signature:" )
def get(self, request, wallet_id): """ Retrieve, update or delete a code snippet. """ try: print('enter txn') txn = Txn.txn_list_wallet(db_uri=db_uri, wallet_id=wallet_id) print('Started ' + self.__class__.__name__ + ' get method') network = request.GET.get('network') print('Started ', self.__class__.__name__, ' wallet_id=%s, network=%s ' % (str(wallet_id), network)) address_list = [] if wallet_id and network: wallet = HDWallet(wallet_id, db_uri=db_uri) wallet_address_list = wallet.addresslist() if network == 'bitcoin': address_list = '|'.join( [str(a) for a in wallet_address_list]) block_service_url = get_env_var( 'blockchain.service.url' ) + '/multiaddr?active=' + address_list print('service_url for get balance', block_service_url) resp = requests.get(block_service_url) print('\nreceived for blcokchain multiaddr resp', resp.status_code) address_list = json.loads(resp.text) address_list = self.getBitcoinTxn(address_list) return JsonResponse(address_list, safe=False) elif network == 'litecoin': address_list = ';'.join( [str(a) for a in wallet_address_list]) blockcypher_service_url = get_env_var( 'blockcypher.service.url' ) + '/v1/ltc/main/addrs/' + address_list + '/full?token=' + get_env_var( 'blockcypher.service.token') print('service_url for unspent balance', blockcypher_service_url) resp = requests.get(blockcypher_service_url) print('\nreceived for blockcypher balance resp', resp.status_code) address_list = json.loads(resp.text) address_list = self.getLitecoinTxn(address_list) print('address_list----------', address_list) return JsonResponse(address_list, safe=False) else: raise ValidationError( get_env_var( 'exception.validation.txn.no_wallet_or_no_network')) except WalletError as e: track = traceback.format_exc() print(track) raise e except ServiceException as e: track = traceback.format_exc() print(track) raise ServiceException(e) except Exception as e: track = traceback.format_exc() print(track) raise ServiceException( get_env_var('exception.business.txn.serviceexception')) return JsonResponse(txn, safe=False) except Txn.DoesNotExist: return HttpResponse(status=404)
print("\n=== Test import Litecoin key in Bitcoin wallet (should give error) ===") w = HDWallet.create( name='Wallet Error', db_uri=test_database) try: w.import_key(key='T43gB4F6k1Ly3YWbMuddq13xLb56hevUDP3RthKArr7FPHjQiXpp', network='litecoin') except WalletError as e: print("Import litecoin key in bitcoin wallet gives an EXPECTED error: %s" % e) print("\n=== Normalize BIP32 key path ===") key_path = "m/44h/1'/0p/2000/1" print("Raw: %s, Normalized: %s" % (key_path, normalize_path(key_path))) print("\n=== Send test bitcoins to an address ===") wallet_import = HDWallet('TestNetWallet', db_uri=test_database) for _ in range(10): wallet_import.new_key() wallet_import.utxos_update(99) wallet_import.info() utxos = wallet_import.utxos(99) try: res = wallet_import.send_to('mxdLD8SAGS9fe2EeCXALDHcdTTbppMHp8N', 1000, 99) print("Send transaction result:") if res.hash: print("Successfully send, tx id:", res.hash) else: print("TX not send, result:", res.errors) except WalletError as e: print("TX not send, error: %s" % e.msg) except Exception as e:
print("\n---> Please create a wallet on your Other PC like this:") print("from bitcoinlib.wallets import HDWallet") print("from bitcoinlib.keys import HDKey") print("") print("key_list = [") print(" '%s'," % key_list[0].account_multisig_key().wif_public()) print(" '%s'," % key_list[1].wif()) print(" HDKey('%s', key_type='single')" % key_list[2].wif_public()) print("]") print( "wlt = HDWallet.create_multisig('%s', key_list, 2, sort_keys=True, network='%s')" % (WALLET_NAME, NETWORK)) print("wlt.new_key()") print("wlt.info()") else: thispc_wallet = HDWallet(WALLET_NAME) thispc_wallet.utxos_update() thispc_wallet.info() utxos = thispc_wallet.utxos() if utxos: print("\nNew unspent outputs found!") print( "Now a new transaction will be created to sweep this wallet and send bitcoins to a testnet faucet" ) send_to_address = 'n2eMqTT929pb1RDNuqEnxdaLau1rxy3efi' res = thispc_wallet.sweep(send_to_address, min_confirms=0) assert 'transaction' in res print( "Now copy-and-paste the raw transaction hex to your Other PC and sign it there with a second signature:" )
from bitcoinlib.wallets import HDWallet, wallet_delete import bitcoinlib.transactions import bitcoinlib.encoding import hashlib from bitcoinlib.mnemonic import Mnemonic import codecs import base58check passphrase = "space cricket train sell disagree assume onion soap journey style camera false" wallet_name = "trial" #w = HDWallet.create(wallet_name, keys=passphrase, network='testnet', db_uri='./trial.db') w = HDWallet(wallet_name, db_uri='./trial.db') #w.utxos_update() key = w.get_key() address = key.address print("address:", address) # TODO: hash160 not working # print("hash", bitcoinlib.encoding.hash160(address)) print(w.balance()) tx_hash = w.utxos()[-1]['tx_hash'] t = w.transaction(tx_hash) script = t.outputs[0].lock_script print(t.outputs[0].script_type) # print(codecs.decode(t.outputs[0].lock_script, 'base58')) print(script) print(bitcoinlib.transactions.script_to_string(script))