Что такое блокчейн?

Что такое блокчейн?


Реализация простого блокчейна на Python
Изучаем основы технологии блокчейн через практику


Что такое блокчейн?

Блокчейн — это цепочка блоков, хранящих данные в защищенной и неизменяемой форме. Каждый блок содержит:

  • Данные (транзакции, контракты и т.д.).
  • Хеш — уникальная цифровая подпись блока.
  • Хеш предыдущего блока, что обеспечивает связность цепочки.

Эта технология лежит в основе Bitcoin и Ethereum, но её можно адаптировать для любых задач, требующих прозрачности и безопасности.


Создаем блок на Python

Реализуем класс Block:

import hashlib
import time

class Block:
    def __init__(self, index, timestamp, data, previous_hash):
        self.index = index
        self.timestamp = timestamp
        self.data = data
        self.previous_hash = previous_hash
        self.hash = self.calculate_hash()

    def calculate_hash(self):
        block_data = f"{self.index}{self.timestamp}{self.data}{self.previous_hash}".encode()
        return hashlib.sha256(block_data).hexdigest()

Каждый блок хранит индекс, метку времени, данные, хеш предыдущего блока и собственный хеш, вычисленный через SHA-256.


Строим цепочку блоков

Класс Blockchain управляет созданием и валидацией блоков:

class Blockchain:
    def __init__(self):
        self.chain = [self.create_genesis_block()]

    def create_genesis_block(self):
        # Генезис-блок — первый блок в цепочке
        return Block(0, time.time(), "Genesis Block", "0")

    def get_latest_block(self):
        return self.chain[-1]

    def add_block(self, new_block):
        new_block.previous_hash = self.get_latest_block().hash
        new_block.hash = new_block.calculate_hash()
        self.chain.append(new_block)

    def is_chain_valid(self):
        for i in range(1, len(self.chain)):
            current = self.chain[i]
            previous = self.chain[i-1]
            if current.hash != current.calculate_hash():
                return False
            if current.previous_hash != previous.hash:
                return False
        return True

Пример использования

Создадим блокчейн и добавим блоки:

# Инициализация блокчейна
my_blockchain = Blockchain()

# Добавление блоков
my_blockchain.add_block(Block(1, time.time(), "Transaction 1", ""))
my_blockchain.add_block(Block(2, time.time(), "Transaction 2", ""))

# Вывод информации о блоках
for block in my_blockchain.chain:
    print(f"Block {block.index}")
    print(f"Hash: {block.hash}")
    print(f"Previous Hash: {block.previous_hash}\n")

# Проверка валидности
print(f"Chain valid: {my_blockchain.is_chain_valid()}")

Упрощения и ограничения

Данный пример учебный. В реальных блокчейнах используются:

  1. Proof of Work/Proof of Stake для консенсуса.
  2. P2P-сеть для распределенного хранения.
  3. Мерклевы деревья для оптимизации хеширования.

Возможные улучшения

  1. Реализовать майнинг с проверкой сложности.
  2. Добавить обработку транзакций и кошельки.
  3. Создать API для взаимодействия с сетью.

Заключение
С помощью Python можно легко понять принципы работы блокчейна. Этот пример — отправная точка для изучения более сложных концепций, таких как смарт-контракты или децентрализованные приложения.