Protocolo de Consenso Stellar (SCP)
El consenso es de suma importancia en un sistema de pagos descentralizado. Distribuye la supervisión y aprobación de transacciones entre muchos nodos individuales (ordenadores) en lugar de depender de un sistema central cerrado. Los nodos son administrados por organizaciones o individuos, y el objetivo es que todos los nodos actualicen el ledger de la misma manera, asegurando que cada ledger alcance el mismo estado. El consenso es vital para la seguridad de la blockchain, permitiendo que los nodos lleguen a un acuerdo de manera segura y evitando ataques de doble gasto.
La red Stellar alcanza el consenso usando el Protocolo de Consenso Stellar (SCP), que es una construcción del Acuerdo Bizantino Federado (FBA). El FBA difiere de otros mecanismos de consenso bien conocidos como Prueba de Trabajo (que depende de la potencia computacional de un nodo) y Prueba de Participación (que depende del poder de participación de un nodo) al confiar, en cambio, en el acuerdo de nodos de confianza.
En el SCP, cada nodo Stellar Core participante (también llamado validador o nodo validador) decide qué conjunto de otros nodos desea confiar. La flexibilidad de la confianza definida por el usuario permite una membresía de red abierta (lo que significa que cualquiera puede convertirse en un nodo Core) y control descentralizado (lo que significa que ninguna autoridad central dicta de quién se requiere el voto para el consenso).
No hay recompensas monetarias por ser un validador en la red Stellar. En cambio, se anima a los usuarios a convertirse en validadores porque contribuyen a la seguridad y resiliencia de la red, lo que beneficia a los productos y servicios construidos sobre Stellar.
Hay tres propiedades deseadas de los mecanismos de consenso: tolerancia a fallos, seguridad y vitalidad.
- Fault tolerance - the system can continue operating despite node failures or malfunctions
- Safety - no two nodes ever agree on different values, guarantees nodes will produce the same block
- Liveness - a node can output a value without the participation of any misbehaving nodes
Los mecanismos de consenso típicamente solo pueden priorizar dos de estas tres propiedades. El SCP prioriza la tolerancia a fallos y la seguridad sobre la vitalidad. Debido a la priorización de la seguridad, los bloques pueden quedar atascados mientras esperan que los nodos lleguen a un acuerdo.
Componentes del SCP
Conjunto de quorum
Como se mencionó anteriormente, cada nodo Core decide en qué otros nodos le gustaría confiar para alcanzar un acuerdo. El conjunto de nodos de confianza de un nodo se llama conjunto de quorum. Los validadores pueden añadirse mutuamente a sus conjuntos de quorum debido a la confianza innata asociada con identidades del mundo real.
Umbrales y segmentos de quorum
Además de elegir un conjunto de quorum, los nodos Core también deben elegir un umbral. El umbral es el número mínimo de nodos en un conjunto de quorum que deben acordar para alcanzar consenso. Por ejemplo, digamos que el nodo B tiene los nodos [A, C, D] en su conjunto de quorum y establece el umbral en 2. Esto significa que cualquier combinación de 2 nodos en el conjunto de quorum que acuerde es válida: ya sea [A,C], [C,D] o [A,D] deben estar de acuerdo para que el nodo continúe. La combinación de nodos que acuerdan dentro del conjunto de quorum se llama segmentos de quorum.
Conjuntos de bloqueo de nodos
Los nodos pueden ser bloqueados para alcanzar consenso por conjuntos de bloqueo de nodos. Los conjuntos de bloqueo de nodos son cualquier conjunto de nodos en un conjunto de quorum que impide que un nodo alcance un acuerdo. Por ejemplo, si un nodo requiere que 3 de los 4 nodos en su conjunto de quorum estén de acuerdo, cualquier combinación de dos nodos se considera un conjunto de bloqueo de nodos.
Quorum
Un quorum es un conjunto de nodos suficiente para alcanzar un acuerdo donde cada nodo es parte de un segmento de quorum.
Declaración
Las declaraciones válidas sobre Stellar expresan las diferentes opiniones de los nodos sobre los conjuntos de transacciones a los que llegar a un acuerdo para un ledger dado. Por ejemplo: “Propongo este conjunto de transacciones para el ledger número 800”.
La opinión de un nodo sobre una declaración depende de las opiniones de su conjunto de quorum.
Votación federada
En el SCP, el acuerdo se logra mediante votación federada. Un nodo razona sobre el estado de la red en función de lo que aprende de su conjunto de quorum; antes de que una declaración sea acordada al 100% por cada nodo honesto en la red, pasa por tres pasos de votación federada: (1) Votar, (2) Aceptar y (3) Confirmar.
A node can have four opinions on a statement (let’s call the statement “A”)
- I don’t know anything about A and have no opinion
- I vote for A, it’s valid, but I don’t know if it’s safe to act on it yet
- I accept A, because enough nodes supported this statement, but I don’t know if it’s safe to act on it yet
- Confirmo A, es seguro actuar sobre ella. Incluso si cada nodo en mi quorum no ha confirmado A, no podrán confirmar nada más que A.
Para transitar entre los estados anteriores, la votación federada tiene las siguientes reglas:
-
Vote for A if it is consistent with my previous votes
-
Acepta A si alguna de estas opciones:
-
Every node in my quorum slice voted for or accepted A
O
-
My blocking set accepted A (even if I voted for something that contradicts A in the past, I forget about that vote, and proceed with accepting A)
-
-
Confirm A if every node in a quorum slice accepted A
Rondas de consenso
Cada ronda de consenso se separa en dos etapas:
Protocolo de nominación
En el protocolo de nominación, se seleccionan conjuntos de transacciones candidatas para ser incluidos en un ledger. Una vez que un nodo confirma su primer candidato, deja de votar para nominar nuevos conjuntos de transacciones. Aún puede aceptar o confirmar declaraciones nominadas previamente. Esto garantiza que, en algún momento, todos los nodos convergerán en un conjunto candidato. Si cada nodo en la red deja de introducir nuevos valores pero continúa confirmando lo que otros nodos confirmaron, finalmente, todos terminarán con la misma lista de candidatos.
Un nodo puede comenzar el protocolo de votación tan pronto como confirme un candidato. Después de confirmar su primer candidato y comenzar el protocolo de votación, la nominación sigue funcionando en segundo plano.
Protocolo de votación
El protocolo de votación garantiza que la red pueda confirmar unánimemente y aplicar conjuntos de transacciones nominadas. Consta de dos pasos:
- Prepare - verifies that a node’s quorum slice has the right value and is willing to commit it
- Commit - ensures that a node’s quorum slice actually commits the value