← Назад к вопросам

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

1.0 Junior🔥 71 комментариев
#Тестирование

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Блокчейн

Блокчейн — это распределённая, неизменяемая база данных, состоящая из связанных между собой блоков, где каждый блок содержит данные и криптографический хеш предыдущего блока. Это обеспечивает целостность и прозрачность данных без необходимости центрального органа управления.

Основная концепция

Вместо централизованного хранилища данных (традиционная БД), где администратор может всё изменить:

Традиционная БД:
[Администратор] → [Централизованная БД]
                   (может изменять данные)

Блокчейн:
[Узел 1] \
[Узел 2]  →  [Распределённая сеть]
[Узел 3] /   (полная копия у каждого)
         ↑
      (консенсус для изменений)

Структура блокчейна

Каждый блок содержит:

class Block:
    def __init__(self, index: int, data: str, previous_hash: str):
        self.index = index
        self.data = data
        self.timestamp = datetime.now()
        self.previous_hash = previous_hash
        self.nonce = 0
        self.hash = self.calculate_hash()
    
    def calculate_hash(self) -> str:
        block_string = json.dumps({
            "index": self.index,
            "data": self.data,
            "timestamp": str(self.timestamp),
            "previous_hash": self.previous_hash,
            "nonce": self.nonce
        }, sort_keys=True)
        return hashlib.sha256(block_string.encode()).hexdigest()

class Blockchain:
    def __init__(self):
        self.chain = []
        self.create_genesis_block()
    
    def create_genesis_block(self):
        genesis_block = Block(0, "Genesis Block", "0")
        self.chain.append(genesis_block)
    
    def add_block(self, data: str):
        previous_block = self.chain[-1]
        new_block = Block(len(self.chain), data, previous_block.hash)
        self.chain.append(new_block)
    
    def is_valid(self) -> bool:
        for i in range(1, len(self.chain)):
            if self.chain[i].previous_hash != self.chain[i-1].hash:
                return False
        return True

Ключевые свойства

1. Неизменяемость (Immutability)

Изменение одного блока нарушит весь цепь:

blockchain = Blockchain()
blockchain.add_block("Transaction 1")
blockchain.add_block("Transaction 2")
blockchain.add_block("Transaction 3")

print(blockchain.is_valid())  # True

# Попытка подделать данные
blockchain.chain[1].data = "Fake Transaction"
print(blockchain.is_valid())  # False (хеши не совпадают)

2. Прозрачность

Все операции видны всем участникам сети

3. Распределённость

Нет центрального сервера — данные синхронизированы на всех узлах

4. Консенсус

Для добавления блока нужно согласие большинства узлов

Алгоритмы консенсуса

Proof of Work (PoW)

Узлы должны решить сложную математическую задачу (майнинг):

def mine_block(block: Block, difficulty: int):
    while block.hash[:difficulty] != "0" * difficulty:
        block.nonce += 1
        block.hash = block.calculate_hash()
    return block

# Сложность = 4 нулей в начале хеша
block = Block(1, "Data", "previous_hash")
mined_block = mine_block(block, 4)  # Может занять время
print(mined_block.hash)  # 0000abc123...

Proof of Stake (PoS)

Участник выбирается на основе количества его токенов:

class ValidatorPool:
    def __init__(self):
        self.validators = {}
    
    def select_validator(self) -> str:
        # Вероятность быть выбранным пропорциональна количеству токенов
        total_stake = sum(self.validators.values())
        import random
        chosen = random.choices(
            list(self.validators.keys()),
            weights=list(self.validators.values()),
            k=1
        )[0]
        return chosen

Применение блокчейна

1. Криптовалюты (Bitcoin, Ethereum)

Чистая история всех транзакций без центрального банка:

class Transaction:
    def __init__(self, sender: str, recipient: str, amount: float):
        self.sender = sender
        self.recipient = recipient
        self.amount = amount
        self.timestamp = datetime.now()

class CryptoBlock(Block):
    def __init__(self, index: int, transactions: list, previous_hash: str):
        self.index = index
        self.transactions = transactions
        self.previous_hash = previous_hash
        self.timestamp = datetime.now()

2. Smart Contracts (Умные контракты)

Программы, которые автоматически выполняются на блокчейне:

class SmartContract:
    def __init__(self, contract_code: str):
        self.code = contract_code
        self.state = {}
    
    def execute(self, function_name: str, *args):
        # Выполнить функцию контракта
        pass

3. Цепь поставок (Supply Chain)

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

class SupplyChainBlock(Block):
    def __init__(self, product_id: str, location: str, timestamp: str):
        self.product_id = product_id
        self.location = location
        self.timestamp = timestamp
        # История перемещения товара

4. Цифровые удостоверения

Универсальные сертификаты, невозможные подделать

Преимущества

  1. Безопасность — криптография защищает от подделки
  2. Прозрачность — все видят все операции
  3. Неизменяемость — нельзя переписать историю
  4. Децентрализация — нет единой точки отказа
  5. Автоматизация — smart contracts выполняются сами
  6. Доверие — не нужен третий орган

Недостатки

  1. Медленность — медленнее централизованных БД (Bitcoin: 7 транзакций в сек)
  2. Энергопотребление — PoW требует много энергии
  3. Масштабируемость — растущий размер цепи требует больше памяти
  4. Необратимость — ошибку нельзя отменить
  5. Регуляция — правовой статус не ясен

Блокчейн vs Традиционная БД

Блокчейн:
+ Распределённость
+ Прозрачность
+ Неизменяемость
- Медленнее
- Больше памяти

Традиционная БД:
+ Быстрее
+ Оптимизирована для объёма
- Централизована
- Зависит от администратора

Практический пример на Python

from datetime import datetime
import hashlib
import json

class SimpleBlockchain:
    def __init__(self):
        self.chain = []
        self.pending_transactions = []
        self.create_block(previous_hash="0")
    
    def create_block(self, previous_hash):
        block = {
            "index": len(self.chain),
            "timestamp": str(datetime.now()),
            "transactions": self.pending_transactions,
            "previous_hash": previous_hash,
        }
        block["hash"] = self.calculate_hash(block)
        self.chain.append(block)
        self.pending_transactions = []
        return block
    
    @staticmethod
    def calculate_hash(block):
        block_string = json.dumps(block, sort_keys=True)
        return hashlib.sha256(block_string.encode()).hexdigest()
    
    def add_transaction(self, sender, recipient, amount):
        self.pending_transactions.append({
            "sender": sender,
            "recipient": recipient,
            "amount": amount
        })
    
    def mine_block(self):
        previous_hash = self.chain[-1]["hash"]
        self.create_block(previous_hash)

bc = SimpleBlockchain()
bc.add_transaction("Alice", "Bob", 50)
bc.add_transaction("Bob", "Charlie", 25)
bc.mine_block()
print(bc.chain)

Блокчейн — это революционная технология, которая изменила подход к безопасности, прозрачности и доверию в распределённых системах.

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