import hashlib
import time
def demo_miner(block_number, transactions, previous_hash, difficulty):
"""
Упрощенная модель процесса майнинга.
difficulty: количество нулей, с которых должен начинаться хеш.
"""
prefix = '0' * difficulty
nonce = 0
print(f'Майнинг блока {block_number} начат...')
start_time = time.time()
while True:
# Формируем строку из данных блока и переменной nonce
text = str(block_number) + transactions + previous_hash + str(nonce)
# Вычисляем SHA-256 хеш
hash_result = hashlib.sha256(text.encode('utf-8')).hexdigest()
# Проверяем, соответствует ли хеш заданной сложности
if hash_result.startswith(prefix):
total_time = time.time() - start_time
print(f'Блок найден! Nonce: {nonce}')
print(f'Хеш: {hash_result}')
print(f'Время: {total_time:.2f} секунд')
return hash_result
nonce += 1
# Пример данных
example_transactions = "Alice -> Bob: 0.5 BTC, Charlie -> Dave: 0.1 BTC"
prev_block_hash = "00000000000000000007d0d981880117639d338c466b07449553f192b49b2521"
difficulty_level = 5 # Попробуйте увеличить это число, чтобы замедлить процесс
demo_miner(1, example_transactions, prev_block_hash, difficulty_level)
aW1wb3J0IGhhc2hsaWIKaW1wb3J0IHRpbWUKCmRlZiBkZW1vX21pbmVyKGJsb2NrX251bWJlciwgdHJhbnNhY3Rpb25zLCBwcmV2aW91c19oYXNoLCBkaWZmaWN1bHR5KToKICAgICIiIgogICAg0KPQv9GA0L7RidC10L3QvdCw0Y8g0LzQvtC00LXQu9GMINC/0YDQvtGG0LXRgdGB0LAg0LzQsNC50L3QuNC90LPQsC4KICAgIGRpZmZpY3VsdHk6INC60L7Qu9C40YfQtdGB0YLQstC+INC90YPQu9C10LksINGBINC60L7RgtC+0YDRi9GFINC00L7Qu9C20LXQvSDQvdCw0YfQuNC90LDRgtGM0YHRjyDRhdC10YguCiAgICAiIiIKICAgIHByZWZpeCA9ICcwJyAqIGRpZmZpY3VsdHkKICAgIG5vbmNlID0gMAoKICAgIHByaW50KGYn0JzQsNC50L3QuNC90LMg0LHQu9C+0LrQsCB7YmxvY2tfbnVtYmVyfSDQvdCw0YfQsNGCLi4uJykKICAgIHN0YXJ0X3RpbWUgPSB0aW1lLnRpbWUoKQoKICAgIHdoaWxlIFRydWU6CiAgICAgICAgIyDQpNC+0YDQvNC40YDRg9C10Lwg0YHRgtGA0L7QutGDINC40Lcg0LTQsNC90L3Ri9GFINCx0LvQvtC60LAg0Lgg0L/QtdGA0LXQvNC10L3QvdC+0Lkgbm9uY2UKICAgICAgICB0ZXh0ID0gc3RyKGJsb2NrX251bWJlcikgKyB0cmFuc2FjdGlvbnMgKyBwcmV2aW91c19oYXNoICsgc3RyKG5vbmNlKQoKICAgICAgICAjINCS0YvRh9C40YHQu9GP0LXQvCBTSEEtMjU2INGF0LXRiAogICAgICAgIGhhc2hfcmVzdWx0ID0gaGFzaGxpYi5zaGEyNTYodGV4dC5lbmNvZGUoJ3V0Zi04JykpLmhleGRpZ2VzdCgpCgogICAgICAgICMg0J/RgNC+0LLQtdGA0Y/QtdC8LCDRgdC+0L7RgtCy0LXRgtGB0YLQstGD0LXRgiDQu9C4INGF0LXRiCDQt9Cw0LTQsNC90L3QvtC5INGB0LvQvtC20L3QvtGB0YLQuAogICAgICAgIGlmIGhhc2hfcmVzdWx0LnN0YXJ0c3dpdGgocHJlZml4KToKICAgICAgICAgICAgdG90YWxfdGltZSA9IHRpbWUudGltZSgpIC0gc3RhcnRfdGltZQogICAgICAgICAgICBwcmludChmJ9CR0LvQvtC6INC90LDQudC00LXQvSEgTm9uY2U6IHtub25jZX0nKQogICAgICAgICAgICBwcmludChmJ9Cl0LXRiDoge2hhc2hfcmVzdWx0fScpCiAgICAgICAgICAgIHByaW50KGYn0JLRgNC10LzRjzoge3RvdGFsX3RpbWU6LjJmfSDRgdC10LrRg9C90LQnKQogICAgICAgICAgICByZXR1cm4gaGFzaF9yZXN1bHQKCiAgICAgICAgbm9uY2UgKz0gMQoKIyDQn9GA0LjQvNC10YAg0LTQsNC90L3Ri9GFCmV4YW1wbGVfdHJhbnNhY3Rpb25zID0gIkFsaWNlIC0+IEJvYjogMC41IEJUQywgQ2hhcmxpZSAtPiBEYXZlOiAwLjEgQlRDIgpwcmV2X2Jsb2NrX2hhc2ggPSAiMDAwMDAwMDAwMDAwMDAwMDAwMDdkMGQ5ODE4ODAxMTc2MzlkMzM4YzQ2NmIwNzQ0OTU1M2YxOTJiNDliMjUyMSIKZGlmZmljdWx0eV9sZXZlbCA9IDUgICMg0J/QvtC/0YDQvtCx0YPQudGC0LUg0YPQstC10LvQuNGH0LjRgtGMINGN0YLQviDRh9C40YHQu9C+LCDRh9GC0L7QsdGLINC30LDQvNC10LTQu9C40YLRjCDQv9GA0L7RhtC10YHRgQoKZGVtb19taW5lcigxLCBleGFtcGxlX3RyYW5zYWN0aW9ucywgcHJldl9ibG9ja19oYXNoLCBkaWZmaWN1bHR5X2xldmVsKQ==