1. 6 de julho de 2022, uma quarta-feira extremamente comum.
O programador Xiaosan finalmente terminou o teste final do contrato, girou na cadeira artificial e espreguiçou-se com entusiasmo.
“Ok, a próxima é outra tarefa hoje – construir e implantar um nó de piquetagem Ethereum.”
Dois meses depois, Ethereum está prestes a inaugurar a fusão. Xiaosan tem 289 ETH completos em sua carteira e planeja usá-los para gestão financeira.
“Mas parece haver um bug na carteira contábil hoje? Esqueça, vamos para a conta onde implantei o contrato. De qualquer forma, publicar e testar o contrato vai consumir um pouco de gás.”
Após digitar o roteiro de transferência, o garçom foi preparar uma xícara de café. Um café com leite comum, como uma quarta-feira comum.
Depois de voltar de fazer café, Xiaosan começou a atualizar o Etherscan enquanto bebia para ver se a transação que acabara de ser enviada foi confirmada. "Huh? Parece que a conta de pagamento não está correta?"
De repente, o coração da patroa deu um pulo, o café em sua mão caiu no chão e uma sensação de frio tomou conta de suas mãos e pés:
"Acabou! Enviei 289 ETH para a conta de teste do Hardhat!"
2.
Hardhat é a estrutura de desenvolvimento mais popular e comumente usada no Ethereum. Ele fornece uma série de ferramentas e funções para facilitar os desenvolvedores a desenvolver, testar e implantar contratos inteligentes na plataforma Ethereum.
Para os desenvolvedores, uma das funções mais importantes do Hardhat é criar ou bifurcar um ambiente Ethereum localmente para testes locais de contratos.
Quando você executa o comando npx hardhat node localmente,
Hardhat criará uma rede simulada localmente e gerará 20 contas EOA de teste fixas e chaves privadas correspondentes.
Ao mesmo tempo, a Hardhat também inicializará o saldo de 10.000 ETH para essas 20 contas EOA para facilitar que os desenvolvedores usem essas contas para publicar contratos locais para testes.
(Tendo 20 contas “no valor de centenas de milhões”, sou o rei do localhost!)
Observe que esta rede de simulação local não tem nada a ver com a rede principal Ethereum, e o saldo de 10.000 ETH nessas 20 contas EOA é apenas local.
No entanto, como as 20 contas geradas são fixas e as chaves privadas são públicas, qualquer pessoa na rede principal Ethereum pode usar essas chaves privadas para retirar os ativos dessas contas.
Se um engenheiro esquecer de trocar de ambiente após concluir o teste do contrato, tratar o ambiente de teste como o ambiente de rede principal e enviar ETH para essas 20 contas de teste, então uma tragédia acontecerá...
3.
Conforme descrito anteriormente, em 6 de julho do ano passado, uma quantia de 289 ETH foi enviada para a conta de teste Hardhat por um amigo threepvault.eth.
0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266
Por que a conta 0xf39F é a primeira conta de teste gerada pelo Hardhat, por isso é a mais usada?
Então especula-se que esse azarado programador copiou a primeira conta de teste para completar o teste, mas esqueceu de mudar a configuração e enviou 289 ETH para o endereço desta conta de teste na rede principal.
Se calculado com base no preço da moeda naquela época, 289ETH valia 340.000 dólares americanos. Agora vale mais de 500.000 dólares americanos, uma tragédia de 3 milhões de yuans.
O que aconteceu a seguir? Vamos dar uma olhada nos dados da rede:
Esta transferência errada ocorreu no bloco 15086827, que ainda era a era POW do Ethereum.
Este bloco é um bloco Flashbots, e um MEV Searcher felizmente aproveitou esta "oportunidade" do Backrun.
Esta transferência errada foi inserida em um pacote MEV, e a transação de arbitragem seguiu de perto. Depois de pagar a taxa de gás de 4,8 ETH, os aproximadamente 284 ETH restantes na conta de teste Hardhat 0xf39F foram transferidos para a conta 0x043D.
De 100ETH a 10ETH a 1ETH e, finalmente, nem mesmo 0,1ETH foi poupado:
Neste ponto, este ativo no valor de 2 a 3 milhões de yuans deve ser considerado uma causa perdida e nunca mais voltará.
4.
Quarenta minutos depois da tragédia, a nossa vítima ficou online.
Ele enviou um NFT para o hacker. Este NFT é chamado Message In a Bottle, que pode empacotar um pedaço de texto em uma imagem e lançá-lo em um NFT.
Neste NFT, ele descreveu sua jornada mental:
Olá, eu estava tentando apostar um nó validador
essa noite. Tive que enviar eth para uma carteira quente devido a um bug no razão.
Pensei que estava enviando para minha carteira de implantação de contrato. Acontece que era uma conta pública de teste de capacete de segurança.
Normalmente sou muito cuidadoso (carteira, enviar pequenas transações de teste), mas fui descuidado esta noite. Parece ruim, cara.
Se você vir isso, adoraria tentar negociar uma recompensa ou algo semelhante. Eu cometi um erro muito estúpido
traduzir:
Olá, quero apostar um nó de verificação esta noite. Devido a um bug no livro-razão, a eth teve que ser enviada para a carteira quente.
Achei que estava enviando para minha carteira de implantação de contrato. (Somente após a conclusão da transferência) descobri que era uma conta de teste pública do Hardhat.
Normalmente sou muito cuidadoso (carteira de hardware, envio de pequenas transações de teste, etc.), mas fui descuidado esta noite. Sentindo-se mal.
Se você vir isso, adoraria tentar negociar uma recompensa ou algo semelhante. Eu cometi um erro muito estúpido
5.
Mas o hacker ignorou a vítima.
Cinco horas após a tragédia, o proprietário da conta 0x043D, o hacker MEVSearcher, entrou online. Ele habilmente começou a transferir ativos, dividiu os 284 ETH e os transferiu para o Tornado um por um.
6.
No entanto, a história não termina aqui.
15 horas depois da tragédia, a nossa vítima voltou a ficar online.
Depois de perder 289 ETH, não sei como o dono chegou aqui nas últimas 15 horas.
Agora ele deveria ter aceitado a realidade de perder 289 ETH, mas não aceitou totalmente.
O proprietário comprou um nome de domínio ENS chamado
willpay100ethiffundsarereturnedtotrêspvault.eth (se você devolver o dinheiro para threepvault, pagarei 100 ETH), enviei esse nome de domínio ao hacker e fiz sua oferta.
Talvez ele quisesse transmitir a mensagem dessa forma, esperando que o hacker descobrisse com consciência ou mostrasse misericórdia e transferisse 189 ETH de volta para ele.
Em março de 2023, já se passou mais de meio ano desde que a tragédia ocorreu. Não houve nenhuma ação no endereço do hacker, nenhuma transação foi emitida e a conta da vítima não teve nenhuma entrada do Tornado. Acho que essa história termina aqui e não deve haver continuação. Esta é a floresta escura, ninguém pagará pelos seus erros, todos só podem acreditar em si mesmos.