1、2022年7月6日,一个普通得不能再普通的周三。程序员小三终于做完了最后的合约测试,在人工学椅上转了一圈,兴奋地伸了个懒腰。「好了,接下来是今天的另一个任务——搭建和部署一个以太坊质押节点。」两个月后,以太坊即将迎来Merge,小三的钱包里足足有289个ETH,打算把它们拿去质押理理财。「不过今天ledger钱包好像有点bug?算了,先转到我部署合约的那个账号去吧,反正到时候发布和测试合约也要消耗一些Gas。」在敲下了转账脚本之后,小三去冲了一杯咖啡。一杯普通的拿铁,跟这个普通的周三一样平淡无奇。冲完咖啡回来,小三一边喝一边开始在Etherscan上刷新,看看刚刚发出的交易确认了没有。「嗯?好像收款账号不太对?」突然,小三心里咯噔一下,手里的咖啡滑落到地上,手脚冰凉的感觉一下子涌了上来:「完蛋了!我把289个ETH发到Hardhat测试账号里了!」2、Hardhat是以太坊最主流和常用的开发框架,它提供了一系列工具和功能,方便开发者在以太坊平台上进行智能合约的开发、测试和部署。对于开发人员来说,Hardhat有一个最重要的功能,就是在本地创建或者Fork一套以太坊环境,用来做合约的本地测试。当你在本地执行npx hardhat node命令时,Hardhat会在本地创建一个模拟网络,同时生成20个固定的测试EOA账号及对应的私钥。与此同时,Hardhat还会给这20个EOA账号初始化配置10000ETH余额,方便开发者用这些账号发布本地合约进行测试。(坐拥20个「价值上亿」的账号,I'm the king of localhost!)注意,这个本地的模拟网络和以太坊主网没有任何关系,这20个EOA账号上的10000ETH余额也只是在本地上的。但是,由于生成的这20个账号是固定的,并且私钥是公开的,所以在以太坊主网上,任何人都可以用这些私钥提走这些账号里面的资产。假如一个工程师在做完合约测试之后,忘记切换环境,把测试环境当成了主网环境,并且往这20个测试账号发送了ETH,那么惨案就发生了......3、正如前面描述的那样,去年7月6日,一笔289ETH被 threepvault.eth这位朋友,发送到了Hardhat测试账号0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266为什么是0xf39F这个账号呢?它是 Hardhat生成的第一个测试账号,因此最为常用。所以推测是这位倒霉的程序员,把第一个测试账号复制过来做完测试,结果忘记切换配置,在主网上把289ETH发送到这个测试账号的地址里去了。如果按当时的币价计算,289ETH价值34万美元,放到现在的话价值50多万美元,300万人民币的惨案。接下来发生了什么?我们看一下链上数据:这笔错误的转账,发生在15086827区块,当时还是以太坊的POW时代。这个区块是一个Flashbots块,一个MEV Searcher幸运地捕捉到了这个Backrun「机会」。这笔错误的转账被打进了一个MEV包,套利交易紧随其后,在支付了4.8ETH的Gas费之后,把Hardhat测试账号0xf39F里剩余的大约284ETH,转移到了0x043D这个账号中。从100ETH到10ETH再到1ETH,最后连0.1ETH都没有放过:至此,这笔价值200~300万人民币的资产应该算是泥牛入海,有去无回了。4、惨案发生40分钟后,我们的苦主就上线了。他给黑客发送了一个NFT,这个NFT叫Message In a Bottle,可以把一段文本包装成图片铸造成NFT。他在这个NFT里,描述了他的心路历程:hello I was tring to stake a validator nodetonight. Had to send eth to a hot wallet due to a ledger bug.Thought I was sending it to my contract deployer wallet.. turns out it was a public hardhat test account.I'm typically pretty careful (hw wallet, send small test transactions) but was careless tonight. Feels bad man.On the off chance you see this, I'd love to try to negotiate a bounty or something similar. I made a really stupid mistake翻译一下:你好,今晚我想质押一个验证节点。由于ledger有bug,不得不将eth 发送到热钱包。我以为我是将它发送到了我的合同部署钱包..(转完之后才)发现这是一个公开的Hardhat测试账号。我通常非常小心(硬件钱包,发送小的测试交易等)但今晚很粗心。感觉很糟糕。如果你看到这个,我很乐意尝试谈判赏金或类似的东西。我犯了一个非常愚蠢的错误5、不过黑客并没有理会苦主。惨案发生5个小时后,0x043D账号的所有者一一也就是这个MEVSearcher黑客上线了,它熟练地开始转移资产,把这284个ETH拆散,大大小小一笔一笔转移到了Tornado当中6、不过,故事到这里并未结束。惨案发生后15小时,我们的苦主再次上线了。在丢了289ETH之后,不知道这15小时,苦主是怎么过来的。现在他应该已经接受了失去289ETH这个现实,但又没有完全接受。苦主购买了一个ENS域名,叫willpay100ethiffundsarereturnedtothreepvault.eth(如果你把钱还给我threepvault,我会支付你100个 ETH),并且把这个域名发给了黑客,提出了他的 Offer。也许他想通过这种方式传达信息,希望黑客能良心发现或者大发慈悲,转回给他189ETH吧。2023年3月,距离惨案发生已经过去了大半年,黑客的地址至今没有任何动作,也没有任何交易发出,苦主的账号也没有任何来自Tornado的入账。我想这个故事到这里就完结了,应该不会有后续了。这就是黑暗森林,没有人会为你的失误买单,所有人能相信的只有自己。
Raziščite vsebino za vas
Prijavite se zdaj in pridobite priložnost, da zaslužite nagrade v vrednosti 100 USDT!