Actualizaci√≥n de Safe Network Dev ūüá™ūüáł 1 diciembre 2022

Esta es una traducción automática. El original en inglés está aquí: Update 1 December, 2022

Sabemos que está ansioso por volver a probar la red y, después de resolver algunos problemas complicados con el código, estamos cerca de poder ofrecer redes de prueba formales una vez más. Con todo el equipo ahora enfocado en ese objetivo, @joshuef explica lo que estamos haciendo y qué esperar. ¡Así que no te preocupes, esa picazón pronto se rascará!

Progreso general

El equipo est√° trabajando en formas de hacer que las redes de prueba lleguen a la comunidad con mayor regularidad. Puede parecer que recientemente hemos estado un poco empantanados en los reinos te√≥ricos de los algoritmos de consenso. De hecho, esta est√° lejos de ser la √ļnica √°rea en la que estamos trabajando, y estos esfuerzos, por supuesto, se prueban internamente, pero no siempre en un entorno de red de prueba completo y no siempre de una manera que sea f√°cil de compartir. Sin embargo, @chriso se ha esforzado por mejorar el proceso de lanzamiento para que podamos implementar las redes de prueba m√°s f√°cilmente, y el resto del equipo ahora se enfoca en garantizar que todo su trabajo est√© listo para la red de prueba, en el esp√≠ritu del desarrollo √°gil.

Mostafa ahora ha completado su implementación de ABBA simplificado, el protocolo de consenso de lanzamiento de monedas del que hablamos la semana pasada en el contexto de cómo los ancianos llegan a un acuerdo sobre asuntos de membresía.

A trav√©s del proceso de implementaci√≥n de ABBA, nos dimos cuenta de que el protocolo de lanzamiento de moneda no es necesario cuando tienes preferencia por un resultado. Por ejemplo, ABBA se usa para decidir si un anciano propuso un cambio de membres√≠a. Si alguien ve una propuesta de ese anciano, vota S√ć, de lo contrario vota NO. Si alguna vez hay un voto dividido, eso significa que alguien vot√≥ S√ć. Fundamentalmente, todos los votos S√ć vienen con una justificaci√≥n que demuestra una prueba criptogr√°fica de que el anciano en cuesti√≥n de hecho propuso algo.

Entonces, si la pregunta que estamos haciendo es ‚Äú¬ŅPropuso un anciano un cambio de membres√≠a?‚ÄĚ ¬°Entonces un voto dividido significar√≠a que s√≠! El mayor s√≠ propuso un cambio, por lo que podemos resolver el voto dividido con S√ć.

En el protocolo ABBA original, no hab√≠a preferencia entre s√≠ o no, de ah√≠ el motivo del lanzamiento de la moneda. Dado que tenemos un sesgo hacia S√ć, ya no necesitamos lanzar una moneda al aire para resolver estas divisiones.

Mostafa y @davidrusu ahora están poniendo a prueba el protocolo sesgado de ABBA. El próximo paso será integrar VCBC con ABBA para llegar al protocolo de consenso completo MVBA (Multi-Value Byzantine Agreement).

Y @joshuef y @oetyng están investigando problemas de conocimiento de la red que pueden ocurrir después de dividir una sección cuando hay una consulta de datos en los ancianos. Parece que se debe a la falta de intercambio de conocimientos entre las dos nuevas secciones en la etapa de traspaso.

Redes de prueba redes de prueba redes de prueba

Después de unos meses profundizando en varios temas de red (membresía, bloqueos de estado de nodos, capas de comunicación y respuestas), esperamos tener el código en manos de la comunidad una vez más.

Sabemos que ha habido comunicaciones esporádicas (y antes muy frecuentes); y algunos miembros de la comunidad pueden estar familiarizados con nuestras herramientas de prueba en ese sentido. Pero aquí nos gustaría repasar lo que tenemos para que cualquiera que quiera pueda intentar configurar sus propias redes de prueba.

La herramienta de red de prueba

Nuestra herramienta de red de prueba es una colección de scripts y Terraform para configurar redes de prueba. (Ejemplos de comandos están disponibles en el archivo Léame).

Nos permite hacer girar f√°cilmente las gotas de Digital Ocean y ejecutar nodos en ellas. Esta es la base de nuestras pruebas de WAN.

Tiene el script ./up, que permite la creaci√≥n de una red de prueba de cualquier tama√Īo. Utiliza una gota por nodo (el tama√Īo es f√°cilmente configurable en los archivos prodiver.tf).

Si desea habilitar heaptrack en los nodos, entonces tenemos un script ./build que activa un droplet separado para compilar el código sn_node y el contenedor seguro (el código del nodo con el modo de depuración habilitado, por lo que heaptrack puede conectarse).

Luego puede usar estas compilaciones personalizadas en el script ./up.

Por √ļltimo, ./down elimina una red de prueba una vez que haya terminado con ella.

¬ŅPan comido?

Vale, tengo una red de prueba activa…

Una vez que una red est√° funcionando, tenemos varias herramientas para ayudarnos.

Una gota de cliente

La configuración de terraformación también puede crear un droplet de cliente (instancia). Esto nos permite repetir fácilmente las pruebas de los clientes, por ejemplo, y ver cómo se mantienen los nodos (./loop_client_tests.sh).

Tambi√©n tenemos una carpeta test-data que se baja al cliente desde AWS. Nuestro objetivo es poner esto en la red al comienzo de cualquier red de prueba. Y esto nos brinda una forma bastante simple de probar la integridad de los datos durante la vida √ļtil de una red de prueba.

Vigilancia

Usamos Kibana y ELK para monitorear los nodos. Tenemos un tablero (actualmente privado) donde podemos ver cualquier problema de memoria o CPU, lo que ayuda a guiar cualquier esfuerzo de depuración. Por ejemplo, a continuación podemos ver nuestro bloqueador actual: la memoria aumenta con el tiempo. Esto parece estar relacionado con la gestión de la conexión.… Tenemos una solución potencial que parece resolver esto, pero estamos buscando algo mejor.

¬°Registros!

La √ļltima (y m√°s cr√≠ptica) herramienta de nuestro arsenal es la extracci√≥n de registros de clientes. ./scripts/logs hace eso por nosotros. Y luego podemos analizarlos con una herramienta como ripgrep o buscar, p. MsgIds espec√≠ficos para rastrear lo que ha estado sucediendo en los nodos.

Y entonces…

Esa es solo una peque√Īa descripci√≥n general de c√≥mo usar y evaluar una red de prueba. Tenemos la esperanza de que si podemos hacer esto m√°s f√°cil (lo estamos intentando) y m√°s p√ļblico (¬°pronto!), podremos hacer que m√°s personas supervisen y verifiquen los nodos y aceleren la depuraci√≥n all√≠ una vez m√°s.

Entonces, por todos los medios, infórmese sobre la herramienta testnet. Los PR son muy bienvenidos. Hay muchas secuencias de comandos de bash en este momento, que pueden estar en los callejones de algunas personas más que de otras… Pero al menos, espero que esto les brinde una descripción general de cómo estamos probando en este momento. ¡Y tal vez despierte algunas otras ideas sobre cómo mejorar esas cosas!


Enlaces √ļtiles

No dude en responder a continuación con enlaces a las traducciones de esta actualización para desarrolladores y los moderadores las agregarán aquí.

Como proyecto de c√≥digo abierto, siempre estamos buscando retroalimentaci√≥n, comentarios y contribuciones de la comunidad, as√≠ que no sea t√≠mido, √ļnase y creemos la red segura juntos.