Результат Print () не выводится, не удается найти ошибку

#python #python-3.x #random #hashlib

#python #python-3.x #Случайный #hashlib

Вопрос:

Этот скрипт генерирует хэш, но где-то он что-то неправильно записал в функцию.

 from bitcoin import *
import os
import hashlib
import base58
 

while True:
    priv =  random_key()
    pubkey = privtopub(priv)
    compress_pubkey = False
    
 
    if (compress_pubkey):
        if (ord(pubkey[-2:].decode('hex')) % 2 == 0):
            pubkey_compressed = '02'
        else:
            pubkey_compressed = '03'
        pubkey_compressed  = pubkey[2:66]
        hex_str = bytearray.fromhex(pubkey_compressed)
    else:
        hex_str = bytearray.fromhex(pubkey)
 
key_hash = hash160(hex_str)

def hash160(hex_str):
    sha = hashlib.sha256()
    rip = hashlib.new('ripemd160')
    sha.update(hex_str)
    rip.update( sha.digest() )
    print ( "key_hash = t"   rip.hexdigest() )
    return rip.hexdigest()  # .hexdigest() is hex ASCII
  

Я проверил работу скрипта. Сделал print (pubkey) . Открытые ключи отображаются в результате, но мне не нужно получать key_hash. К сожалению, когда я делаю print ("key_hash = t" rip.hexdigest ())

Результат не выполняется! Я не разбираюсь в программировании. Помогите исправить код!

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

1. Ну, вы вызываете hash160 , прежде чем определить его

2.Обратите внимание, что вы вызываете hash160() до того, как вы фактически определили эту функцию. Единственный способ, которым этот код мог бы фактически выполняться без ошибок, — это если бы один из ваших импортируемых файлов (должен был бы быть bitcoin ) был введен в свою собственную функцию с таким именем; эта версия hash160() , очевидно, не содержит print инструкции.

3. @Carcigenicate Что нужно сделать, чтобы отобразить результат?

4. @jasonharper Как и что мне нужно изменить в hash160 ()?

Ответ №1:

После перестановки кода:

 from bitcoin import *
import os
import hashlib
import base58

def hash160(hex_str):
    sha = hashlib.sha256()
    rip = hashlib.new('ripemd160')
    sha.update(hex_str)
    rip.update(sha.digest())
    print("key_hash = t"   rip.hexdigest())
    return rip.hexdigest()  # .hexdigest() is hex ASCII

while True:
    priv = random_key()
    pubkey = privtopub(priv)
    compress_pubkey = False

    if (compress_pubkey):
        if (ord(pubkey[-2:].decode('hex')) % 2 == 0):
            pubkey_compressed = '02'
        else:
            pubkey_compressed = '03'
        pubkey_compressed  = pubkey[2:66]
        hex_str = bytearray.fromhex(pubkey_compressed)
    else:
        hex_str = bytearray.fromhex(pubkey)

    key_hash = hash160(hex_str)
  

Вывод:

 key_hash =  b0ac6f690633331af487f594dd3c42c6c67ce085
key_hash =  de735b3046545f63c8cb2f7d44b7f24a8b769ad7
key_hash =  49b0ae2b541832797680b977ca9e374d1a621787
key_hash =  ea3e1d9762331e791412e96b2a67f418cfd6ca2c
key_hash =  e5ff3affd4ba7eb2bb343548f587bde9dbdace6b
key_hash =  b1a952405516abe494e7e32610a3eaf85d7914f2
key_hash =  a0050e1f18b2d0738c458e237a447bd8f2810fec
key_hash =  23eeca93355ba511bdf28c475b5e62d2da64546b
key_hash =  cc5904bae39ee51b75097c95ad0307a21ecef1bc
... And So On
  

Обратите внимание, что существует бесконечный цикл ( while True ), рассмотрите возможность замены на определенное количество итераций.