Автор:
Юрий Шишацкий, CSO
Jax.Network
Проблема масштабируемости остается одним из основных препятствий на пути массового внедрения технологии блокчейн. Всё большое количество блокчейн-проектов находятся в поисках решений, которые могли бы улучшить производительность их сети. Многие утверждают, что уже нашли “панацею”, однако к таким заявлениям стоит относиться скептически. К сожалению, большинство не осознает суть и корень этой проблемы, так как без глубокого изучения и технической подготовки трудно определить скрытые нюансы и возникающие компромиссы.
После запуска децентрализованной сети Биткоина, пользователи столкнулись с некоторыми ограничениями системы. Одним из таких ограничений является пропускная способность сети, обычно измеряемой в количестве транзакций за единицу времени. Начались активные поиски того, что так влияет на пропускную способность. Вскоре была найдена основная ключевая проблема, описанная как время распространения блока (block propagation time) или задержка распространения блока (block propagation delay). Это среднее время, необходимое для того, чтобы новый блок достиг большинства нод в сети. Эта проблема важна, потому что необходимо обеспечивать целостность сети – если время распространения информации будет слишком большим, различные сегменты сети будут иметь разное состояние, что недопустимо.
В такой большой децентрализованной сети, как Биткоин, всякий раз, когда генерируется новый блок, он транслируется в соответствии с использованием протокола семейства Gossip. Если какая-то нода получила новый блок, она сначала проверяет его валидность, а затем информирует связанные с ней ноды о получении нового блока. Затем нода передает этот блок следующим нодам по запросу. Прежде чем блок достигает какой-либо полной ноды в сети, он проходит около семи промежуточных (хопов). Очень важно, чтобы каждая честная нода проверяла блок, прежде чем передать его другим. Очевидно, что все это занимает определенное время и требует использования вычислительных ресурсов. Каждый новый блок заставляет ноды и интернет-соединения между ними работать на полную мощность.
Разработчики постоянно работают над улучшением пропускной способности сети Биткоин. С момента ее запуска было внедрено много улучшений протокола Gossip. Например, в предложении BIP 0152 появилась возможность передавать только короткие идентификаторы транзакций вместо всего списка транзакций в теле блока. Однако, если у ноды нет какой-либо транзакции в мемпуле, она должна попросить своих пиров передать ее отдельным сообщением. Если в блоке имеется большое количество таких транзакций, польза от BIP 0152 существенно снижается.
Поскольку передача данных является наиболее времязатратной частью ретрансляции блока, исследователи заинтересовались тем, сколько времени требуется пакету данных определенного размера для достижения 50%, 90% или 95% нод сети. Было обнаружено, что для блоков размером более 20 кБ задержка распространения блока практически пропорциональна его размеру. Согласно исследованию, опубликованному в 2013 году, каждый дополнительный килобайт данных в блоке вызывал дополнительные 80 мс задержки распространения блока. С тех пор каждый год выходит несколько научных статей и обзоров на эту тему, которые актуализируют вышеупомянутые данные и обсуждают различные возможные улучшения. Кроме того, есть ресурсы, на которых можно отследить текущее состояние сети Биткоина, время распространения блока и графики с историческими данными.
Большое количество блокчейн-сетей имеют дизайн сетевого протокола, похожий на сеть Биткоина, и время распространения блока в этих сетях имеет похожие закономерности. К сожалению, время распространения блока оказывает огромное влияние на безопасность блокчейн сети – чем оно больше, тем чаще наблюдается неоднородное состояние сети. Это приводит к тому, что майнинг происходит поверх старых блоков. Такое состояние называется форком. В результате форки главной цепочки происходят чаще и процент орфанных блоков (orphaned blocks) возрастает. Если смотреть на сеть Биткоина, то основные майнинг-пулы соединены выделенными, зачастую оптоволоконными каналами связи, чтобы минимизировать потери. Однако, очень длительная задержка распространения приводит к так называемой Дилемме Проверяющих (Verifiers Dilemma). Некоторые ноды могут обнаружить, что пропуск шага проверки блока может быть выгодной стратегией. В этом случае они рискуют провести майнинг поверх неправильного блока. Но если время проверки блока является значительным, эта стратегия может оказаться прибыльной. Исследователи обнаружили, что длительная задержка распространения снижает защиту от атак 51% и так называемого эгоистичного майнинга (Selfish mining).
Чтобы решить вышеупомянутую проблему, разработчики стараются уменьшить время распространения блока до 1% от среднего времени блока.
Это работает в случае с Биткоином, Эфириумом и другими крупными блокчейн-сетями, основанными на консенсусе PoW. По этой причине время распространения блока до 50% нод в сети Биткоин обычно не превышает 6 секунд.
Хотя ускоренная ретрансляция блока, подобная описанной в BIP 0152, сокращает среднее время распространения блока, в худшем случае это может занять больше времени, чем базовый протокол. Важно, чтобы даже при наихудшем сценарии задержка распространения была разумной, а майнеры, в свою очередь, продолжали синхронизировать ноды и не забывали проверять чужие блоки.
Всякий раз, когда говорят о масштабируемости блокчейна, упоминают количество транзакций, которые сеть способна обработать в секунду. Однако многие забывают, что повышение пропускной способности не должно ставить под угрозу безопасность сети или повышать требования к нодам, желающим поддерживать сеть. Эти модификации могут уменьшить количество независимых валидаторов транзакций в сети, тем самым снизить уровень децентрализации.
Пропускная способность транзакций в Биткоине может быть легко рассчитана по формуле:
где
Bsize – размер блока в байтах,
Tsize – средний размер записи транзакции в блоке,
Btime – среднее время между последовательными блоками в блокчейне.
Очевидно, что пропускную способность можно улучшить, увеличив размер блока, уменьшив размер записи транзакции или уменьшив интервал между блоками. Уменьшить размер записей транзакций довольно сложно. Куда проще попробовать два других варианта. Однако эти действия увеличат время, затрачиваемое на распространение блоков. Таким образом, безопасность и децентрализация сети могут быть поставлены под угрозу.
Несложно заметить, что в протоколе Биткоин сетевые ресурсы используются неэффективно. Каждая нода обрабатывает и передает данные о новом блоке лишь небольшую долю времени. Пропускная способность сети используется в полном объеме всего в течение нескольких секунд. В остальное время эта нода передает неподтвержденные транзакции и вспомогательные данные. Это наблюдение вдохновило исследователей на поиск более эффективных схем протоколов, которые могли бы значительно повысить пропускную способность системы без ущерба для безопасности и децентрализации сети. В нашей следующей статье мы обсудим подходы к решению проблемы распространения блоков, которые были предложены в последние годы.