Una breve introducción a los coprocesadores

Intermedio12/25/2023, 10:15:43 AM
Este artículo explora soluciones y alternativas de coprocesadores e interpreta los tres casos de uso principales que los coprocesadores pueden desbloquear.

Hacia el desbloqueo de una nueva clase de aplicaciones. No la computación que necesitamos, sino la computación que merecemos.

Las aplicaciones descentralizadas enfrentan limitaciones a la hora de realizar cálculos complejos en cadena debido a las capacidades de procesamiento restringidas de Ethereum. Como resultado, hemos visto muchos protocolos DeFi mover componentes como libros de pedidos y sistemas de riesgo fuera de la cadena. Esto apunta a la necesidad de entornos computacionales personalizados y adaptados a tareas específicas.

Hemos visto un cambio lento pero gradual en muchas aplicaciones defi implementadas en la cadena que administran partes de su sistema fuera de la cadena. Dydx V4 mantendrá su cartera de pedidos fuera de la cadena y posiblemente también su sistema de márgenes. Blur mantiene partes de su intercambio fuera de la cadena para una experiencia de usuario fluida. Aevo, un intercambio de opciones, mantiene su cartera de pedidos y su motor de riesgos fuera de la cadena. La razón más simple de esto es la dificultad de mantener en cadena estos sistemas centrados en el rendimiento de manera eficiente y escalable.

La migración de componentes fuera de la cadena apunta a una necesidad más amplia: entornos computacionales personalizados (y de alto rendimiento) adaptados a tareas específicas. Pero esto no es todo. En este régimen, el status quo funciona bien. Cuando un protocolo ejecuta un sistema fuera de la cadena, en última instancia, es opaco para usted, el usuario, confiar en si el sistema fuera de la cadena funciona como dice. El cálculo verificable elimina las suposiciones de confianza, lo que permite que los protocolos realicen cálculos fuera de la cadena sin introducir factores de confianza. Ésta es la promesa de los coprocesadores para Ethereum. Antes de discutir el modelo de coprocesador en Ethereum, recapitulemos brevemente de dónde surge esta idea.

El concepto de coprocesadores se originó en la arquitectura de computadoras como una técnica para mejorar el rendimiento. Las computadoras tradicionales dependen de una única unidad central de procesamiento (CPU) para manejar todos los cálculos. Sin embargo, la CPU se sobrecargó a medida que las cargas de trabajo se volvieron más complejas.

Se introdujeron coprocesadores para ayudar: procesadores especializados dedicados a tareas particulares. Por ejemplo, las unidades de procesamiento de gráficos (GPU) manejan los inmensos cálculos paralelos necesarios para la renderización 3D. Esto permite que la CPU principal se centre en el procesamiento de propósito general. Otros coprocesadores comunes incluyen aceleradores criptográficos para cifrado/descifrado, procesadores de señales para multimedia y coprocesadores matemáticos para cálculos científicos. Cada coprocesador tiene una arquitectura optimizada para realizar su carga de trabajo de manera eficiente. (Aunque se podría decir que la mayor parte de esto ha sido subsumido por la programación paralela, como las GPU).

Esta división del trabajo entre CPU y coprocesadores condujo a mejoras de gran magnitud en el rendimiento. El modelo de coprocesador permitió a las computadoras asumir cargas de trabajo cada vez más sofisticadas que no eran factibles con una CPU generalista solitaria.

Ethereum también puede considerarse una máquina virtual de CPU generalista y no está equipada para realizar cálculos pesados simplemente debido a los costos de exclusión que tendría que pagar para ejecutarse en la cadena, algo que ha limitado el despliegue de una variedad de protocolos, incluso obligando a los diseñadores a idear algo nuevo dentro de las limitaciones del EVM. En pocas palabras, los costos son demasiado restrictivos para aplicaciones complejas. Esto también ha llevado a que varios protocolos mantengan partes de su protocolo fuera de la cadena, y cada modelo fuera de la cadena así implementado ha traído consigo una cierta noción de riesgo. Un riesgo de centralización y un riesgo simplemente de confianza; Confías en que el protocolo no sea malicioso, lo que va en cierto modo en contra del espíritu de las aplicaciones descentralizadas.

En este artículo, intento analizar algunas de estas soluciones y ofrecer una idea de qué tipo de aplicaciones podrían desbloquearse gracias a esta infraestructura. También intentaré buscar formas alternativas de descargar la computación, que seguramente se convertirá en la piedra angular de las aplicaciones dentro del espacio criptográfico.

Coprocesadores Zk

Coprocesadores como los ofrecidos por Axiom y RiscZero han abierto recientemente una nueva dimensión de posibles aplicaciones en cadena al permitir que los contratos inteligentes descarguen cálculos pesados. Los sistemas ofrecen pruebas de que el código se ejecutó de una manera que cualquiera puede verificar.

Bonsai y Axiom son soluciones similares en el sentido de que permiten que el cálculo arbitrario con acceso al estado en la cadena se ejecute fuera de la cadena y proporciona "recibos" de que se realizó el cálculo.

Axioma

Axiom permite que los contratos inteligentes de Ethereum accedan a más datos históricos en la cadena y realicen cálculos complejos mientras mantienen la descentralización y la seguridad de la red. Actualmente, los contratos tienen acceso a datos muy limitados del bloque actual, lo que restringe los tipos de aplicaciones que se pueden crear. Al mismo tiempo, permitir que los contratos accedan a los datos completos del archivo histórico requeriría que todos los nodos de la red almacenen el archivo completo, lo cual es inviable debido a los costos de almacenamiento y afectaría negativamente a la descentralización.

Para resolver este problema, Axiom está desarrollando un sistema de “coprocesador ZK”. Permite que los contratos consulten datos históricos de blockchain y realicen cálculos fuera de la cadena a través de la red Axiom. Los nodos de Axiom acceden a los datos en cadena solicitados y realizan el cálculo especificado. La clave es generar una prueba de conocimiento cero de que el resultado se calculó correctamente a partir de datos válidos en la cadena. Esta prueba se verifica en la cadena, lo que garantiza que los contratos puedan confiar en el resultado.

Este enfoque permite a los contratos acceder a muchos más datos del historial de la cadena y la capacidad de realizar cálculos complejos sobre ellos sin sobrecargar los nodos de la capa base. Axiom cree que esto permitirá nuevas categorías de aplicaciones que se basan en un análisis objetivo y demostrable de la actividad histórica de blockchain. Ya lanzaron la funcionalidad de red principal para lecturas de datos básicos y planean expandirse al acceso completo a los datos de archivo y la verificación ZK de las funciones de visualización de contratos en un futuro próximo. Su visión a largo plazo son cálculos ZK aún más avanzados más allá de las capacidades de EVM.

Al generar pruebas de ejecución correcta fuera de la cadena, Axiom desbloquea nuevas categorías de aplicaciones blockchain.

Bonsái Riesgo Cero

Risc Zero ha desarrollado una máquina virtual de conocimiento cero (zkVM) de propósito general que permite probar programas arbitrarios escritos en lenguajes como Rust, C/C++ y Go con conocimiento cero.

zkVM permite a los desarrolladores probar código Rust arbitrario sin conocimiento alguno sin necesidad de diseñar circuitos personalizados. El objetivo es hacer más accesible el desarrollo de aplicaciones sin conocimiento. El zkVM genera un recibo de prueba que certifica que el programa se ejecutó correctamente sin revelar entradas privadas o lógica. Esto permite que se realicen cálculos intensivos fuera de la cadena, y los recibos de prueba validan la ejecución correcta en la cadena. Las cajas Rust funcionan en este zkVM, pero existen algunas limitaciones en torno a las llamadas al sistema. Una característica llamada continuaciones permite dividir cálculos grandes en segmentos que se pueden probar de forma independiente. Esto permite la prueba paralela, eliminando así los límites en el tamaño de cálculo y permite pausar/reanudar programas zkVM. Las continuaciones han permitido nuevos casos de uso como cifrado totalmente homomórfico, EVM y WASM en zkVM.

Bonsai es un servicio de prueba de conocimiento cero fuera de la cadena desarrollado por Risc Zero para permitir el uso de su zkVM de propósito general para aplicaciones Ethereum y blockchain. Proporciona un puente entre los contratos inteligentes dentro de la cadena y los cálculos fuera de la cadena en zkVM.

El flujo de trabajo habilitado por Bonsai es el siguiente:

El desarrollador escribe un contrato inteligente que llama al contrato de retransmisión de Bonsai para solicitar un cálculo fuera de la cadena.

Bonsai observa estas solicitudes en cadena y ejecuta el programa zkVM correspondiente escrito en Rust.

El programa zkVM se ejecuta en la infraestructura de Bonsai, realiza el cálculo intensivo o privado fuera de la cadena y luego genera pruebas de que se ejecutó correctamente.

Bonsai vuelve a publicar los resultados de la prueba, llamados "recibos", en la cadena a través del contrato de retransmisión.

El contrato inteligente del desarrollador recibe los resultados en una función de devolución de llamada

Esto permite que se produzca una lógica sensible o intensiva desde el punto de vista computacional fuera de la cadena y al mismo tiempo se valide la ejecución correcta a través de pruebas zk en la cadena. El contrato inteligente solo necesita encargarse de solicitar cálculos y consumir los resultados.

Bonsai abstrae la complejidad de compilar código Rust en código de bytes zkVM, cargar programas, ejecutar en la VM y devolver pruebas. Los desarrolladores pueden concentrarse en escribir la lógica de su programa. Por lo tanto, esta infraestructura permite ejecutar cálculos de propósito general fuera de la cadena mientras mantiene la privacidad de los datos confidenciales y la lógica.

Bonsai permite a los desarrolladores crear aplicaciones blockchain con computación fuera de la cadena de manera sencilla sin necesidad de experiencia en la criptografía e infraestructura subyacentes de zkVM. En pocas palabras, Bonsai permite a los desarrolladores integrar fácilmente cálculos fuera de la cadena sin experiencia en zk.

Soluciones alternativas

¿Es un coprocesador ZK la única forma de lograr un cálculo fuera de cadena verificable? ¿Qué otras aplicaciones existen para descargar la computación de forma segura y sin confianza? Si bien las opiniones sobre las propiedades de seguridad, la eficiencia y la implementación difieren, se están explorando en varios rincones de las criptomonedas y poco a poco pasarán a primer plano.

Alternativas como MPC y TEE proporcionan otros enfoques para el cálculo fuera de cadena verificable. MPC permite la computación conjunta de datos confidenciales, mientras que los TEE ofrecen enclaves seguros basados en hardware. Ambos presentan compensaciones, pero pueden ser alternativas para los coprocesadores ZK.

MPC (Computación multipartita)

La computación multipartita segura (MPC) permite que varias partes calculen conjuntamente una función a partir de sus entradas manteniendo la privacidad de esas entradas. Permite la colaboración sobre datos confidenciales, manteniendo así la privacidad de todos los participantes. Sin embargo, lograr la equidad en el MPC, donde todas las partes conocen los resultados o ninguna, es imposible si la mayoría de las partes son deshonestas. En otras palabras, las garantías de privacidad e integridad desaparecen cuando todos los nodos están corruptos. La tecnología Blockchain puede ayudar a que los protocolos MPC sean más justos.

Imaginemos a tres amigos que quieren saber el promedio de sus salarios sin revelar sus salarios entre ellos. Podrían utilizar Secure MPC para lograr esto.

Supongamos que los amigos son Alice, Bob y Eve:

Alice toma su salario, le agrega un número aleatorio y le cuenta el resultado a Bob.

Bob suma su salario y otro número aleatorio al número que recibió de Alice y luego le cuenta el resultado a Eve.

Eve suma su salario al número de Bob, luego resta todos los números aleatorios sumados anteriormente y divide el resultado por tres para encontrar el promedio.

El número final es el promedio de sus salarios; Nadie ha aprendido nada sobre los salarios de los demás. Un matiz al que hay que prestar atención aquí es que aunque nadie sabe el salario exacto de cada uno si el promedio es menor que el salario de Eve, entonces Eve podría inferir que el salario de uno de los otros dos es menor que el de ella.

La cadena de bloques proporciona un libro de contabilidad público a prueba de manipulaciones que permite a las partes publicar información. Al utilizar el cifrado de testigos, las partes pueden cifrar la salida de un protocolo MPC injusto. Publican tokens en el libro mayor que permiten extraer una clave de descifrado. Dado que el libro mayor es público, todas las partes pueden acceder a la clave de descifrado al mismo tiempo. Esto permite un protocolo de descifrado justo en el que todas las partes descifran el resultado o ninguna lo hace.

En "MPC como capa de confidencialidad de Blockchain", Andrew Miller habla sobre cómo MPC podría ayudar en los cálculos de datos privados. MPC públicamente auditable utiliza pruebas de conocimiento cero para conservar la integridad a pesar de la corrupción total del nodo. Los clientes realizarían aportaciones para demostrar la validez. Los nodos MPC generan pruebas de cálculo correcto. En última instancia, los verificadores verificarán la coincidencia de entradas, salidas y pruebas. Esta auditoría genera gastos generales mínimos más allá de los costos estándar de MPC. Las pruebas son concisas utilizando SNARK con una configuración universal. Sin embargo, quedan dudas sobre las optimizaciones del rendimiento, los modelos de programación y la implementación en el mundo real.

Enclaves seguros/TEE

Los datos sensibles como información personal, datos financieros, etc., deben protegerse cuando se almacenan o están en tránsito y cuando se utilizan y calculan. Los métodos de cifrado tradicionales protegen los datos en reposo y en tránsito, pero no cuando los datos se utilizan activamente. Esto es un problema porque cuando se procesan datos, a menudo no están cifrados, lo que los deja vulnerables a los ataques.

Los entornos de ejecución confiables (o enclaves seguros) son entornos aislados donde los datos se pueden cifrar, pero aún se pueden realizar cálculos en ellos. La idea clave es aislar los datos y los cálculos para que ni siquiera los procesos privilegiados del sistema puedan acceder a ellos. Los entornos de ejecución confiables (TEE) son áreas seguras dentro de un procesador que brindan funciones de seguridad basadas en hardware para proteger códigos y datos confidenciales. Aíslan el software específico del resto del sistema, asegurando que los datos dentro del TEE no puedan ser manipulados, ni siquiera por el sistema operativo u otro software que se ejecuta en el dispositivo.

Los TEE permiten que los datos confidenciales permanezcan protegidos incluso mientras se utilizan. Esto permite aplicaciones como redes sociales que preservan la privacidad, servicios financieros, atención médica, etc. Existen algunas limitaciones en torno a los supuestos de eficiencia y confianza, pero los enclaves son una tecnología poderosa con muchos usos potenciales, especialmente cuando se combinan con redes blockchain para construir sistemas robustos y no censurables. Las compensaciones en torno a la confianza pueden ser aceptables para muchas aplicaciones comerciales y sin fines de lucro donde se requiere una fuerte privacidad de los datos.

Los entornos de ejecución confiables (TEE) le permiten subcontratar los cálculos a un proveedor de nube externo que no es de confianza, manteniendo al mismo tiempo la confidencialidad de sus datos y las operaciones a prueba de manipulaciones. Esto es enormemente útil para aplicaciones y organizaciones descentralizadas que desean aprovechar la conveniencia y el ahorro de costos de la nube sin sacrificar la privacidad o el control. Pero los TEE no resuelven mágicamente todos los problemas: todavía quedan algunos desafíos prácticos que superar antes de que la mayoría de los desarrolladores puedan utilizarlos fácilmente.

Son un bloque de construcción poderoso, pero aún necesitan una investigación cuidadosa de los sistemas para abordar sus limitaciones en torno a lo mencionado anteriormente y la centralización, escalamiento y tolerancia a fallas de los proveedores.

Los entornos de ejecución confiables (TEE) como Intel SGX y AWS Nitro Enclaves brindan entornos aislados para ejecutar cálculos confidenciales y almacenar datos confidenciales. Los TEE garantizan que incluso los procesos privilegiados del sistema no puedan acceder ni alterar el código y los datos dentro del TEE. Esto permite que las aplicaciones y organizaciones descentralizadas subcontraten los cálculos a hosts en la nube de terceros que no sean de confianza sin preocuparse por la privacidad o la integridad.

Resolver estos desafíos ampliará en gran medida la aplicabilidad de los TEE para aplicaciones descentralizadas que necesitan una fuerte integridad, confidencialidad y resistencia a la censura, mientras se subcontrata la computación y el almacenamiento a nubes que no son de confianza. Los TEE son un primitivo poderoso, pero sigue siendo necesario un codiseño de sistemas reflexivo para abordar sus limitaciones.

Una breve comparación

Al evaluar los coprocesadores, una consideración importante es el modelo de seguridad y el nivel de garantía necesarios para los diferentes tipos de cálculos. Ciertos cálculos sensibles, como las órdenes coincidentes, requieren máxima seguridad y mínimas suposiciones de confianza. Para estos, los coprocesadores que utilizan pruebas de conocimiento cero, como los coprocesadores zk, ofrecen sólidas garantías, ya que los resultados se pueden verificar sin confiar en el operador.

Sin embargo, los coprocesadores zk pueden tener desventajas en cuanto a eficiencia y flexibilidad. Otros enfoques como MPC o hardware confiable pueden ser compensaciones aceptables para cálculos menos sensibles como análisis o modelado de riesgos. Si bien brindan garantías más débiles, permiten una gama más amplia de cálculos de manera más eficiente. El nivel de seguridad necesario depende de la tolerancia al riesgo de las aplicaciones. Los equipos deben analizar el valor en juego y evaluar si los coprocesadores no verificados pero eficientes son un compromiso de ingeniería razonable para ciertos cálculos no críticos.

En general, los coprocesadores abarcan un espectro de modelos de seguridad y los equipos deben adaptar las soluciones a los requisitos de seguridad de tareas específicas. El ecosistema aún está incipiente, por lo que mayores avances en la computación escalable y verificable ampliarán las posibilidades.

Aplicaciones

Control dinámico de protocolos de préstamo

En el blog "El control de retroalimentación como una nueva primitiva para Defi", los autores mencionan que los mecanismos de control para el mecanismo defi podrían actualizarse lentamente de un extremo a otro, utilizando el aprendizaje por refuerzo (RL) y DRL a medida que la computación y el almacenamiento se vuelven abundantes. Si bien la RL aún puede ser difícil, las aplicaciones de aprendizaje automático aún pueden ser posibles gracias a un cálculo verificable.

Los protocolos de préstamo del año pasado han sido objeto de escrutinio debido a la posibilidad de insolvencia debido a los parámetros agresivos del token prestado en un mercado bajista que de otro modo carecería de liquidez. Los modelos que pueden acceder a la liquidez en cadena y crear un perfil de liquidez para los activos posiblemente podrían cambiar los parámetros dinámicamente.

Por ejemplo, los protocolos de préstamos podrían beneficiarse del control dinámico de las tasas de interés basándose en datos en cadena en tiempo real. En lugar de depender de modelos de tasas de interés preestablecidos, un sistema de control de retroalimentación podría ajustar las tasas algorítmicamente basándose en la utilización actual y los factores de liquidez.

Por ejemplo, cuando la demanda de préstamo de un activo es alta, lo que eleva las tasas de utilización, el controlador podría aumentar rápidamente las tasas de interés para incentivar la oferta y estabilizar la utilización. Por el contrario, cuando la utilización es baja, las tasas podrían reducirse para incentivar el endeudamiento. Los parámetros del controlador podrían ajustarse para optimizar objetivos como maximizar los ingresos del protocolo o minimizar la volatilidad.

El protocolo necesitaría acceso a datos en cadena en tiempo real, como los montos totales prestados, la liquidez disponible y otras métricas de utilización para implementar esto. Luego, la lógica del controlador procesa estos datos para calcular los ajustes óptimos de la tasa de interés. Las actualizaciones de tarifas podrían regirse dentro de la cadena a través de un DAO o fuera de la cadena con verificación de prueba.

El protocolo necesitaría acceso a datos en cadena en tiempo real, como los montos totales prestados, la liquidez disponible y otras métricas de utilización para implementar esto. Luego, la lógica del controlador procesa estos datos para calcular los ajustes óptimos de la tasa de interés. Las actualizaciones de tarifas podrían regirse dentro de la cadena a través de un DAO o fuera de la cadena con verificación de prueba. Aunque un trabajo reciente, “Ataques a las curvas de tasas de interés dinámicas de Defi” de Chitra et al. ha demostrado que los modelos de préstamos dinámicos dan como resultado más MEV. Por tanto, el diseño de estos protocolos necesita una cuidadosa consideración.

Aplicaciones de aprendizaje automático

La abundancia de acceso a los datos de blockchain nos lleva a la conclusión natural de utilizar aplicaciones de aprendizaje automático de esta manera. Si bien probar la computación para aplicaciones de aprendizaje automático puede ser un poco más difícil, la computación ML verificable es un mercado enorme por sí solo. Estos también podrían utilizarse para aplicaciones en cadena, especialmente en algunas aplicaciones de seguridad.

Los datos de blockchain contienen señales valiosas que los modelos de aprendizaje automático podrían utilizar para detectar actividades sospechosas o alimentar sistemas de gestión de riesgos. Sin embargo, actualmente no es factible ejecutar ML en cadena debido a los costos del gas y las preocupaciones sobre la privacidad. Esto podría parecerse a sistemas de monitoreo en cadena para contratos inteligentes, billeteras o administradores de carteras para detectar retiros o transferencias sospechosas. Hay una gran cantidad de datos de perfiles disponibles para diversos tipos de señales que se pueden obtener en el caso de la seguridad, por ejemplo, para "Ruggers", "Hacks" y otros ataques maliciosos. También se puede utilizar para aplicaciones defi sobre solvencia crediticia y elaboración de perfiles de riesgo para prestamistas y prestatarios dado su historial en cadena.

Los desafíos incluyen la calidad de los datos, la deriva de conceptos y las limitaciones de rendimiento de los sistemas de prueba. Pero al combinar ML con computación verificable fuera de la cadena, los coprocesadores abren muchas oportunidades nuevas para el análisis de blockchain y la gestión de riesgos.

Swaps perpetuos y opciones

Los sistemas de márgenes para swaps perpetuos siempre han estado ocultos a los usuarios con respecto a los exchanges centralizados e incluso descentralizados. Los sistemas de márgenes para derivados como swaps perpetuos y opciones han sido tradicionalmente cajas negras opacas controladas por bolsas centralizadas.

Los coprocesadores presentan una oportunidad para implementar una lógica de márgenes transparente y verificable para el comercio descentralizado. La promesa de implementar sistemas de desapalancamiento automático de forma verificada ofrece un mayor factor de confiabilidad para los usuarios y los diferencia inmediatamente de sus contrapartes centralizadas.

El sistema de márgenes podría monitorear los precios indexados y los valores de las posiciones para swaps perpetuos, liquidando posiciones antes de que su saldo de margen se vuelva negativo. Todos los parámetros de riesgo, como los índices de margen de mantenimiento, las tasas de financiación y las sanciones de liquidación, podrían regularse en la cadena.

Sin embargo, los cálculos intensivos para calcular los saldos de márgenes, PnL no realizados, montos de liquidación, etc., se pueden descargar a un coprocesador. Ejecutaría la lógica del motor de márgenes en un entorno confidencial y generaría pruebas que acrediten el cálculo correcto.

Los beneficios del enfoque del coprocesador incluyen transparencia, verificabilidad y privacidad. La lógica del motor de margen ya no es una caja negra patentada. Los cálculos se realizan fuera de la cadena, pero los usuarios pueden confiar en las pruebas de ejecución correcta. Lo mismo podría lograrse también con las opciones.

Los desafíos incluyen generar pruebas de manera eficiente para cálculos intensivos de márgenes. Pero, en general, los coprocesadores abren un nuevo potencial para las plataformas de derivados descentralizadas al combinar privacidad con verificabilidad.

Conclusión

Los coprocesadores amplían enormemente las posibilidades de las aplicaciones blockchain sin comprometer la descentralización. A medida que los proyectos de vanguardia continúan innovando en este espacio, el futuro parece brillante para la computación fuera de cadena verificable en Ethereum y más allá.

En un artículo futuro, profundizaré en las consideraciones de seguridad de estas soluciones, las comparaciones con los paquetes acumulativos, cómo encajan en el panorama más amplio de las aplicaciones de Ethereum y si son una panacea para los problemas de escalamiento.

Descargo de responsabilidad:

  1. Este artículo se reimprime de [Espejo]. Todos los derechos de autor pertenecen al autor original [Emperador]. Si hay objeciones a esta reimpresión, comuníquese con el equipo de Gate Learn y ellos lo manejarán de inmediato.
  2. Descargo de responsabilidad: los puntos de vista y opiniones expresados en este artículo son únicamente los del autor y no constituyen ningún consejo de inversión.
  3. Las traducciones del artículo a otros idiomas están a cargo del equipo de Gate Learn. A menos que se mencione, está prohibido copiar, distribuir o plagiar los artículos traducidos.

Una breve introducción a los coprocesadores

Intermedio12/25/2023, 10:15:43 AM
Este artículo explora soluciones y alternativas de coprocesadores e interpreta los tres casos de uso principales que los coprocesadores pueden desbloquear.

Hacia el desbloqueo de una nueva clase de aplicaciones. No la computación que necesitamos, sino la computación que merecemos.

Las aplicaciones descentralizadas enfrentan limitaciones a la hora de realizar cálculos complejos en cadena debido a las capacidades de procesamiento restringidas de Ethereum. Como resultado, hemos visto muchos protocolos DeFi mover componentes como libros de pedidos y sistemas de riesgo fuera de la cadena. Esto apunta a la necesidad de entornos computacionales personalizados y adaptados a tareas específicas.

Hemos visto un cambio lento pero gradual en muchas aplicaciones defi implementadas en la cadena que administran partes de su sistema fuera de la cadena. Dydx V4 mantendrá su cartera de pedidos fuera de la cadena y posiblemente también su sistema de márgenes. Blur mantiene partes de su intercambio fuera de la cadena para una experiencia de usuario fluida. Aevo, un intercambio de opciones, mantiene su cartera de pedidos y su motor de riesgos fuera de la cadena. La razón más simple de esto es la dificultad de mantener en cadena estos sistemas centrados en el rendimiento de manera eficiente y escalable.

La migración de componentes fuera de la cadena apunta a una necesidad más amplia: entornos computacionales personalizados (y de alto rendimiento) adaptados a tareas específicas. Pero esto no es todo. En este régimen, el status quo funciona bien. Cuando un protocolo ejecuta un sistema fuera de la cadena, en última instancia, es opaco para usted, el usuario, confiar en si el sistema fuera de la cadena funciona como dice. El cálculo verificable elimina las suposiciones de confianza, lo que permite que los protocolos realicen cálculos fuera de la cadena sin introducir factores de confianza. Ésta es la promesa de los coprocesadores para Ethereum. Antes de discutir el modelo de coprocesador en Ethereum, recapitulemos brevemente de dónde surge esta idea.

El concepto de coprocesadores se originó en la arquitectura de computadoras como una técnica para mejorar el rendimiento. Las computadoras tradicionales dependen de una única unidad central de procesamiento (CPU) para manejar todos los cálculos. Sin embargo, la CPU se sobrecargó a medida que las cargas de trabajo se volvieron más complejas.

Se introdujeron coprocesadores para ayudar: procesadores especializados dedicados a tareas particulares. Por ejemplo, las unidades de procesamiento de gráficos (GPU) manejan los inmensos cálculos paralelos necesarios para la renderización 3D. Esto permite que la CPU principal se centre en el procesamiento de propósito general. Otros coprocesadores comunes incluyen aceleradores criptográficos para cifrado/descifrado, procesadores de señales para multimedia y coprocesadores matemáticos para cálculos científicos. Cada coprocesador tiene una arquitectura optimizada para realizar su carga de trabajo de manera eficiente. (Aunque se podría decir que la mayor parte de esto ha sido subsumido por la programación paralela, como las GPU).

Esta división del trabajo entre CPU y coprocesadores condujo a mejoras de gran magnitud en el rendimiento. El modelo de coprocesador permitió a las computadoras asumir cargas de trabajo cada vez más sofisticadas que no eran factibles con una CPU generalista solitaria.

Ethereum también puede considerarse una máquina virtual de CPU generalista y no está equipada para realizar cálculos pesados simplemente debido a los costos de exclusión que tendría que pagar para ejecutarse en la cadena, algo que ha limitado el despliegue de una variedad de protocolos, incluso obligando a los diseñadores a idear algo nuevo dentro de las limitaciones del EVM. En pocas palabras, los costos son demasiado restrictivos para aplicaciones complejas. Esto también ha llevado a que varios protocolos mantengan partes de su protocolo fuera de la cadena, y cada modelo fuera de la cadena así implementado ha traído consigo una cierta noción de riesgo. Un riesgo de centralización y un riesgo simplemente de confianza; Confías en que el protocolo no sea malicioso, lo que va en cierto modo en contra del espíritu de las aplicaciones descentralizadas.

En este artículo, intento analizar algunas de estas soluciones y ofrecer una idea de qué tipo de aplicaciones podrían desbloquearse gracias a esta infraestructura. También intentaré buscar formas alternativas de descargar la computación, que seguramente se convertirá en la piedra angular de las aplicaciones dentro del espacio criptográfico.

Coprocesadores Zk

Coprocesadores como los ofrecidos por Axiom y RiscZero han abierto recientemente una nueva dimensión de posibles aplicaciones en cadena al permitir que los contratos inteligentes descarguen cálculos pesados. Los sistemas ofrecen pruebas de que el código se ejecutó de una manera que cualquiera puede verificar.

Bonsai y Axiom son soluciones similares en el sentido de que permiten que el cálculo arbitrario con acceso al estado en la cadena se ejecute fuera de la cadena y proporciona "recibos" de que se realizó el cálculo.

Axioma

Axiom permite que los contratos inteligentes de Ethereum accedan a más datos históricos en la cadena y realicen cálculos complejos mientras mantienen la descentralización y la seguridad de la red. Actualmente, los contratos tienen acceso a datos muy limitados del bloque actual, lo que restringe los tipos de aplicaciones que se pueden crear. Al mismo tiempo, permitir que los contratos accedan a los datos completos del archivo histórico requeriría que todos los nodos de la red almacenen el archivo completo, lo cual es inviable debido a los costos de almacenamiento y afectaría negativamente a la descentralización.

Para resolver este problema, Axiom está desarrollando un sistema de “coprocesador ZK”. Permite que los contratos consulten datos históricos de blockchain y realicen cálculos fuera de la cadena a través de la red Axiom. Los nodos de Axiom acceden a los datos en cadena solicitados y realizan el cálculo especificado. La clave es generar una prueba de conocimiento cero de que el resultado se calculó correctamente a partir de datos válidos en la cadena. Esta prueba se verifica en la cadena, lo que garantiza que los contratos puedan confiar en el resultado.

Este enfoque permite a los contratos acceder a muchos más datos del historial de la cadena y la capacidad de realizar cálculos complejos sobre ellos sin sobrecargar los nodos de la capa base. Axiom cree que esto permitirá nuevas categorías de aplicaciones que se basan en un análisis objetivo y demostrable de la actividad histórica de blockchain. Ya lanzaron la funcionalidad de red principal para lecturas de datos básicos y planean expandirse al acceso completo a los datos de archivo y la verificación ZK de las funciones de visualización de contratos en un futuro próximo. Su visión a largo plazo son cálculos ZK aún más avanzados más allá de las capacidades de EVM.

Al generar pruebas de ejecución correcta fuera de la cadena, Axiom desbloquea nuevas categorías de aplicaciones blockchain.

Bonsái Riesgo Cero

Risc Zero ha desarrollado una máquina virtual de conocimiento cero (zkVM) de propósito general que permite probar programas arbitrarios escritos en lenguajes como Rust, C/C++ y Go con conocimiento cero.

zkVM permite a los desarrolladores probar código Rust arbitrario sin conocimiento alguno sin necesidad de diseñar circuitos personalizados. El objetivo es hacer más accesible el desarrollo de aplicaciones sin conocimiento. El zkVM genera un recibo de prueba que certifica que el programa se ejecutó correctamente sin revelar entradas privadas o lógica. Esto permite que se realicen cálculos intensivos fuera de la cadena, y los recibos de prueba validan la ejecución correcta en la cadena. Las cajas Rust funcionan en este zkVM, pero existen algunas limitaciones en torno a las llamadas al sistema. Una característica llamada continuaciones permite dividir cálculos grandes en segmentos que se pueden probar de forma independiente. Esto permite la prueba paralela, eliminando así los límites en el tamaño de cálculo y permite pausar/reanudar programas zkVM. Las continuaciones han permitido nuevos casos de uso como cifrado totalmente homomórfico, EVM y WASM en zkVM.

Bonsai es un servicio de prueba de conocimiento cero fuera de la cadena desarrollado por Risc Zero para permitir el uso de su zkVM de propósito general para aplicaciones Ethereum y blockchain. Proporciona un puente entre los contratos inteligentes dentro de la cadena y los cálculos fuera de la cadena en zkVM.

El flujo de trabajo habilitado por Bonsai es el siguiente:

El desarrollador escribe un contrato inteligente que llama al contrato de retransmisión de Bonsai para solicitar un cálculo fuera de la cadena.

Bonsai observa estas solicitudes en cadena y ejecuta el programa zkVM correspondiente escrito en Rust.

El programa zkVM se ejecuta en la infraestructura de Bonsai, realiza el cálculo intensivo o privado fuera de la cadena y luego genera pruebas de que se ejecutó correctamente.

Bonsai vuelve a publicar los resultados de la prueba, llamados "recibos", en la cadena a través del contrato de retransmisión.

El contrato inteligente del desarrollador recibe los resultados en una función de devolución de llamada

Esto permite que se produzca una lógica sensible o intensiva desde el punto de vista computacional fuera de la cadena y al mismo tiempo se valide la ejecución correcta a través de pruebas zk en la cadena. El contrato inteligente solo necesita encargarse de solicitar cálculos y consumir los resultados.

Bonsai abstrae la complejidad de compilar código Rust en código de bytes zkVM, cargar programas, ejecutar en la VM y devolver pruebas. Los desarrolladores pueden concentrarse en escribir la lógica de su programa. Por lo tanto, esta infraestructura permite ejecutar cálculos de propósito general fuera de la cadena mientras mantiene la privacidad de los datos confidenciales y la lógica.

Bonsai permite a los desarrolladores crear aplicaciones blockchain con computación fuera de la cadena de manera sencilla sin necesidad de experiencia en la criptografía e infraestructura subyacentes de zkVM. En pocas palabras, Bonsai permite a los desarrolladores integrar fácilmente cálculos fuera de la cadena sin experiencia en zk.

Soluciones alternativas

¿Es un coprocesador ZK la única forma de lograr un cálculo fuera de cadena verificable? ¿Qué otras aplicaciones existen para descargar la computación de forma segura y sin confianza? Si bien las opiniones sobre las propiedades de seguridad, la eficiencia y la implementación difieren, se están explorando en varios rincones de las criptomonedas y poco a poco pasarán a primer plano.

Alternativas como MPC y TEE proporcionan otros enfoques para el cálculo fuera de cadena verificable. MPC permite la computación conjunta de datos confidenciales, mientras que los TEE ofrecen enclaves seguros basados en hardware. Ambos presentan compensaciones, pero pueden ser alternativas para los coprocesadores ZK.

MPC (Computación multipartita)

La computación multipartita segura (MPC) permite que varias partes calculen conjuntamente una función a partir de sus entradas manteniendo la privacidad de esas entradas. Permite la colaboración sobre datos confidenciales, manteniendo así la privacidad de todos los participantes. Sin embargo, lograr la equidad en el MPC, donde todas las partes conocen los resultados o ninguna, es imposible si la mayoría de las partes son deshonestas. En otras palabras, las garantías de privacidad e integridad desaparecen cuando todos los nodos están corruptos. La tecnología Blockchain puede ayudar a que los protocolos MPC sean más justos.

Imaginemos a tres amigos que quieren saber el promedio de sus salarios sin revelar sus salarios entre ellos. Podrían utilizar Secure MPC para lograr esto.

Supongamos que los amigos son Alice, Bob y Eve:

Alice toma su salario, le agrega un número aleatorio y le cuenta el resultado a Bob.

Bob suma su salario y otro número aleatorio al número que recibió de Alice y luego le cuenta el resultado a Eve.

Eve suma su salario al número de Bob, luego resta todos los números aleatorios sumados anteriormente y divide el resultado por tres para encontrar el promedio.

El número final es el promedio de sus salarios; Nadie ha aprendido nada sobre los salarios de los demás. Un matiz al que hay que prestar atención aquí es que aunque nadie sabe el salario exacto de cada uno si el promedio es menor que el salario de Eve, entonces Eve podría inferir que el salario de uno de los otros dos es menor que el de ella.

La cadena de bloques proporciona un libro de contabilidad público a prueba de manipulaciones que permite a las partes publicar información. Al utilizar el cifrado de testigos, las partes pueden cifrar la salida de un protocolo MPC injusto. Publican tokens en el libro mayor que permiten extraer una clave de descifrado. Dado que el libro mayor es público, todas las partes pueden acceder a la clave de descifrado al mismo tiempo. Esto permite un protocolo de descifrado justo en el que todas las partes descifran el resultado o ninguna lo hace.

En "MPC como capa de confidencialidad de Blockchain", Andrew Miller habla sobre cómo MPC podría ayudar en los cálculos de datos privados. MPC públicamente auditable utiliza pruebas de conocimiento cero para conservar la integridad a pesar de la corrupción total del nodo. Los clientes realizarían aportaciones para demostrar la validez. Los nodos MPC generan pruebas de cálculo correcto. En última instancia, los verificadores verificarán la coincidencia de entradas, salidas y pruebas. Esta auditoría genera gastos generales mínimos más allá de los costos estándar de MPC. Las pruebas son concisas utilizando SNARK con una configuración universal. Sin embargo, quedan dudas sobre las optimizaciones del rendimiento, los modelos de programación y la implementación en el mundo real.

Enclaves seguros/TEE

Los datos sensibles como información personal, datos financieros, etc., deben protegerse cuando se almacenan o están en tránsito y cuando se utilizan y calculan. Los métodos de cifrado tradicionales protegen los datos en reposo y en tránsito, pero no cuando los datos se utilizan activamente. Esto es un problema porque cuando se procesan datos, a menudo no están cifrados, lo que los deja vulnerables a los ataques.

Los entornos de ejecución confiables (o enclaves seguros) son entornos aislados donde los datos se pueden cifrar, pero aún se pueden realizar cálculos en ellos. La idea clave es aislar los datos y los cálculos para que ni siquiera los procesos privilegiados del sistema puedan acceder a ellos. Los entornos de ejecución confiables (TEE) son áreas seguras dentro de un procesador que brindan funciones de seguridad basadas en hardware para proteger códigos y datos confidenciales. Aíslan el software específico del resto del sistema, asegurando que los datos dentro del TEE no puedan ser manipulados, ni siquiera por el sistema operativo u otro software que se ejecuta en el dispositivo.

Los TEE permiten que los datos confidenciales permanezcan protegidos incluso mientras se utilizan. Esto permite aplicaciones como redes sociales que preservan la privacidad, servicios financieros, atención médica, etc. Existen algunas limitaciones en torno a los supuestos de eficiencia y confianza, pero los enclaves son una tecnología poderosa con muchos usos potenciales, especialmente cuando se combinan con redes blockchain para construir sistemas robustos y no censurables. Las compensaciones en torno a la confianza pueden ser aceptables para muchas aplicaciones comerciales y sin fines de lucro donde se requiere una fuerte privacidad de los datos.

Los entornos de ejecución confiables (TEE) le permiten subcontratar los cálculos a un proveedor de nube externo que no es de confianza, manteniendo al mismo tiempo la confidencialidad de sus datos y las operaciones a prueba de manipulaciones. Esto es enormemente útil para aplicaciones y organizaciones descentralizadas que desean aprovechar la conveniencia y el ahorro de costos de la nube sin sacrificar la privacidad o el control. Pero los TEE no resuelven mágicamente todos los problemas: todavía quedan algunos desafíos prácticos que superar antes de que la mayoría de los desarrolladores puedan utilizarlos fácilmente.

Son un bloque de construcción poderoso, pero aún necesitan una investigación cuidadosa de los sistemas para abordar sus limitaciones en torno a lo mencionado anteriormente y la centralización, escalamiento y tolerancia a fallas de los proveedores.

Los entornos de ejecución confiables (TEE) como Intel SGX y AWS Nitro Enclaves brindan entornos aislados para ejecutar cálculos confidenciales y almacenar datos confidenciales. Los TEE garantizan que incluso los procesos privilegiados del sistema no puedan acceder ni alterar el código y los datos dentro del TEE. Esto permite que las aplicaciones y organizaciones descentralizadas subcontraten los cálculos a hosts en la nube de terceros que no sean de confianza sin preocuparse por la privacidad o la integridad.

Resolver estos desafíos ampliará en gran medida la aplicabilidad de los TEE para aplicaciones descentralizadas que necesitan una fuerte integridad, confidencialidad y resistencia a la censura, mientras se subcontrata la computación y el almacenamiento a nubes que no son de confianza. Los TEE son un primitivo poderoso, pero sigue siendo necesario un codiseño de sistemas reflexivo para abordar sus limitaciones.

Una breve comparación

Al evaluar los coprocesadores, una consideración importante es el modelo de seguridad y el nivel de garantía necesarios para los diferentes tipos de cálculos. Ciertos cálculos sensibles, como las órdenes coincidentes, requieren máxima seguridad y mínimas suposiciones de confianza. Para estos, los coprocesadores que utilizan pruebas de conocimiento cero, como los coprocesadores zk, ofrecen sólidas garantías, ya que los resultados se pueden verificar sin confiar en el operador.

Sin embargo, los coprocesadores zk pueden tener desventajas en cuanto a eficiencia y flexibilidad. Otros enfoques como MPC o hardware confiable pueden ser compensaciones aceptables para cálculos menos sensibles como análisis o modelado de riesgos. Si bien brindan garantías más débiles, permiten una gama más amplia de cálculos de manera más eficiente. El nivel de seguridad necesario depende de la tolerancia al riesgo de las aplicaciones. Los equipos deben analizar el valor en juego y evaluar si los coprocesadores no verificados pero eficientes son un compromiso de ingeniería razonable para ciertos cálculos no críticos.

En general, los coprocesadores abarcan un espectro de modelos de seguridad y los equipos deben adaptar las soluciones a los requisitos de seguridad de tareas específicas. El ecosistema aún está incipiente, por lo que mayores avances en la computación escalable y verificable ampliarán las posibilidades.

Aplicaciones

Control dinámico de protocolos de préstamo

En el blog "El control de retroalimentación como una nueva primitiva para Defi", los autores mencionan que los mecanismos de control para el mecanismo defi podrían actualizarse lentamente de un extremo a otro, utilizando el aprendizaje por refuerzo (RL) y DRL a medida que la computación y el almacenamiento se vuelven abundantes. Si bien la RL aún puede ser difícil, las aplicaciones de aprendizaje automático aún pueden ser posibles gracias a un cálculo verificable.

Los protocolos de préstamo del año pasado han sido objeto de escrutinio debido a la posibilidad de insolvencia debido a los parámetros agresivos del token prestado en un mercado bajista que de otro modo carecería de liquidez. Los modelos que pueden acceder a la liquidez en cadena y crear un perfil de liquidez para los activos posiblemente podrían cambiar los parámetros dinámicamente.

Por ejemplo, los protocolos de préstamos podrían beneficiarse del control dinámico de las tasas de interés basándose en datos en cadena en tiempo real. En lugar de depender de modelos de tasas de interés preestablecidos, un sistema de control de retroalimentación podría ajustar las tasas algorítmicamente basándose en la utilización actual y los factores de liquidez.

Por ejemplo, cuando la demanda de préstamo de un activo es alta, lo que eleva las tasas de utilización, el controlador podría aumentar rápidamente las tasas de interés para incentivar la oferta y estabilizar la utilización. Por el contrario, cuando la utilización es baja, las tasas podrían reducirse para incentivar el endeudamiento. Los parámetros del controlador podrían ajustarse para optimizar objetivos como maximizar los ingresos del protocolo o minimizar la volatilidad.

El protocolo necesitaría acceso a datos en cadena en tiempo real, como los montos totales prestados, la liquidez disponible y otras métricas de utilización para implementar esto. Luego, la lógica del controlador procesa estos datos para calcular los ajustes óptimos de la tasa de interés. Las actualizaciones de tarifas podrían regirse dentro de la cadena a través de un DAO o fuera de la cadena con verificación de prueba.

El protocolo necesitaría acceso a datos en cadena en tiempo real, como los montos totales prestados, la liquidez disponible y otras métricas de utilización para implementar esto. Luego, la lógica del controlador procesa estos datos para calcular los ajustes óptimos de la tasa de interés. Las actualizaciones de tarifas podrían regirse dentro de la cadena a través de un DAO o fuera de la cadena con verificación de prueba. Aunque un trabajo reciente, “Ataques a las curvas de tasas de interés dinámicas de Defi” de Chitra et al. ha demostrado que los modelos de préstamos dinámicos dan como resultado más MEV. Por tanto, el diseño de estos protocolos necesita una cuidadosa consideración.

Aplicaciones de aprendizaje automático

La abundancia de acceso a los datos de blockchain nos lleva a la conclusión natural de utilizar aplicaciones de aprendizaje automático de esta manera. Si bien probar la computación para aplicaciones de aprendizaje automático puede ser un poco más difícil, la computación ML verificable es un mercado enorme por sí solo. Estos también podrían utilizarse para aplicaciones en cadena, especialmente en algunas aplicaciones de seguridad.

Los datos de blockchain contienen señales valiosas que los modelos de aprendizaje automático podrían utilizar para detectar actividades sospechosas o alimentar sistemas de gestión de riesgos. Sin embargo, actualmente no es factible ejecutar ML en cadena debido a los costos del gas y las preocupaciones sobre la privacidad. Esto podría parecerse a sistemas de monitoreo en cadena para contratos inteligentes, billeteras o administradores de carteras para detectar retiros o transferencias sospechosas. Hay una gran cantidad de datos de perfiles disponibles para diversos tipos de señales que se pueden obtener en el caso de la seguridad, por ejemplo, para "Ruggers", "Hacks" y otros ataques maliciosos. También se puede utilizar para aplicaciones defi sobre solvencia crediticia y elaboración de perfiles de riesgo para prestamistas y prestatarios dado su historial en cadena.

Los desafíos incluyen la calidad de los datos, la deriva de conceptos y las limitaciones de rendimiento de los sistemas de prueba. Pero al combinar ML con computación verificable fuera de la cadena, los coprocesadores abren muchas oportunidades nuevas para el análisis de blockchain y la gestión de riesgos.

Swaps perpetuos y opciones

Los sistemas de márgenes para swaps perpetuos siempre han estado ocultos a los usuarios con respecto a los exchanges centralizados e incluso descentralizados. Los sistemas de márgenes para derivados como swaps perpetuos y opciones han sido tradicionalmente cajas negras opacas controladas por bolsas centralizadas.

Los coprocesadores presentan una oportunidad para implementar una lógica de márgenes transparente y verificable para el comercio descentralizado. La promesa de implementar sistemas de desapalancamiento automático de forma verificada ofrece un mayor factor de confiabilidad para los usuarios y los diferencia inmediatamente de sus contrapartes centralizadas.

El sistema de márgenes podría monitorear los precios indexados y los valores de las posiciones para swaps perpetuos, liquidando posiciones antes de que su saldo de margen se vuelva negativo. Todos los parámetros de riesgo, como los índices de margen de mantenimiento, las tasas de financiación y las sanciones de liquidación, podrían regularse en la cadena.

Sin embargo, los cálculos intensivos para calcular los saldos de márgenes, PnL no realizados, montos de liquidación, etc., se pueden descargar a un coprocesador. Ejecutaría la lógica del motor de márgenes en un entorno confidencial y generaría pruebas que acrediten el cálculo correcto.

Los beneficios del enfoque del coprocesador incluyen transparencia, verificabilidad y privacidad. La lógica del motor de margen ya no es una caja negra patentada. Los cálculos se realizan fuera de la cadena, pero los usuarios pueden confiar en las pruebas de ejecución correcta. Lo mismo podría lograrse también con las opciones.

Los desafíos incluyen generar pruebas de manera eficiente para cálculos intensivos de márgenes. Pero, en general, los coprocesadores abren un nuevo potencial para las plataformas de derivados descentralizadas al combinar privacidad con verificabilidad.

Conclusión

Los coprocesadores amplían enormemente las posibilidades de las aplicaciones blockchain sin comprometer la descentralización. A medida que los proyectos de vanguardia continúan innovando en este espacio, el futuro parece brillante para la computación fuera de cadena verificable en Ethereum y más allá.

En un artículo futuro, profundizaré en las consideraciones de seguridad de estas soluciones, las comparaciones con los paquetes acumulativos, cómo encajan en el panorama más amplio de las aplicaciones de Ethereum y si son una panacea para los problemas de escalamiento.

Descargo de responsabilidad:

  1. Este artículo se reimprime de [Espejo]. Todos los derechos de autor pertenecen al autor original [Emperador]. Si hay objeciones a esta reimpresión, comuníquese con el equipo de Gate Learn y ellos lo manejarán de inmediato.
  2. Descargo de responsabilidad: los puntos de vista y opiniones expresados en este artículo son únicamente los del autor y no constituyen ningún consejo de inversión.
  3. Las traducciones del artículo a otros idiomas están a cargo del equipo de Gate Learn. A menos que se mencione, está prohibido copiar, distribuir o plagiar los artículos traducidos.
Mulai Sekarang
Daftar dan dapatkan Voucher
$100
!