fork download
  1. import hashlib
  2. import time
  3.  
  4. def demo_miner(block_number, transactions, previous_hash, difficulty):
  5. """
  6. Упрощенная модель процесса майнинга.
  7. difficulty: количество нулей, с которых должен начинаться хеш.
  8. """
  9. prefix = '0' * difficulty
  10. nonce = 0
  11.  
  12. print(f'Майнинг блока {block_number} начат...')
  13. start_time = time.time()
  14.  
  15. while True:
  16. # Формируем строку из данных блока и переменной nonce
  17. text = str(block_number) + transactions + previous_hash + str(nonce)
  18.  
  19. # Вычисляем SHA-256 хеш
  20. hash_result = hashlib.sha256(text.encode('utf-8')).hexdigest()
  21.  
  22. # Проверяем, соответствует ли хеш заданной сложности
  23. if hash_result.startswith(prefix):
  24. total_time = time.time() - start_time
  25. print(f'Блок найден! Nonce: {nonce}')
  26. print(f'Хеш: {hash_result}')
  27. print(f'Время: {total_time:.2f} секунд')
  28. return hash_result
  29.  
  30. nonce += 1
  31.  
  32. # Пример данных
  33. example_transactions = "Alice -> Bob: 0.5 BTC, Charlie -> Dave: 0.1 BTC"
  34. prev_block_hash = "00000000000000000007d0d981880117639d338c466b07449553f192b49b2521"
  35. difficulty_level = 5 # Попробуйте увеличить это число, чтобы замедлить процесс
  36.  
  37. demo_miner(1, example_transactions, prev_block_hash, difficulty_level)
Success #stdin #stdout 0.44s 17348KB
stdin
Standard input is empty
stdout
Майнинг блока 1 начат...
Блок найден! Nonce: 119183
Хеш: 000003a091893ced6359a525738e0df31468a48b5d829c67f5df69e3e0541195
Время: 0.35 секунд