Из-за хардфорка Constantinople аналитический сервис BlockCypher временно остался без API эфириума. В своей статье на Medium CEO BlockCypher Кэтрин Николсон объясняет, почему это произошло, какие уроки из этого можно извлечь, и что это в целом говорит об экосистеме эфириума.
Эфириум объявил о хардфорке Constantinople в середине декабря 2018 года — он должен был состояться 15 января 2019 года. Разработчики эфириума заявили, что «предстоящий форк станет наименее насыщенным событием в истории эфириума». Мы не согласились: хардфорк влиял на сотни исходников. Следуя инструкциям Ethereum Foundation мы активно начали готовится к этому событию. Подготовка также предполагала изменения в наших резервных копиях. Мы работали во время рождественских каникул и завершили работу на первой неделе января 2019 года.
Мы думали, что были готовы.
8 января: что-то пошло не так.
В ночь на 8 января мы поняли, что что-то не так с данными эфириума, но мы не знали, что именно. Мы получили ошибку, которая говорила, что пропал какой-то небольшой фрагмент данных. Состояние эфириума довольно загадочная вещь — все данные хэшируются в дереве — и мы не могли понять, что именно было не так.
Мы попытались провести несколько процедур восстановления — безуспешно. Мы продолжали получать ошибку отсутствующих данных (нода префиксного дерева, Trie).
Мы начали процесс «быстрой» синхронизации, для завершения которой потребовалось более двух дней. К сожалению, это не помогло нам восстановить недостающие данные и не восстановило наше состояние.
Сразу отвечу на возможные вопросы:
- Почему быстрая синхронизация не сработала? Потому что она включает в себя только небольшое подмножество данных всего блокчейна. Чтобы обеспечить надёжную работу с нашими API, нам нужны все данные.
- Почему мы не сделали резервную копию состояния перед обновлением Constantinople? Мы сделали, но она было частично повреждена восстановлением. Кроме того, состояние эфириума не является базой данных, которая может быть просто скопирована и исправлена. Это не может быть сделано, когда нода эфириума онлайн, это не может быть сделано постепенно (а ещё это весит больше терабайта).
Урок №1: Состояние эфириума сильно отличается от состояния других блокчейнов. Его нельзя восстановить никаким традиционным методом резервного копирования.
Начался долгий, очень долгий путь к полной синхронизации
12 января мы начали «полную» синхронизацию состояния эфириума, которое весило более 2 терабайт. Зная размер, с которым нам придётся работать, мы обзавелись самыми ёмкими из доступных машин, чтобы ускорить синхронизацию. Это не очень помогло. Наши проблемы усугублялись тем, что в этом процессе нет прозрачности, — мы не знали о нашем статусе в обновлении и не имели никакой информации по обновлению наших клиентов.
Мы остались в беспомощном ожидании.
14 января — за день до предполагаемого харфорка Constantinople — всё отменилось. По-видимому, аудит безопасности обнаружил уязвимость, которая может позволить потенциальному злоумышленнику украсть криптовалюту из смарт-контракта. Отмена в последнюю минуту стала невероятно деморализующей для нас. Если бы мы ждали активации Constantinople ПОСЛЕ того, как он вступил в силу, мы бы сэкономили невероятное количество времени и средств... и наш API эфириума работал бы.
[…] Источник: coinspot.io Метки: #API#Ethereum Share76Tweet47 […]
[…] Источник: coinspot.io Метки: #API#Ethereum Share76Tweet47 […]