¿Cuál es la función de un StakePool en Cardano?

Li₿ΞʁLiøη
5 min readJan 13, 2023

El algoritmo Proof of Stake (PoS) es un protocolo de consenso que propone la validación de bloques mediante pruebas de tenencia de su criptomoneda, y así se elige un nodo para validar un bloque.

Un sistema Proof of Work (PoW) requiere que el nodo validador, es decir, el minero, realice un trabajo con un coste de tiempo y consumo de energía. La tarea consiste en realizar un cálculo algorítmico, con diferentes grados de dificultad, para obtener el resultado correcto.

El algoritmo de consenso utilizado en Cardano se llama Ouroboros, y es una versión propietaria del Proof of Stake (PoS) de Cardano.

La implementación actual de Cardano es altamente modular. Incluye los siguientes componentes (diferentes casos de uso de implementación utilizarán diferentes combinaciones de componentes):

  • Node
  • Command line interface (CLI)
  • Daedalus wallet
  • Cardano db-sync
  • GraphQL API server (Apollo)
  • SMASH server

Este diagrama describe la interacción entre los componentes del Cardano:

El Nodo Cardano es el componente de nivel superior dentro de la red. Los nodos de la red se conectan entre sí dentro de la capa de red, que es la fuerza motriz para cumplir los requisitos de intercambio de información.

Esto incluye la retransmisión de bloques e información sobre transacciones para establecer un mejor flujo de datos. Los nodos Cardano mantienen conexiones con pares que han sido elegidos a través de un proceso personalizado de selección de pares. Al ejecutar un nodo Cardano, estás participando y contribuyendo a la red.

El Nodo es la estructura de la red, y el stakepool es la entidad de la red que ejecuta el Nodo.

Las principales funciones de un stakepool son:

  • Forjar nuevos bloques
  • Verificar nuevos bloques
  • Confirmar transacciones

Puede actuar individualmente, pero también recibe delegación (staking) de terceros, usuarios propietarios de criptomonedas en la red, que lo eligen para ello. Ese staking es la cantidad de ADAs delegadas a un stakepool. Un líder de ranura (slot) se selecciona aleatoriamente para forjar un bloque, y tiene más posibilidades de ser elegido cuantos más ADAa delegadas tenga.

Ouroboros divide el tiempo de Cardano en ranuras (cada segundo), bloques (cada 20 segundos) y épocas (epochs, cada 5 días). La ranura es el espacio de nominación para firmar un bloque. El líder de ranura (nodo elegido por el protocolo) es el responsable de añadir un bloque a la cadena. Sólo puede haber un líder de ranura por cada ranura.

Cada época incluye 432.000 ranuras (60 segundos x 60 minutos x 24 horas x 5 días). De media, el diseño del protocolo espera que se valide un bloque cada 20 segundos, lo que supone un total de 21.600 bloques por época (3 bloques por minuto x 60 minutos x 24 horas x 5 días). Puede ocurrir que, debido a diversos problemas de red (versiones antiguas de algún nodo, o varios nodos desconectados), se produzcan menos bloques.

Así que se puede ver que el diseño prevé 20 ranuras por bloque. Se crean tantas ranuras por bloque para garantizar la continuidad en la producción de bloques, ya que si un nodo designado no está disponible, le sigue otro. Así, se produce una competencia entre nodos, lo que se denomina una “batalla de ranuras (slots)” entre nodos validadores, y por ello la cadena se bifurca de forma natural todo el tiempo. Esas pequeñas bifurcaciones se resuelven rápidamente y sólo duran unos pocos bloques.

La batalla de ranuras se resuelve mediante la Función Aleatoria Verificada (VRF), que se utiliza, entre otras cosas, para averiguar si un stakepool ha sido elegido como líder de ranura para una ranura concreta, y se determina que el stakepool con el valor de salida más bajo devuelto por la VRF es el ganador de esa ranura. El stakepool que “pierde” la batalla no recibe recompensas.

Así, para calcular la firma de la ranura, los factores que se tienen en cuenta son la clave del VRF, el porcentaje de estaca activa (sigma), y un parámetro llamado Nonce que es aleatorio, Número que sólo se puede utilizar una vez, y es uno de los valores de entrada del VRF.

Para esta función, el ID de la ranura, el Nonce, y la clave VRF a firmar se toman como valores de entrada, generando un valor aleatorio como salida.

Si el valor de salida es menor que un cierto umbral, que viene determinado por el staking del stake pool, entonces se corona como líder de slot para ese slot en concreto. Como he dicho antes, cuanto mayor sea la delegación de un stakepool, más probabilidades tendrá de convertirse en líder de ranura.

Una vez asignado como líder de ranura, el pool de estaca firma el bloque utilizando la clave de firma KES (Key Evolving Signature), junto con la salida calculada por el VRF.

Por último, este nuevo bloque creado por dicho stakepool se transmite a otros nodos de la red.

Dado que un stakepool debe comprobar cada segundo si ha sido elegido líder de ranura, es imprescindible que esté en línea el 100% del tiempo.

El valor Nonce utilizado en el VRF se utiliza como valor semilla para generar un número aleatorio. Se crea haciendo un hash de las salidas generadas por los primeros ⅔ VRF de los bloques de la época anterior.

Aunque un stakepool no forje bloques, desempeña un papel dentro de la red verificando bloques y confirmando transacciones. El proceso, cuando no es seleccionado como líder de ranura, es el siguiente:

  • el stakepool utiliza el VRF para comprobar si ha sido elegido como líder de ranura para cada ranura, y si no lo ha sido,
  • recibe un nuevo bloque firmado por un nodo, emparejado con el suyo,
  • el stakepool verifica la prueba VRF del bloque, utilizando la clave pública VRF del stakepool que lo firmó, y si es válida, se añade a la blockchain local.

Una propiedad interesante de Ouroboros Praos es que cada Stake Pool intenta descubrir con el VRF si es elegido o no como líder de la ranura. Aunque el calendario de asignación de liderazgo se conoce de antemano, los stakepools sólo sabrán qué otros stakepools fueron elegidos como líder de ranura, cuando el bloque es recibido y verificado.

Palabras finales

La blockchain tiene nodos como principal componente de red, y el buen funcionamiento y sincronización entre ellos es clave para la escalabilidad, de lo contrario la red se volvería más lenta debido a su mayor latencia en la comunicación.

Pero también el número de nodos influye en la descentralización. Imaginemos dos nodos únicos en una blockchain. ¿No sería esa configuración de red peligrosamente centralizada? Ya que pueden confabularse para actuar de forma deshonesta, por ejemplo, censurando transacciones.

Puedes encontrar los stakepools y sus relays aquí. En el gráfico de arriba te muestro a [SWAG] con 2 relays, el stakepool de Jeff, uno de los 2 cofundadores de AdaPulse, junto con GenZod [ZOD].

Este artículo de mi autoría se publicó originalmente en AdaPulse.

liberlion.com

--

--

Li₿ΞʁLiøη

Researcher • Ϛʁyptø_Writer • Content Creator | 𝕏 @liberlion17 | nostr liberlion@iris.to | website: liberlion.com