1. 2022年7月6日、ごく普通の水曜日。
プログラマーのシャオサンは、ついに最終契約テストを終え、人工椅子の上でくるりと回転し、興奮しながら伸びをしました。
「さて、次は今日のもう一つのタスクです - イーサリアムステーキングノードの構築とデプロイです。」
2 か月後、イーサリアムはマージを目前に控えており、Xiaosan 氏はウォレットに 289 ETH を全額保有しており、それをステーキングの財務管理に使用する予定です。
「しかし、今日レジャーウォレットにバグがあるようです? それは忘れて、コントラクトをデプロイしたアカウントに行きましょう。とにかく、コントラクトの公開とテストにはガスがいくらか消費されます。」
転送スクリプトを入力した後、ウェイターはコーヒーを作りに行きました。いつもの水曜日と同じ、普通のラテ。
Xiaosan さんはコーヒー作りから戻った後、送信したばかりのトランザクションが確認されたかどうかを確認するために、飲みながら Etherscan を更新し始めました。 「あれ?支払い口座が間違っているような?」
突然、女主人の心臓は高鳴り、手に持っていたコーヒーが地面に落ち、手足に冷たい感触が起こりました。
「終わりました!Hardhat テストアカウントに 289 ETH を送金しました!」
2、
Hardhat は、イーサリアムで最も主流で一般的に使用されている開発フレームワークであり、開発者がイーサリアム プラットフォーム上でスマート コントラクトを開発、テスト、展開することを容易にする一連のツールと機能を提供します。
開発者にとって、Hardhat の最も重要な機能の 1 つは、コントラクトのローカル テストのためにイーサリアム環境をローカルに作成またはフォークすることです。
npxhardhatnodeコマンドをローカルで実行すると、
Hardhat は、シミュレートされたネットワークをローカルに作成し、20 個の固定テスト EOA アカウントと対応する秘密キーを生成します。
同時に、Hardhat はこれら 20 の EOA アカウントの残高 10,000 ETH も初期化し、開発者がこれらのアカウントを使用してテスト用のローカル コントラクトを公開できるようにします。
(「数億の価値がある」アカウントを 20 個持っているので、私はローカルホストの王です!)
このローカル シミュレーション ネットワークはイーサリアムのメイン ネットワークとは何の関係もなく、これら 20 個の EOA アカウントの 10,000 ETH 残高はローカルのみであることに注意してください。
ただし、生成された 20 個のアカウントは固定されており、秘密キーは公開されているため、イーサリアム メインネット上の誰もがこれらの秘密キーを使用して、これらのアカウント内の資産を引き出すことができます。
エンジニアが契約テスト終了後に環境を切り替えるのを忘れ、テスト環境をメインのネットワーク環境として扱い、この20個のテストアカウントにETHを送金してしまうと悲劇が起こります…。
3、
前述したように、昨年 7 月 6 日、友人のthreepvault.eth によって合計 289 ETH が Hardhat テスト アカウントに送金されました。
0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266
アカウントが 0xf39F なのはなぜですか? これは Hardhat によって生成された最初のテスト アカウントであるため、最も一般的に使用されています。
したがって、この不運なプログラマーは、テストを完了するために最初のテスト アカウントをコピーしましたが、構成を切り替えるのを忘れ、メイン ネットワーク上のこのテスト アカウントのアドレスに 289 ETH を送信したと推測されます。
当時の通貨価格に基づいて計算すると、289ETHは34万ドルの価値があり、現在では50万ドル以上の価値があり、300万元の悲劇です。
次に何が起こったのでしょうか? オンチェーンのデータを見てみましょう。
この誤送金は、まだイーサリアムの捕虜時代であったブロック15086827で発生しました。
このブロックは Flashbot ブロックであり、MEV Searcher は幸運にもこの Backrun の「機会」を捉えました。
この誤った送金は MEV パッケージに入力され、裁定取引が 4.8 ETH のガス料金を支払った後、ハードハット テスト アカウント 0xf39F の残りの約 284 ETH がアカウント 0x043D に送金されました。
100ETHから10ETH、そして1ETH、そして最終的には0.1ETHさえも免れませんでした:
現時点で、この200万~300万元相当の資産は失われたものとみなされ、二度と戻ってくることはない。
4、
悲劇の 40 分後、被害者がオンラインにアクセスしました。
彼はハッカーにNFTを送信しました。このNFTはメッセージ・イン・ア・ボトルと呼ばれるもので、テキストを画像にパッケージ化してNFTにキャストできます。
このNFTの中で、彼は自分の精神的な旅について次のように説明しました。
こんにちは、バリデータノードをステークしようとしていました
今夜。元帳のバグのため、eth をホットウォレットに送信する必要がありました。
自分の契約デプロイヤーウォレットに送信していると思っていましたが、公開ハードハットテストアカウントであることが判明しました。
私は普段はかなり注意深いのですが(ハードウェアウォレット、小さなテストトランザクションの送信)、今夜は不注意でした。申し訳ない気持ちです。
もしこれを見たなら、ぜひ賞金交渉をしたいです。本当に愚かなミスを犯しました
翻訳してください:
こんにちは、今夜検証ノードをステーキングしたいと思っています。台帳のバグにより、イーサリアムはホットウォレットに送られる必要がありました。
契約デプロイメントウォレットに送信していると思っていましたが、(転送が完了した後でのみ) それがパブリック Hardhat テスト アカウントであることがわかりました。
私は普段は非常に注意していますが(ハードウェアウォレット、小規模なテストトランザクションの送信など)、今夜は不注意でした。気分が悪いです。
これを見た場合は、報奨金などの交渉をしてみたいと思います。とても愚かな間違いをしてしまいました
5、
しかしハッカーは被害者を無視した。
悲劇から 5 時間後、0x043D アカウントの所有者である MEVSearcher ハッカーがオンラインに現れ、巧みに資産の転送を開始し、284 ETH を分割して 1 つずつ Tornado に転送しました。
6、
しかし、話はここで終わりません。
悲劇から 15 時間後、被害者は再びオンラインになりました。
289 ETH を失った後、所有者が過去 15 時間でどうやってここに来たのかわかりません。
今、彼は 289 ETH を失うという現実を受け入れるべきですが、完全には受け入れていません。
所有者は ENS ドメイン名を購入しました。
willpay100ethiffundsarereturnedtothreepvault.eth (threepvault にお金を返してくれたら、100 ETH を支払います) とこのドメイン名をハッカーに送信し、申し出を行いました。
おそらく彼は、ハッカーが良心をもって発見するか、慈悲を示して 189 ETH を自分に送金してくれることを期待して、この方法で情報を伝えたかったのでしょう。
2023 年 3 月、悲劇が発生してから半年以上が経過しましたが、ハッカーのアドレスに対するアクションはなく、トランザクションは発行されておらず、被害者のアカウントには Tornado からのエントリがありませんでした。この話はここで終わりだと思いますので、続報は無いはずです。ここは暗い森です、誰もあなたの間違いを償ってはくれません、誰もが自分自身を信じることしかできません。