Раздел 30 · Web3 на Rust

Децентрализация: что это и зачем

middle~40 мин

без входаВойди, чтобы отмечать прогресс, вести заметки и решать задачи в редакторе. войти

Децентрализация: что это и зачем

Криптография из первых уроков раздела дала нам кирпичи: хеш связывает, подпись авторизует, дерево Меркла фиксирует. Но зачем всё это, если есть банк с базой данных? Ответ один: чтобы никто не был банком. Этот урок про децентрализацию как инженерную цель, а не лозунг. Что именно она убирает, какой ценой, как её измерить и из каких слоёв собран стек Web3.

Идея

Слово «децентрализация» затаскано до потери смысла, поэтому начнём с инженерного определения. Децентрализация это отсутствие единой точки, которая может в одиночку изменить правила, отказать участнику или выключить систему. Не «много серверов» (у банка тоже много серверов), а «нет того, кому ты обязан верить».

Возьми три системы и не путай их. У банка один сервер. У Netflix тысячи серверов в десятке дата-центров, но рубильник один: совет директоров скажет «выключить» и выключат. У биткойна тысячи нод по всему миру, и нет того, кто скажет «выключить». Чтобы увидеть разницу между Netflix и биткойном, мало посчитать машины. Нужны разные линейки.

Виталик Бутерин в эссе «The Meaning of Decentralization» предложил мерить тремя осями, и их легко спутать. Держи порознь:

  • Архитектурная. Сколько физических машин держит сеть и скольких можно сломать, чтобы она встала. Netflix архитектурно распределён: упадёт дата-центр, кино идёт дальше.
  • Политическая. Сколько людей или организаций в итоге контролируют эти машины. Тут Netflix централизован: тысяча серверов у одного владельца. Машин много, хозяин один.
  • Логическая. Выглядит ли система как один объект или как рой. Разрежь систему пополам вместе с пользователями: заработают ли обе половины сами по себе? Биткойн логически централизован (все видят одно состояние, как один компьютер), но архитектурно и политически распределён.

Эти оси независимы. Netflix архитектурно распределён, но политически централизован, и потому его выключают. Блокчейн целится в архитектурную и политическую децентрализацию при логической согласованности. Задача противоречивая: добиться, чтобы тысячи независимых машин вели себя как один честный компьютер. Весь раздел про то, как её решают.

Что убирает децентрализация

Главный приём называется дезинтермедиацией, устранением посредника. Перевод денег через банк это доверие банку: что он не заморозит счёт, не подделает баланс, не исчезнет. Блокчейн заменяет это доверие на проверяемые правила: подпись доказывает право тратить, консенсус фиксирует историю, и ни один участник не может переписать её в одиночку.

Дезинтермедиация не единственный путь. Второй метод, который выделяет Mastering Blockchain, это децентрализация через конкуренцию. Посредник остаётся, но перестаёт быть монополистом: роль разыгрывается между многими независимыми провайдерами по открытым правилам, и любой из них заменим. Ты доверяешь не конкретной компании, а рынку, который выкинет нечестного.

Так работает хранение в Filecoin: файл держит не назначенный сервер, а те ноды, что выиграли сделку на открытом рынке и криптографически доказывают, что реально хранят данные. Провайдер один? Ушёл или сжульничал, сделку заберёт другой. Полной децентрализации это не даёт (кому-то конкретному ты всё же платишь), но единая точка контроля исчезает: между полюсами «один доверенный посредник» и «посредника нет вообще» лежит целая шкала, и конкуренция сдвигает систему по ней влево без полного отказа от посредников.

Отсюда вырастает второе, что отличает Web3 от обычных распределённых систем, это состязательная модель. В корпоративной распределённой базе узлы свои, они могут падать, но не врут нарочно. В публичном блокчейне участник по умолчанию враждебен: он попробует потратить монету дважды, переписать историю, зацензурировать чужую транзакцию, если это выгодно. Система обязана оставаться корректной не вопреки доброй воле, а при её отсутствии. Это меняет всё: консенсус из следующих уроков считается не для отказов, а для предательства.

Что именно даёт устранение посредника:

  • Устойчивость к цензуре. Нет рубильника, которым твою транзакцию отклонят.
  • Отсутствие единой точки отказа. Падение любого узла не роняет сеть.
  • Неизменяемость истории. Переписать прошлое стоит дороже, чем оно того стоит (как именно, разберём в консенсусе).
  • Самостоятельное владение. Ключ у тебя, значит актив у тебя, без чьего-либо разрешения.

Цена тоже честная: децентрализация медленнее, дороже и сложнее централизованной базы. Реплицировать состояние на тысячи узлов и согласовывать его при враждебности это не бесплатно. Поэтому децентрализуют не всё подряд, а то, где доверие посреднику дороже потерянной скорости.

Как измерить децентрализацию

«Децентрализованный» это не бинарный флаг, а шкала, и её пытаются измерять числом. Самая известная метрика это коэффициент Накамото: сколько крупнейших участников нужно сговорить, чтобы захватить систему. Если три майнинг-пула вместе держат больше половины мощности, коэффициент равен трём, и это тревожно мало.

Считается он просто: отсортируй доли по убыванию и набирай, пока сумма не перевалит порог контроля (обычно половину или треть). Сколько штук набралось, столько и коэффициент.

/// Коэффициент Накамото: сколько крупнейших участников в сумме
/// переваливают порог контроля.
fn nakamoto_coefficient(mut shares: Vec<f64>, threshold: f64) -> usize {
    shares.sort_by(|a, b| b.partial_cmp(a).unwrap()); // по убыванию
    let mut acc = 0.0;
    for (count, share) in shares.iter().enumerate() {
        acc += share;
        if acc > threshold {
            return count + 1;
        }
    }
    shares.len()
}

fn main() {
    // Доли мощности пяти майнинг-пулов.
    let pools = vec![0.30, 0.25, 0.20, 0.15, 0.10];
    // Порог захвата для PoW это контроль большинства мощности.
    let coeff = nakamoto_coefficient(pools, 0.5);
    println!("коэффициент Накамото = {coeff}"); // 2: топ-2 пула дают 55%
    assert_eq!(coeff, 2);
}

Тонкость, которую метрика подсвечивает: систему меряют по самой слабой подсистеме. Можно иметь десять тысяч нод (отличная архитектурная децентрализация), но если две биржи держат половину монет, или один клиент пишет код для большинства нод, коэффициент по этой оси низкий, и именно туда ударит атакующий. Децентрализация это минимум по всем осям, а не максимум по любимой.

Числа отрезвляют. У биткойна по майнинг-пулам коэффициент держится около 2, два крупнейших пула на скользящем окне переваливают половину хешрейта, хотя по числу полных нод он в тысячах. У эфира по стейкингу коэффициент тоже около 2: один Lido держит примерно треть стейка. А по клиентам-нодам было совсем тонко: в начале 2024 года клиент Geth исполнял около 84% эфирных нод, и баг в нём мог расколоть сеть; за следующие месяцы сообщество сбило долю до примерно 52%, но «никакой клиент больше 33%» так и остаётся целью, а не фактом. Один и тот же эфир по разным подсистемам даёт разные коэффициенты, и честное число это минимальное.

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

порог захвата:
Майнинг-пулыNC = 4
Клиенты-нодыNC = 2
БиржиNC = 4
Коэффициент Накамото сети = 2. Это минимум по подсистемам, его задаёт самое слабое звено: Клиенты-ноды. Сюда и ударит атакующий: сговор 2 крупнейших участников этой подсистемы перевалит порог 50% и захватит сеть. Десять тысяч честных нод в других подсистемах не спасут.

Подсвеченные столбики это сговор, который набирает контроль. Переключи порог: при 50% нужно собрать большинство, при 33% хватает сорвать BFT-кворум из урока 10, поэтому тот же набор участников даёт коэффициент меньше. Система децентрализована настолько, насколько децентрализована её самая централизованная часть.

премиум-урок

Продолжение в премиуме: 1 200 ₽ в месяц или 10 000 ₽ в год. Вместе с ним серверные проверки задач и школьные токены AI-коуча.

Оплата пока не подключена: премиум и курсы открываются промокодом.