Конвертируйте закрытый ключ биткойна из текста файла

#python #bitcoin #private-key

Вопрос:

Добрый день, друзья, я только начал изучать python, я нашел этот код, который соответствует моим потребностям, но на выходе все синхронизировано в одной строке, помогите мне с этой проблемой».

 import ecdsa
import hashlib
import base58


with open("my_private_key.txt", "r") as f:    #Input file path
  for line in f:

              #Convert hex private key to bytes
     private_key = bytes.fromhex(line)      

              #Derivation of the private key
     signing_key = ecdsa.SigningKey.from_string(private_key, curve=ecdsa.SECP256k1)
     verifying_key = signing_key.get_verifying_key()

     public_key = bytes.fromhex("04")   verifying_key.to_string()

             #Hashes of public key
     sha256_1 = hashlib.sha256(public_key)
     ripemd160 = hashlib.new("ripemd160")
     ripemd160.update(sha256_1.digest())

             #Adding prefix to identify Network
     hashed_public_key = bytes.fromhex("00")   ripemd160.digest()

             #Checksum calculation
     checksum_full = hashlib.sha256(hashlib.sha256(hashed_public_key).digest()).digest()
     checksum = checksum_full[:4]

             #Adding checksum to hashpubkey         
     bin_addr = hashed_public_key   checksum

             #Encoding to address
     address = str(base58.b58encode(bin_addr))
     final_address = address[2:-1]

     print(final_address)

     with open("my_addresses.txt", "a") as i:
        i.write(final_address)
 

»

Комментарии:

1. Здравствуйте и добро пожаловать @kamburishka, для того, чтобы люди правильно ответили на ваш вопрос, я думаю, было бы полезно, если бы вы могли уточнить. Когда вы говорите «все синхронизировано в одной строке», вы хотите сказать, что трудно читать/интерпретировать выходные данные, потому что они представлены в одном большом фрагменте?

Ответ №1:

print записывает конечную новую строку после записи всех ее аргументов. write нет; вы должны предоставить его сами.

 with open("my_addresses.txt", "a") as i:
    i.write(final_address   "n")
 

Или вы можете использовать print :

 with open("my_addresses.txt", "a") as i:
    print(final_address, file=i)
 

Игнорируя многие из его ключевых аргументов, print определяется что-то вроде

 def print(*args, end='n', sep=' ', file=sys.stdout):
    file.write(sep.join(args))
    file.write(end)
    
 

Кроме того, обратите внимание, что вам не нужно повторно открывать выходной файл. Вы можете открыть его одновременно с вводом и оставить открытым на время цикла.

 with open("my_private_key.txt", "r") as f, 
     open("my_addresses.txt", "a") as i:
    for line in f:
        ...
        print(final_address, file=i)
 

Комментарии:

1. Все супер, большое вам спасибо за вашу помощь

2. Дорогой друг @chepner, вы не можете сказать мне, как добавить многопоточность в этот скрипт, он работает очень медленно