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.