Наденьте ночные очки, потому что у меня есть история из нашего киберпанк-будущего или настоящего, каким оно может быть.
Как плохо написанный смарт-контракт подорвал работу интернет-провайдера в Орегоне.
Около 15:00 в это воскресенье мы начали сталкиваться со снижением качества обслуживания всей тестовой сети Clatskine. Автоматическое оповещение уведомило дежурного оператора сети, и расследование началось.
Через несколько минут усердного поиска в журнале обнаружилась закономерность. транзакции были успешно опубликованы на полных узлах Ethereum, но ни одна транзакция Althea не попала в блокчейн за последние 5 часов.
Хотя система выставления счетов за пропускную способность очень устойчива к временным сбоям в оплате, ей приходится отключать пользователей, которые в конечном итоге не платят. В нашем случае шлюз определил, что ему недоплачивают на выходе, и начал ограничивать скорость соединения на выходе в качестве предупреждения о недоплате.
Главный вопрос, конечно, заключался в том, почему платежи за выезд не прошли?
Ответ на этот вопрос состоит из двух частей. Плохо закодированный сценарий раздачи и кто-то, кто его использовал.
Вы видите, что этот сценарий airdrop пострадал от уязвимости, которую мы называем «атакой Сивиллы». Она позволяла любому, у кого на счету было небольшое количество Ethereum, бесплатно чеканить небольшое количество этого нового токена.
Предприимчивый хакер просто написал скрипт, который брал большое количество Ethereum, разбивал его на множество новых адресов с меньшим балансом, а затем вызывал контракт. Позволяя им собирать во много сотен или тысяч раз больше отчеканенных токенов, чем они должны были быть ограничены.
Этот скрипт мешал работе Алтеи именно потому, что и Алтея, и хакер выбрали один и тот же метод для определения цены газа в наших транзакциях.
Скрипт производил тысячи транзакций с комиссией за газ в 1Gwei, взятой из конечной точки gas_price() полного узла Ethereum. Это значение вычисляется как медиана комиссий, выплаченных за последние несколько блоков.
Алтея использует ту же конечную точку, и в ней есть недостаток, который мы искали. Поскольку мы выбрали ту же плату за газ, что и злоумышленник, наши транзакции имели тот же приоритет, но в сотни раз менее распространены. В результате почти никто из них не прошел.
Если бы мы увеличили комиссию за транзакцию хотя бы на 10 %, транзакции Althea попали бы в блокчейн менее чем за 3 минуты. Но поскольку мы доверяли конечной точке средней цены на газ, наши транзакции напрямую конкурировали с злоумышленником, и потребовалось бы более двух часов, чтобы попасть в блок, если они вообще попадут.
Мы исправили наши узлы, чтобы платить за газ на 50 % больше, и сеть была восстановлена и полностью работоспособна в течение 15 минут после первого снижения качества обслуживания.
Усовершенствованное формирование трафика маршрутизаторов Althea сохраняло скорость сети, но пригодную для использования в течение всего времени. На самом деле мы получили гораздо больше жалоб на сбой Google Cloud в эти выходные.
Но проблема здесь не исчерпана. Исправление потребовало вмешательства человека и уровня «мета» мышления, чтобы определить, каким будет решение.
Althea необычен тем, что автономные микроплатежи за пропускную способность предъявляют более высокие требования к уровню автоматизации. Люди запихивают сетевое оборудование в шкаф и оставляют его там годами без присмотра. Никто не собирается обновлять страницу или перезагружать устройство.
Чтобы достичь такой надежности, мы постепенно встраивали все больше и больше информации обо всех режимах сбоев платежей через блокчейн в наше собственное программное обеспечение. Современные блокчейны просто недостаточно надежны, чтобы их можно было рассматривать как абстрактную платежную систему, в которой транзакция действительна, отправлена и выполнена.
Надеемся, что системы, основанные на подтверждении доли, могут уменьшить изменчивость процесса транзакции, а также помочь уменьшить проблемы масштабирования. Тем временем нам нужно обновить Алтею, чтобы проверять транзакции в мемпуле и автоматически корректировать цену на газ, необходимую для победы в следующей дуэли.
Бета 5 выпущена!
Выпущен выпуск Beta 5 с некоторыми новыми функциями, настоящим хедлайнером является то, что маршрутизаторы теперь оценивают, как долго будет действовать ваш существующий баланс, на основе предыдущего использования.
- Клиентские устройства больше не поставляются с портами WAN по умолчанию.
- еще больше исправлений для стабильности платежей
- история пропускной способности и история платежей теперь хранятся и отображаются на панели инструментов
- изменения в биллинге клиентов, которые делают его устойчивым к потере пакетов
- исправить проблему с привязкой к портам не на встроенных коммутаторах
- больше исправлений в выборе порта для обнаружения одноранговых узлов
- защита от атак с повтором платежей
- исправление проблемы с разбором babel, которая могла вызвать странное поведение при выставлении счетов
Как видите, мне нужно пополнить свой личный роутер.