¿Por qué necesitamos el Consenso? #
El consenso es un método para llegar a un acuerdo sobre un estado compartido. Para que el estado de la blockchain siga construyéndose y avanzando, todos los nodos de la red deben ponerse de acuerdo y llegar a un consenso. Es la forma en que los nodos de una red descentralizada pueden mantenerse sincronizados entre sí. Sin el consenso de la red descentralizada de nodos en una blockchain, no hay forma de garantizar que el estado que un nodo cree que es verdadero sea compartido por los demás nodos. El consenso pretende proporcionar la visión objetiva del estado en medio de los participantes que tienen cada uno su propia visión subjetiva de la red. Es el proceso por el que estos nodos se comunican y llegan a un acuerdo, y son capaces de construir nuevos bloques.
¿Qué son PoW y PoS? #
Proof of Work (PoW) -Prueba de Trabajo- y Proof of Stake (PoS) -Prueba de Participación- se han utilizado de forma imprecisa como abreviatura para referirse a los mecanismos de consenso de las blockchains, pero eso no capta la imagen completa. PoW es el método para acordar un autor de bloque y parte del consenso de Nakamoto (ver infra) más completo que también abarca un algoritmo de selección de cadena (regla de la cadena más larga en Bitcoin). Del mismo modo, PoS es un conjunto de reglas para seleccionar el conjunto de validadores y no especifica una regla de selección de cadena o cómo una cadena puede llegar a la finalidad. Los algoritmos PoS han sido tradicionalmente emparejados con un algoritmo para llegar a un acuerdo bizantino entre nodos. Por ejemplo, Tendermint es un práctico algoritmo bizantino tolerante a fallos que utiliza PoS como método de selección del conjunto de validadores.
¿Por qué no Proof of Work? #
Aunque es simple y eficaz para llegar a un consenso descentralizado sobre el próximo productor de bloques, el proof of work (prueba de trabajo) con consenso de Nakamoto consume una cantidad increíble de energía, no tiene finalidad económica o demostrable, y no tiene una estrategia eficaz para resistir a los cárteles.
Prueba de Participación Nominada #
En los sistemas PoS tradicionales, la participación en la producción de bloques depende de la posesión de tokens, en lugar de la potencia computacional. Aunque los desarrolladores de PoS suelen proponer una participación equitativa de forma descentralizada, la mayoría de los proyectos acaban proponiendo algún nivel de funcionamiento centralizado, donde el número de validadores con plenos derechos de participación es limitado. Estos validadores suelen ser los más ricos y, en consecuencia, influyen en la red de PoS, ya que son los que más staking tienen. Normalmente, el número de candidatos a mantener la red con los conocimientos (y el equipo) necesarios es limitado; esto también puede aumentar directamente los costos operativos. Los sistemas con un gran número de validadores tienden a formar pools para disminuir la variación de sus ingresos y beneficiarse de las economías de escala. Estos grupos suelen estar fuera de la cadena.
Una forma de aliviar esto es implementar la formación de grupos en la cadena y permitir a los tenedores de los tokens votar [con su participación] para que los validadores los representen.
Polkadot utiliza NPoS (Nominated Proof-of-Stake) como mecanismo para seleccionar el conjunto de validadores. Está diseñado con los roles de validadores y nominadores, para maximizar la seguridad de la cadena. Los actores interesados en mantener la red pueden correr un nodo validador.
Los validadores asumen el papel de producir nuevos bloques en BABE, validar los bloques parachain y garantizar la finalidad. Los nominadores pueden optar por respaldar a los validadores seleccionados con su participación. Los nominadores pueden aprobar a los candidatos en los que confían y respaldarlos con sus tokens.
Finalidad Probabilística frente a Finalidad Demostrable #
Una blockchain de consenso de Nakamoto pura que ejecuta PoW sólo es capaz de lograr la noción de finalidad probabilística y alcanzar un consenso eventual. Finalidad probabilística significa que bajo algunas suposiciones sobre la red y los participantes, si vemos unos cuantos bloques construyendo sobre un bloque dado, podemos estimar la probabilidad de que sea final. El consenso eventual significa que en algún momento en el futuro, todos los nodos estarán de acuerdo en la veracidad de un conjunto de datos. Este consenso eventual puede llevar mucho tiempo y no se podrá determinar cuánto tardará por adelantado. Sin embargo, gadgets de finalidad como GRANDPA (GHOST-based Recursive ANcestor Deriving Prefix Agreement) o Casper FFG (the Friendly Finality Gadget) de Ethereum están diseñados para ofrecer garantías más sólidas y rápidas sobre la finalidad de los bloques, concretamente, que nunca puedan revertirse después de que se haya producido algún proceso de acuerdos bizantinos. La noción de consenso irreversible se conoce como finalidad demostrable.
En el Paper de GRANDPA, se formula de esta manera:
- Decimos que un oráculo A en un protocolo es finalmente consistente si devuelve el mismo valor a todos los participantes después de un tiempo no especificado.
Consenso Híbrido #
Hay dos protocolos que utilizamos cuando hablamos del protocolo de consenso de Polkadot, GRANDPA y BABE (Blind Assignment for Blockchain Extension). Hablamos de ambos porque Polkadot utiliza lo que se conoce como consenso híbrido. El consenso híbrido separa el gadget de la finalidad del mecanismo de producción de bloques.
Esta es una forma de obtener los beneficios de la finalidad probabilística (la capacidad de producir siempre nuevos bloques) y la finalidad demostrable (tener un acuerdo universal en la cadena canónica sin posibilidad de reversión) en Polkadot. También evita los correspondientes inconvenientes de cada mecanismo (la posibilidad de seguir la bifurcación equivocada sin saberlo en la finalidad probabilística, y la posibilidad de “atascarse” -no poder producir nuevos bloques- en la finalidad demostrable). Combinando estos dos mecanismos, Polkadot permite que los bloques se produzcan rápidamente, y que el mecanismo de finalidad más lento se ejecute en un proceso separado para finalizar los bloques sin arriesgarse a que el procesamiento de las transacciones sea más lento o se estanque.
El consenso híbrido se ha propuesto en el pasado. En particular, se propuso (ahora desaparecido) como un paso en la transición de Ethereum a la prueba de participación (proof of stakae) en el EIP 1011, que especificaba Casper FFG (ver infra).
Producción de bloques: BABE #
BABE (Blind Assignment for Blockchain Extension) es el mecanismo de producción de bloques que se ejecuta entre los nodos validadores y determina los autores de los nuevos bloques. BABE es comparable como algoritmo a Ouroboros Praos, con algunas diferencias clave en la regla de selección de la cadena y los ajustes de tiempo de los slots (ranuras). BABE asigna slots (ranuras) de producción de bloques a los validadores según la participación (stake) y utilizando el ciclo de aleatoriedad de Polkadot.
Los validadores en Polkadot participarán en una lotería en cada ranura (slot) que les dirá si son o no el candidato a productor de bloques para ese slot. Los slots son unidades discretas de tiempo, nominalmente de 6 segundos de duración. Debido a este mecanismo de aleatoriedad, varios validadores podrían ser candidatos para el mismo slot. Otras veces, un slot podría estar vacío, lo que daría lugar a un tiempo de bloque inconsistente.
Múltiples Validadores por Slot #
Cuando varios validadores son candidatos a producir un bloque en un slot (ranura) determinado, todos producirán un bloque y lo transmitirán a la red. En ese momento, es una carrera. Gana el validador cuyo bloque llegue primero a la mayor parte de la red. Dependiendo de la topología y la latencia de la red, ambas cadenas seguirán construyendo en cierta medida, hasta que la finalización entre en acción y ampute una bifurcación. Mira la Elección de la Bifurcación infra para saber cómo funciona.
Sin Validadores en el Slot #
Cuando ningún validador ha sacado un resultado lo suficientemente bajo en la lotería de la aleatoriedad como para calificar para la producción de bloques, un slot puede permanecer aparentemente sin bloques. Evitamos esto ejecutando un algoritmo secundario de selección de validadores de tipo round-robin en segundo plano. Los validadores seleccionados para producir bloques a través de este algoritmo siempre producen bloques, pero estos bloques secundarios se ignoran si el mismo slot también produce un bloque primario de un validador seleccionado por VRF. Por lo tanto, un slot puede tener un bloque primario o secundario, y nunca se salta ningún slot (ranura).
Para más detalles sobre BABE, consulte el paper de BABE.
BADASS BABE: SASSAFRAS #
SASSAFRAS (Semi Anonymous Sortition of Staked Assignees For Fixed-time Rhythmic Assignment of Slots) (también conocido como SASSY BABE o BADASS BABE), es una extensión de BABE y actúa como un protocolo de producción de bloques en tiempo constante. Este enfoque trata de resolver las deficiencias de BABE asegurando que se produzca exactamente un bloque con intervalos de tiempo constantes. El protocolo utiliza zk-SNARKs para construir un anillo-VRF y es un trabajo en curso. Esta sección se actualizará a medida que se produzcan avances.
Gadget de Finalidad: GRANDPA #
GRANDPA (GHOST-based Recursive ANcestor Deriving Prefix Agreement) es el gadget de finalidad que se implementa para la Relay Chain de Polkadot.
Funciona en un modelo de red parcialmente sincrónico siempre que 2/3 de los nodos sean honestos y puede hacer frente a 1/5 de nodos bizantinos en un entorno asincrónico.
Una distinción notable es que GRANDPA llega a acuerdos sobre cadenas en lugar de bloques, lo que acelera enormemente el proceso de finalización, incluso después de una partición de la red a largo plazo u otros fallos de la red.
En otras palabras, tan pronto como más de 2/3 de los validadores atestiguan que una cadena contiene un determinado bloque, todos los bloques que conducen a ese bloque se finalizan a la vez.
Protocolo #
Para una descripción completa del protocolo, consulta el paper de GRANDPA.
Implementación #
La implementación de GRANDPA en Substrate forma parte de Substrate Frame.
Elección de Bifurcación #
Al unir BABE y GRANDPA, la elección de bifurcaciones (fork) de Polkadot queda clara. BABE siempre debe construir sobre la cadena que ha sido finalizada por GRANDPA. Cuando hay bifurcaciones después del encabezado finalizado, BABE proporciona la finalidad probabilística construyendo sobre la cadena con más bloques primarios.
En la imagen anterior, los bloques negros están finalizados y los amarillos no. Los bloques marcados con un “1” son bloques primarios; los marcados con un “2” son bloques secundarios. Aunque la cadena superior es la más larga del último bloque finalizado, no se califica porque tiene menos primarios en el momento de la evaluación que la que está debajo.
Comparaciones #
Consenso de Nakamoto #
El consenso de Nakamoto consiste en la regla de la cadena más larga que utiliza proof of work (prueba de trabajo) como mecanismo de resistencia Sybil y la elección del líder.
El consenso de Nakamoto sólo nos da una finalidad probabilística. La finalidad probabilística establece que un bloque en el pasado sólo es tan seguro como el número de confirmaciones que tiene, o el número de bloques que se han construido sobre él. A medida que se construyen más bloques sobre un bloque específico en una cadena de Proof of Work (Prueba de Trabajo), se gasta más trabajo computacional detrás de esta cadena en particular. Sin embargo, esto no garantiza que la cadena que contiene el bloque siga siendo siempre la cadena acordada, ya que un actor con recursos ilimitados podría construir una cadena competidora y gastar suficientes recursos computacionales para crear una cadena que no contenga un bloque específico. En tal situación, la regla de la cadena más larga empleada en Bitcoin y otras cadenas de proof of work se trasladaría a esta nueva cadena como la canónica.
PBFT / Tendermint #
Consulta la sección correspondiente en el artículo de comparación de Cosmos.
Casper FFG #
Las dos principales diferencias entre GRANDPA y Casper FFG son:
- en GRANDPA, diferentes votantes pueden emitir votos simultáneamente para bloques a diferentes alturas
- GRANDPA sólo depende de los bloques finalizados para afectar a la regla de elección de bifurcación del mecanismo de producción de bloques subyacente
Recursos #
- Paper de BABE – La descripción académica del protocolo BABE.
- Paper de GRANDPA – La descripción académica del gadget de finalidad de GRANDPA. Contiene pruebas formales del algoritmo.
- Implementación de Rust – La implementación de referencia y la paleta de Substrate que la acompaña.
- Producción y Finalización de Bloques en Polkadot – Una explicación de cómo BABE y GRANDPA trabajan juntos para producir y finalizar bloques en Kusama, con Bill Laboon.
- Producción y Finalización de Bloques en Polkadot: Entendiendo los Protocolos BABE y GRANDPA – Una charla académica de Bill Laboon, impartida en el MIT Cryptoeconomic Systems 2020, que describe en profundidad el modelo de consenso híbrido de Polkadot.