El protocolo de Disponibilidad y Validez (AnV) de Polkadot es lo que permite que la red se reparta eficientemente entre las parachains manteniendo fuertes garantías de seguridad.
Fases del protocolo AnV #
Hay cinco fases del protocolo de Disponibilidad y Validez.
- Fase de parachain.
- Fase de presentación a la Relay Chain.
- Subprotocolos de Disponibilidad e indisponibilidad.
- Comprobaciones secundarias de validez de la aprobación GRANDPA.
- Invocación de un gadget de finalidad tolerante a fallos bizantinos para consolidar la cadena.
Fase de Parachain #
La fase de parachain de AnV es cuando el collator o compilador de una parachain propone un bloque candidato a los validadores que están actualmente asignados a la parachain.
- Un bloque candidato es un nuevo bloque de un collator de parachain que puede ser válido o no y debe pasar por comprobaciones de validez antes de ser incluido en la Relay Chain.
Fase de presentacion a la Relay Chain #
Los validadores comprueban el bloque candidato con la función de verificación expuesta por el código registrado de esa parachain. Si la verificación tiene éxito, los validadores pasarán el bloque candidato a los demás validadores de la red de gossip. Sin embargo, si la verificación falla, los validadores rechazan inmediatamente el bloque candidato como inválido.
Cuando más de la mitad de los validadores de parachain están de acuerdo en que un determinado bloque candidato de parachain es una transición de estado válida, preparan un recibo candidato. El recibo candidato es lo que finalmente se incluirá en el estado de la Relay Chain. Incluye:
- El ID del parachain.
- El ID y la firma del collator.
- Un hash del recibo candidato del bloque parent.
- Una raíz Merkle de las piezas codificadas de borrado del bloque.
- Una raíz Merkle de los mensajes salientes.
- Un hash del bloque.
- La raíz de estado de la parachain antes de la ejecución del bloque.
- La raíz de estado de la parachain después de la ejecución del bloque.
Esta información es de tamaño constante, mientras que el bloque PoV real de la parachain puede ser de longitud variable. Es información suficiente para que cualquiera que obtenga el bloque PoV completo pueda verificar la transición de estado contenida en él.
Subprotocolos de disponibilidad e indisponibilidad #
Durante las fases de disponibilidad e indisponibilidad, los validadores gossip (rumorean) las piezas codificadas de borrado entre la red. Al menos 1/3 + 1 validadores deben informar de que poseen su pieza de la palabra codificada. Una vez alcanzado este umbral de validadores, la red puede considerar disponible el bloque PoV de la parachain.
Códigos de Borrado #
El código de borrado (erasure code) transforma un mensaje en un código más largo que permite recuperar el mensaje original a partir de un subconjunto del código y en ausencia de alguna porción del mismo. Un código es el mensaje original rellenado con algunos datos extra que permiten la reconstrucción del código en caso de borrado.
El tipo de códigos de borrado que utiliza el esquema de disponibilidad de Polkadot son los códigos Reed-Solomon, que ya gozan de una aplicación probada en la tecnología fuera de la industria del blockchain. Un ejemplo lo encontramos en la industria de los discos compactos. Los CDs utilizan códigos Reed-Solomon para corregir cualquier dato que falte debido a inconsistencias en la cara del disco, como partículas de polvo o arañazos.
En Polkadot, los códigos de borrado se utilizan para mantener el estado de las parachains a disposición del sistema sin necesidad de que todos los validadores tengan que vigilar todas las parachains. En su lugar, los validadores comparten trozos más pequeños de los datos y pueden reconstruir posteriormente los datos completos bajo el supuesto de que 1/3+1 de los validadores pueden proporcionar sus trozos de los datos.
Nota: El umbral de 1/3+1 de los validadores que deben responder para construir los datos completos del estado de las parachains corresponde a la suposición de seguridad de Polkadot respecto a los nodos bizantinos.
Fishermen: Obsoleto #
La idea de Fishermen es que son nodos completos de parachains, como los collators, pero desempeñan un papel diferente en relación con la red Polkadot. En lugar de empaquetar las transiciones de estado y producir los siguientes bloques de parachain como hacen los collators, los fishermen vigilarán este proceso y se asegurarán de que no se incluyan transiciones de estado no válidas.
Los fishermen no están disponibles en Kusama o Polkadot y no está prevista su implementación formal, a pesar de las propuestas anteriores en el protocolo AnV.
Para responder a la motivación que subyace a la consideración del diseño de Fishermen, los actuales verificadores secundarios de respaldo desempeñan un papel similar en relación con la red Polkadot. Desde el punto de vista de la seguridad, ésta se basa en que haya al menos un validador honesto, ya sea entre los validadores de parachain o el verificador secundario.
Otros Recursos #
- Ruta de un Bloque de Parachain – Artículo del analista de Parity Joe Petrowski en el que se exponen las comprobaciones de validez que debe pasar un bloque de parachain para poder avanzar en la parachain.
- Availability and Validity – Artículo del equipo de investigación de W3F que especifica en detalle el protocolo de disponibilidad y validez.