Tras la actualización de la red Zilliqa a la versión 9.3.0 el 3 de enero de 2024, la plataforma ZilBridge experimentó lo que se convertiría en una interrupción prolongada, lo que dejó varias transacciones sin confirmar y los usuarios no pudieron hacer uso de la plataforma.

Este problema se resolvió el 27 de marzo de 2024, cuando se restauró la funcionalidad completa en la plataforma.

ZilBridge es un puente Ethereum-Zilliqa impulsado por Carbon y Poly Network, y que permite unir fácilmente tokens fungibles ZRC-2 entre Zilliqa y Ethereum.

El equipo técnico de Zilliqa ha realizado un análisis de la causa raíz de esta interrupción que proporciona un desglose detallado del problema y cómo se resolvió.

La interrupción de ZilBridge, etiquetada como PIR-219, fue causada en principio porque la infraestructura de retransmisión de ZilBridge no se cerró cuando se implementó la actualización de red v9.3.0, lo que provocó que se transmitieran encabezados de bloque incorrectos a través de la infraestructura del puente.

Los factores que contribuyeron a los retrasos en la resolución de este problema incluyen la forma en que se implementan las actualizaciones de la red Zilliqa, las características de cómo PolyNetwork valida los bloques de transacciones, el descubrimiento de errores en el programa de retransmisión y el tiempo necesario para construir un nuevo bloque de génesis. y sincronizar transacciones históricas con PolyNetwork.

A partir del 27 de marzo, se superaron estos obstáculos y se restableció la funcionalidad total de la plataforma. ZilBridge ahora está nuevamente en línea y todas las transacciones previamente bloqueadas se sincronizaron y confirmaron.

Análisis de causa raíz: interrupción de ZilBridge

ZilBridge (en parte) utiliza un programa de retransmisión para transmitir transacciones adecuadas y bloquear encabezados a PolyNetwork, que luego maneja el transbordo de las solicitudes a Carbon y luego a otras cadenas para su entrega.

Cuando se implementa una actualización de la red principal en la red Zilliqa, ocurre lo siguiente:

  • La antigua red se vuelve inaccesible.

  • Se crea una nueva red a partir de la persistencia de la red antigua.

  • La nueva red reemplaza a la antigua.

  • La nueva red se hace accesible.

El equipo de Zilliqa notifica a los socios antes de una actualización de red programada para que puedan pausar su infraestructura mientras la red anterior se vuelve inaccesible. Este proceso imperfecto mejorará y se hará más dinámico y flexible con el lanzamiento de Zilliqa 2.0.

En el caso de la actualización Zilliqa v9.3.0, la infraestructura ZilBridge no se detuvo durante este proceso y continuó acumulando encabezados de los bloques vacíos que ahora produce la red anterior y los transmitió a PolyNetwork.

Esto significó que cuando la red volvió a funcionar con la versión 9.3.0, PolyNetwork se encontró con una membresía del comité DS bifurcada y se negó a sincronizarse con la nueva red.

PolyNetwork verifica si un bloque de transacción está firmado correctamente reconstruyendo el comité DS (Servicio de directorio) a partir de los encabezados de bloque DS informados por la cadena de bloques Zilliqa. PolyNetwork solo almacena el último comité DS y es imposible calcular los miembros anteriores del comité DS para bloques DS anteriores.

Esto significaba que necesitábamos regenerar el bloque de génesis para PolyNetwork, un proceso que requiere mucho tiempo y que tendríamos que comenzar desde un momento anterior al del bloque DS actual.

Como no es posible calcular las membresías del comité DS para bloques anteriores, el equipo de Zilliqa creó una herramienta que tomó la persistencia guardada y trabajó hacia adelante para reconstruir un bloque de génesis en cualquier punto de la cadena. Luego, esto se usó para generar y firmar un bloque a una altura de bloque justo después de la actualización de la red.

Se tuvieron que completar varias sincronizaciones de génesis para tener en cuenta el cambio en los nodos de protección entre las versiones de la red, y luego se descubrieron errores en el programa de retransmisión que provocaron que los bloques de transacciones no se sincronizaran con PolyNetwork.

Estos errores se solucionaron y luego encontramos un problema derivado del hecho de que PolyNetwork no puede almacenar la membresía del comité DS para un bloque DS del cual ya ha almacenado un hash.

Esto provocó que el retransmisor dejara de funcionar y requirió la creación de un bloque de génesis entre el último bloque DS que PolyNetwork había visto y el primer bloque DS con una transacción puente pendiente.

El repetidor se optimizó para acelerar esta sincronización que, una vez completada, finalmente resultó en que PolyNetwork se alineara con la red Zilliqa y la funcionalidad de ZilBridge se restaurara por completo el 27 de marzo de 2024.