Распределённый реестр и узлы сети
В блокчейне нет «главного компьютера» — есть тысячи равноправных узлов, у каждого полная копия истории.
«Чтобы соврать одному, достаточно подкупить одного. Чтобы соврать сети из тысяч узлов, надо подкупить большинство одновременно.»
Мы уже знаем, что блокчейн — это цепочка блоков. Но где она физически лежит? Ответ необычный: везде и нигде конкретно. Реестр (так называют всю историю записей) хранится копиями на множестве компьютеров, и каждый такой компьютер называют узлом (node).
Узлы соединены в peer-to-peer сеть (P2P) — это значит, что они общаются напрямую, без центрального сервера. Когда появляется новая транзакция или новый блок, узел рассылает их соседям, те — своим соседям, и информация расходится по сети как круги по воде.
Какие бывают узлы
- Полные узлы хранят всю историю блокчейна и сами проверяют каждую транзакцию по правилам сети. Они — хранители истины.
- Лёгкие узлы хранят только заголовки блоков и доверяют полным узлам в деталях — удобно для телефонов.
- Майнеры или валидаторы не просто хранят, но и создают новые блоки (об этом будет отдельный раздел).
Как работает под капотом
Когда ты отправляешь транзакцию, она не летит на один сервер. Твой кошелёк передаёт её ближайшему узлу, тот проверяет её и пересылает дальше. Так за секунды о ней узнаёт вся сеть. Если какой-то узел выключат, остальные продолжат работать как ни в чём не бывало — нет единой точки отказа.
Распространение по P2P-сети
[Узел A]
/ \
[Узел B] [Узел C]
| \ / |
[Узел D] [Узел E] [Узел F]
Новая транзакция от A расходится ко всем
соседям -> их соседям -> всей сети.Смоделируем простую «рассылку»: как сообщение расходится по узлам за несколько шагов.
Попробуй сам ▶ Запусти код прямо здесь — он работает в браузере:
# Каждый узел связан с соседями. Посмотрим, за сколько шагов
# сообщение дойдёт до всех от узла 'A'.
links = {
'A': ['B', 'C'],
'B': ['A', 'D'],
'C': ['A', 'E', 'F'],
'D': ['B'], 'E': ['C'], 'F': ['C'],
}
known = {'A'}
frontier = ['A']
step = 0
while frontier:
step += 1
nxt = []
for node in frontier:
for nb in links[node]:
if nb not in known:
known.add(nb)
nxt.append(nb)
if nxt:
print('шаг', step, '-> узнали:', nxt)
frontier = nxt
print('всего узлов в курсе:', len(known))Частые заблуждения
- «Блокчейн лежит в облаке у какой-то компании». Нет, у публичного блокчейна нет владельца-сервера. Копии распределены по независимым узлам.
- «Чем больше узлов, тем быстрее сеть». Скорее наоборот: чем больше узлов, тем надёжнее, но иногда медленнее, ведь всем нужно прийти к согласию.
- «Любой узел может переписать историю». Узел, отклонившийся от правил, просто будет проигнорирован остальными — его версию не примут.
Важно понимать (риски)
Распределённость защищает от отключения и единоличного контроля, но у неё есть цена. Хранить полную копию истории большого блокчейна — это сотни гигабайт, поэтому полных узлов меньше, чем хотелось бы. А ещё децентрализация бывает «на бумаге»: если почти все узлы держит пара крупных дата-центров, сеть лишь притворяется распределённой. При выборе блокчейна стоит смотреть, насколько он реально децентрализован.
Что значит «договориться» для машин
Когда мы говорим, что узлы «договариваются», важно понимать: никаких переговоров в человеческом смысле нет. Каждый узел — это программа, которая следует одним и тем же правилам. Если приходит блок, нарушающий правила (например, в нём потрачены несуществующие монеты), честный узел просто отбрасывает его и не передаёт дальше. Так нечестные данные не распространяются по сети — их отфильтровывает каждый участник независимо.
Иногда два валидных блока появляются почти одновременно в разных частях сети, и цепочка временно «раздваивается» — это называют форком (развилкой). Сеть быстро решает спор по своим правилам (обычно выбирает ту ветку, в которую вложено больше работы или ставок), и более короткая ветка отмирает. Поэтому очень свежие транзакции считают не до конца подтверждёнными: стоит подождать несколько блоков, чтобы убедиться, что твоя транзакция попала в «победившую» ветку и уже не выпадет.
Итоги
- Реестр блокчейна — это копии истории на множестве узлов, а не файл на одном сервере.
- Узлы общаются напрямую в P2P-сети, без центра.
- Полные узлы хранят и проверяют всё; лёгкие доверяют полным.
- Нет единой точки отказа, но реальная децентрализация — вопрос, который надо проверять.