Перегрузка Эфириума, непонятый пророк и что можно сделать

Во вторник 20 июня проект Status провел ICO, затронувшее всех пользователей Эфириума, включая и тех, кто не только не собирался принимать участие в кампании, но даже и не подозревавших о его существовании – смарт-контракт краудфандинговой кампании перегрузил сеть, впервые со времени осенних DOS атак, закончившихся хардфорками.

Конечно, Status – не единственный виновник перегрузки; количество транзакций в сети Эфириума бурно растет с начала мая, однако, он стал «последней соломинкой».

Проект Status – мобильный мессенджер, браузер и кошелек Эфириума для мобильных устройств, запланировал начало ICO на блоке №3903900. Организаторы ICO представляли себе масштабы грядущего ажиотажа и установили максимальную цену газа в 50 Gwei ( при том, что медианная цена газа составляла 20 Gwei) – так, чтобы продажа токенов была больше похожа на лотерею, чем на соревнование «кто даст больше газа». Кроме того, потолок должен был отсечь транзакции со смарт-контрактов, автоматически повышающие цену газа. Несмотря на то, что о верхней границе цены газа было объявлено заранее, мало кто обратил на это внимание. 

Всего в течение 20 июня в сети было проведено около 308 000 транзакций, из них только 100 000 успешных транзакций прошло на смарт-контракт Status. Многие пользователи пытались отправить транзакции с ценой газа выше пороговой, что стало дополнительной причиной нагрузки на сеть. Ведущие биржи – Poloniex, Bittrex и другие временно приостановили вывод эфира из-за перегрузки, а обычные пользователи жаловались в социальных сетях на многочасовые задержки транзакций.

По окончании ICO Status задержки пошли на спад, а биржи возобновили вывод эфира. Тем не менее, производительность сети Эфириума достигла предела. За 26 июня через сеть прошло 316 000 транзакций и непохоже, что их количество будет уменьшаться.

Пророков никто не слушает

Здесь необходимо напомнить, что один из ведущих разработчиков Эфириума — Влад Замфир (Vlad Zamfir) — еще в марте вызвал шквал критики в социальных сетях, заявив в Twitter
о том, что Эфириум, в том виде, в котором он существует сейчас – ненадежная и плохо масштабируемая технология. События 20 июня доказали, что он был совершенно прав.

Нынешний Эфириум, работающий на консенсусе PoW, есть не более чем Доказательство Концепции – лишь экспериментальная модель сети, которую В. Бутерин называет «Распределенным компьютером». Действительно, если за сутки примерно 300 000 транзакций смогли парализовать сеть, получается, что ее реальная производительность (с учетом выполнения «тяжелых» смарт-контрактов, а не только состоящая из переводов монет; отвергнутые транзакции тоже не учитываются, но они будут всегда) составляет не более 4 – 7 транзакций в секунду — аналогично Биткоину, где проблема масштабирования стоит уже более двух лет. Свой вклад вносит и «бомба сложности»: по состоянию на 27 июня, время генерации блока составляет уже 17 секунд по сравнению с 14 секундами в начале года.

Для того, чтобы технологии смарт-контрактов заработали в полную силу, необходимо радикально увеличить производительность сети. Сейчас в разработке находятся три технологии, способные обеспечить требуемые параметры: протокол PoS Casper, шардинг
и технология платежных оффчейн-каналов Raiden. Официальные сроки их внедрения пока не объявлены, однако основатель проекта Авгур, Джои Круг (Joey Krug), дает следующие оценки: POS – 1 год (3-х кратное увеличение производительности); шардинг – 3–5 лет и 100х к производительности; Raiden – 1000x, 1.5 – 3 года.

Судя по всему, второе скандальное заявление Замфира, сделанное вслед за первым, тоже подтверждается: он назвал майнеров Эфириума «фактором системного риска», обвинив их в том, что для извлечения сиюминутной прибыли они жертвуют интересами сети.

Представители Фонда Эфириума, включая Бутерина, неоднократно обращались к майнерам с призывами поднять газ лимит на блок, однако большинство майнеров эти призывы игнорируют, опасаясь, что если они станут увеличивать размер блоков, у них повысится процент анклов. Точно так же были проигнорированы и призывы снизить размер транзакционных комиссий в связи с ростом курса эфира: на 27 июня медианная цена транзакции составляет 0.1787$, в связи с чем недоброжелатели не перестают напоминать Бутерину его собственное высказывание 2014 года о том, что в Интернете Денег транзакция не может стоить 5 центов, хотя он тут совершенно ни при чем. До реализации протокола Casper майнеры будут руководствоваться только своей краткосрочной прибылью.

Что можно сделать до Casper

22 июня Виталик Бутерин предложил EIP 648 – модификацию протокола, которая позволит существенно увеличить производительность сети в период пиковых нагрузок, подобных той, что случилась 20 июня. При этом он оговорился, что ее реализация возможна только после релиза Metropolis (конец августа-сентябрь) – несмотря на то, что для модификации требуются только изменения кода основных клиентов (Geth и Parity), сейчас разработчики полностью заняты тестированием Metropolis.

Суть EIP 648 заключается в следующем. Сейчас транзакция Эфириума может выполнять код смарт-контракта, расположенного на любом адресе. Соответственно, любой смарт-контракт может вызвать выполнение другого кода и так далее. Это значит, что выполнение транзакции может изменить состояние любого адреса Эфириума. Поэтому, транзакции выполняются последовательно, одна за одной, иначе транзакция может повлиять на адрес, от которого зависит следующая транзакция.

EIP 648 определяет новый тип транзакции, в котором говорится: «Эта транзакция будет взаимодействовать только с адресами из заданного набора адресов Эфириума». При попытке взаимодействия с адресами, не принадлежащими к набору, она аварийно завершается.

Преимущество заключается в том, что если в блоке есть две транзакции с непересекающимися множествами адресов, то их код можно выполнять параллельно на двух ядрах CPU, и при этом они никак не затронут друг друга.

В будущем, при проведении ICO, подобного Status, все его транзакции можно будет проводить в ограниченном пространстве адресов. При таком способе даже большое количество транзакций не затронет прохождение основной части транзакций – они будут идти параллельно. Фактически, это предельно упрощенный шардинг, для которого не нужен хардфорк.

Такая модификация не решит проблемы масштабирования полностью, но может пригодиться как временное решение. По словам Бутерина:

Скорее всего, мы сделаем это после Metropolis. Дело в том, что это поможет в обычном сценарии, но никак не улучшит производительность в худшем сценарии (т. е., в случае атаки).

По всей видимости, до развертывания Metropolis сеть продолжит работать в режиме повышенной нагрузки. 27 июня, согласно Ethgasstation, использование газа колеблется от 40 до 80% от лимита газа на блок.