diff --git a/frontend/README.md b/frontend/README.md index 6bc7d532..900d9a4b 100644 --- a/frontend/README.md +++ b/frontend/README.md @@ -50,7 +50,7 @@ yarn clean # clear previous build artifacts ### Usage -The app is currently available in English and Simplified Chinese. +The app is currently available in English, Simplified Chinese and Spanish. For more details on the internationalization approach and usage see [Quasar I18n doc v.1.18.10](https://v1.quasar.dev/options/app-internationalization#introduction) and [Vue I18n v8.x doc for Vue2](https://kazupon.github.io/vue-i18n/introduction.html). [Basic usage](https://v1.quasar.dev/options/app-internationalization#how-to-use) is as follows: diff --git a/frontend/src/i18n/index.ts b/frontend/src/i18n/index.ts index 4e4bc840..9d87bc17 100644 --- a/frontend/src/i18n/index.ts +++ b/frontend/src/i18n/index.ts @@ -1,7 +1,9 @@ import English from './locales/en-US.json'; import Chinese from './locales/zh-CN.json'; +import Spanish from './locales/es-ES.json'; export default { 'en-US': English, 'zh-CN': Chinese, + 'es-ES': Spanish, }; diff --git a/frontend/src/i18n/locales/es-ES.json b/frontend/src/i18n/locales/es-ES.json new file mode 100644 index 00000000..b88ef8d0 --- /dev/null +++ b/frontend/src/i18n/locales/es-ES.json @@ -0,0 +1,511 @@ +{ + "Home": { + "header": "Envía Pagos Ocultos", + "description": "Solo el emisor y el receptor sabrán quien ha recibido los fondos", + "Tutorial": { + "tutorial": "Tutorial", + "receiving-funds": "Recibir fondos", + "receive-first": "Usa la página Configurar para empezar a configurar tu cuenta", + "receive-second": "Pídele a alguien que te envíe fondos a tu dirección, a tu ENS o a tu CNS a través de la dApp de Umbra", + "receive-third": "Consulta la página Recibir para retirar tus fondos", + "sending-funds": "Enviar fondos", + "send-first": "Consigue la dirección, el ENS o CNS de la persona a la que quieres enviar fondos", + "send-second": "Completa el formulario de la página Enviar" + }, + "banner-donate": "Por favor, considera donar a la {DevelopmentGrant} para Umbra en la ronda de Gitcoin. {LearnMore}", + "banner-passport": "Si donaste a Umbra durante la ronda de Gitcoin, debes {configurePassport} para optar. {LearnMore}", + "supporting": "apoyando", + "configure-passport": "configurar el pasaporte de Gitcoin", + "learn-more": "Aprende más", + "development-grant": "subvención de desarrollo" + }, + "Home-action-card": { + "send": "Enviar", + "send-description": "Enviar fondos a otro usuario", + "receive": "Recibir", + "receive-description": "Consultar y retirar los fondos recibidos", + "setup": "Configurar", + "setup-description": "Configurar tu cuenta para recibir fondos" + }, + "Header-Links": { + "home": "Inicio", + "FAQ": "FAQ", + "contact": "Contacto" + }, + "Base-Layout": { + "clear-local-storage": "Borrar almacenamiento local", + "clear-local-storage-description": "Borra todos los datos del almacenamiento local, incluido el historial de envíos, los anuncios de pago y la conexión a la wallet.", + "connect-wallet": "Conectar Wallet", + "settings": "Ajustes", + "dark-mode": "Modo oscuro", + "advanced-mode": "Modo pro", + "advanced-mode-description": "Habilita funciones avanzadas como la exportación de claves privadas, opciones adicionales de IDs del receptor y ajustes para escaneo de eventos.", + "caution": "¡Úsalo con cuidado, forastero!", + "on": "activado", + "off": "desactivado", + "about": "Acerca de", + "built-by": "Creado con ❤️ por {0}", + "links": "Enlaces", + "send-history": "Historial de envíos", + "send-history-description": "Permite guardar el historial de envíos localmente en el navegador para poder verlo en la página \"Historial de envíos\"." + }, + "Address-Settings": { + "advanced-mode-on": "Modo pro activado" + }, + "Contact": { + "contact": "Contacto", + "paragraph": "¿Has leído {0} y aún tienes preguntas? ¡No dudes en ponerte en contacto con nosotros! Probablemente te responderemos más rápido en Discord.", + "faq": "Preguntas frecuentes", + "discord": "{0} en Discord", + "join-us": "Únete a nosotros", + "twitter": "{0} Umbra en Twitter", + "follow": "Síguenos", + "email": "Envíanos un email a {0}" + }, + "Send": { + "sending-disabled": "El envío a través de Umbra se ha desactivado temporalmente mientras realizamos tareas de mantenimiento del sistema. ¡Volvemos pronto!", + "send": "Enviar", + "single-send": "Envío único", + "batch-send": "Envío por lotes", + "coming-soon": "¡Próximamente!", + "connect-your-wallet": "Conecta tu wallet para enviar fondos", + "connect-wallet": "Conectar Wallet", + "recipient": "ENS o dirección del receptor", + "recipient-pkey": "Enviar utilizando la clave pública estándar del receptor", + "question-circle": "Cuando esté marcado, la clave pública utilizada será la clave pública estándar para la dirección proporcionada. El receptor tendrá que introducir la clave privada de su cuenta en esta dApp para retirar sus fondos.", + "question-circle-warning": "No utilices esta función a menos que sepas lo que haces.", + "learn-more": "Aprende más", + "select-token": "Selecciona el token a enviar", + "slippage-exceeded": "La cantidad real enviada podría diferir materialmente de la estimada debido a los precios del gas. Por favor, inténtelo de nuevo.", + "token": "Token", + "amount": "Cantidad", + "summary": "Resumen", + "sending": "Enviando", + "fee": "Tarifa de Umbra", + "fee-explain": "Las transacciones en %{chainName} son muy baratas, por lo que se cobra una pequeña tarifa para evitar el spam en el protocolo.", + "total": "Total", + "max": "Max", + "max-native-less-than-toll": "No se puede enviar el máximo. El saldo es inferior al peaje de Umbra.", + "copy-payment-link": "Copiar enlace de pago", + "enter-an-amount": "Introduce una cantidad", + "enter-a-recipient": "Introduce un receptor", + "select-a-token": "Selecciona un token", + "select-a-token-for-send": "Selecciona un token para enviar", + "send-at-least": "Envía un mínimo", + "amount-exceeds-balance": "El importe supera el saldo disponible", + "total-amount-exceeds-balance": "El importe total enviado supera el saldo", + "please-complete-form": "Completa el formulario", + "wallet-not-connected": "Wallet no conectada", + "umbra-fee-exceeds-balance": "necesario para que la tarifa de Umbra supere el saldo disponible", + "advanced-send-warning": "El receptor tendrá que introducir la clave privada de su cuenta en esta dApp para retirar sus fondos. No utilices esta función a menos que sepas lo que haces.", + "acknowledge-risks": "Soy consciente de los riesgos", + "send-history": "Historial de envíos", + "add-send": "+ Añadir más", + "receiver-addr-ens": "ENS o dirección del receptor" + }, + "Receive": { + "receive": "Recibir", + "connect-your-wallet": "Conecta tu wallet para escanear los fondos recibidos", + "connect-wallet": "Conectar Wallet", + "need-signature-lately": "Firma para escanear los fondos recibidos recientemente", + "need-signature": "Esta dApp necesita de tu firma para escanear los fondos que has recibido", + "scan-funds": "Haz click a continuación para escanear los fondos que has recibido", + "sign": "Firmar", + "scan": "Escanear", + "scan-settings": "Ajustes de escaneo", + "start-end": "Introduce el bloque inicial o final que se utilizarán para buscar eventos. Un bloque inicial vacío escaneará desde el bloque cero, y un bloque final vacío escaneará hasta el bloque actual.", + "start-block": "Bloque inicial", + "end-block": "Bloque final", + "enter-prv-key": "Introduce la clave privada que se utilizará para buscar eventos. Una clave privada en blanco utilizará las generadas a partir de tu firma.", + "prv-key": "Clave privada", + "fetching": "Recuperando todos los anuncios de pago...", + "fetching-latest": "Recuperando los últimos 10.000 anuncios de pago...", + "fetching-latest-from-last-fetched-block": "Recuperando los últimos anuncios de pago...", + "scanning": "Escaneando todos los anuncios de pago en busca de fondos...", + "scanning-latest": "Escaneando los últimos anuncios de pago en busca de fondos...", + "scanning-latest-from-last-fetched-block": "Escaneando los últimos anuncios de pago...", + "wait": "Esto puede tardar un par de minutos dependiendo de tu conexión y dispositivo. Es normal— ten paciencia.", + "stop": "Detener" + }, + "Setup": { + "setup": "Configuración", + "connect-wallet": "Conecta tu wallet para configurar tu cuenta", + "generate-stealth": "Generar y publicar claves ocultas", + "paragraph": " Haz click en el siguiente botón para completar el proceso de configuración. Esto dará lugar a dos avisos en tu wallet:
Umbra es un protocolo de direcciones ocultas para Ethereum. Esto significa que permite a un pagador enviar fondos a una dirección nueva. Esa dirección está controlada por el receptor previsto, pero sólo el pagador y el receptor lo saben.
Una manera de pensar en Umbra es la siguiente: Imagina que, antes de que alguien te envíe fondos, le envías una dirección nueva, nunca antes utilizada. Sólo el emisor sabría que controlas esa dirección, lo que añade una capa de privacidad al pago. Los pagos a través de Umbra funcionan de una forma similar, pero no son interactivos: no necesitas dar a nadie una dirección nueva, simplemente pueden generar una a la que saben que solo tú podrás acceder.
", + "an-example": "¿Me puedes poner un ejemplo?", + "an-example-answer": "Alice tiene un negocio y contrata a Bob para que le haga de subcontratista. Alice acuerda pagar a Bob 1.000 DAI/semana por su trabajo. Bob posee el ENS bob.eth. Si Alice enviara los fondos cada semana a bob.eth, cualquiera que mirara la cadena podría saber de forma fácil que Alice está pagando a Bob 1.000 DAI cada semana.
En su lugar, Bob y Alice utilizarán Umbra para realizar pagos privados. La primera vez que Bob entra a la dApp de Umbra, crea su cuenta, lo que permite a cualquiera pagarle de forma privada utilizando su dirección. Entonces, Alice usa Umbra para enviar 1.000 DAI a Bob cada semana— solo necesita conocer su dirección o ENS.
On-chain, vemos que Alice paga 1.000 DAI a una nueva dirección vacía cada semana. Entre bastidores, Bob controla las claves de cada una de estas direcciones a través de Umbra, pero nadie excepto Alice y Bob lo sabe.
Bob usa Umbra para retirar sus 1.000 DAI cada semana. Sólo tiene que proporcionar una dirección a la que enviarlo. Lo mejor para él es utilizar una dirección que NO esté vinculada a su identidad. Suele optar por enviarlo directamente a un CEX, donde lo vende por FIAT cuando lo necesita. Esto significa que el CEX de Bob ahora sabe que este pago fue para él. Para el observador casual de la cadena— que no tiene acceso a la información privada del CEX— el hecho de que el pago de Alice fuera para Bob queda oculto.
Veamos otro ejemplo: Liza dirige un sitio web que solicita donaciones. Si todo el mundo donara enviando directamente sus fondos, todo el mundo sabría cuánto recibió Liza en donaciones. Si, por el contrario, las donaciones se enviaran con Umbra, cada donación se enviaría a una dirección diferente y sólo Liza sabría la cantidad total de donaciones que ha recibido.
", + "wen-token": "¿Tiene token Umbra?", + "wen-token-answer": "No.", + "how-does-it-work": "¿Cómo funciona?", + "how-does-it-work-answer": "A continuación se presenta una descripción general de como funciona Umbra:
Umbra ofrece un conjunto limitado de garantías de privacidad y es importante entenderlas antes de utilizar el protocolo. Umbra NO ofrece \"completa\" privacidad como Aztec o Zcash. Simplemente hace que sea imposible para cualquier observador externo (es decir, cualquiera que no sea el emisor o el receptor) saber a quién pagó el emisor mirando la dirección de recepción.
Es importante entender que una mala higiene por parte del receptor— por ejemplo, enviar los fondos directamente a una dirección públicamente conocida— elimina las ventajas de privacidad tanto para el emisor como para el receptor.
Las propiedades de privacidad de Umbra también pueden verse mermadas si un observador puede reducir el conjunto de posibles receptores de una transacción determinada. Cualquier clave pública válida puede utilizarse como destinatario, y cualquiera que haya enviado una transacción en Ethereum tiene una clave pública disponible públicamente. Por tanto, por defecto, el \"conjunto de anonimato\"—el conjunto de posibles receptores de una transacción—¡es cualquiera que haya enviado alguna vez una transacción en Ethereum!
En la práctica, esto no es necesariamente así, y un observador puede reducir la lista de receptores de varias maneras:
No. Umbra no es un mixer y no utiliza pruebas de cero conocimiento. En su lugar, Umbra se basa en criptografía de curva elíptica ordinaria. Está pensada para pagos entre dos entidades, y viene con un conjunto diferente de compensaciones de privacidad. En lugar de romper el vínculo entre la dirección emisora y la receptora, como un mixer, Umbra hace que ese vínculo carezca de sentido. Todo el mundo puede ver quién envió los fondos, y todo el mundo puede ver la dirección a la que se enviaron los fondos, pero esa dirección receptora nunca se ha visto en la blockchain, por lo que es imposible para cualquier observador externo saber quién la controla.
", + "account-setup": "Configuración", + "what-is-setup": "¿Qué es la configuración de la cuenta?", + "what-is-setup-answer": "Un usuario firma un mensaje, y a partir de ese momento se generan las claves públicas y las claves privadas de Umbra. Se realiza una transacción en el registro de claves ocultas de Umbra, asociando las claves públicas a su dirección.
", + "is-setup-required": "¿Es necesario crear una cuenta?", + "is-setup-required-answer": "Este paso no es técnicamente necesario, pero se recomienda encarecidamente por razones de seguridad. Para acceder a los fondos ocultos, la dApp de Umbra necesita tus claves privadas. Introducir tus claves privadas de tu wallet en cualquier sitio web es muy peligroso, ¡no queremos que lo hagas! Al pasar por el proceso de configuración de tu cuenta, firmas un mensaje para generar un conjunto de claves privadas de Umbra específico para la dApp. Esto es mucho más seguro, ya que Umbra nunca tiene la clave privada de tu wallet.
", + "why-setup-again": "¿Por qué tengo que volver a configurar mi cuenta?", + "why-setup-again-answer": "Si configuraste tu cuenta de Umbra cuando el servicio aún estaba en beta—antes de Octubre de 2021—deberás rehacer la configuración. Esto requiere una firma y una transacción.
Este paso adicional se debe a una actualización del sistema de registros del resolver de ENS asociados a la dirección de un usuario. El nuevo sistema es mucho más sencillo y utiliza una simple correspondencia entre la dirección del usuario y sus claves ocultas.
El nuevo sistema se desarrolló en respuesta a los comentarios de los usuarios durante el periodo beta de Umbra. El nuevo sistema sólo requiere una transacción, y los emisores pueden proporcionar el ENS del receptor o su dirección normal. En general, el nuevo sistema es más sencillo de configurar y usar.
", + "why-setup-again-answer-issue": "Para una explicación aún más profunda y técnica de esta actualización, consulta {0} en el repositorio de Github de Umbra.", + "why-setup-again-answer-this-issue": "esta issue", + "sending-funds": "Enviar fondos", + "why-only-tokens": "¿Por qué sólo están disponibles algunos tokens?", + "why-only-tokens-answer": "Cuando envías ETH, el ETH se envía directamente a la dirección oculta computada. Esa dirección oculta tiene ahora ETH, que se requiere para pagar el gas, por lo que el receptor puede transferir fácilmente ese ETH con un envío ordinario.
Cuando envías tokens, éstos no se envían directamente a la dirección oculta. Si fueran enviados, tendrías que conseguir ETH y enviarlo a la dirección oculta para pagar el gas y así poder retirar fondos (o utilizar alguno de los costosos esquemas CREATE2). En su lugar, los tokens son retenidos por el contrato y pueden ser liberados de dos formas:
Por defecto, la dApp de Umbra utiliza un relayer del equipo de Umbra. Gestionar los relayers y asegurarse de que se te reembolsan adecuadamente las tarifas de gas, puede ser complicado, así que para empezar sólo están habilitados unos pocos tokens y la lista de tokens soportados se irá ampliando.
", + "when-receive": "¿Cuándo recibirá el receptor sus fondos?", + "when-receive-answer": "¡Inmediatamente! El receptor recibe y puede retirar fondos inmediatamente después de que la transacción de envío se haya minado.
", + "min-amount": "¿Por qué hay un importe mínimo de envío?", + "min-amount-answer": "Cuando envías fondos con Umbra, la dirección del receptor es una dirección que nunca se ha utilizado antes. Esto significa que no tiene ni ETH ni tokens, por lo que debes pagar las retiradas utilizando los fondos que se te enviaron. Cuando se envía ETH, esto se hace con una transferencia normal. Cuando se envían tokens, esto se hace con un relayer para que las tarifas puedan ser pagadas con los tokens recibidos. Por lo tanto, hay una cantidad mínima de envío para asegurar que el receptor siempre pueda retirar sus fondos facilmente.
", + "umbra-fee": "¿Por qué a veces hay que pagar una tarifa de Umbra?", + "umbra-fee-answer": "Para encontrar los fondos que has recibido a través de Umbra es necesario escanear todas las transacciones enviadas, y a continuación, comprobar cada una de ellas para saber cuáles son para tí.
En las redes con tarifas de transacción muy baratas, el contrato de Umbra cobra un pequeño peaje al enviar fondos para disuadir las transacciones de spam, ya que éste haría más dificil escanear todas las transacciones enviadas.
", + "payment-links": "¿Qué son los enlaces de pago?", + "payment-links-answer": "Cuando en la página Enviar, rellenes una parte o la totalidad del formulario de envío y hagas click en el botón Copiar enlace de pago , esto copiará una URL al portapapeles que, cuando se visite, rellenará previamente el formulario de envío con los valores de la URL.
Ten cuidado al especificar una cantidad como parte de tu enlace de pago, ya que puede reducir la privacidad. Por ejemplo, si compartes un enlace de pago para que la gente pueda donarte 100 DAI, y de repente muchos envíos de 100 DAI empiezan a pasar por Umbra, los observadores sabrán que es muy probable que esas transferencias sean para tí.
", + "send-history-different-devices": "¿Por qué no puedo ver mi historial de envíos en distintos dispositivos?", + "send-history-different-devices-answer": "On-chain, el receptor de tus transacciones de envío no es discernible. Esto es por diseño, y el punto de Umbra—dirección receptora, es una dirección oculta. Como resultado, no es posible sincronizar tu historial de envíos entre dispositivos observando el histórico on-chain.
En su lugar, tu historial de envíos está encriptado y almacenado en el almacenamiento local (localStorage) de tu navegador. Nunca sale de tu dispositivo, y por lo tanto, no se puede ver en otros dispositivos. Además, las transacciones enviadas antes de que se añadiera esta función a la dApp de Umbra en mayo del 2023 no se almacenan en ningún dispositivo.
", + "receiving-funds": "Recibir fondos", + "safe-address": "¿Qué direcciones son seguras para retirar fondos?", + "safe-address-answer": "Te sugerimos 3 formas de retirar preservando tu privacidad. Ten en cuenta que cada una tiene sus propias ventajas e inconvenientes.
El riesgo que hay que tener en cuenta al retirar fondos es que si se hace a una dirección que está asociada a alguna identidad conocida públicamente, entonces se pierde la privacidad de la siguiente manera:
Digamos que Alice envía fondos a Bob a través de Umbra. Ahora, sólo Alice y Bob saben que Alice pagó a Bob. Cualquier otro observador sabe que Alice envió fondos a alguien, pero no saben quién es ese alguien.
Si Bob retira esos fondos a su dirección públicamente conocida bob.eth, que resuelve a 0x123...def, entonces los observadores saben que ha pasado una de estas cosas:
Además, considera el caso en el que Bob retira los fondos pagando directamente a su amigo Charlie—Charlie ahora sabe que Alice pagó a Bob.
Para ayudar a mitigar esto, la dApp de Umbra intentará advertirte si introduces una dirección de retirada que pueda reducir tu privacidad. Por lo tanto, verás advertencias si la dApp detecta que estás retirando a una dirección que:
Esto no es una lista exhaustiva de direcciones de retirada potencialmente peligrosas, así que ten cuidado.
", + "umbra-withdrawal": "¿Puede Umbra facilitar la retirada de fondos preservando la privacidad?", + "umbra-withdrawal-answer": "¡Si! Esta es un área en la que tenemos intención de hacer muchas mejoras en el futuro, sobre todo apoyándonos en la funcionalidad del hook post-retirada de Umbra.
Algunos ejemplos de cómo planeamos aprovechar esto incluyen:
Hay otras muchas opciones que podemos intentar a través de hooks para ampliar en gran medida la privacidad preservando las opciones de retirada.
", + "scan-time": "¿Por qué se tarda tanto en buscar mis fondos?", + "scan-time-answer": "Para encontrar los pagos que se te han enviado, la dApp tiene que buscar en todos los pagos que se han enviado y comprobar si son para ti. Por tanto, cuantos más pagos se hayan enviado, más tiempo tardará.
", + "scan-time-answer-issue": "Se trata de un problema abierto con varias soluciones potenciales ({one}{two}), y esperamos mejorarlo con el tiempo.", + "when-withdrawal": "¿Cuándo puedo retirar mis fondos?", + "when-withdrawal-answer": "¡Inmediatamente! Puedes retirar tus fondos inmediatamente después de que la transacción de envío sea minada.
", + "security": "Seguridad", + "audit": "¿Ha sido Umbra auditado?", + "audit-answer-contract": "Los {contracts} han sido auditados por ConsenSys Diligence, y el resultado de la auditoría puede encontrarse {here}.", + "audit-contracts": "contratos", + "audit-here": "aquí", + "audit-answer-umbra-js": "La {umbrajs} {library} responsable de gestionar la lógica off-chain y las operaciones de curva elíptica han sido auditadas por Least Authority, y el resultado de la auditoría puede consultarse {here}.", + "audit-library": "librería", + "audit-answer-umbra-off-chain": "Las operaciones de curva elíptica off-chain son una parte fundamental de la lógica de negocio de Umbra, por lo que confiamos en la sencilla librería {PaulMillers}, zero-dependency {nobleSecp256k1} para gestionarlas. Gracias a la {community}, pudimos recaudar fondos suficientes para pagar una auditoría de esta librería con Cure53. Puedes encontrar el resultado de la misma {here}.", + "audit-community": "comunidad", + "umbra-risk": "¿Cuáles son los riesgos de Umbra?", + "umbra-risk-answer": "Como todo software en el ecosistema crypto, el uso de Umbra conlleva riesgos. Esto incluye riesgos de errores críticos, hackeos u otros ataques de actores maliciosos. Cualquiera de estos escenarios, o todos ellos, podría resultar en una pérdida de fondos.
Para ser más específicos, estos son algunos de los riesgos que hemos visto en otros proyectos del pasado:
Ni que decir tiene que estamos trabajando duro para evitarlos, pero eso no significa que vayamos a tener éxito. Los servicios de Umbra se proporcionan sin ninguna garantía, y debes utilizarlo bajo tu propia responsabilidad. [I] Añadir la explicación de que aunque exista un hackeo de los contratos, las claves públicas NO dan acceso a los fondos retirados ni a los fondos de la wallet firmante en el setup
", + "crypto-js": "¿Es segura la criptografía en JavaScript?", + "crypto-js-answer": "En general, un entorno de ejecución de JavaScript no es ideal para cumplir los requisitos de seguridad. Presenta desafíos a la hora de ocultar datos secretos en la memoria (por ejemplo, las claves privadas específicas de tu dApp) y en evitar que esos datos se escriban en el disco. Usar JavaScript también significa que la librería de criptografía subyacente puede ser susceptible a cosas como los {timingAttacks}. Umbra utiliza {nobleSecp256k1} para toda la criptografía, y puedes leer más sobre sus limitaciones y mitigación de tales vulnerabilidades {here}.", + "crypto-js-timing-attacks": "ataques de sincronización", + "crypto-js-here": "aquí", + "crypto-js-answer-rest": "Sin embargo, el ecosistema de Ethereum consta de muchas wallets y aplicaciones que dependen de la criptografía en JavaScript y hasta ahora no ha habido problemas importantes, por lo que este enfoque es probablemente un compromiso adecuado para la mayoría de usuarios.
", + "tech-details": "Detalles técnicos", + "network-addrs": "¿En qué redes está desplegada Umbra y cuáles son las direcciones de sus contratos?", + "network-addrs-core": "El contrato principal de {umbra} está desplegado con esta dirección {umbraAddr} en {mainnet}, {sepolia}, {optimism}, {polygon}, {gnosis}, y {arbitrum}", + "network-addrs-registry": "El {stealthRegistry} está desplegado con esta dirección {stealthRegistryAddr} en {mainnet}, {sepolia}, {optimism}, {polygon}, {gnosis}, y {arbitrum}", + "how-it-works": "¿Cómo funciona?", + "how-it-works-answer": "Visión general de las direcciones ocultas
Empecemos explicando como funciona el protocolo de Umbra (y más en general, cómo funcionan las direcciones ocultas) work:
El receptor tiene una clave pública P y una clave privada p. El emisor genera un número aleatorio r, y calcula una nueva clave pública oculta como P_oculta = P * r usando la multiplicación por curva elíptica. El emisor deriva la dirección a_oculta a partir de esa clave pública, y le envía los fondos. Gracias a la magia de las matemáticas de curva elíptica, el receptor puede generar la clave privada p_oculta necesaria para acceder a los fondos en a_oculta calculando p_oculta = p * r.
El primer problema que hay que resolver es cómo hace llegar el emisor el valor de r al receptor. Si r se conociera públicamente, los observadores de la cadena podrían determinar a quien se enviaron los fondos calculando P * r para varios valores de P publicados hasta encontrar la dirección oculta. Por tanto es necesario cifrar r.
", + "how-it-works-answer-ECDH": "El cifrado se realiza mediante {ECDH} (ECDH), lo que significa que el emisor utiliza la clave pública del receptor para cifrar el número aleatorio. El número aleatorio cifrado nos da el texto cifrado {c}. El número aleatorio cifrado {c} y la dirección oculta {aStealth} son emitidos como un evento de {announcement} del contrato de Umbra. ECDH requiere que el emisor genere una clave privada efímera para el cifrado, por lo que la clave pública efímera {PEphemeral} que el receptor necesitará para descifrar, también se emite en este evento.", + "how-it-works-answer-part-2": "Ahora el receptor puede escanear a través de todos los eventos de Anuncio de Pago y encontrar sus fondos de la siguiente manera:
Clave privada de la dApp
Como se infiere de la explicación anterior, la dApp necesitará acceder a tu clave privada para realizar los cálculos necesarios. Pero cuando conectas tu wallet a una dApp, la wallet NO comparte tu clave privada con la dApp. Esto es bueno, porque si lo hiciera, ¡cualquier dApp que utilices podría robar tus fondos! Entonces, ¿cómo accede Umbra a tu clave? Hay varias opciones:
Escaneo de fondos
La última consideración tiene que ver con el escaneo. Dado que hay que escanear todos y cada uno de los Anuncios de Pago, encontrar los tuyos puede llevar mucho tiempo.
Una forma de acelerarlo (desde la perspectiva del usuario) es delegar el escaneo en un servicio externo y hacer que le notifique cuando reciba fondos. Pero el servicio de escaneo necesita tu clave privada p para determinar si has recibido fondos, ¡y si tienen tú clave privada p pueden robarte los fondos!
Podemos resolver esto generando dos claves privadas. Una clave privada, será la de visualización, p_consulta, usada para encriptar el número aleatorio. La otra será la clave de gasto p_gasto, usada para calcular la dirección oculta y acceder a esos fondos. Por lo tanto, nuestro flujo de envío y recepción se modifica ahora un poco:
Con este enfoque, el receptor puede proporcionar a un servicio de análisis de terceros p_consulta y P_gasto. El servicio puede ahora comprobar si el destinatario ha recibido fondos sin tener la posibilidad de gastarlos.
", + "spend-view-keys": "¿Qué son las claves de gasto y de visualización?", + "spend-view-keys-answer-1": "Tomando prestada la {0} de Zcash, Umbra permite, pero no requiere, que los usuarios utilicen diferentes claves privadas para \"cifrar número aleatorio\" and \"calcular dirección oculta\". Este es el comportamiento por defecto de la dApp de Umbra, pero se puede anular utilizando el Modo Pro.", + "nomenclature": "nomenclatura", + "spend-view-keys-answer-2": "Consulta {0} para más detalles sobre el funcionamiento de las claves de gasto y visualización.", + "spend-view-keys-technical-details": "\"Detalles técnicos: ¿Cómo funciona?\"", + "advanced-mode": "Modo Pro", + "what-is-advanced": "¿Qué es el Modo Pro?", + "what-is-advanced-answer": "Para los usuarios avanzados que entienden el protocolo, cómo funciona y los riesgos que implica, es posible que quieran activar el Modo Pro. Esto proporciona una serie de capacidades adicionales, pero el uso inadecuado puede resultar en la reducción de la privacidad o la pérdida de fondos. ¡Utilízalo con cuidado!
", + "send-to-pkey": "¿Cómo envío fondos a un usuario mediante su dirección o su clave pública?", + "send-to-pkey-answer": "Siempre que un usuario haya enviado al menos una transacción en Ethereum, puedes enviar fondos a una dirección oculta que controle aunque no haya configurado su dirección para usarla con Umbra. Esto se hace de la siguiente manera:
Ten en cuenta los siguientes inconvenientes al enviar fondos de esta forma:
Si se te enviaron fondos utilizando directamente tu clave pública, tu dirección o un hash de transacción de una transacción que enviaste, todavía se puede acceder a tus fondos.
La forma más segura de hacerlo es localmente usando el paquete umbra-js :
Si prefieres la comodidad a la seguridad, puedes retirar fondos utilizando la aplicación Umbra, pero ten cuidado—introducir tu clave privada en un sitio web nunca es buena idea! Si quieres seguir este camino:
Si tienes una idea aproximada de cuándo se te enviaron los fondos, puedes acelerar el proceso de escaneado consultando sólo los eventos que se encuentran dentro de un determinado rango de bloques. Para ello, haz esto:
Los números de bloque inicial y bloque final se guardarán en el almacenamiento local y se aplicarán automáticamente la próxima vez que escanees con el modo pro activado. Deja ambos campos en blanco para borrar los valores y utilizar los predeterminados.
", + "view-prvkey": "¿Cómo puedo ver las claves privadas ocultas?", + "view-prvkey-answer": "Si quieres ver las claves privadas ocultas de un determinado pago que has recibido haz lo siguiente:La documentación para desarrolladores aún no está escrita, pero todo el código está minuciosamente comentado, por lo que debería ser sencillo leer el código para entender cómo funcionan las cosas y construir sobre él.
La librería umbra-js es un buen punto de partida, ya que te dará una visión completa de como funciona Umbra, además de entrar en los detalles. Después, puedes echar un vistazo al contrato y entender donde encaja.
El siguiente debería ser un buen orden para recorrer la base del código de umbra-js. Si lo encuentras confuso, por favor, ¡haznos saber cuál sería un orden mejor!
Después de leer lo anterior, deberías estar bien equipado para entender el contrato Umbra.sol, que te darás cuenta de que es bastante simple. La única parte nueva del contrato de la que aún no habrás visto nada son los hooks. Puedes leer más sobre esto en la sección \"¿Qué son los hooks y cómo se usan?\".
", + "receive-vkey": "¿Cómo puedo recibir la clave de visualización de un usuario, pero no su clave de gasto?", + "receive-vkey-answer": "Actualmente, la única forma de hacerlo es solicitar la firma de un usuario utilizando Umbra.generatePrivateKeys(), que devolverá tanto su clave de gasto como su clave de visualización. Depende de tí descartar la clave de gasto y no utilizarla. A continuación se muestra un ejemplo:
Umbra funciona de forma similar— al retirar los fondos del contrato— los usuarios pueden querer depositarlos directamente en un protocolo DeFi o cambiar su DAI por ETH. Los hooks te permiten hacer esto.
Te darás cuenta que el contrato de Umbra expone múltiples métodos de retirada. Primero tenemos:
Luego tenemos los dos métodos hook:
Para usar los hooks, primero necesitas escribir y desplegar un contrato hook que se ajuste a la interfaz IUmbraHookReceiver. Esto requiere que el contrato implemente un método llamado tokensWithdrawn() que recibe un puñado de parametros. La dirección de este contrato se pasaría como valor para el input _hook en los métodos anteriores.
", + "hooks-answer-encode-data": "Entonces necesitas codificar la calldata que el contrato hook recibirá y sobre el que puede operar. Consulta la sección {0} de la documentación de ethers.js para obtener información sobre cómo codificar los datos de la función.", + "hooks-answer-encoding-data": "Codificación de datos", + "hooks-answer-end": "Y eso es todo. Con la dirección del contrato hook y el calldata codificado, estás listo para llamar a uno de los dos métodos basados en hooks.
" + }, + "AccountReceiveTable": { + "processing-results": "Procesando resultados...", + "configure-umbra": "No podrás recibir fondos hasta que no hayas configurado Umbra.", + "navigate-to-setup": "Ve a la página de {0} y hazlo", + "setup": "Configuración", + "keys-dont-match": "Las claves ocultas publicadas para esta cuenta no coinciden con las generadas por ella. Ve a la página de {0} y completa el flujo de configuración para asegurarte de que las claves publicadas coinciden con las de esta cuenta. Si no lo haces, los pagos enviados a tu cuenta pueden ser difíciles, o incluso imposibles de retirar. ", + "learn-more": "Aprende más", + "scan-settings": "Cambiar la configuración de escaneado", + "account-empty": "Esta cuenta no ha recibido fondos", + "received-funds": "Fondos recibidos", + "sender": "Emisor", + "stealth-receiver": "Receptor oculto", + "received": "Recibido", + "withdrawn": "Retirado", + "hide": "Ocultar", + "withdraw": "Retirar", + "receiver": "Receptor", + "scanning-complete": "Escaneo completado con éxito", + "custom-prv-key": " con una clave privada personalizada", + "scanned-from-block": "Escaneado desde el bloque", + "to": "al", + "all-blocks-scanned": "Se han escaneado todos los bloques", + "scanned-all-blocks-up-to": "Escaneados todos los bloques hasta", + "to-current-block": "al bloque actual", + "private-key-copied": "Clave privada copiada en el portapapeles", + "date-received": "Fecha de recepción", + "amount": "Cantidad", + "wallet-not-connected": "La wallet no está conectada. Intenta actualizar la página y conecta tu wallet", + "address-copied": "dirección copiada al portapapeles", + "umbra-instance-not-found": "Instancia de Umbra no encontrada", + "provider-not-found": "Provider no encontrado", + "no-announcement-selected": "No se ha seleccionado ningún anuncio de pago para retirar", + "signer-or-provider-not-found": "Signer o provider no encontrado", + "fee-not-set": "Tarifa no establecida", + "invalid-chain-id": "chainID inválido", + "receiver-tool-tip": "La dirección oculta que recibió estos fondos parece una dirección vacía, y no puede vincularse a tu cuenta, pero solo tú puedes generar su clave privada.", + "loss-warning": "Parece que estás intentando retirar tus fondos a un contrato inteligente de un token. Es muy probable que esto no sea lo que pretendes, y si lo haces probablemente resultará en una pérdida de fondos. No procedas a ello, a menos que sepas exactamente lo que estás haciendo.", + "i-know-what": "Sé perfectamente lo que estoy haciendo", + "danger": "Peligro", + "most-recent-announcement": "Bloque / timestamp del anuncio de pago más reciente:", + "most-recent-mined": "Bloque minado / timestamp más reciente:" + }, + "AccountReceiveTableWarning": { + "withdrawal-warning": "Estás retirando a {0}, que tiene las siguientes advertencias:", + "withdrawal-warning-rest": "No se recomienda continuar con la retirada a menos que sepas lo que estás haciendo, ya que esto puede reducir o eliminar por completo las propiedades de privacidad proporcionadas por Umbra.", + "learn-more": "Aprende más", + "acknowledge-risks": "Soy consciente de los riesgos" + }, + "AccountReceiveTableWithdrawConfirmation": { + "confirm": "Confirmar", + "cancel": "Cancelar", + "confirm-withdrawal": "Confirmar Retirada", + "to": "Retirando a", + "amount": "Cantidad", + "tx-fee": "Tarifa por transacción", + "relayer-gas-fee": "Tarifa de gas del relay", + "you-will-receive": "Recibirás", + "cannot-withdraw": "No se puede retirar, por favor corrige el error", + "withdraw-in-progress": "Retirada en curso...", + "view-transaction": "Ver transacción" + }, + "Argent": { + "warning": "Atención: Problemas de compatibilidad con Argent", + "warning-paragraph": "Umbra no es compatible con el modelo de seguridad estándar de Argent. Aunque puedes seguir usando Umbra con Argent, corres el riesgo de perder tus fondos si cambias de dispositivo o tienes que recurrir a la recuperación social sin retirar antes los fondos que te hayan enviado a través de Umbra.
Umbra funciona generando claves específicas para la dApp derivadas de la clave privada de tu wallet. Argent es único en el sentido de que su seguridad no depende de tu clave privada. Esto es bueno en muchos sentidos.
Sin embargo, al usar Umbra, debes tener en cuenta lo siguiente: