Да, у блокчейна есть проблема масштабируемости. И в этой статье мы попробуем разобраться что это такое, и что делают для ее решения.
Битва за масштабируемое решение — это главная гонка блокчейна.
Биткойн обрабатывает 4,6 транзакции в секунду. Visa выполняет в среднем около 1700 транзакций в секунду (на основе расчетов, основанных на официальном заявлении о более 150 миллионах транзакций в день). Потенциал для внедрения есть, но в настоящее время он ограничен масштабируемостью.
Исследование, опубликованное Tata Communications в 2018 году, показало, что 44% организаций в его опросе внедряют блокчейн, но также ссылаются на универсальные проблемы, возникающие при развертывании новых технологий. С архитектурного уровня нерешенная проблема масштабируемости становится узким местом для внедрения блокчейнов и практических приложений.
Как отмечает Deloitte Insights, «системы на основе блокчейнов сравнительно медленные. Низкая скорость транзакций блокчейна — серьезная проблема для предприятий, которые зависят от высокопроизводительных устаревших систем обработки транзакций». Мир ощутил на себе проблемы масштабируемости в 2017 и 2018 годах когда происходили серьезные задержки передачи в сети биткоин, а также после проблем с приложением Cryptokitties, которое перегружало сеть блокчейнов Ethereum (сеть, на которую полагаются тысячи децентрализованных приложений).
Насколько плоха масштабируемость блокчейна сегодня?
Для масштабирования цепочки блоков недостаточно увеличения размера блока или уменьшения времени блока за счет уменьшения сложности хеширования. При использовании любого метода возможность масштабирования достигает потолка, прежде чем он сможет достичь транзакций, необходимых для конкуренции с такими предприятиями, как Visa, которая «обрабатывает в среднем 150 миллионов транзакций каждый день» или около 1736 транзакций в секунду (TPS).
Для сравнения, скорость транзакций биткойнов намного ниже. В настоящее время размер блока установлен 1 МБ (1048576 байт — хотя с помощью SegWit этот размер может масштабироваться до теоретических 4 МБ), а средний размер транзакции составляет 380,04 байта (при условии, что каждая транзакция выполняется с одного кошелька на x других кошельков), поэтому пакетная транзакция будет считаться одной транзакцией. Таким образом, среднее количество транзакций, которые могут поместиться в один из блоков биткоина, в настоящее время рассчитывается как:
Текущее время генерации блока биткойнов — 10 минут; т.е. каждые десять минут добывается новый блок. За десять минут (600 секунд) биткоин может в среднем обработать около 2759,12 транзакции, исходя из предыдущих предположений.
Другими словами, блокчейн биткойна в настоящее время может гарантировать только 4,6 транзакции в секунду.
Увеличение размера блока или уменьшение времени генерации блока не решит проблему. Проблема масштабируемости связана с ценностными предложениями блокчейна; следовательно, нельзя просто увеличить масштабируемость, изменив параметры в цепочке блоков.
Сообщество Биткойн может настроить две переменные, чтобы попытаться увеличить TPS. Одна из переменных — это размер блока (B), который в настоящее время жестко запрограммирован как 1 Мб. В идеале «B» следует увеличить, чтобы увеличить TPS. Другая переменная — время генерации блока (TB), которое регулируется путем изменения сложности задачи хеширования. В идеале следует уменьшить TB, чтобы увеличить TPS.
Сценарии 1 и 2
Чтобы число транзакций выросло с 4 до 1736, биткоину необходимо увеличить свой TPS в 377,5 раза. Другими словами, B необходимо увеличить с 1 Мб до 377,5 Мб (таблица 1, S1) или уменьшить размер TB с десяти минут до 1,6 секунды (таблица 1, S2). Третий сценарий заключается в корректировке обоих исходных данных. Любой из трех сценариев недостижим в блокчейне из-за третьего неконтролируемого фактора — времени ретрансляции (TR), необходимого для трансляции нового блока на каждый узел в сети Биткойн.
Любой из сценариев недостижим из-за третьего неконтролируемого фактора — времени ретрансляции.
В настоящее время в сети биткоин насчитывается 10 198 узлов. Передача 1 Мб (1 048 576 байт) через одноранговую сеть занимает некоторое время. Технологический институт Карлсруэ измеряет время распространения блока биткойн, и среднее время распространения блока, сообщенное 17 января 2019 года. Данная величина составила 13 989,42 миллисекунды или примерно 14 секунд для распространения на 99% сети. TB не может упасть ниже 99% от TR (TR99) = 14, потому что в этом случае новый блок будет сгенерирован до того, как старый блок будет одобрен большинством блоков в сети. Чем ближе TB подходит к TR99, тем больше проблем возникает с форками, бесхозными блоками и реорганизацией цепочек, а также (в крайних случаях) уязвимостями безопасности, такими как атаки с двойным расходом.
Сценарий 3
Даже если TB = TR99 = 14, при размере блока 1 Мб, блокчейн биткойна сможет увеличить свою скорость только до 188 TPS (Таблица 1, S3). Несмотря на то, что эта шкала представляет собой 188-кратное увеличение TPS, это никаким образом не приблизило биткоин к 1736 транзакций, которые Visa проводит ежедневно; более того, после таких преобразований биткоин только подверг себя вышеупомянутым рискам. Другая переменная, B, также может быть скорректирована, но не без влияния на TR, что в свою очередь повлияет на TR99 и, следовательно, на нижний предел TB.
Сценарий 4
Например, при удвоении размера B (с 1 Мб до 2 Мб) время, необходимое каждому узлу в сети для загрузки нового блока, TR, также увеличится — примерно в 2 раза; таким образом, при 2 Мб TR99 = 28 с, поэтому нижний предел TB также будет 28 с. При увеличении B на любой коэффициент и последующем увеличении TR на тот же коэффициент чистое TPS останется прежним — в данном случае около 188 TPS (Таблица 1, S4). Одним из решений для уменьшения влияния B от TR является увеличение пропускной способности между всеми узлами в сети биткойн. К сожалению, поскольку это P2P-сеть, эта ответственность ложится на плечи каждого однорангового узла в сети.
Появление SegWit
В 2017 году Segregated Witness (SegWit) вступил в силу на всех узлах Биткойн.
На сегодняшний день, все узлы в сети биткойн генерируются с поддержкой SegWit. Протокол SegWit (англ. segregated witness) — изначально появился как софт-форк, поэтому он был запущен без каких-либо серьезных последствий для преобразования сети и кода цепочки блоков. Из-за способа взвешивания транзакции новые блоки биткоинов с поддержкой SegWit теоретически могут быть увеличены до 4 Мб без изменения фактического размера блока биткоинов.
Теоретически, потому что есть дополнительные факторы, которые влияют на окончательный размер блока SegWit. Фактически, если Вы проверите проводник цепочки биткоинов, Вы увидите, что (по крайней мере, на момент публикации этой статьи) средний размер блока все еще составляет менее 1 МБ.
Но это не значит, что блоки не могут превышать 1 Мб. В начале 2018 года мы стали свидетелями создания одного из самых больших блоков размером около 2,1 Мб. Софт-форк SegWit помог улучшить размер блока без изменений в основном коде, но он по-прежнему не улучшает масштабируемость TPS.
Изучая предыдущие четыре сценария в соответствии с консенсусом о доказательстве работы, мы увидели, что простое увеличение размера блока или уменьшение сложности майнинга может увести нас только на определенное время. Даже их комбинация будет ограничена из-за времени распространения транзакции. Попытка добыть новые блоки быстрее, чем могут распространяться старые блоки, приведет к довольно большим проблемам с безопасностью. Тем временем SegWit помог решить некоторые проблемы с TPS, но для достижения TPS, подобного Visa, все еще необходимо более масштабируемое решение.
Попытка добыть новые блоки быстрее, чем могут распространяться старые блоки, приведет к довольно большим проблемам с безопасностью.
Кажется, что в головоломке блокчейна перемещение любого элемента на место для увеличения TPS одновременно сдвигает другой элемент с места. Тем не менее есть проекты и стартапы, работающие над достижением ответов TPS, необходимых для перехода от внедрения блокчейна к масштабируемой стадии.
Существующие и другие подходы к решению масштабируемости
При поиске потенциального ответа на проблему масштабируемости возникает множество других проблем. Например, если ответ применим только для одной конкретной цепочки блоков, то он основан на предположении, что данная цепочка блоков нуждается в масштабируемости в будущем, в противном случае все усилия будут чрезмерными или неуместными. Получается что одна из главных проблем масштабируемости это достижение компромисса.
На данный момент существует несколько решений масштабируемости, однако они имеют некоторые ограничения.
Пакетные платежи в одну транзакцию
Плюсы: уменьшает размер записи транзакции, объединяя несколько транзакций в одну, что позволяет выполнять больше транзакций на каждый блок, что может в некоторой степени увеличить TPS.
Минусы: невозможно объединить несколько транзакций кошелька вместе так как это является угрозой для конфиденциальности.
Пакетные платежи были особенностью биткойна (и, следовательно, форков биткойна, таких, как Digibyte, Dogecoin и Bitcoin Cash). Многие биржи активно используют пакетные платежи. Вы можете увидеть это, когда попытаетесь найти свой идентификатор транзакции в проводнике блокчейна. В конечном итоге Вы увидите, что один платеж отправляется на несколько разных кошельков. Это и есть пакетная транзакция.
Преимущество пакетной транзакции заключается в том, что включение нескольких платежей приведет к тому что:
- Вы заплатите комиссию только за одну транзакцию;
- Вам не нужно писать полную транзакцию, которая, составляет примерно 380 байт, для каждой транзакции. Благодаря пакетной транзакции одна транзакция будет занимать только 34 байта. Ведь только небольшая часть записи в блоке действительно говорит о транзакции;
Если, например, я хочу осуществить десять транзакций одновременно, и осуществлю их по отдельности, то мои переводы займут 380 x 10 = 3800 байт пространства в блоке. С другой стороны, если я объединю транзакцию вместе, первая транзакция в блоке будет занимать 380 байтов, а следующие 9 будут иметь размер по 34 байта каждая; т.е. 380 + (34 x 9) = 686 байтов, что в 5,5 раз меньше.
Однако у такого способа есть веское ограничение о котором уже упоминалось выше. Суть проблемы заключается в том, что разные транзакции с разных кошельков не могут быть объединены в один пакет. Другими словами, если бы десять человек стояли в очереди за кофе, эти десять человек не могли бы объединить все свои транзакции в одну партию и оплатить свое кофе. Каждый должен будет произвести отдельную транзакцию. Пакетные транзакции ограничены транзакциями «один к нескольким», а не «несколько к одному». Пакетная транзакция отлично подходит, например, для одновременной оплаты счетов (электричество, Интернет, телефон, NetFlix, страховка и т. д.).
Кроме того, пакетная транзакция может быть нежелательной для обеспечения конфиденциальности. Как упоминает Дэвид А. Хардинг в своей статье о пакетных транзакциях биткойнов, одна проблема конфиденциальности в пакетных транзакциях может возникнуть, если Вы будете проводить расчет заработной платы — любой может проверить свою транзакцию и увидеть, какие суммы были отправлены другим сотрудникам.
Bitcoin Cash
Плюсы: может хранить больше транзакций, чем биткойн в одном блоке, что увеличивает производительность TPS.
Минусы: это временное решение, поскольку его TPS все еще намного ниже 1700 глобальных TPS, которые Visa проводит в среднем за день. Решение также ограничено тем, что подходит только для Bitcoin Cash и не факт, что оно подойдет для других блокчейнов, так как само по себе является хард-форком.
Если Вы посмотрите на сценарии, которые я предлагал ранее для теоретического масштабирования TPS, может показаться, что на примере Bitcoin Cash реализован сценарий 1 и так оно и есть. Это потому, что именно в результате увеличения блока до 8 Мб и появился хард-форк Bitcoin Cash.
Но в лучшем случае это решение все еще далеко от ответа, который мир ищет в отношении масштабируемости.
Bitcoin Cash — это хард-форк биткойна, разработанный в качестве альтернативы биткойну с дополнительным преимуществом более быстрых транзакций. Это в первую очередь увеличивает размер блока (B); Несмотря на то, что у него увеличилась скорость транзакций по сравнению с биткойном, у него все еще недостаточно TPS, чтобы конкурировать в глобальном пространстве транзакций.
Сеть Lightning
Плюсы: практически мгновенные транзакции между сторонами без комиссии.
Минусы: транзакции происходят вне сети, требуют, чтобы у пользователей был узел Lightning, и ограничены блокчейнами на основе ядра биткойна (например, Bitcoin Cash, Litecoin, Digibyte, Dogecoin).
Подробное описание того, как Lightning Network работает на детальном уровне, будет слишком длинным для этой статьи. Вкратце, Lightning Network позволяет снимать биткоины с блокчейна и совершать транзакции с другой стороной в частном порядке. Например, в следующем месяце я могу планировать пить кофе каждое утро. Я хочу совершить транзакцию в биткоинах, но я не хочу стоять перед очередью в кафе, ожидая подтверждения моего блока.
Итак, что я делаю, так это то, что я могу создать так называемый платежный канал в Lightning Network. Этот новый платежный канал не выполняет транзакции через блокчейн Биткойн — вместо этого считайте его резервом. Я вкладываю в него, скажем, 0,0000005 BTC, и это резерв, который я затем могу использовать для оплаты кому-либо еще, с кем я связан в сети Lightning.
Когда я закончу, я возвращаюсь к блокчейну и говорю ему, например: «Я отправил Starbucks 0,0000001 BTC на кофе в течение месяца, просто вычтите это из баланса, который я внес изначально». Тогда у меня осталось 0,0000004 BTC. Конечно, это очень упрощенный способ объяснить, что на самом деле происходит.
К сожалению, это решение доступное для биткоинов и разветвленных цепочек блоков, таких как Digibyte и Litecoin.
Преимущество Lightning Network — это мгновенные транзакции с нулевой комиссией, которые позволяют совершать микро транзакции без ожидания.
Однако на текущем этапе создание платежного канала требует немного больше знаний, чем те, которыми обладает среднестатистический покупатель биткойнов. Кроме того, данные операции по-прежнему требует внутричейн-транзакций до и после срока службы узла Lightning пользователя. Таким образом, сеть Lightning — отличное решение для масштабирования TPS для биткоинов и биткойн-подобных криптовалют, но она решает проблему только вне сети.
EOS и другие высокопроизводительные блокчейны
Плюсы: высокая теоретическая масштабируемость.
Минусы: централизация, которая может привести (и исторически приводила) к уязвимости сети.
В высокопроизводительных блокчейн-проектах используются разные механизмы консенсуса. Одна из самых популярных альтернатив Proof of Work (PoW) — Proof of Stake (PoS). В недавнем проекте EOS используется то, что он называет делегированным доказательством ставки (dPoS), который является модифицированной версией PoS. В dPoS такие пользователи, как Вы и я, которые делают ставки, на самом деле не являются частью процесса виртуализированного майнинга. EOS использует делегированный PoS (dPoS), чтобы осуществлять до 3996 TPS, но недостаток данного алгоритма заключается в том, что контроль за ситуацией переходит к тем, в чьих кошельках оказывается больше валют, что естественно компрометирует блокчейн как центролизируемую систему.
У EOS только 21 узел (производитель блоков), и в июне 2018 года эти производители блоков заморозили семь учетных записей EOS. Хотя аргументы в пользу замораживания могут быть оправданы, они демонстрируют объем полномочий одной организации в отношении всей цепочки блоков и их способность выполнять эти полномочия.
Сообщество блокчейнов хочет добится масштабируемости, что и привело к популярности EOS, даже несмотря на централизацию. Однако, есть много других дополнительных недостатков, которые могут поставить под угрозу целесообразность внедрения EOS.
bloXroute
Плюсы: это внутричейн-решение, не зависящее от блокчейнов, поэтому оно может быть ответом за масштабируемость потенциально всех блокчейнов.
Минусы: алгоритм все еще находится в разработке, а создание / управление глобальной CDN — дорогостоящий проект, который еще предстоит внедрить в пространстве блокчейнов.
Помимо проектов, связанных с блокчейном, начинают появляться стартапы, которые решают проблему в более широком масштабе. Один из самых интересных проектов, которые я видел до сих пор, — это стартап bloXroute.
bloXroute — это решение для масштабирования цепочки блоков, которое позволяет масштабировать криптовалюты и цепочки блоков в цепочке без изменения протокола.
bloXroute устраняет узкое место масштабируемости сети, сокращая время, необходимое для синхронизации всех узлов при обработке больших объемов TPS. Что наиболее важно, bloXroute по своей задумке делает это нейтрально.
Идея компании заключается в переносе сети доставки контента (CDN) в сети блокчейнов для решения проблем масштабируемости.
Что такое CDN?
CDN — это то, что сегодня увеличивает скорость Интернета. Именно благодаря CDN мы можем смотреть видео в интернете онлайн без ожидания загрузки.
Сеть распространения контента кажется сложной и причудливой, и, хотя ее создание сложнее, чем Вы когда-либо могли себе представить. Идея довольно проста — размещать крупноразмерный контент на компьютерах (так называемых серверах) рядом с населением, чтобы всякий раз, когда, скажем, кто-то в Киеве хочет загрузить часть контента для просмотра, ему не нужно загружать его полностью с какого-то компьютера в Минске, вместо этого есть более близкая его версия, хранящаяся где-то недалеко от Киева. Крупнейшей компанией в области CDN является Akamai [NASDAQ: AKAM], она была создана как решение для уменьшения задержки передачи больших файлов через Интернет.
Таким же образом bloXroute намерен взять концепцию CDN и применить ее к пространству блокчейнов как распределенную сеть блокчейнов (BDN). В конце концов, если блоки в конечном итоге будут масштабироваться до гигабайта, скорость передачи станет проблемой.
В целом, у bloXroute большие планы и вполне вероятно, что это будет действительно правильным решением проблемы с масштабируемостью.