Проблема консенсуса: кто решает, что верно
Главный вопрос децентрализованной сети: как тысячам незнакомцев без начальника договориться об одной общей истории?
«Согласие без главного — это не магия, а набор честных правил, которые невыгодно нарушать.»
Мы научились связывать блоки и хешировать транзакции. Но остался главный вопрос: кто и как добавляет новые блоки? В обычной системе это решает сервер-начальник. В блокчейне начальника нет — и тут появляется проблема консенсуса: как множеству равноправных узлов прийти к единой версии истории.
Проблема двойной траты
Представь, что у Ани есть одна монета. Она почти одновременно отправляет её и Боре, и Васе. Какая транзакция настоящая? В мире без центра это серьёзная угроза — двойная трата (double spending). Если сеть не договорится, один и тот же актив можно потратить дважды, и доверие рухнет.
Консенсус-механизм решает именно это: он определяет правила, по которым сеть выбирает один следующий блок и одну версию истории, отбрасывая конфликтующие.
Как работает под капотом
Конфликт без консенсуса
Аня (1 монета)
|--> tx1: Аня -> Боря (1 монета)
|--> tx2: Аня -> Вася (1 монета)
Сеть должна выбрать ОДНУ как настоящую.
Консенсус решает, какая попадёт в блок,
а вторая будет отвергнута как недействительная.Смоделируем простое правило: сеть принимает первую увиденную транзакцию с монеты, а вторую отвергает как двойную трату.
Попробуй сам ▶ Запусти код прямо здесь — он работает в браузере:
# Очень упрощённая защита от двойной траты.
balances = {'Аня': 1, 'Боря': 0, 'Вася': 0}
spent = set() # какие монеты уже потрачены (по отправителю)
def apply(tx):
sender, receiver, amount = tx
if balances.get(sender, 0) < amount:
return 'отклонено: недостаточно средств'
if sender in spent:
return 'отклонено: двойная трата!'
balances[sender] -= amount
balances[receiver] += amount
spent.add(sender)
return 'принято'
print('tx1', apply(('Аня', 'Боря', 1)))
print('tx2', apply(('Аня', 'Вася', 1))) # та же монета
print('Балансы:', balances)Каким должен быть хороший консенсус
- Устойчивость к обману — нечестно вести себя должно быть дорого или бессмысленно.
- Согласованность — все честные узлы в итоге приходят к одной истории.
- Живучесть — сеть продолжает добавлять блоки, даже если часть узлов отключилась.
Частые заблуждения
- «Консенсус — это голосование людей». Нет, это автоматические правила, которые исполняют программы-узлы.
- «Двойную трату невозможно даже попытаться». Попытаться можно, но сеть отвергнет вторую транзакцию.
- «Все блокчейны используют один и тот же консенсус». Их много: proof-of-work, proof-of-stake и другие — у каждого свои компромиссы.
Важно понимать (риски)
Любой консенсус — это компромисс между безопасностью, скоростью и децентрализацией (это называют «трилеммой»). Улучшая одно, обычно жертвуешь другим. Когда тебе обещают блокчейн «быстрый, дешёвый, децентрализованный и абсолютно безопасный одновременно», стоит насторожиться: чудес не бывает, где-то спрятан компромисс. В следующих уроках мы разберём два главных подхода и увидим их цену.
Византийские генералы: классическая аналогия
У проблемы консенсуса есть знаменитая иллюстрация — «задача византийских генералов». Несколько армий окружили город, и их генералы должны договориться: атаковать всем вместе или всем отступить. Если ударит только часть — они проиграют. Беда в том, что гонцы между лагерями могут опаздывать, теряться, а некоторые генералы и вовсе могут быть предателями, рассылающими противоречивые приказы. Как честным генералам прийти к единому решению в таких условиях?
Блокчейн решает ровно эту задачу для компьютеров: как сети честных узлов согласовать единую историю, если связь ненадёжна, а часть участников может действовать злонамеренно. Решение, устойчивое к таким «предателям», называют византийской отказоустойчивостью. Proof-of-Work и Proof-of-Stake — это два разных способа достичь её, делая нечестное поведение либо слишком дорогим, либо прямо убыточным. Понимая эту аналогию, легче увидеть, что блокчейн — не про деньги как таковые, а про согласие в недоверчивой среде.
Итоги
- Консенсус решает, как узлы без начальника договариваются об общей истории.
- Главная угроза — двойная трата одного актива.
- Хороший консенсус устойчив к обману, согласован и живуч.
- Любой консенсус — компромисс между безопасностью, скоростью и децентрализацией.