Post-mortem sobre la inestabilidad de SCCN y MCCN de THORChain THORChain Mayo de 2021

Ambas redes sufrieron inestabilidad. Se perdieron fondos, pero se reembolsaron y reembolsaron. Las redes finalmente lograron estabilidad después de que se implementaron las correcciones.

Ambas redes sufrieron inestabilidad durante las últimas dos semanas. Se perdieron alrededor de $ 800k en fondos en total de ambas redes, lo que provocó que los nodos se redujeran en alrededor de $ 1.2 millones. La tesorería cubrió completamente todas las pérdidas y los nodos fueron reembolsados ​​con todas las barras. Las razones de las pérdidas de fondos fueron variadas y complejas, pero finalmente el equipo y la comunidad las resolvieron. Los ingenieros de protocolo han implementado arreglos para detener la reaparición.

La inestabilidad comenzó cuando más de 1/3 de los nodos perdieron repentinamente la conexión con sus nodos de Binance. Esto se debió en parte a que algunos nodos tenían una configuración con un pequeño clúster para Binance, que se llenó y detuvo el demonio. Esto hizo que las transacciones entrantes no pudieran llegar a un consenso y se ignoraran.

Observaciones manuales

El equipo lanzó actualizaciones a los nodos para ayudarlos a poner en marcha sus demonios, además de lanzar una función para permitir que los nodos realicen una observación manual de las transacciones para llegar a un consenso. Desafortunadamente, parecía que algunos nodos no hacían esto con un hilo completamente sincronizado y eso provocó que el nodo entrara en paro por consenso. Esto parece ser un error con Cosmos V0.37. Los nodos averiados tuvieron que SALIR de la red para recuperar sus nodos.

Gran abandono

Debido a la salida de muchos nodos, la bóveda que se retira no tenía muchos nodos operativos. SCCN utiliza partidos TSS delegados y continuará haciendo bucles hasta que encuentre un comité que esté activo.

Debido a que muchos nodos estaban fuera de línea, tomó mucho tiempo encontrar una fiesta en línea antes de completar finalmente la migración.

Pérdida de fondos

Además, hubo un error en el mensaje tssKeySignFail que volvió a colapsar. Esto provocó una pérdida de fondos.

Las transacciones salientes se reprogramaban continuamente (ya que la red pensó que no se enviaron), lo que provocó que la red sangrara fondos en transacciones duplicadas. Cuando finalmente fueron observados, los nodos fueron acusados ​​de robar y cortar. En total, se perdió alrededor de $ 1 millón.

TradeHalt

En este punto, el sistema estaba muy deteriorado y los usuarios seguían enviando fondos. El equipo tomó la decisión de detener el comercio, que es una configuración de mimir que establece una bandera y detiene todas las observaciones posteriores (pero no inhibe los retiros). Además, reembolsa a través de Asgard y detuvo la pérdida de fondos.

Todos los bots e interfaces deben estar suscritos a esta bandera.

V0.19.4

Finalmente, se publicó V0.19.4 que contenía la solución de la causa raíz del error tssKeySignFail. Esto fue adoptado por los nodos y la red se recuperó por completo algún tiempo después.

TradingHalt2

Inmediatamente después de la actualización de V0.19.4, el sistema volvió a entrar en el caos y el comercio se detuvo nuevamente. Una de las correcciones en V0.19.4 provocó un problema de seguimiento que provocó la pérdida de consenso nuevamente en los límites. El equipo usó a mimir para detener el intercambio y apresurar el V0.19.5 que solucionó el problema.

Resumen

La causa principal fue el Binance Daemon estrellado, lo que provocó que los nodos perdieran las observaciones, pero la corrección de las observaciones manuales hizo que algunos nodos entraran en la parada del consenso y tuvieran que irse. Tuvieron que salir tantos nodos que la bóveda que se retiraba entró en grandes cantidades de falla de TSS. Un error en tssFailure tx causado por thord se bloqueó y causó la pérdida de fondos de tx duplicado, lo que provocó la invocación de TradingHalt. Una solución apresurada para los problemas de tssFailure creó un nuevo problema en el que los reinicios perderían observaciones, lo que provocaría TradingHalt2. Finalmente se arregló y la red se recuperó.

En resumen, un pequeño problema en el clúster para los nodos de Binance causó un efecto en cascada durante dos semanas seguidas, descubriendo más problemas, con algunos propios en el camino. SCCN tiene más de $ 800 millones en fondos, pero solo $ 800k en realidad se gastaron dos veces, con $ 1.2 millones recortados de los nodos. La tesorería aseguró íntegramente las pérdidas. Algunos de los fondos en realidad fueron devueltos por varios miembros de la comunidad que recibieron las transacciones de doble gasto.

MCCN no tiene ninguno de los errores encontrados anteriormente.

Después de que SCCN se recuperó, los nodos de MCCN inmediatamente comenzaron a informar pérdidas de fondos y eventos de tala. El equipo descubrió muy rápidamente que BitcoinCash mostraba un comportamiento inesperado y se apresuró a solucionarlo para detener la pérdida de fondos. La red se recuperó, se perdieron alrededor de $ 100k.

Direcciones de BitcoinCash

El equipo sabía que BitcoinCash tiene dos formatos de dirección (heredado y nuevo, formatos de efectivo). Sin embargo, nadie sabía que BitcoinCash convertirá silenciosamente la dirección heredada en la dirección de efectivo si gasta en una dirección heredada. Parece que hay una conversión de legado -> efectivo, y esto se hace en el mempool de BCH o en la propia cadena.

El desencadenante fue una actualización enviada a xchainjs para volver a los formatos de dirección heredados, ya que las direcciones de efectivo tienen prefijos que son molestos para las billeteras. Esta decisión fue tomada por los equipos de billetera (aunque fue incorrecto).

Esto luego hizo que THORChain procesara un intercambio a una dirección heredada, pero se convirtió a formato de efectivo. THORChain no pudo identificar la dirección en la transacción final, cortó el nodo y luego lo reprogramó. Se reprogramaba continuamente (THORChain es resistente a la censura) hasta que el equipo se apresuró a actualizar para detenerlo.

Resumen

Se perdieron alrededor de $ 100k, aunque el miembro de la comunidad que recibió el doble gasto devolvió el 90% de los fondos después de que se negoció una recompensa del 10%.

Actualmente, la red no admite direcciones heredadas, aunque eso se solucionará en la próxima actualización.

Además, el equipo está considerando diseñar la capacidad de una minoría (> 33%) de nodos para detener / aislar completamente una cadena durante un máximo de 72 horas. Una minoría del 33% de los nodos ya puede detener THORChain si lo desea, por lo que esto no cambia las características de la red. Si los nodos detectan un problema con una determinada cadena, una minoría de ellos puede moverse rápidamente para aislarla durante 3 días, antes de que se reactive. Este debería ser suficiente tiempo para solucionarlo.

Además, el equipo está agregando un retroceso exponencial a las transacciones reprogramadas, por lo que cuanto más se reprograme, más lento se intentará. Esto le dará tiempo para entender por qué.

Se observaron problemas importantes de inestabilidad en ambas redes que ataron al equipo y a la comunidad durante dos semanas. Sin embargo, la red salió adelante, la comunidad devolvió los fondos y se logró la estabilidad. THORChain es tecnología embrionaria, que no tiene ni siquiera 12 meses. MCCN tiene un mes. Habrá caos, el equipo tiene una tesorería para asegurar pérdidas (por ahora) y se avanza.

Una vez que se encuentran todos los errores, la red debe ser tan estable como las cadenas a las que está conectada.