Одним из важных показателей максимальной безопасной нагрузки на сеть является зависимость частоты появления анкл-блоков от газа, потребляемого транзакциями. Во всех блокчейнах, использующих консенсус PoW, при публикации любого блока возникает риск, что этот блок устареет (stale), то есть, не будет включен в основную цепь, потому что другой майнер уже опубликовал конкурирующий блок до того, как получил его от первого майнера. Возникает «гонка» между двумя блоками, в результате кто-то остается позади.
Чем больше транзакций содержит блок (другими словами, чем больше газа использует блок), тем большее время занимает его трансляция по сети. Исследование 2013 года в сети Биткойна показало, что среднее время трансляции составило 2 секунды плюс 0.08 секунд/килобайт на блок, то есть блок размером 1 мегабайт транслировался около 82 секунд.
В недавнем описании Bitcoin Unlimited показано, что благодаря усовершенствованным технологиям, переменная часть интервала снизилась до примерно 0,008 секунды/килобайт. Следует отметить, что чем дольше блок транслируется по сети, тем больше вероятность, что он устареет; при среднем межблоковом интервале в 600 секунд, увеличение времени трансляции на 1 секунду соответствует увеличению вероятности стать вторым на 1/600.
Можно провести такой же анализ для Эфириума, причем, благодаря механизму анкл-блоков, данных для анализа гораздо больше. Устаревшие блоки Эфириума могут быть включены в блокчейн в качестве анклов, при этом, майнеры получают до 75% от полной награды за блок. Этот механизм был разработан для того, чтобы снизить централизацию, уравнивая шансы майнеров с быстрыми и медленными каналами связи; одно из его полезных побочных свойств заключается в том, что устаревшие блоки постоянно документируются самим блокчейном.
В качестве источника удобно взять дамп данных: блоки от 1 до 2283415 ( перед началом атак 16 сентября). Колонки в файле, по порядку: номер блока; количество анклов на блок; полная награда за анкл; сумма газа, истраченного анклами; число транзакций в блоке; газ, истраченный блоком, длина блока в байтах, длина блока за вычетом нулевых байтов. Данные получены с помощью скрипта 1 и проанализированы скриптом 2.
Полученные результаты
В среднем, частота анклов находится в пределах 0.06 – 0.08, а средняя сумма газа на блок – 100000 – 300000. Учитывая, что газ тратят и блоки и анклы, можно составить линейную регрессию и оценить, на сколько 1 единица газа увеличивает вероятность, что данный блок окажется анклом:
- Блок 0 to 200k: 3.81984698029e-08
- Блок 200k to 400k: 5.35265798406e-08
- Блок 400k to 600k: 2.33638832951e-08
- Блок 600k to 800k: 2.12445242166e-08
- Блок 800k to 1000k: 2.7023102773e-08
- Блок 1000k to 1200k: 2.86409050022e-08
- Блок 1200k to 1400k: 3.2448993833e-08
- Блок 1400k to 1600k: 3.12258208662e-08
- Блок 1600k to 1800k: 3.18276549008e-08
- Блок 1800k to 2000k: 2.41107348445e-08
- Блок 2000k to 2200k: 1.99205804032e-08
- Блок 2200k to 2285k: 1.86635688756e-08
Следовательно, 1 миллион единиц газа за транзакции, включенные в блок сейчас добавляет около 1.86% к вероятности, что блок окажется анклом, а в предыдущем релизе Frontier эта величина была около 3-5%. «База» (частота анклов в блоке с 0 газа) находится на уровне 6-7%. Пока оставим этот результат как есть; есть еще одно обстоятельство, которое мы обсудим ниже, в связи эффектом, который полученный результат оказывает на политику газ-лимита.
Стоимость газа
Еще одна проблема, которая касается частоты анклов и трансляции транзакций – это ценообразование газа. В дискуссиях разработчиков Биткойна есть распространенный аргумент: ограничение размера блока не имеет смысла, так как у майнеров и так есть естественный стимул к ограничению блока – каждый добавляемый килобайт увеличивает частоту появления устаревших блоков и, следовательно, ставит под угрозу награду за блок. Принимая во внимание величину 8 секунд/мегабайт, из упомянутого описания Bitcoin Unlimited, и то, что 1 секунда увеличения времени трансляции добавляет 1/600 к вероятности потерять 12,5 BTC награды, получается, что равновесная комиссия, при условии отсутствия лимитов блока, составит 0.000167 BTC/кбайт.
Однако в системе Биткойна есть основания усомниться в экономической целесообразности такой модели, поскольку через какое-то время награды за блок не будет; тогда единственное, что смогут потерять майнеры из-за того, что включат в блок слишком много транзакций – это комиссии от других транзакций. Тогда есть экономические основания считать, что равновесная частота устаревших блоков окажется на уровне 50%. Правда, небольшие изменения в протоколе смогут ограничить эту величину.
В настоящее время награда за блок в Эфириуме составляет 5 ETH, и она останется такой до тех пор, пока не изменится алгоритм. 1 миллион единиц газа означает 1,86% вероятность того, что блок станет анклом. Однако и здесь помогает механизм анклов: средняя награда за анкл – около 3,2 ETH, поэтому 1 миллион единиц газа на блок означает 1,86% риск потери 1,8 ETH, т. е., ожидаемая потеря 0,033 ETH, а не 0,093, как это было бы без анклов. Следовательно, текущие цены в примерно, 2,1 миллиона ед. газа достаточно близки к «экономически обоснованной» цене 3,3 миллиона единиц на блок (перед началом DoS атак, и ответных действий).
Простейший способ еще больше снизить равновесную цену газа – усовершенствовать механизм включения анклов в цепь, попытаться получать анклы, включенные в блоки максимально быстро (возможно, отдельно транслируя каждый блок как «потенциальный заголовок анкла»); в пределе, если каждый анкл включается с максимальной скоростью, равновесная стоимость газа опустится до 11 миллионов.
Стоимость данных в блоке
Проведем еще один регрессионный анализ с помощью следующего кода. Цель: установить, после учета коэффициентов газа, вычисленных выше, осталась ли корреляция с количеством транзакций или размером блока в байтах. Поскольку данные о размерах и количестве транзакций в анклах отсутствуют, проведем оценку, рассматривая группы по 50 блоков, которые включают в себя блоки и анклы. По результатам анализа получается, что коэффициенты газа в два раза выше, чем результаты первого анализа: 0.04 анкла на 1 миллион газа. Возможное объяснение: если запускается одиночный блок с высокой скоростью трансляции, а в результате появляется анкл, это означает 50% вероятность, что этот блок станет анклом, и 50% вероятность, что анклом станет блок, против которого конкурирует 1-й блок. Эта гипотеза хорошо согласуется с 0.04 на миллион газа «социальной частотой анклов» и с ~0,02 на миллион «частной частотой анклов» (см пункт «Стоимость газа»); следовательно примем ее, как наиболее вероятное объяснение.
Регрессионный анализ показывает, что при пересчете на социальную частоту анклов, 1 байт соответствует дополнительной частоте анклов ~0.000002. Один байт в транзакции берет 68 единиц газа, из которых 61 единица за пропускную способность, а 7 за историю базы данных. Чтобы коэффициент пропускной способности и коэффициент из таблицы стоимости газа отражали реальное время трансляции, а это подразумевает реальную оптимизацию стоимости газа, нужно увеличить цену газа за байт на 50 (до 118). Это также повлечет за собой увеличение базовой стоимости транзакции на 5500 (Это не означает, что все станет дороже, ; газ-лимит увеличится на ~10%, так что средний выход транзакций останется неизменным).
С другой стороны, опасность DoS атак выше для выполняемых операций, чем для передачи данных, поэтому именно исполнение вычислений требует повышенной безопасности. Следовательно, пока экстренной необходимости перестраивать ценообразование нет.
Одной из задач может стать изменение протокола с целью разделения механизма ценообразования выполняемых EVM операций и транзакций данных; аргументом здесь служит то, что транзакция данных должна вычисляться отдельно от других операций, и оптимальной стратегией будет позволить рынку самому найти баланс; однако конкретные механизмы для этого еще предстоит разработать.
Политика газ-лимита
Для индивидуального майнера, определяющего цену газа, «частная частота анклов» в 0.02 на миллион единиц газа – статистика, на которую можно ориентироваться. С точки зрения всей системы, важна «социальная частота анклов» 0.04. Если не учитывать соображения безопасности, и признать приемлемой частоту в 0,5 анклов на блок (атака 51% требует только 40% хэш-мощности), то проведенный анализ предполагает, что газ-лимит может, теоретически, быть поднят до ~11 миллионов (20 тх/сек, считая в среднем 39k газа/тх; или в простых транзакциях отправки это 37 тх/сек). С некоторыми оптимизациями, эту цифру можно несколько увеличить. Однако, для обеспечения безопасности, лучше принять меньшую частоту анклов, чтобы уменьшить опасность централизации, и 5,5 миллионов кажется оптимальным уровнем газ-лимита, хотя в среднесрочной перспективе формула «динамического газ-лимита», задающая время обработки данного блока была бы лучшим решением, поскольку она бы автоматически отвечала на атаки.
Отметим, что опасность централизации не находится в одной связке с проблемами безопасности. Причина в том, что в активной фазе DoS атаки, блокчейну необходимо выжить, а долгосрочная сопротивляемость централизации отходит на второй план. Если цель атакующего – добиться централизации экономическими методами, то он может просто профинансировать крупнейший пул, так, чтобы у остальных майнеров появился стимул присоединиться к нему.
В будущем, для дальнейшего снижения частоты анклов можно ожидать и других изменений в виртуальной машине, правда, для этого потребуются изменения на уровне протокола сети. Одиночная цепь обладает ограниченной масштабируемостью, ее основное «бутылочное горлышко» – операции записи и чтения на диск, так что после некоторого предела (Похоже, что это 10 — 40 миллионов единиц газа), шардинг станет единственным способом увеличения производительности. Внедрение протокола Casper – единственный способ радикально снизить равновесную цену на газ и увеличить производительность сети.