How to Convert Bitcoin-PUBKEY HEX Public Keys to Base58 Bitcoin Address and Check Balance for BTC Coins

In this article, we will learn how to check the balance of Bitcoin coins in a large amount of data using Python script bitcoin-checker.py

We will also learn how to convert the public key of Bitcoin PUBKEY (HEX)
to Bitcoin Address (Base58)
does all this great work Python script pubtoaddr.py
As a result, we will check the balance of Bitcoin with particular ease by scanning the Blockchain in the Google Colab terminal. [TerminalGoogleColab]
I previously recorded a video tutorial: “TERMINAL in Google Colab we create all the conveniences for working in GITHUB”
Let’s go to the repository “CryptoDeepTools” and we will analyze the work in detail bash script: getbalance.sh



grep 'PUBKEY = ' signatures.json > pubkeyall.json
Utility grep
collects all public keys into one common file: pubkeyall.json
sort -u pubkeyall.json > pubkey.json
Utility sort
sorts and removes duplicates selects unique public keys and saves the result to a file: pubkey.json
rm pubkeyall.json
Utility rm
removes pubkeyall.json
sed -i 's/PUBKEY = //g' pubkey.json
Utility sed
erases the prefix PUBKEY =
python3 pubtoaddr.py
We launch Python script pubtoaddr.py convert from file pubkey.json
where our public bitcoin keys are stored PUBKEY (HEX)
to file addresses.json
result will be saved as Bitcoin Addresses (Base58)
import hashlib
import base58
def hash160(hex_str):
sha = hashlib.sha256()
rip = hashlib.new('ripemd160')
sha.update(hex_str)
rip.update(sha.digest())
return rip.hexdigest() # .hexdigest() is hex ASCII
pub_keys = open('pubkey.json', 'r', encoding='utf-8')
new_file = open('addresses.json', 'a', encoding='utf-8')
compress_pubkey = False
for pub_key in pub_keys:
pub_key = pub_key.replace('\n', '')
if compress_pubkey:
if (ord(bytearray.fromhex(pub_key[-2:])) % 2 == 0):
pubkey_compressed = '02'
else:
pubkey_compressed = '03'
pubkey_compressed += pub_key[2:66]
hex_str = bytearray.fromhex(pubkey_compressed)
else:
hex_str = bytearray.fromhex(pub_key)
key_hash="00" + hash160(hex_str)
sha = hashlib.sha256()
sha.update(bytearray.fromhex(key_hash))
checksum = sha.digest()
sha = hashlib.sha256()
sha.update(checksum)
checksum = sha.hexdigest()[0:8]
# new_file.write("" + (base58.b58encode(bytes(bytearray.fromhex(key_hash + checksum)))).decode('utf-8'))
new_file.write((base58.b58encode(bytes(bytearray.fromhex(key_hash + checksum)))).decode('utf-8') + "\n")
pub_keys.close()
new_file.close()
We have received the file
addresses.json
now check the balance of Bitcoin coins using for this Python script bitcoin-checker.py
We launch Python script: python2 bitcoin-checker.py
import sys
import re
from time import sleep
try: # if is python3
from urllib.request import urlopen
except: # if is python2
from urllib2 import urlopen
def check_balance(address):
#Modify the value of the variable below to False if you do not want Bell Sound when the Software finds balance.
SONG_BELL = True
#Add time different of 0 if you need more security on the checks
WARN_WAIT_TIME = 0
blockchain_tags_json = [
'total_received',
'final_balance',
]
SATOSHIS_PER_BTC = 1e+8
check_address = address
parse_address_structure = re.match(r' *([a-zA-Z1-9]{1,34})', check_address)
if ( parse_address_structure is not None ):
check_address = parse_address_structure.group(1)
else:
print( "\nThis Bitcoin Address is invalid" + check_address )
exit(1)
#Read info from Blockchain about the Address
reading_state=1
while (reading_state):
try:
htmlfile = urlopen("https://blockchain.info/address/%s?format=json" % check_address, timeout = 10)
htmltext = htmlfile.read().decode('utf-8')
reading_state = 0
except:
reading_state+=1
print( "Checking... " + str(reading_state) )
sleep(60*reading_state)
print( "\nBitcoin Address = " + check_address )
blockchain_info_array = []
tag = ''
try:
for tag in blockchain_tags_json:
blockchain_info_array.append (
float( re.search( r'%s":(\d+),' % tag, htmltext ).group(1) ) )
except:
print( "Error '%s'." % tag );
exit(1)
for i, btc_tokens in enumerate(blockchain_info_array):
sys.stdout.write ("%s \t= " % blockchain_tags_json[i])
if btc_tokens > 0.0:
print( "%.8f Bitcoin" % (btc_tokens/SATOSHIS_PER_BTC) );
else:
print( "0 Bitcoin" );
if (SONG_BELL and blockchain_tags_json[i] == 'final_balance' and btc_tokens > 0.0):
#If you have a balance greater than 0 you will hear the bell
sys.stdout.write ('\a\a\a')
sys.stdout.flush()
arq1.write("Bitcoin Address: %s" % check_address)
arq1.write("\t Balance: %.8f Bitcoin" % (btc_tokens/SATOSHIS_PER_BTC))
arq1.write("\n")
arq1.close()
if (WARN_WAIT_TIME > 0):
sleep(WARN_WAIT_TIME)
#Add the filename of your list of Bitcoin Addresses for check all.
with open("addresses.json") as file:
for line in file:
arq1 = open('balance.json', 'a')
address = str.strip(line)
print ("__________________________________________________\n")
check_balance(address)
print "__________________________________________________\n"
arq1.close()
As a result, the result will be saved in a file:
balance.json

Now we have learned:
Source: https://github.com/demining/CryptoDeepTools/tree/main/03CheckBitcoinAddressBalance
Telegram: https://t.me/cryptodeeptech
Video footage: https://youtu.be/Hsk6QIzb7oY