1. 6 июля 2022 года, чрезвычайно обычная среда.
Программист Сяосань, наконец, закончил последний контрактный тест, развернулся на искусственном стуле и взволнованно потянулся.
«Хорошо, сегодня следующая задача — создание и развертывание узла ставок Ethereum».
Два месяца спустя Ethereum собирается начать слияние. У Сяосаня в кошельке есть полные 289 ETH, и он планирует использовать их для финансового управления ставками.
«Но, похоже, сегодня в кошельке реестра обнаружена ошибка? Забудьте об этом, давайте перейдем к учетной записи, где я развернул контракт. В любом случае, публикация и тестирование контракта потребует некоторого количества газа».
Набрав сценарий перевода, официант пошел варить кофе. Обычный латте, как обычная среда.
Вернувшись после приготовления кофе, Сяосань начал обновлять Etherscan, пока пил, чтобы проверить, подтверждена ли только что отправленная транзакция. «А? Кажется, платежный счет неправильный?»
Внезапно сердце хозяйки екнуло, кофе в ее руке упал на землю, и по рукам и ногам пробежал холодок:
«Все кончено! Я отправил 289 ETH на тестовый аккаунт Hardhat!»
2、
Hardhat — самая распространенная и часто используемая среда разработки в Ethereum. Она предоставляет ряд инструментов и функций, которые помогают разработчикам разрабатывать, тестировать и развертывать смарт-контракты на платформе Ethereum.
Для разработчиков одной из наиболее важных функций Hardhat является локальное создание или форк среды Ethereum для локального тестирования контрактов.
Когда вы локально выполняете команду узла npx hardhat,
Hardhat локально создаст смоделированную сеть и сгенерирует 20 фиксированных тестовых учетных записей EOA и соответствующие закрытые ключи.
В то же время Hardhat также инициализирует баланс в размере 10 000 ETH для этих 20 учетных записей EOA, чтобы разработчики могли использовать эти учетные записи для публикации локальных контрактов для тестирования.
(Имея 20 аккаунтов стоимостью в сотни миллионов, я король локального хоста!)
Обратите внимание, что эта локальная симуляционная сеть не имеет ничего общего с основной сетью Ethereum, а баланс в 10 000 ETH на этих 20 учетных записях EOA является только локальным.
Однако, поскольку 20 сгенерированных учетных записей фиксированы, а закрытые ключи являются общедоступными, любой в сети Ethereum может использовать эти закрытые ключи для вывода активов с этих учетных записей.
Если инженер забудет переключить среду после завершения контрактного тестирования, будет рассматривать тестовую среду как основную сетевую среду и отправит ETH на эти 20 тестовых учетных записей, то произойдет трагедия...
3、
Как описано ранее, 6 июля прошлого года друг Threepvault.eth отправил на тестовый аккаунт Hardhat сумму в размере 289 ETH.
0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266
Почему учетная запись 0xf39F Это первая тестовая учетная запись, созданная Hardhat, поэтому она используется чаще всего?
Таким образом, предполагается, что этот незадачливый программист скопировал первую тестовую учетную запись для завершения теста, но забыл переключить конфигурацию и отправил 289 ETH на адрес этой тестовой учетной записи в основной сети.
Если подсчитать, исходя из цены валюты на тот момент, 289ETH стоил 340 000 долларов США. Сейчас он стоит более 500 000 долларов США, что составляет трагедию в 3 миллиона юаней.
Что произошло дальше? Давайте посмотрим на данные в сети:
Этот ошибочный перенос произошел в блоке 15086827, который еще был эпохой POW в Эфириуме.
Этот блок представляет собой блок Flashbots, и MEV Searcher, к счастью, уловил эту «возможность» Backrun.
Этот ошибочный перевод был введен в пакет MEV, и арбитражная транзакция последовала за ним. После оплаты комиссии за газ в размере 4,8 ETH оставшиеся примерно 284 ETH на тестовом счете Hardhat 0xf39F были переведены на счет 0x043D.
От 100ETH до 10ETH, до 1ETH, и, наконец, не было потрачено даже 0,1ETH:
На данный момент этот актив стоимостью от 2 до 3 миллионов юаней следует считать безнадежным делом и никогда не вернется.
4、
Через сорок минут после трагедии наша жертва вышла в сеть.
Он отправил хакеру NFT. Этот NFT называется «Сообщение в бутылке», которое может упаковать фрагмент текста в изображение и преобразовать его в NFT.
В этом NFT он описал свое мысленное путешествие:
привет, я пытался застейкать узел валидатора
сегодня вечером. Пришлось отправить eth на горячий кошелек из-за ошибки в реестре.
Думал, что отправляю его на свой кошелек для развертывания контрактов... оказывается, это была общедоступная тестовая учетная запись в каске.
Обычно я очень осторожен (например, кошелек, отправляю небольшие тестовые транзакции), но сегодня вечером был неосторожен. Плохо себя чувствует, чувак.
Если вы это увидите, я бы хотел попытаться договориться о награде или чем-то подобном. Я сделал очень глупую ошибку
переводить:
Здравствуйте, сегодня вечером хочу запостить проверочный узел. Из-за ошибки в реестре eth пришлось отправить на горячий кошелек.
Я думал, что отправляю его на свой кошелек для развертывания контракта. (Только после завершения перевода) я узнал, что это была общедоступная тестовая учетная запись Hardhat.
Обычно я очень осторожен (аппаратный кошелек, отправка небольших тестовых транзакций и т. д.), но сегодня вечером был неосторожен. Плохо себя чувствовать.
Если вы видите это, я бы с удовольствием попробовал договориться о награде или чем-то подобном. Я сделал очень глупую ошибку
5、
Но хакер проигнорировал жертву.
Через пять часов после трагедии в сеть вышел владелец аккаунта 0x043D, хакер MEVSearcher. Он умело начал переводить активы, разделил 284 ETH и перевел их в Tornado один за другим.
6、
Однако на этом история не заканчивается.
Через 15 часов после трагедии наша жертва снова вышла в сеть.
Потеряв 289 ETH, я не знаю, как владелец попал сюда за последние 15 часов.
Теперь ему следовало бы смириться с реальностью потери 289 ETH, но он не принял ее полностью.
Владелец приобрел доменное имя ENS под названием
willpay100ethiffсредства будут возвращены наthreepvault.eth (если вы вернете деньги на Threepvault, я заплачу вам 100 ETH), отправил это доменное имя хакеру и сделал свое предложение.
Возможно, он хотел таким образом передать сообщение, надеясь, что хакер узнает об этом с совестью или проявит милосердие и переведет ему 189 ETH обратно.
В марте 2023 года прошло уже более полугода с момента произошедшей трагедии. Никаких действий по адресу хакера не было, никаких транзакций не проводилось, а на аккаунте жертвы не было записей от Торнадо. Я думаю, что на этом история заканчивается и продолжения не должно быть. Это темный лес, за ваши ошибки никто не заплатит, каждый может верить только в себя.