jl777

Probablemente te hayas dado cuenta que los monederos de los intercambios son muy lentos, incluso siendo tu monedero personal de ARRR básicamente instantáneo. ¿A qué se debe esto? ¿A los intercambios, a los monederos de ARRR ?

Nos hemos empleado duro para solventar este problema y la primera cosa que hay que decir es que no hay ninguna otra blockchain que se acerque a la cantidad de transacciones zaddr que tiene ARRR. La razón fundamental de porqué los monederos de los intercambios se ralentizan es debido a como se procesan los zk-SNARKs. Lo que viene a continuación no es una descripción técnica detallada al 100%, se ha simplificado para ser capaz de explicar de una forma más clara el problema fundamental.

La red ARRR se puede ver como el envío de una transacción privada encriptada, de tal modo que solamente el receptor la puede desencriptar. (en realidad todos los nodos son capaces de validar que la operación es correcta, por lo que no todo está encriptado). Entonces te puedes imaginar la transacción de una zaddr (dirección z) siendo encriptada y transmitida a la blockchain. Nadie sabe a quien le has enviado los fondos, tampoco que los has enviado, ni la cantidad. Todos los nodos tienen que intentar desencriptar esa transacción encriptada para ver si pueden, y si pueden, sabrán a quien fue mandada. Todavía sería difícil saber quien la envió, pero suele haber comunicaciones off-chain que indican la cantidad, el tiempo, e incluso la txid, por lo que aunque no conozcas la zaddr del envío, al menos tienes la manera de saber quien lo envió. Si el que hace el envío coopera.

Esto parece bastante sencillo, entonces ¿cuál es el problema con los intercambios? El problema es N * B, donde N es el número de zaddrs en el monedero y B es el número de transacciones de toda la blockchain. Por cada N zaddrs en un monedero, se necesitan hacer B desencriptados para saber que en ese monedero había fondos. Por supuesto cada desencriptado toma un tiempo significante, pongamos 0,1 segundo como estimación aproximada. Si la blockchain lleva a cabo 60000 transacciones por día, un monedero con una sola zaddr tardaría 6000 segundos en procesarse. Para un nodo que está en línea sería 6000/86400 = ~7% del uso CPU. Actualmente el ARRR hace un 10% de esto, por lo que el típico nodo de usuario final estaría al 0,7% de uso del núcleo CPU. Básicamente esto sería lo siguiente a nada, y por eso todo el mundo dice que el ARRR es casi instantáneo. Entonces ¿Por qué los intercambios son tan lentos?

pirate jl777

Veamos un intercambio pequeño con un monedero de 100 zaddr, utilizando los números de arriba está ya al 70% de carga con los niveles actuales de transacciones. En un evento es necesario reescanear, y todas las transacciones desde el primer día se deben reprocesar. A menos que el pequeño intercambio tenga un servidor muy rápido, tal vez no sean capaces de alcanzar el proceso hasta el tiempo real. Esto sucede cuando cada bloque nuevo tarda más en ser procesado que el tiempo de bloque. Parece que algunos intercambios se encuentran en esta situación. Tal vez han actualizado hasta lo más alto de la línea de servidor, pero si como máximo hay un 10x en la velocidad del proceso, con 1000 zaddr se atasca. Si hay intercambios con 10000 zaddr entonces se topan con una pared. N * B es un multiplicador brutal, especialmente con el aumento de B cuanta más popularidad de ARRR.

OK, ahora entiendes el problema y efectivamente parece un gran problema sin ninguna posible solución. Afortunadamente tenemos los expertos de zero knowledge en Zcash para encontrar una solución a este problema de escalabilidad. Han hecho esta cosa maravillosa llamada direcciones diversificadas. Es parecido al monedero HD, donde una sola clave privada tiene muchas direcciones públicas diferentes. El factor crítico clave es que con una zaddr diversificada no importa cuántas direcciones diversificadas tengas, pues todo lo que necesitas es un solo desencriptado para determinar que la transacción encriptada proviene de una dirección diversificada específica. ¡No es necesario escanear todas tus direcciones diversificadas!

Ahora la ecuación del rendimiento va hacia B, es decir, que el rendimiento irá en proporción al número de transacciones de la blockchain. Un resultado totalmente fantástico. Sin embargo no fue tan simple cuando empujamos al límite. Primero 10.000 zaddrs, luego hasta 100.000, y entonces hasta un millón y todavía estamos en proceso de crear un monedero con 10 millones de zaddr para asegurar que el rendimiento sea el esperado. Puedes ver varios rendimientos de diferentes minederos en la sección Resultados de Rendimiento. Durante nuestros tests seguimos encontrando cosas que se vuelven demasiado lentas para el uso práctico. La razón es que aunque si cada dirección adicional en el monedero ralentiza las cosas por un solo milisegundo, un monedero con un millón de zaddr podría tomar 1000 segundos, lo cual es más de 15 minutos. Y muchas cosas podrían tomar 10 milisegundos o más, por lo que tenemos que optimizar varias cosas.

Gracias al increíble trabajo de CryptoForge, que es capaz de dar soporte a intercambios con millones de zaddr. ARRR tiene suerte de tener uno de los mejores desarrolladores del núcleo zk-SNARKSs en la industria.

Migración de los intercambios existentes

Debido al modo de trabajar de las direcciones diversificadas, los nuevos intercambio tendrán las cosas más fáciles ya que no les ralentiza el tipo original de zaddr. Los intercambios existentes necesitarán que todos los usuarios generen una nueva dirección de depósito y hacer el cambio para utilizarlas. El rendimiento de la antigua dirección de depósito zaddr seguirá siendo lento debido al factor N * B . Durante esta migración los intercambios existentes necesitarían operar dos nodos, uno para la antigua zaddr y otro para las nuevas direcciones diversificadas, y cuando la gente parase de usar la antigua zaddr de depósito, serían capaces de funcionar con un solo nodo.

Uso de las direcciones diversificadas para el usuario final

Debido a como trabajan las direcciones diversificadas hay un leve vínculo matemático entre ellas, por lo que si una resulta comprometida, podría comprometer el vínculo de las otras direcciones diversificadas. Por esta razón se recomienda que el usuario final no utilicen las direcciones diversificadas a no ser que realmente sepas lo que estás haciendo. Siempre debes tener una clave privada destinada a una zaddr, cuya dirección nunca dirás a nadie más. Envía fondos solamente hacia y desde ti mismo con esta zaddr especial. Entonces, cuando interactúes con otros, especialmente con los intercambios, utiliza una zaddr totalmente diferente. Éste adicional z->z entre zaddr que tiene diferentes claves privadas lo desvincula todo totalmente, incluso si una se compromete, la otra sigue siendo privada.

Estaremos trabajando en los monederos para ayudar a manejar los diferentes tipos de zaddr que ahora es posible crear.

 

jl777 article

Resultados de Rendimiento

Test Machine Specs:
CPU: AMD Ryzen Threadripper 1950x
RAM: 64GB
SSD: Samsung 950 Pro M.2
OS: Ubuntu 16.04

– Generación de direcciones

100,000 diversified zs address creation took 3864.2258 seconds. About 1 hour and 7 minutes.
1,000,000 (1 Million) diversified zs address creation took 40583.6817 seconds. About 11 hours and 27 minutes.

– Tiempo de reescaneo de wallet.dat solamente con direcciones zs diversificadas vacías

100,000 address rescan time: 13m
1,000,000 address rescan time: 13m 20s

– Tiempo de reescaneo con 1 millón de direcciones con 12117 UTXOs empezando el daemos en -rescan param

Rescan time – 28 minutes and 47 seconds
Witness building time – 2 hours 45 minutes and 44 seconds
Total time: 3 hours 14 minutes and 31 seconds

– Tiempo de reescaneo con un mi´on de direcciones con 12117 UTXOs, reescaneo forzado importando la clave privada

Rescan time – 29 minutes and 39 seconds
Witness building time – 2 hours and 52 minutes
Total time – 3 hours 21 minutes and 39 seconds

–Tiempo de reescaneo de la importación de rootkey de las direcciones zs diversificadas en un wallet.dat vacío

Rescan time – 20 minutes and 39 seconds
Witness building time – 2 hours 57 minutes and 19 seconds
Total time – 3 hours 27 minutes and 58 seconds

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

3 respuestas
es_ESEspañol