Recuperacion de Activos y Mensajes a la cadena nativa original de Lisk

febrero 06, 2022 VICTOR HUGO LAZARTE 0 Comments

 


En esta publicación de blog, mostraremos cómo los tokens, y en general cualquier activo almacenado en el estado de una cadena lateral terminada, se pueden recuperar a la cadena nativa original. Además, también cubriremos las causas de terminación tanto en la cadena principal como en otra cadena lateral. Este tema también se introdujo por primera vez en Lisk.js: Lisk Interoperability: Recovering Tokens and NFTs from Terminated Sidechains .

 

Descripción general

Una cadena lateral terminada ya no puede enviar ni recibir mensajes entre cadenas. Efectivamente, la cadena lateral está desconectada del resto del ecosistema y los activos (como tokens) ya no se pueden mover hacia y desde ella. En particular, esto significa que los usuarios no pueden enviar los activos que tenían en la cadena lateral de regreso a la cadena nativa original (la cadena donde se creó el activo).

El mecanismo de recuperación aborda este problema. Usando comandos dedicados que son parte del módulo de Interoperabilidad, los usuarios pueden recuperar sus activos directamente en la cadena nativa. Además, los mensajes pendientes que quedaron atascados sin procesar en la bandeja de salida de la cadena terminada también se pueden recuperar y su efecto revertir en la cadena de envío.

Glosario

Terminar una cadena: cuando se termina una cadena lateral, ya no se pueden intercambiar mensajes entre cadenas. Se crea una cuenta estatal rescindida en el estado, lo que permite a los usuarios recuperar activos.
Cuenta de estado terminada: estructura de datos que contiene la raíz de estado de la cadena lateral terminada. Se inicializa con la información contenida en el último certificado de cadena lateral publicado en la cadena principal.
Cuenta de bandeja de salida terminada: estructura de datos que contiene la raíz de la bandeja de salida junto con el tamaño de la bandeja de entrada de la cadena principal de la cadena lateral terminada, lo que indica la cantidad de mensajes que se procesaron en ella.
Mensaje de finalización de la cadena lateral: Mensaje creado en la cadena principal cuando un mensaje debe enrutarse a una cadena terminada o inactiva. Este mensaje se envía a la cadena de envío original, lo que le permite crear una cuenta de estado terminada.

Causas de Terminación

Una cadena lateral se puede cancelar por violar el requisito de actividad (solo en la cadena principal) o por violar el protocolo de un módulo, como se explica en las siguientes secciones.

Requisito de vitalidad

El ecosistema Lisk consiste en una colección de cadenas de bloques que siguen el protocolo Lisk. La cadena principal es la parte más importante del ecosistema, siendo el punto central que conecta las cadenas entre sí y les permite intercambiar mensajes entre cadenas . Las cadenas laterales deben publicar regularmente actualizaciones entre cadenas en la cadena principal (al menos una vez cada 30 días) para indicar que todavía están activas y en funcionamiento. Este "requisito de vida" garantiza que los usuarios eventualmente podrán reclamar los fondos que se enviaron a una cadena lateral, incluso si esto deja de funcionar. En el caso de que no se cumpla este requisito, la cadena lateral finaliza y puede comenzar el proceso de recuperación.

Violación del protocolo del módulo de token

Cuando los tokens se transfieren a través del ecosistema, la cadena nativa del token realiza un seguimiento de su ubicación en una cuenta de depósito en garantía. Cuando los tokens regresan de una cadena, la cantidad almacenada en la cuenta depositada se reduce, lo que garantiza que no se acuñaron tokens adicionales en la otra cadena (consulte la sección "Mantener el suministro total de tokens" en la entrada de blog " Un nuevo módulo de tokens "). 

Sin embargo, si un mensaje entre cadenas intenta transferir una cantidad de tokens mayor que la almacenada en la cuenta de depósito en garantía, la cadena de envío finaliza y se crea una cuenta de estado finalizada. Si la cadena nativa es la cadena principal (por lo tanto, el token es el token LSK), la cuenta de estado terminada almacena la raíz de estado de la cadena lateral; de lo contrario, almacena la raíz de la cadena principal, que luego se puede usar para inicializar la recuperación con un comando de inicialización de recuperación de estado.

Violación del protocolo de módulo personalizado

Las cadenas laterales se pueden terminar si violan el protocolo de un módulo personalizado. Esto se hace llamando a la API de terminación de cadena del módulo de interoperabilidad. Tenga en cuenta que una cadena lateral terminada por este motivo no se termina en todo el ecosistema, es decir, es muy posible que aún esté activa e intercambie mensajes con otras cadenas. Sin embargo, la comunicación con la cadena lateral que la terminó se interrumpe. 

Comandos de recuperación

El módulo de Interoperabilidad define los siguientes 4 comandos de recuperación, descritos en esta sección. Estos comandos usan pruebas de inclusión contra la raíz de un árbol de Merkle. Para recordar cómo funciona esto, consulte las dos publicaciones de blog anteriores: " Introducción a Lisk Tree " y " Sparse Merkle Trees and the New State Model ".

Inicialización de recuperación de estado

Este comando tiene dos propósitos. Se puede usar para establecer la raíz del estado de una cuenta de estado terminada en una cadena lateral o para terminar otra cadena lateral directamente.

En el primer caso, el comando contiene una prueba de inclusión contra la raíz de estado de la cadena principal almacenada en la cuenta de estado terminada, demostrando el valor de la raíz de estado de la cadena lateral terminada.

En el segundo caso, el comando contiene una prueba de inclusión contra la raíz del estado de la cadena principal, lo que demuestra que otra cadena lateral está terminada (el estado en la cuenta de la cadena se establece en 'terminado') o se viola la condición de actividad (como la marca de tiempo del último certificado es demasiado antiguo).

En ambos casos, el comando establece la raíz de estado de cadena lateral en la cuenta de estado terminada, de modo que se puedan emitir comandos de recuperación de estado.

Inicialización de recuperación de mensajes

Una vez que se ha creado una cuenta de estado cancelada en la cadena principal, los usuarios pueden enviar este comando para inicializar la cuenta de bandeja de salida cancelada correspondiente. Este comando contiene la cuenta de canal de la cadena principal almacenada en el estado de la cadena lateral terminada y una prueba de inclusión contra la raíz del estado almacenada en la cuenta de estado terminada correspondiente. Los datos del canal de la cadena principal son necesarios para obtener la cantidad de mensajes que se procesaron en la cadena lateral terminada (correspondiente al tamaño de la bandeja de entrada del canal).

El comando establece la raíz de la bandeja de salida y el tamaño de la bandeja de entrada en la cuenta de la bandeja de salida terminada, de modo que se puedan emitir comandos de recuperación de mensajes.

Recuperación del Estado

Este comando se usa para recuperar activos (por ejemplo, tokens fungibles y no fungibles) de una cadena lateral terminada. El usuario demuestra la existencia de una entrada en el estado de la cadena lateral finalizada con una prueba de inclusión contra la raíz del estado almacenada en la cuenta finalizada de la cadena lateral. A continuación, el módulo correspondiente se encarga de la recuperación del estado (por ejemplo, el módulo de ficha reembolsaría al usuario) y se actualiza la raíz del estado.

Recuperación de mensajes

Este comando se usa para recuperar mensajes pendientes de la bandeja de salida de una cadena lateral terminada. El usuario demuestra con una prueba de inclusión validada contra la raíz de la bandeja de salida almacenada en la cuenta de la bandeja de salida terminada que el mensaje está en la bandeja de salida de la cadena lateral terminada. El mensaje nonce se compara con el tamaño de la bandeja de entrada (también almacenada en la cuenta de la bandeja de salida finalizada) para verificar que el mensaje aún no se haya procesado. Luego, el mensaje recuperado se devuelve a la cadena de envío original o se procesa directamente si la cadena de envío es la cadena principal.

Flujo de trabajo de recuperaciones

Ahora tenemos todas las piezas para repasar el flujo de trabajo completo para las recuperaciones. El proceso es ligeramente diferente en la cadena principal y las cadenas laterales, como se explica a continuación. 

En la cadena principal (ver figura 1, a continuación):

  1. La cadena lateral se termina por violar el requisito de vida o el protocolo del módulo de token. 
    1. Se crea en el estado una cuenta de estado cancelada que contiene la última raíz de estado certificada de la cadena lateral. 
    2. Los usuarios pueden comenzar a recuperar activos con un comando de recuperación de estado .
  2. Se envía un comando de inicialización de recuperación de mensajes . Este comando contiene el tamaño de la bandeja de entrada de la cadena principal almacenada en la cadena lateral terminada, lo que indica cuántos mensajes de cadena cruzada se procesaron. 
    1. Se crea una cuenta de bandeja de salida cancelada en el estado. Contiene la raíz de la bandeja de salida del canal de cadena lateral terminado y el tamaño de la bandeja de entrada proporcionado con el comando de inicialización de recuperación de mensajes.
    2. Los usuarios pueden recuperar mensajes pendientes con un comando de recuperación de mensajes . 

En una cadena lateral, el flujo de trabajo puede proceder de tres maneras (consulte la figura 2 a continuación):

  1. La cadena lateral se termina por violar el protocolo del módulo token o de un módulo personalizado.
    1. Se crea una cuenta de estado finalizada que contiene la raíz del último estado certificado de la cadena principal en el estado de la cadena lateral. 
    2. Se envía un comando de inicialización de recuperación de estado . Este comando contiene la última raíz de estado certificada (en la cadena principal) de la cadena lateral terminada y una prueba de inclusión contra la raíz de estado de la cadena principal almacenada en la cuenta de estado terminada.
    3. Los usuarios pueden recuperar activos nativos de la cadena lateral con un comando de recuperación de estado .
  2. La cadena lateral recibe un mensaje de terminación de cadena lateral de la cadena principal, lo que indica que no se pudo entregar un mensaje de cadena cruzada porque la cadena de recepción finalizó. Este mensaje contiene la última raíz de estado certificada (en la cadena principal) de la cadena lateral terminada.
    1. Se crea en el estado una cuenta estatal rescindida que contiene la última raíz estatal certificada de la cadena lateral. Tenga en cuenta que, en este caso, la raíz del estado de la cadena lateral terminada se establece de inmediato y no es necesario un comando de inicialización de recuperación de estado.
    2. Los usuarios pueden recuperar activos nativos de la cadena lateral con un comando de recuperación de estado .
  3. La cadena lateral termina en la cadena principal.
    1. Se envía un comando de inicialización de recuperación de estado . Este comando contiene la última raíz de estado certificada (en la cadena principal) de la cadena lateral terminada y una prueba de inclusión contra la última raíz de estado certificada de la cadena principal, lo que prueba la terminación.
    2. Se crea en el estado una cuenta estatal rescindida que contiene la última raíz estatal certificada de la cadena lateral.
    3. Los usuarios pueden recuperar activos nativos de la cadena lateral con un comando de recuperación de estado .



Ejemplo: Recuperación de tokens LSK

Es útil resumir el proceso de recuperación con un ejemplo concreto: recuperar tokens LSK del estado de una cadena lateral terminada.

  1. Una cadena lateral termina en la cadena principal debido a la inactividad. 
  2. La última raíz de estado certificada, es decir, la raíz de estado contenida en el último certificado recibido de la cadena lateral se almacena en la cuenta de estado terminada de la cadena lateral.
  3. Los usuarios pueden recuperar los tokens LSK enviando un comando de recuperación de estado. Este comando contiene una prueba de inclusión, que prueba el saldo del usuario en la cadena lateral frente a la raíz del estado almacenada en la cuenta del estado finalizada.
  4. Los fondos se acreditan a la cuenta del usuario en la cadena principal.
  5. La raíz de estado de la cadena lateral terminada se actualiza en consecuencia.

Recuperación como servicio

Como se explicó anteriormente, existen ciertos requisitos de disponibilidad de datos necesarios para preparar una transacción de recuperación:

Comandos de recuperación de mensajes:

  • Acceso a los mensajes de cadena cruzada en la bandeja de salida de la cadena lateral.
  • Todo el árbol de la bandeja de salida de la cadena lateral para poder proporcionar la prueba de inclusión.

Comandos de recuperación de estado:

  • Acceso al activo específico para recuperar de la cadena lateral
  • Todo el árbol de estado autenticado por la última raíz de estado certificada para poder proporcionar la prueba de inclusión.

Además, esta información debe mantenerse actualizada cada vez que se procesa un comando de recuperación. Debido a este hecho, los servicios de terceros podrían ofrecer recuperar activos y mensajes en nombre de los usuarios. Estos servicios ejecutarán un nodo de cadena principal y cadena lateral para proporcionar la disponibilidad de datos, posiblemente a cambio de una pequeña tarifa.

Conclusión y siguiente tema

Esta publicación de blog explicó cómo los usuarios pueden recuperar activos y mensajes pendientes de una cadena lateral terminada. También discutimos las causas de terminación y cómo estas recuperaciones podrían ser manejadas por proveedores de servicios externos.

Si desea profundizar más y leer una presentación más técnica, consulte el LIP " Introducir mecanismo de recuperación de cadena lateral ". En particular, la sección de justificación resume de una manera más técnica y precisa muchos de los puntos tratados en esta entrada de blog. Finalmente, esperamos recibir sus comentarios sobre la solución de interoperabilidad de Lisk en el foro de investigación de Lisk.

La próxima publicación de blog analizará Lisk-BFT y el mecanismo de generación de certificados necesario para la interoperabilidad.

  • Fuente: blog de Lisk

  En esta publicación de blog, mostraremos cómo los tokens, y en general cualquier activo almacenado en el estado de una cadena lateral term...