{"id":30047,"date":"2019-10-31T21:33:25","date_gmt":"2019-10-31T18:33:25","guid":{"rendered":"https:\/\/prohoster.info\/blog\/razbiraemsya-v-protokole-konsensusa-stellar\/"},"modified":"2019-10-31T21:33:25","modified_gmt":"2019-10-31T18:33:25","slug":"razbiraemsya-v-protokole-konsensusa-stellar","status":"publish","type":"post","link":"https:\/\/prohoster.info\/es\/blog\/razbiraemsya-v-protokole-konsensusa-stellar","title":{"rendered":"Entendiendo el protocolo de consenso Stellar","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Entendiendo el protocolo de consenso Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/09b61160286ae40c21269e1590fc2b92.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEl Protocolo de Consenso Stellar fue descrito por primera vez en <noindex><a rel=\"nofollow\" href=\"https:\/\/www.stellar.org\/papers\/stellar-consensus-protocol.pdf\">un art\u00edculo cient\u00edfico<\/a><\/noindex> David Mazieres en 2015. Es un \"sistema de acuerdo federativo\" que permite a redes inform\u00e1ticas descentralizadas, sin l\u00edderes, llegar a un consenso sobre cualquier decisi\u00f3n de manera efectiva. La red de pagos Stellar utiliza el Stellar Consensus Protocol (SCP) para mantener un historial de transacciones consensuado que es visible para todos los participantes.<\/p>\n<p>Se considera que los protocolos de consenso son dif\u00edciles de entender. SCP es m\u00e1s simple que la mayor\u00eda de ellos, pero a\u00fan as\u00ed comparte esta reputaci\u00f3n, en parte debido a la idea err\u00f3nea de que la \"votaci\u00f3n federativa\", que se aborda en la primera mitad del art\u00edculo cient\u00edfico, es SCP. \u00a1Pero no es as\u00ed! Es solo un bloque de construcci\u00f3n importante que se utiliza en la segunda mitad del art\u00edculo para crear <i>el<\/i> protocolo de consenso Stellar.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nEn este art\u00edculo, explicaremos brevemente qu\u00e9 es un \"sistema de acuerdos\", qu\u00e9 puede hacer que sea \"bizantino\" y por qu\u00e9 hacer que un sistema bizantino sea \"federativo\". Luego explicaremos el procedimiento de votaci\u00f3n federativa descrito en el art\u00edculo sobre SCP y, finalmente, explicaremos el propio protocolo SCP.<\/p>\n<h1>Sistemas de acuerdos<\/h1>\n<p>\nUn sistema de acuerdos permite a un grupo de participantes llegar a un consenso sobre alg\u00fan tema, por ejemplo, qu\u00e9 pedir para almorzar.<\/p>\n<p>En Interstellar hemos implementado nuestro propio sistema de acuerdos sobre almuerzos: pedimos lo que dice nuestro gerente operativo, John. Es un sistema simple y efectivo de acuerdos. Todos confiamos en John y creemos que encontrar\u00e1 algo interesante y nutritivo cada d\u00eda.<\/p>\n<p>Pero, \u00bfqu\u00e9 pasar\u00eda si John abusara de nuestra confianza? Podr\u00eda decidir unilateralmente que todos debemos ser veganos. Despu\u00e9s de una o dos semanas, probablemente lo derrocar\u00edamos y pasar\u00edamos el poder a Elizabeth. Pero, \u00bfy si a ella le encanta el aguacate con anchoas y piensa que todos deber\u00edan ser as\u00ed? El poder corrompe. Por lo tanto, es mejor encontrar un m\u00e9todo m\u00e1s democr\u00e1tico: alguna forma de asegurarse de que se tengan en cuenta diferentes preferencias, mientras se proporciona un resultado claro y oportuno, para que no termine sucediendo que nadie pida almuerzo o cinco personas hagan diferentes pedidos, o que la discusi\u00f3n se prolongue hasta la noche.<\/p>\n<p>Aparentemente, la soluci\u00f3n es simple: \u00a1realizar una votaci\u00f3n! Pero esta es una impresi\u00f3n enga\u00f1osa. \u00bfQui\u00e9n se encargar\u00e1 de recoger las boletas y comunicar los resultados? \u00bfY por qu\u00e9 los dem\u00e1s deber\u00edan creer lo que \u00e9l diga? Quiz\u00e1s podamos <i>primero<\/i> votar por un l\u00edder en quien confiamos para dirigir la votaci\u00f3n, pero \u00bfqui\u00e9n se encargar\u00e1 de esta <i>primero<\/i> votaci\u00f3n? \u00bfQu\u00e9 sucede si no podemos ponernos de acuerdo sobre un l\u00edder? \u00bfO si llegamos a un acuerdo, pero este l\u00edder se atora en una reuni\u00f3n o se enferma?<\/p>\n<p>Problemas similares ocurren en redes inform\u00e1ticas distribuidas. Todos los participantes o nodos deben consensuar alguna decisi\u00f3n, como qui\u00e9n debe actualizar un archivo compartido o recoger una tarea de la cola de procesamiento. En una red de criptomonedas, los nodos a menudo deben elegir c\u00f3mo se ver\u00e1 la historia completa entre varias versiones posibles que a veces entran en conflicto. Este consenso de red garantiza al receptor que la moneda es (a) v\u00e1lida (no falsa) y (b) a\u00fan no se ha gastado en otro lugar. Tambi\u00e9n garantiza que podr\u00e1 gastar las monedas en el futuro, porque el nuevo receptor tendr\u00e1 las mismas garant\u00edas por las mismas razones.<\/p>\n<p>Cualquier sistema de consenso en una red inform\u00e1tica distribuida debe ser tolerante a fallos: debe ofrecer resultados consistentes a pesar de errores como l\u00edneas de comunicaci\u00f3n lentas, nodos que no responden y un orden incorrecto de los mensajes. <i>El sistema<\/i> de consenso bizantino es a\u00fan m\u00e1s resistente a errores \u00abbizantinos\u00bb: nodos que proporcionan informaci\u00f3n falsa, ya sea por error o en un intento deliberado de socavar el sistema o obtener alguna ventaja. La tolerancia a fallos \u00abbizantina\u00bb \u2014 la capacidad de confiar en una decisi\u00f3n grupal, incluso cuando algunos miembros del grupo pueden mentir o de alguna manera no seguir las reglas de toma de decisiones \u2014 recibe su nombre de <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%97%D0%B0%D0%B4%D0%B0%D1%87%D0%B0_%D0%B2%D0%B8%D0%B7%D0%B0%D0%BD%D1%82%D0%B8%D0%B9%D1%81%D0%BA%D0%B8%D1%85_%D0%B3%D0%B5%D0%BD%D0%B5%D1%80%D0%B0%D0%BB%D0%BE%D0%B2\">la f\u00e1bula de los generales de la antigua imperio bizantino<\/a><\/noindex>, que intentaban coordinar un ataque. <noindex><a rel=\"nofollow\" href=\"https:\/\/medium.com\/coinmonks\/a-note-from-anthony-if-you-havent-already-please-read-the-article-gaining-clarity-on-key-787989107969\">Una buena descripci\u00f3n<\/a><\/noindex> se encuentra en Anthony Stevens.<\/p>\n<p>Consideremos a Alice, la propietaria de la criptomoneda, quien debe elegir entre comprar un helado delicioso de Bob o pagar la deuda de Carol. Puede que Alice quiera pagar a ambos a la vez, gastando fraudulentamente la misma moneda. Para ello, debe convencer a la computadora de Bob de que la moneda nunca fue pagada a Carol, y convencer a la computadora de Carol de que la moneda nunca fue pagada a Bob. Un sistema bizantino de acuerdos hace que esto sea pr\u00e1cticamente imposible, utilizando una forma de regla de mayor\u00eda llamada <i>qu\u00f3rum<\/i>. Un nodo en tal red se niega a hacer la transici\u00f3n a una versi\u00f3n espec\u00edfica de la historia hasta que no vea que un n\u00famero suficiente de nodos pares \u2014el qu\u00f3rum\u2014 est\u00e1 de acuerdo con dicha transici\u00f3n. Una vez que esto ocurra, formar\u00e1n un bloque electoral lo suficientemente grande como para forzar a los nodos restantes de la red a aceptar su decisi\u00f3n. Alice puede hacer que algunos nodos mientan en su nombre, pero si la red es lo suficientemente grande, su intento ser\u00e1 reprimido por las voces de los nodos honestos.<\/p>\n<p>\u00bfCu\u00e1ntos nodos se requieren para un qu\u00f3rum? Al menos una mayor\u00eda, o m\u00e1s precisamente, una mayor\u00eda calificada para combatir errores y fraudes. Pero para contar la mayor\u00eda, es necesario conocer el n\u00famero total de participantes. En una oficina de Interstellar o en unas elecciones locales, estas cifras son f\u00e1ciles de obtener. Pero si su grupo es una red d\u00e9bilmente definida, en la que los nodos pueden entrar y salir a voluntad sin consultar con un centro, entonces se necesita un <i>sistema<\/i> federado de acuerdo bizantino, capaz de determinar los qu\u00f3rums no a partir de una lista de nodos predefinida, sino de manera din\u00e1mica, a partir de una instant\u00e1nea constantemente cambiante e inevitablemente incompleta de nodos en un momento determinado.<\/p>\n<p>Puede parecer imposible crear un qu\u00f3rum desde la perspectiva de un nodo en una extensa red, pero es posible. Tal qu\u00f3rum incluso puede garantizar resultados de votaci\u00f3n descentralizada. El documento t\u00e9cnico SCP muestra c\u00f3mo hacerlo mediante un procedimiento llamado <i>votaci\u00f3n federada<\/i>.<\/p>\n<h1>Para los impacientes<\/h1>\n<p>\nEl resto del art\u00edculo describe con m\u00e1s detalle la votaci\u00f3n federada y el protocolo de consenso Stellar. Si no te interesan los detalles, aqu\u00ed tienes un resumen general del proceso.<\/p>\n<ol>\n<li>Los nodos realizan rondas de votaci\u00f3n federal sobre los \u00abnominados\u00bb. La ronda de votaci\u00f3n federal significa:\n<ul>\n<li>El nodo vota sobre una afirmaci\u00f3n, por ejemplo, \u00abPropongo el valor V\u00bb;\n<\/li>\n<li>El nodo escucha las voces de los pares hasta que encuentra una que pueda \u00abaceptar\u00bb;\n<\/li>\n<li>El nodo busca un \u00abqu\u00f3rum\u00bb para esta afirmaci\u00f3n. El qu\u00f3rum \u00abconfirma\u00bb al nominado.<\/li>\n<\/ul>\n<\/li>\n<li>Una vez que el nodo puede confirmar uno o varios nominados, intenta \u00abpreparar\u00bb la \u00abboleta\u00bb a trav\u00e9s de varias rondas de votaci\u00f3n federal.\n<\/li>\n<li>Una vez que el nodo puede verificar la preparaci\u00f3n de la boleta, intenta comprometerla mediante a\u00fan m\u00e1s rondas de votaci\u00f3n federal.\n<\/li>\n<li>Una vez que el nodo puede confirmar el compromiso de la boleta, puede \u00abexternalizar\u00bb el valor de esta boleta, utiliz\u00e1ndola como resultado del consenso.<\/li>\n<\/ol>\n<p>\nEstos pasos incluyen varias rondas de votaci\u00f3n federal, que en conjunto forman una ronda SCP. Veamos en detalle qu\u00e9 sucede en cada paso.<\/p>\n<h1>Votaci\u00f3n federal<\/h1>\n<p>\nLa votaci\u00f3n federal es el procedimiento para determinar si la red puede consensuar una propuesta. En la ronda de votaci\u00f3n, cada nodo debe elegir uno de muchos valores potencialmente posibles. No puede hacerlo hasta que est\u00e9 seguro de que otros nodos en la red no eligir\u00e1n otro resultado. Para estar seguros, los nodos intercambian una avalancha de mensajes hacia adelante y hacia atr\u00e1s, para que cada <i>confirm\u00f3<\/i>, que <i>qu\u00f3rum<\/i> de nodos <i>toma<\/i> sea el mismo <i>soluci\u00f3n<\/i>. El resto de esta secci\u00f3n explica los t\u00e9rminos en esta afirmaci\u00f3n y c\u00f3mo se lleva a cabo todo el procedimiento.<\/p>\n<h1>Qu\u00f3rums y cortes de qu\u00f3rum<\/h1>\n<p>\nEmpecemos por definir el qu\u00f3rum. Como discutimos anteriormente, en una red descentralizada con membres\u00eda din\u00e1mica, es imposible saber de antemano cu\u00e1ntos nodos hay y, por lo tanto, cu\u00e1ntos se necesitan para una mayor\u00eda. La votaci\u00f3n federal aborda este problema al presentar una nueva idea <i>corte de qu\u00f3rum<\/i> (quorum slice): un peque\u00f1o conjunto de nodos entre pares en los que un nodo conf\u00eda para transmitir informaci\u00f3n sobre el estado de la votaci\u00f3n al resto de la red. Cada nodo define su propio corte de qu\u00f3rum (del cual se convierte en miembro de facto).<\/p>\n<p>La formaci\u00f3n de qu\u00f3rum comienza con el corte de qu\u00f3rum. Para cada nodo, se a\u00f1aden los nodos de su corte. Luego se a\u00f1aden miembros de los cortes. <i>nodos<\/i> y as\u00ed sucesivamente. A medida que avanzamos, encontraremos m\u00e1s nodos que no se pueden agregar porque ya est\u00e1n incluidos en el corte. Cuando ya no haya m\u00e1s nodos nuevos para agregar, el proceso se detiene: hemos formado un qu\u00f3rum a trav\u00e9s del \u00abcierre transitivo\u00bb del corte del nodo inicial.<\/p>\n<p><img decoding=\"async\" alt=\"Entendiendo el protocolo de consenso Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/6991e3f9a22d920e4a5e9c161f32dee1.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Para encontrar un qu\u00f3rum a partir de un nodo dado\u2026<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Entendiendo el protocolo de consenso Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/52b3d435a8f4a67b56deb43c83fee828.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>\u2026 agregamos miembros de su corte\u2026<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Entendiendo el protocolo de consenso Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/0820e9ca560caf9ebfa92db8e7a1da85.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>\u2026 luego agregamos miembros de los cortes de estos nodos.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Entendiendo el protocolo de consenso Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/539933eb3c279fa7da68fc9049516fc8.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Continuamos hasta que no queden nodos para agregar.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Entendiendo el protocolo de consenso Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/48058639262412514641063a10503a01.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Entendiendo el protocolo de consenso Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/d068fb06f35337ae68c35b4606f329ae.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>No quedan nodos para agregar. Este es el qu\u00f3rum.<\/i><\/p>\n<p>En realidad, cada nodo puede estar en m\u00e1s de un corte. Para formar un qu\u00f3rum, selecciona solo uno de los cortes y agrega miembros; luego elige cualquier corte para cada uno de los miembros y agrega miembros del <i>esto<\/i> corte y as\u00ed sucesivamente. Esto significa que cada nodo es miembro de un conjunto de posibles quorum.<\/p>\n<p><img decoding=\"async\" alt=\"Entendiendo el protocolo de consenso Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/3427406c132cfd1cd174b856a1239908.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Selecciona solo un corte de qu\u00f3rum en cada paso.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Entendiendo el protocolo de consenso Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/79a8728890ecb36b2e127b1b76c44fc8.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Entendiendo el protocolo de consenso Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/22fe0422c73cdf5fb5416e389934c5c3.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Entendiendo el protocolo de consenso Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/60379efdde3b88fb9c86de6c5b4a0b62.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Un qu\u00f3rum posible. O una alternativa\u2026<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Entendiendo el protocolo de consenso Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/341f1e897be1474ee2d67324da2134b1.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>\u2026 elegimos otros cortes\u2026<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Entendiendo el protocolo de consenso Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/8a6d605050b075bf935e6151bd1cbe2c.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Entendiendo el protocolo de consenso Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/865567aa370605b7cf10da3457c3d158.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>\u2026(cuando sea posible)\u2026<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Entendiendo el protocolo de consenso Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/6343f774104454d62e7c8681bf25dbcb.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>\u2026 crea otro qu\u00f3rum.<\/i><\/p>\n<p>\u00bfC\u00f3mo sabe un nodo en qu\u00e9 cortes est\u00e1n otros nodos? De la misma manera que otra informaci\u00f3n sobre otros nodos: de las transmisiones que cada nodo emite en la red cuando su estado de votaci\u00f3n cambia. Cada transmisi\u00f3n incluye informaci\u00f3n sobre los cortes del nodo emisor. En el documento t\u00e9cnico SCP no se especifica el mecanismo de comunicaci\u00f3n. Las implementaciones generalmente utilizan <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Gossip_protocol\">el protocolo gossip<\/a><\/noindex> para garantizar la transmisi\u00f3n de mensajes en toda la red.<\/p>\n<p>Recordemos que en el sistema de acuerdos bizantino no federativo, el qu\u00f3rum se define como la mayor\u00eda de todos los nodos. El sistema de acuerdos bizantino se ha desarrollado en t\u00e9rminos de la pregunta: \u00bfcu\u00e1ntos nodos deshonestos puede soportar el sistema? En un sistema de N nodos, dise\u00f1ado para sobrevivir a f fallos (enga\u00f1os), un nodo debe ser capaz de avanzar al recibir respuestas de N\u2212f pares, ya que f de ellos pueden no estar funcionando. Sin embargo, al recibir respuestas de N\u2212f pares, se puede suponer que todos los f pares (de los que el nodo no recibi\u00f3 respuesta) son en realidad honestos. As\u00ed, f de los N\u2212f pares (de los que se recibi\u00f3 respuesta) son perjudiciales. Para que los nodos lleguen a un consenso, la mayor\u00eda de los dem\u00e1s nodos debe ser honesta, es decir, necesitamos que N\u2212f sea mayor que 2f o N &gt; 3f. As\u00ed que, generalmente, un sistema dise\u00f1ado para sobrevivir a f fallos tendr\u00e1 un total de N=3f+1 nodos y un tama\u00f1o de qu\u00f3rum de 2f+1. Una vez que la propuesta supera el umbral del qu\u00f3rum, los dem\u00e1s miembros de la red est\u00e1n convencidos de que cualquier propuesta competidora fracasar\u00e1. As\u00ed, la red converge en un resultado.<\/p>\n<p>Pero en el sistema de acuerdos bizantino federativo no puede haber una mayor\u00eda (porque nadie conoce el tama\u00f1o total de la red), \u00a1y el concepto de mayor\u00eda es completamente in\u00fatil! Si la membres\u00eda en el sistema es abierta, alguien puede obtener una mayor\u00eda simplemente llevando a cabo un ataque de Sibil, uni\u00e9ndose a la red m\u00faltiples veces a trav\u00e9s de varios nodos. Entonces, \u00bfpor qu\u00e9 se puede llamar al cierre transitivo del corte? <i>qu\u00f3rum<\/i>, y c\u00f3mo es capaz de suprimir propuestas competidoras?<\/p>\n<p>T\u00e9cnicamente, \u00a1no hay forma! Imagina una red de seis nodos, donde dos tr\u00edos est\u00e1n aislados en los cortes de qu\u00f3rum entre s\u00ed. El primer subgrupo puede tomar decisiones de las que el segundo nunca escuchar\u00e1, y viceversa. Para esta red, no hay forma de alcanzar consenso (salvo por azar).<\/p>\n<p>Por lo tanto, el SCP requiere que para la votaci\u00f3n federativa (y para aplicar importantes teoremas del art\u00edculo), la red debe poseer una propiedad llamada <i>intersecci\u00f3n de qu\u00f3rums<\/i>En una red con esta propiedad, cualquier par de quorums que se puedan construir siempre se intersectan en al menos un nodo. Para determinar las opiniones predominantes de la red, esto es tan bueno como tener una mayor\u00eda. Intuitivamente, esto significa que si alg\u00fan quorum est\u00e1 de acuerdo con la afirmaci\u00f3n X, ning\u00fan otro quorum podr\u00e1 estar de acuerdo con algo diferente, porque necesariamente incluir\u00e1 alg\u00fan nodo del primer quorum que ya ha votado por X.<\/p>\n<p><img decoding=\"async\" alt=\"Entendiendo el protocolo de consenso Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/5b0aeec99e285b4bbeb92ec5b8dfe69d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Si en la red hay intersecciones de quorums...<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Entendiendo el protocolo de consenso Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/bdb3866cb02fb5991446f0cb0fa5a4fd.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>... entonces cualquier par de quorums que puedas construir...<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Entendiendo el protocolo de consenso Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/29ee8d1ce9fba6c5c24386ce1c1c639b.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>... siempre se cruzar\u00e1n.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Entendiendo el protocolo de consenso Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/6f1ef2b9896669c10fd19f1acd52db70.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Entendiendo el protocolo de consenso Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/6849569e849ac3b5487d31e0bf22a596.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n(Por supuesto, los nodos que se cruzan pueden ser bizantinos, mentirosos o defectuosos de otras maneras. En este caso, la intersecci\u00f3n de quorums no ayuda a la red a alcanzar un consenso en absoluto. Por esta raz\u00f3n, muchos resultados en el documento t\u00e9cnico de SCP se basan en supuestos expl\u00edcitos, como que en la red a\u00fan queda intersecci\u00f3n de quorums, <i>incluso despu\u00e9s de eliminar nodos defectuosos.<\/i>Para simplificar, dejaremos estos supuestos <i>impl\u00edcitos<\/i> en el resto del art\u00edculo).<\/p>\n<p>Puede parecer poco razonable esperar que en una red de nodos independientes sea posible la intersecci\u00f3n confiable de quorums. Pero hay dos razones por las cuales esto es as\u00ed.<\/p>\n<p>La primera raz\u00f3n es la existencia misma de internet. Internet es un ejemplo perfecto de una red de nodos independientes con intersecci\u00f3n de quorums. La mayor\u00eda de los nodos en internet solo est\u00e1n conectados a unos pocos otros nodos locales, pero estos peque\u00f1os conjuntos se superponen lo suficiente para que cada nodo sea accesible desde cualquier otro nodo a trav\u00e9s de alguna ruta.<\/p>\n<p>La segunda raz\u00f3n es espec\u00edfica para la red de pagos Stellar (la aplicaci\u00f3n m\u00e1s com\u00fan del SCP). Cada activo en la red Stellar tiene un emisor, y las recomendaciones de Stellar requieren que cada emisor designe uno o m\u00e1s nodos en la red para procesar las solicitudes de redenci\u00f3n. Es en su inter\u00e9s incluir directa o indirectamente esos nodos en los cortes de qu\u00f3rum para cada activo de su inter\u00e9s. As\u00ed, los qu\u00f3rums para todos los nodos interesados en un activo determinado se superpondr\u00e1n al menos en esos nodos de redenci\u00f3n. Los nodos interesados en m\u00faltiples activos incluir\u00e1n en sus cortes de qu\u00f3rum todos los nodos de redenci\u00f3n de los emisores correspondientes, y se esforzar\u00e1n por agrupar todos los activos juntos. Adem\u00e1s, cualquier activo que no est\u00e9 vinculado de esta manera a otros en la red y <i>no debe estar vinculado<\/i> \u2014 est\u00e1 dise\u00f1ado para que no haya superposici\u00f3n de qu\u00f3rums en esta red (por ejemplo, los bancos de la zona del d\u00f3lar a veces quieren comerciar con bancos de la zona del euro y bancos de la zona del peso, por lo que est\u00e1n en una misma red, pero a ninguno de ellos le importa la red separada de ni\u00f1os que comercian tarjetas de b\u00e9isbol).<\/p>\n<p>Por supuesto, <i>la expectativa<\/i> de superposici\u00f3n de qu\u00f3rums no es <i>una garant\u00eda<\/i>. Otras sistemas de acuerdos bizantinos deben su complejidad en gran parte a la garant\u00eda de los qu\u00f3rums. Una innovaci\u00f3n importante del SCP es que desplaza la responsabilidad de crear qu\u00f3rums del propio algoritmo de consenso al nivel de la aplicaci\u00f3n. Por lo tanto, aunque la votaci\u00f3n federativa es bastante general para votar sobre cualquier asunto, su fiabilidad depende cr\u00edticamente de un sentido m\u00e1s amplio de estos significados. Algunos usos hipot\u00e9ticos pueden resultar menos convenientes para crear redes bien conectadas que otros.<\/p>\n<h1>La votaci\u00f3n, la aceptaci\u00f3n y la confirmaci\u00f3n<\/h1>\n<p>\nEn la ronda de votaci\u00f3n federativa, un nodo opcionalmente comienza a votar por alg\u00fan valor V. Esto significa la transmisi\u00f3n a la red del mensaje: 'Soy el nodo N, mis cortes de qu\u00f3rum Q, y voto por V'. Cuando un nodo vota de esta manera, promete que nunca ha votado en contra de V y que nunca lo har\u00e1.<\/p>\n<p>En las transmisiones de nodos entre pares, cada nodo ve c\u00f3mo votan los dem\u00e1s. Una vez que un nodo recopila suficientes mensajes, puede rastrear los qu\u00f3rums y tratar de encontrarlos. Si ve un qu\u00f3rum de pares que tambi\u00e9n votan por V, puede proceder a <i>aceptar<\/i> V y transmitir este nuevo mensaje a la red: \u00abYo soy el nodo N, mis cortes de qu\u00f3rum Q, y acepto V\u00bb. La aceptaci\u00f3n proporciona una garant\u00eda m\u00e1s fuerte que simplemente votar. Cuando un nodo vota por V, nunca puede votar por otras opciones. Pero si un nodo acepta V, ning\u00fan nodo en la red aceptar\u00e1 otra opci\u00f3n (la Teorema 8 en el documento t\u00e9cnico SCP lo prueba).<\/p>\n<p>Por supuesto, hay una alta probabilidad de que no se encuentre de inmediato un qu\u00f3rum de nodos que est\u00e9n de acuerdo con V. Otros nodos pueden votar por otros valores. Pero para un nodo hay otra forma de pasar de simplemente votar a aceptar. N puede aceptar otro valor W, incluso si no ha votado por \u00e9l, y incluso si no ve un qu\u00f3rum para \u00e9l. Para decidir cambiar su voto, solo necesita ver <i>un conjunto bloqueador<\/i> de nodos que aceptaron W. Un conjunto bloqueador consiste en un nodo de cada uno de los cortes de qu\u00f3rum de N. Como su nombre indica, es capaz de <i>bloquear<\/i> cualquier otro valor. Si todos los nodos en tal conjunto aceptan W, entonces (seg\u00fan la Teorema 8) nunca se podr\u00e1 formar un qu\u00f3rum que acepte otro valor, y por lo tanto es seguro para N aceptar W.<\/p>\n<p><img decoding=\"async\" alt=\"Entendiendo el protocolo de consenso Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/6dd4ec5595ab863daf684fec670d83a6.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>El nodo N con tres cortes de qu\u00f3rum.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Entendiendo el protocolo de consenso Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/b65e32160570af2883eef9990a74e3bd.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>B-D-F es el conjunto bloqueador para N: incluye un nodo de cada uno de los cortes de N.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Entendiendo el protocolo de consenso Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/7e17b4a9ee83aac7fa2b68b2f9fae066.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>B-E tambi\u00e9n es un conjunto bloqueador para N, porque E aparece en dos cortes de N.<\/i><\/p>\n<p>Pero un conjunto bloqueador no es un qu\u00f3rum. Ser\u00eda demasiado f\u00e1cil enga\u00f1ar al nodo N para que aceptara el valor deseado si solo se necesitara comprometer un nodo en cada uno de los cortes de N. Por lo tanto, aceptar un valor no es el final de la votaci\u00f3n. En cambio, N debe confirmar el valor, es decir, ver un qu\u00f3rum de nodos que lo acepten. Si llega tan lejos, entonces, como prueba el documento t\u00e9cnico SCP (en la Teorema 11), el resto de la red tambi\u00e9n terminar\u00e1 eventualmente confirmando el mismo valor, por lo que N concluir\u00e1 la votaci\u00f3n federativa con un valor determinado como resultado.<\/p>\n<p><img decoding=\"async\" alt=\"Entendiendo el protocolo de consenso Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/bd68dc5172460c17fa2de54fcc0d9017.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Votaci\u00f3n federativa.<\/i><\/p>\n<p>El proceso de votaci\u00f3n, aceptaci\u00f3n y confirmaci\u00f3n consiste en una ronda completa de votaci\u00f3n federativa. El protocolo de consenso Stellar combina muchas de estas rondas para crear un sistema de consenso completo.<\/p>\n<h1>Protocolo de consenso Stellar<\/h1>\n<p>\nLas dos propiedades m\u00e1s importantes de un sistema de consenso son <i>seguridad<\/i> y <i>resiliencia<\/i>. Un algoritmo de consenso es \"seguro\" si nunca puede dar diferentes resultados a diferentes participantes (la copia de la historia de Bob nunca contradice a Carol). \"Resiliencia\" significa que el algoritmo siempre producir\u00e1 un resultado, es decir, no quedar\u00e1 atascado.<\/p>\n<p>El procedimiento de votaci\u00f3n federativa descrito <i>es seguro<\/i> en el sentido de que si un nodo confirma el valor V, ning\u00fan otro nodo confirmar\u00e1 un valor diferente. Pero \"no confirmar un valor diferente\" no significa que necesariamente confirmar\u00e1 algo. Los participantes pueden votar por un n\u00famero tan grande de valores diferentes que nada alcance el umbral de aceptaci\u00f3n. Esto significa que en la votaci\u00f3n federativa hay ausencia de <i>resiliencia<\/i>.<\/p>\n<p>El protocolo de consenso Stellar utiliza la votaci\u00f3n federativa de tal manera que garantiza tanto la seguridad como la resiliencia. (Las garant\u00edas de seguridad y resiliencia del SCP tienen un l\u00edmite te\u00f3rico. La construcci\u00f3n elige una garant\u00eda de seguridad muy fuerte, sacrificando una leve disminuci\u00f3n de la resiliencia, pero dado un tiempo suficiente, el consenso se alcanzar\u00e1 con alta probabilidad). En pocas palabras, la idea es llevar a cabo varias votaciones federativas sobre varios valores hasta que uno de ellos pase completamente por todas las fases de votaci\u00f3n SCP, descritas a continuaci\u00f3n.<\/p>\n<p>Los valores a los que el SCP aspira a llegar a un consenso pueden ser el historial de transacciones o un pedido de almuerzo, o cualquier otra cosa, pero es importante se\u00f1alar que no son esos valores los que se aceptan o confirman. En cambio, la votaci\u00f3n federativa ocurre sobre <i>declaraciones sobre esos valores<\/i>.<\/p>\n<p>Las primeras rondas de votaci\u00f3n federativa ocurren en <i>la etapa de nominaci\u00f3n<\/i> (nomination phase), en un conjunto de declaraciones como \"Propongo V\", posiblemente para muchos valores diferentes de V. El objetivo de la nominaci\u00f3n es encontrar una o varias declaraciones que pasen por aceptaci\u00f3n y confirmaci\u00f3n.<\/p>\n<p>Despu\u00e9s de encontrar candidatos verificables, SCP avanza a la etapa de votaci\u00f3n, donde el objetivo es identificar un <i>bolet\u00edn<\/i> (es decir, un contenedor para el valor propuesto) y un qu\u00f3rum que pueda declarar <i>commit<\/i> para ello (commit). Si el qu\u00f3rum realiza el commit del bolet\u00edn, su valor se acepta como consenso. Pero antes de que un nodo pueda votar por el commit del bolet\u00edn, primero debe confirmar <i>la anulaci\u00f3n<\/i> de todos los boletines con un valor de contador menor. Estos pasos: anular boletines para encontrar aquel para el que se puede confirmar el commit, incluyen varias rondas de votaci\u00f3n federativa sobre m\u00faltiples declaraciones de boletines.<\/p>\n<p>En las siguientes secciones se describen con m\u00e1s detalle la nominaci\u00f3n y la votaci\u00f3n.<\/p>\n<h1>Nominaci\u00f3n<\/h1>\n<p>\nAl inicio de la etapa de nominaci\u00f3n, cada nodo puede elegir espont\u00e1neamente un valor V y votar por la afirmaci\u00f3n 'Nombro V'. El objetivo en esta etapa es confirmar la nominaci\u00f3n de alg\u00fan valor mediante votaci\u00f3n federativa.<\/p>\n<p>Es posible que un n\u00famero suficiente de nodos vote por afirmaciones lo suficientemente diferentes, y ninguna nominaci\u00f3n puede alcanzar el umbral de aceptaci\u00f3n. Por lo tanto, adem\u00e1s de transmitir sus propios votos de nominaci\u00f3n, los nodos 'reflejan' las nominaciones de sus pares. Reflejar significa que si un nodo vota por la nominaci\u00f3n V, pero ve un mensaje de un vecino que vota por la nominaci\u00f3n W, entonces tambi\u00e9n comenzar\u00e1 a votar por la nominaci\u00f3n tanto de V como de W. (No todos los votos de los pares se reflejan durante la nominaci\u00f3n, ya que esto puede llevar a una explosi\u00f3n de diferentes nominados. SCP incluye un mecanismo para regular estos votos. En resumen, existe una f\u00f3rmula para determinar la 'prioridad' de un par desde el punto de vista de un nodo, y solo se reflejan los votos de nodos de alta prioridad. Cuanto m\u00e1s tiempo dure la nominaci\u00f3n, m\u00e1s bajo ser\u00e1 el umbral, por lo que el nodo expande el conjunto de pares cuyos votos reflejar\u00e1. La f\u00f3rmula de prioridad, como uno de los datos de entrada, incluye el n\u00famero de ranura, por lo que un nodo par de alta prioridad para una ranura puede ser de baja prioridad para otra, y viceversa).<\/p>\n<p>Conceptualmente, la propuesta de V y W simult\u00e1neamente son voces federativas separadas, cada una capaz de alcanzar la aceptaci\u00f3n o confirmaci\u00f3n por s\u00ed sola. En la pr\u00e1ctica, los mensajes del protocolo SCP empaquetan estas voces separadas juntas.<\/p>\n<p>Aunque la votaci\u00f3n para la propuesta de V es una promesa de nunca votar en contra de la propuesta de V, a nivel de aplicaci\u00f3n \u2014 en este caso SCP \u2014 se define lo que significa \"en contra\". SCP no ve una afirmaci\u00f3n que contradiga el voto \"propongo X\", es decir, no hay mensaje \"me opongo a la propuesta de X\", por lo que el nodo puede votar a favor de cualquier valor propuesto. Muchas de estas nominaciones no llevar\u00e1n a nada, pero al final, el nodo podr\u00e1 aceptar o confirmar uno o varios valores. Una vez que el nominado es confirmado, se convierte en <i>candidato<\/i>.<\/p>\n<p><img decoding=\"async\" alt=\"Entendiendo el protocolo de consenso Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/794f55d076ec3e1773c49d32e29c084d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>La propuesta de SCP utilizando votaci\u00f3n federativa. Pueden haber muchos valores \u201cB\u201d propuestos por nodos de igual rango y \u201creflejados\u201d por un nodo.<\/i> <\/p>\n<p>La propuesta de candidatos puede dar lugar a varios candidatos confirmables. Por lo tanto, SCP requiere que el nivel de aplicaci\u00f3n proporcione alg\u00fan m\u00e9todo para fusionar candidatos en uno solo <i>composite<\/i> (composici\u00f3n). El m\u00e9todo de fusi\u00f3n puede ser cualquier forma. Lo principal es que si este m\u00e9todo es determinista, cada nodo fusionar\u00e1 los mismos candidatos. En el sistema de votaci\u00f3n de almuerzo, la \"fusi\u00f3n\" puede significar simplemente renunciar a uno de los dos candidatos. (Pero de manera determinista: cada nodo debe seleccionar el mismo valor para el reinicio. Por ejemplo, elegir en orden alfab\u00e9tico m\u00e1s temprano). En la red de pagos Stellar, donde se lleva a cabo la votaci\u00f3n sobre el historial de transacciones, fusionar dos nominados propuestos implica fusionar las transacciones que contienen y las \u00faltimas de sus dos marcas de tiempo.<\/p>\n<p>La descripci\u00f3n t\u00e9cnica de SCP demuestra (teorema 12) que para el final de la fase de propuesta, la red eventualmente converge a una sola composici\u00f3n. Pero hay un problema: la votaci\u00f3n federativa es un protocolo asincr\u00f3nico (al igual que SCP). En otras palabras, los nodos no est\u00e1n coordinados por tiempo, sino solo por los mensajes que env\u00edan. Desde el punto de vista de un nodo, no est\u00e1 claro cu\u00e1ndo <i>finaliz\u00f3<\/i> fase de propuesta. Y aunque todos los nodos eventualmente llegar\u00e1n al mismo compuesto, pueden elegir diferentes rutas en el camino, creando diferentes candidatos compuestos a lo largo del camino, y nunca pueden decir cu\u00e1l de ellos es el final.<\/p>\n<p>Pero est\u00e1 bien. La propuesta es solo una preparaci\u00f3n. Lo principal es limitar el n\u00famero de candidatos para alcanzar un consenso, que ocurre en el proceso <i>de votaci\u00f3n<\/i> (votaci\u00f3n).<\/p>\n<h1>La votaci\u00f3n<\/h1>\n<p>\nUn bolet\u00edn es un par , donde counter es un n\u00famero entero que comienza en 1 y value es un candidato de la etapa de propuesta. Este puede ser el candidato del nodo o un candidato de un nodo vecino aceptado por este nodo. En t\u00e9rminos simples, durante la votaci\u00f3n se hacen m\u00faltiples intentos para que la red logre un consenso sobre alg\u00fan candidato en alg\u00fan bolet\u00edn mediante la realizaci\u00f3n de potencialmente muchas votaciones federativas sobre declaraciones de bolet\u00edn. Los contadores en los boletines rastrean los intentos realizados, y los boletines con contadores m\u00e1s altos tienen prioridad sobre los boletines con contadores m\u00e1s bajos. Si el bolet\u00edn  se atasca, comienza una nueva votaci\u00f3n, ahora sobre el bolet\u00edn .<\/p>\n<p>Es importante distinguir <i>valores<\/i> (por ejemplo, qu\u00e9 debe ser el pedido del almuerzo: pizza o ensaladas), <i>boletines<\/i> (par counter-value) y <i>declaraciones<\/i> sobre los boletines. La ronda SCP incluye varias rondas de votaci\u00f3n federativa, en particular, sobre declaraciones tales como:<\/p>\n<ul>\n<li>\u00abEstoy listo para el compromiso del bolet\u00edn B\u00bb y\n<\/li>\n<li>\u00abDeclaro el compromiso del bolet\u00edn B\u00bb<\/li>\n<\/ul>\n<p>\nDesde la perspectiva de este nodo, se alcanza el consenso cuando encuentra el bolet\u00edn B, para el cual puede confirmar (es decir, encontrar un qu\u00f3rum que acepte) la declaraci\u00f3n \u00abDeclaro el compromiso del bolet\u00edn B\u00bb. A partir de este momento, se puede actuar de manera segura sobre el valor indicado en B, por ejemplo, hacer este pedido de almuerzo. Esto se llama <i>externalizaci\u00f3n<\/i> del valor. Una vez confirmado el compromiso del bolet\u00edn, el nodo puede estar seguro de que cualquier otro nodo ha externalizado este mismo valor o lo har\u00e1 necesariamente en el futuro.<\/p>\n<p>Aunque conceptualmente muchas votaciones federativas se llevan a cabo sobre declaraciones de muchas boletas diferentes, intercambian no tantos mensajes, porque cada mensaje encapsula un conjunto de boletas. As\u00ed, un mensaje promueve el estado de muchas votaciones federativas a la vez, por ejemplo: \u00abAcepto el compromiso de las boletas en el rango de  a \u00bb.<\/p>\n<p>\u00bfQu\u00e9 significan los t\u00e9rminos \u00abpreparado\u00bb (prepared) y \u00abcompromiso\u00bb (commit)?<\/p>\n<p>Un nodo vota para comprometer una boleta cuando est\u00e1 convencido de que otros nodos no har\u00e1n commit de boletas con otros valores. Convencer a otros es el objetivo de preparar la declaraci\u00f3n. Votaci\u00f3n que dice: \u00abEstoy listo para el compromiso de la boleta B\u00bb es una promesa de nunca comprometer una boleta menor que B, es decir, con un contador m\u00e1s bajo (SCP requiere que los valores en las boletas tengan un orden definido. As\u00ed, la boleta  es menor que , si N1&lt;N2, y tambi\u00e9n si N1=N2 y V1&lt;V2). Estas boletas menores son \u00abrechazadas\u00bb (aborted) durante la votaci\u00f3n preparatoria, mientras que B se considera \u00abpreparado\u00bb.<\/p>\n<p>\u00bfPor qu\u00e9 \u00abEstoy listo para el compromiso de la boleta B\u00bb significa \u00abPrometo nunca permitir el compromiso de boletas menores que B\u00bb? Porque SCP define abortar como la oposici\u00f3n a comprometerse. La votaci\u00f3n para preparar una boleta tambi\u00e9n implica votar para rechazar algunas otras boletas, y como discutimos anteriormente, votar por algo es una promesa de nunca votar en contra de ello.<\/p>\n<p>Antes de transmitir el compromiso, un nodo debe primero encontrar una boleta que pueda confirmar como preparada. En otras palabras, realiza una votaci\u00f3n federativa sobre el tema \u00abEstoy listo para el compromiso de la boleta B\u00bb, posiblemente para muchas boletas diferentes, hasta que encuentre una que acepte el qu\u00f3rum.<\/p>\n<p>\u00bfDe d\u00f3nde provienen las boletas para la preparaci\u00f3n de la votaci\u00f3n? Primero, el nodo transmite la preparaci\u00f3n para la votaci\u00f3n de , donde C es el candidato compuesto, generado en la etapa de nominaci\u00f3n. Sin embargo, incluso despu\u00e9s de que comience la preparaci\u00f3n para la votaci\u00f3n, la nominaci\u00f3n puede dar lugar a candidatos adicionales que se convertir\u00e1n en nuevas boletas. Mientras tanto, los pares pueden tener diferentes candidatos, y pueden formar un conjunto bloqueante que acepta \"Estoy listo para comprometer la boleta B2\", lo que convencer\u00e1 al nodo de tambi\u00e9n aceptarlo. Por \u00faltimo, hay un mecanismo de tiempo de espera que genera nuevas rondas de votaci\u00f3n federativa en nuevas boletas con contadores m\u00e1s altos, si las boletas actuales est\u00e1n atascadas.<\/p>\n<p>Una vez que el nodo encuentra la boleta B, que puede confirmar como preparada, entonces transmite un nuevo mensaje \"Comprometer la boleta B\". Esta votaci\u00f3n le dice a los pares que el nodo nunca se apartar\u00e1 de B. De hecho, si B representa una boleta , entonces \"Comprometer la boleta \" significa un consentimiento incondicional para votar por la disposici\u00f3n de cada boleta desde  hasta . Este valor adicional ayuda a otros nodos a ponerse al d\u00eda con el par al comprometerse, si a\u00fan est\u00e1n en etapas m\u00e1s tempranas del protocolo.<\/p>\n<p>En esta etapa, vale la pena reiterar que se trata de protocolos as\u00edncronos. Solo porque un nodo env\u00ede votos para un compromiso, no significa que sus pares tambi\u00e9n lo hagan. Algunos de ellos a\u00fan pueden estar votando sobre declaraciones para la preparaci\u00f3n de la votaci\u00f3n, otros pueden haber externalizado ya el valor. SCP explica c\u00f3mo un nodo debe procesar cada tipo de mensaje de igual a igual independientemente de su fase.<\/p>\n<p>Si el mensaje \u00abDeclaro compromiso &lt;N,C&gt;\u00bb no puede ser aceptado o confirmado, entonces existe la posibilidad de aceptar o confirmar el mensaje &lt;N+1, C&gt; o &lt;N+2, C&gt; \u2014 o, en cualquier caso, cualquier bolet\u00edn con el valor C, y no otro, ya que el nodo ha prometido nunca revertir &lt;N,C&gt;. Para el momento en que el nodo transmite votos para el compromiso, esto ser\u00e1 C o nada, dependiendo de cu\u00e1n lejos llegue el consenso. Sin embargo, esto no es suficiente para que el nodo externalice C. Algunos piratas bizantinos (que constituyen menos del qu\u00f3rum, bas\u00e1ndose en nuestras suposiciones de seguridad) pueden mentirle al nodo. Aceptar y luego confirmar alg\u00fan bolet\u00edn (o rango de boletines) es lo que le da al nodo la confianza para finalmente externalizar C.<\/p>\n<p><img decoding=\"async\" alt=\"Entendiendo el protocolo de consenso Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/c59f036bb8aa189bb3d4540f54121391.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Votaci\u00f3n SCP a trav\u00e9s de votaci\u00f3n federativa. No se muestra: en cualquier momento se puede activar un temporizador, aumentando el contador en el bolet\u00edn (y, posiblemente, produciendo un nuevo compuesto de candidatos adicionales postulados).<\/i> <\/p>\n<p>\u00a1Y eso es todo! Una vez que la red llega a un consenso, est\u00e1 lista para hacerlo una y otra vez. En la red de pagos Stellar, esto ocurre aproximadamente cada 5 segundos: un logro que requiere tanto seguridad como resiliencia, garantizadas por SCP.<\/p>\n<p>SCP puede lograr esto apoy\u00e1ndose en varios rondas de votaci\u00f3n federativa. La votaci\u00f3n federativa se hizo posible gracias al concepto de cortes de qu\u00f3rum: conjuntos de nodos entre pares, en los que cada nodo decidi\u00f3 confiar como parte de su qu\u00f3rum (subjetivo). Esta configuraci\u00f3n significa que se puede llegar a un consenso incluso en una red de membres\u00eda abierta y enga\u00f1os bizantinos.<\/p>\n<h1>Lectura adicional<\/h1>\n<p><\/p>\n<ul>\n<li>El documento t\u00e9cnico original de SCP se puede encontrar <noindex><a rel=\"nofollow\" href=\"https:\/\/www.stellar.org\/papers\/stellar-consensus-protocol.pdf\">aqu\u00ed<\/a><\/noindex>, y <noindex><a rel=\"nofollow\" href=\"https:\/\/datatracker.ietf.org\/doc\/draft-mazieres-dinrg-scp\/\">aqu\u00ed<\/a><\/noindex> proyecto de especificaciones para su implementaci\u00f3n.\n<\/li>\n<li>El autor original del protocolo SCP, David Mazieres, explica de manera simplificada (pero a\u00fan t\u00e9cnica) su <noindex><a rel=\"nofollow\" href=\"http:\/\/www.scs.stanford.edu\/~dm\/blog\/simplified-scp.html\">aqu\u00ed<\/a><\/noindex>.\n<\/li>\n<li>Es posible que se haya sorprendido al no encontrar en este art\u00edculo los t\u00e9rminos \u00abmining\u00bb o \u00abprueba de trabajo\u00bb. SCP no utiliza estos m\u00e9todos, pero algunos otros algoritmos de consenso s\u00ed. Zain R. Weiszpfenning escribi\u00f3 una accesible <noindex><a rel=\"nofollow\" href=\"https:\/\/hackernoon.com\/a-hitchhikers-guide-to-consensus-algorithms-d81aae3eb0e3\">visi\u00f3n general de los algoritmos de consenso<\/a><\/noindex>.\n<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/bobg\/scp\/blob\/master\/Lunch.md\">Una descripci\u00f3n paso a paso<\/a><\/noindex> de una red simple, alcanzando consenso en una \u00fanica ronda completa de SCP.\n<\/li>\n<li>Para los lectores interesados en implementaciones de SCP: vea. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/stellar\/stellar-core\/tree\/master\/src\/scp\">c\u00f3digo C++<\/a><\/noindex>, utilizado por la red de pagos Stellar, o <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/bobg\/scp\">c\u00f3digo Go<\/a><\/noindex>, que escrib\u00ed para una mejor comprensi\u00f3n de SCP.<\/li>\n<\/ul>\n<p>Fuente: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/444710\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0440\u043e\u0442\u043e\u043a\u043e\u043b \u043a\u043e\u043d\u0441\u0435\u043d\u0441\u0443\u0441\u0430 Stellar \u0432\u043f\u0435\u0440\u0432\u044b\u0435 \u043e\u043f\u0438\u0441\u0430\u043d \u0432 \u043d\u0430\u0443\u0447\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0414\u044d\u0432\u0438\u0434\u0430 \u041c\u0430\u0437\u044c\u0435\u0440\u0430 \u0432 2015 \u0433\u043e\u0434\u0443. \u042d\u0442\u043e \u00ab\u0444\u0435\u0434\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0432\u0438\u0437\u0430\u043d\u0442\u0438\u0439\u0441\u043a\u043e\u0433\u043e \u0441\u043e\u0433\u043b\u0430\u0448\u0435\u043d\u0438\u044f\u00bb, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0434\u0435\u0446\u0435\u043d\u0442\u0440\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u0441\u0435\u0442\u044f\u043c \u0431\u0435\u0437 \u043b\u0438\u0434\u0435\u0440\u043e\u0432 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e \u0434\u043e\u0441\u0442\u0438\u0433\u0430\u0442\u044c \u043a\u043e\u043d\u0441\u0435\u043d\u0441\u0443\u0441\u0430 \u043f\u043e \u043a\u0430\u043a\u043e\u043c\u0443-\u043b\u0438\u0431\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u044e. \u041f\u043b\u0430\u0442\u0451\u0436\u043d\u0430\u044f \u0441\u0435\u0442\u044c Stellar \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 Stellar Consensus Protocol (SCP) \u0434\u043b\u044f \u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0441\u043e\u0433\u043b\u0430\u0441\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0438\u0441\u0442\u043e\u0440\u0438\u0438 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0432\u0438\u0434\u044f\u0442 \u0432\u0441\u0435 \u0443\u0447\u0430\u0441\u0442\u043d\u0438\u043a\u0438. \u0421\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u044b \u043a\u043e\u043d\u0441\u0435\u043d\u0441\u0443\u0441\u0430 \u0442\u0440\u0443\u0434\u043d\u044b \u0434\u043b\u044f \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f. [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-30047","post","type-post","status-publish","format-standard","hentry"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u0440\u043e\u0442\u043e\u043a\u043e\u043b \u043a\u043e\u043d\u0441\u0435\u043d\u0441\u0443\u0441\u0430 Stellar \u0432\u043f\u0435\u0440\u0432\u044b\u0435 \u043e\u043f\u0438\u0441\u0430\u043d \u0432.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/es\/blog\/razbiraemsya-v-protokole-konsensusa-stellar\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"es_ES\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0420\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u043c\u0441\u044f \u0432 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0435 \u043a\u043e\u043d\u0441\u0435\u043d\u0441\u0443\u0441\u0430 Stellar | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0440\u043e\u0442\u043e\u043a\u043e\u043b \u043a\u043e\u043d\u0441\u0435\u043d\u0441\u0443\u0441\u0430 Stellar \u0432\u043f\u0435\u0440\u0432\u044b\u0435 \u043e\u043f\u0438\u0441\u0430\u043d \u0432.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/es\/blog\/razbiraemsya-v-protokole-konsensusa-stellar\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T18:33:25+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T18:33:25+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Entendiendo el protocolo de consenso Stellar | ProHoster","description":"El protocolo de consenso de Stellar fue descrito por primera vez en.","canonical_url":"https:\/\/prohoster.info\/es\/blog\/razbiraemsya-v-protokole-konsensusa-stellar","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"es_ES","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0420\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u043c\u0441\u044f \u0432 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0435 \u043a\u043e\u043d\u0441\u0435\u043d\u0441\u0443\u0441\u0430 Stellar | ProHoster","og:description":"\u041f\u0440\u043e\u0442\u043e\u043a\u043e\u043b \u043a\u043e\u043d\u0441\u0435\u043d\u0441\u0443\u0441\u0430 Stellar \u0432\u043f\u0435\u0440\u0432\u044b\u0435 \u043e\u043f\u0438\u0441\u0430\u043d \u0432.","og:url":"https:\/\/prohoster.info\/es\/blog\/razbiraemsya-v-protokole-konsensusa-stellar","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T18:33:25+00:00","article:modified_time":"2019-10-31T18:33:25+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"30047","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"Article","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-20 23:34:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 03:43:15","updated":"2026-01-20 23:34:19","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts\/30047","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/comments?post=30047"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts\/30047\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media?parent=30047"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/categories?post=30047"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/tags?post=30047"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}