1. 6 de julio de 2022, un miércoles sumamente ordinario.

El programador Xiaosan finalmente terminó la prueba final del contrato, giró en la silla artificial y se estiró con entusiasmo.

"Bien, la siguiente es otra tarea hoy: construir e implementar un nodo de participación de Ethereum".

Dos meses después, Ethereum está a punto de iniciar la fusión. Xiaosan tiene 289 ETH completos en su billetera y planea usarlos para la gestión financiera.

"¿Pero hoy parece haber un error en la billetera del libro mayor? Olvídalo, vayamos a la cuenta donde implementé el contrato. De todos modos, publicar y probar el contrato consumirá algo de gasolina".

Después de escribir el guión de transferencia, el camarero fue a preparar una taza de café. Un café con leche normal y corriente, como un miércoles normal y corriente.

Después de regresar de preparar café, Xiaosan comenzó a actualizar Etherscan mientras bebía para ver si la transacción que acababa de enviar estaba confirmada. "¿Eh? ¿Parece que la cuenta de pago no es correcta?"

De repente, el corazón de la señora dio un vuelco, el café que tenía en la mano cayó al suelo y una sensación de frío recorrió sus manos y pies:

"¡Se acabó! ¡Envié 289 ETH a la cuenta de prueba de Hardhat!"

2 、

Hardhat es el marco de desarrollo más común y utilizado en Ethereum. Proporciona una serie de herramientas y funciones para facilitar a los desarrolladores desarrollar, probar e implementar contratos inteligentes en la plataforma Ethereum.

Para los desarrolladores, una de las funciones más importantes de Hardhat es crear o bifurcar un entorno Ethereum localmente para realizar pruebas locales de contratos.

Cuando ejecuta el comando del nodo npx hardhat localmente,

Hardhat creará una red simulada localmente y generará 20 cuentas EOA de prueba fijas y las claves privadas correspondientes.

Al mismo tiempo, Hardhat también inicializará el saldo de 10,000 ETH para estas 20 cuentas EOA para facilitar que los desarrolladores utilicen estas cuentas para publicar contratos locales para pruebas.

(Al tener 20 cuentas "que valen cientos de millones", ¡soy el rey de localhost!)

Tenga en cuenta que esta red de simulación local no tiene nada que ver con la red principal de Ethereum, y el saldo de 10,000 ETH en estas 20 cuentas EOA es solo local.

Sin embargo, dado que las 20 cuentas generadas son fijas y las claves privadas son públicas, cualquier persona en la red principal de Ethereum puede usar estas claves privadas para retirar los activos de estas cuentas.

Si un ingeniero se olvida de cambiar de entorno después de completar las pruebas del contrato, trata el entorno de prueba como el entorno de red principal y envía ETH a estas 20 cuentas de prueba, entonces ocurrirá una tragedia...

3 、

Como se describió anteriormente, el 6 de julio del año pasado, un amigo threepvault.eth envió una suma de 289 ETH a la cuenta de prueba de Hardhat.

0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266

¿Por qué la cuenta 0xf39F es la primera cuenta de prueba generada por Hardhat, por lo que es la más utilizada?

Entonces se especula que este desafortunado programador copió la primera cuenta de prueba para completar la prueba, pero olvidó cambiar la configuración y envió 289 ETH a la dirección de esta cuenta de prueba en la red principal.

Si se calcula en función del precio de la moneda en ese momento, 289ETH valía 340.000 dólares estadounidenses. Ahora vale más de 500.000 dólares estadounidenses, una tragedia de 3 millones de yuanes.

¿Qué pasó después? Echemos un vistazo a los datos en cadena:

Esta transferencia errónea ocurrió en el bloque 15086827, que todavía era la era POW de Ethereum.

Este bloque es un bloque de Flashbots y, afortunadamente, un buscador MEV aprovechó esta "oportunidad" de Backrun.

Esta transferencia errónea se ingresó en un paquete MEV y la transacción de arbitraje siguió de cerca. Después de pagar la tarifa de gas de 4,8 ETH, los aproximadamente 284 ETH restantes en la cuenta de prueba Hardhat 0xf39F se transfirieron a la cuenta 0x043D.

De 100ETH a 10ETH a 1ETH, y finalmente no se salvó ni siquiera 0.1ETH:

En este punto, este activo valorado entre 2 y 3 millones de yuanes debería considerarse una causa perdida y nunca volverá a recuperarse.

4 、

Cuarenta minutos después de la tragedia, nuestra víctima se conectó.

Envió un NFT al hacker. Este NFT se llama Message In a Bottle, que puede empaquetar un fragmento de texto en una imagen y convertirlo en un NFT.

En este NFT, describió su viaje mental:

Hola, estaba intentando apostar un nodo validador.

esta noche. Tuve que enviar eth a una billetera activa debido a un error en el libro mayor.

Pensé que lo estaba enviando a mi billetera de implementador de contrato... resulta que era una cuenta de prueba pública de casco.

Normalmente soy bastante cuidadoso (billetera, envío pequeñas transacciones de prueba), pero esta noche fui descuidado. Se siente mal hombre.

Si ve esto, me encantaría intentar negociar una recompensa o algo similar. cometí un error realmente estúpido

traducir:

Hola, quiero apostar un nodo de verificación esta noche. Debido a un error en el libro mayor, se tuvo que enviar eth a la billetera activa.

Pensé que lo estaba enviando a la billetera de implementación de mi contrato... (Solo después de que se completó la transferencia) descubrí que era una cuenta de prueba pública de Hardhat.

Normalmente soy muy cuidadoso (billetera de hardware, envío de pequeñas transacciones de prueba, etc.), pero esta noche fui descuidado. Sentirse mal.

Si ve esto, me encantaría intentar negociar una recompensa o algo similar. cometí un error muy estúpido

5 、

Pero el hacker ignoró a la víctima.

Cinco horas después de la tragedia, el propietario de la cuenta 0x043D, el hacker MEVSearcher, se conectó. Hábilmente comenzó a transferir activos, dividió los 284 ETH y los transfirió a Tornado uno por uno.

6 、

Sin embargo, la historia no termina aquí.

15 horas después de la tragedia, nuestra víctima volvió a conectarse.

Después de perder 289 ETH, no sé cómo llegó el propietario hasta aquí en las últimas 15 horas.

Ahora debería haber aceptado la realidad de perder 289 ETH, pero no la ha aceptado por completo.

El propietario compró un nombre de dominio ENS llamado

pagará 100eth si los fondos se devuelven a threepvault.eth (si devuelve el dinero a threepvault, le pagaré 100 ETH), envió este nombre de dominio al hacker e hizo su oferta.

Tal vez quería transmitir el mensaje de esta manera, esperando que el hacker se enterara con conciencia o mostrara misericordia y le transfiriera 189 ETH.

En marzo de 2023, ha pasado más de medio año desde que ocurrió la tragedia. No ha habido ninguna acción en la dirección del hacker, no se han emitido transacciones y la cuenta de la víctima no ha tenido ninguna entrada de Tornado. Creo que esta historia termina aquí y no debería haber más seguimiento. Este es el bosque oscuro, nadie pagará por tus errores, cada uno sólo puede creer en sí mismo.