Introducción a los anillos
Todas las transacciones de Solana se pueden consultar públicamente: las direcciones, los saldos y el historial de transferencias son visibles para cualquiera. Los anillos cifran los saldos onchain y, de forma predeterminada, nunca tienen custodia:- En los anillos confidenciales, el activo y el monto son privados, mientras que el remitente y el destinatario permanecen visibles.
- En los anillos anónimos, el activo, el monto, el remitente y el destinatario son privados.
- El anillo predeterminado no requiere permisos y es confidencial. Cifra el activo y el monto, cualquiera puede usarlo y no incluye controles de políticas personalizados.
- Los anillos personalizados son programas de Solana que permiten programar la privacidad en Solana, de forma similar a Token-2022. Un anillo personalizado puede ser confidencial o anónimo, con reglas personalizadas de políticas, informes y visibilidad.
Para la mayoría de las aplicaciones, recomendamos el anillo predeterminado, confidencial y sin permisos.
Para obtener controles personalizados de políticas y cumplimiento, contáctanos y comienza a usar un anillo personalizado.
Los anillos personalizados son programables
Los anillos personalizados son programas sencillos de Solana que permiten programar la privacidad, con funciones similares a las de Token-2022. Un anillo personalizado puede definir reglas totalmente personalizadas para las transferencias y la visibilidad o auditoría.Example Custom Ring policies
Example Custom Ring policies
Flujos de usuario y garantías de privacidad
Las transacciones con Helius Privacy se ejecutan de forma nativa onchain y se integran con otros programas de Solana en una sola transacción. Los usuarios pueden ingresar a un anillo, realizar transferencias privadas dentro de él o salir de este: 1. Depósito o entrada. Los usuarios envían tokens desde un saldo público de Solana o un saldo en moneda fiduciaria directamente a un saldo privado. 2. Transferencia privada. Los usuarios envían tokens entre saldos privados del mismo anillo o a uno diferente. 3. Retiro o salida. Los usuarios envían tokens desde un saldo privado a un saldo público de Solana o directamente a un saldo en moneda fiduciaria.Depósito en un saldo privado: qué es privado
Los usuarios pueden depositar en un saldo privado de dos formas:- Entrada desde un saldo en moneda fiduciaria a un saldo privado de criptomonedas
- Depósito desde un saldo público a un saldo privado de criptomonedas
- On-ramp from fiat balance
- Deposit from public crypto balance
Transferencia privada: qué es privado
Los usuarios pueden enviar una transferencia privada de dos formas:- Transferencia dentro del mismo anillo
- Transferencia a un anillo diferente
Para la mayoría de las aplicaciones, recomendamos el anillo predeterminado, confidencial y sin permisos.
Para obtener controles personalizados de políticas y cumplimiento, contáctanos y comienza a usar un anillo personalizado.
- Permissionless Confidential Ring
- Custom Rings
Retiro de un saldo privado: qué es privado
Los usuarios pueden retirar fondos de un saldo privado de dos formas:- Salida desde criptomonedas privadas a un saldo en moneda fiduciaria
- Retiro desde criptomonedas privadas a un saldo público de criptomonedas
- Off-ramp to fiat balance
- Withdraw to public crypto balance
Flujo general de una transacción
Una transferencia privada se comporta de forma similar a las transferencias públicas y se ejecuta en una sola transacción de Solana.- Private transfer
- Solana transfer
- El saldo de SOL o SPL del usuario se cifra onchain.
- Se obtiene el estado cifrado y se descifra localmente, o un proveedor delegado descifra y proporciona el estado descifrado.
- La billetera establece el monto y el destinatario y luego solicita una prueba ZK.
- De forma predeterminada, el proveedor de RPC genera la prueba ZK y la devuelve. Un anillo personalizado también exige una prueba de política.
- La billetera crea la transacción de Solana. Las pruebas ZK se verifican sin revelar el estado cifrado. Los programas invocados y quién firma y envía dependen del anillo:
- La aplicación realiza un seguimiento del estado mediante el hash de la transacción de Solana.
- Permissionless Confidential Ring
- Custom Confidential Ring
- Custom Anonymous Ring
Billetera privada
Los usuarios mantienen su saldo cifrado en una billetera privada. La billetera privada recibe transferencias en la dirección pública de Solana del usuario, que funciona comoinbox.
De esta forma, el remitente siempre introduce la dirección de Solana del destinatario, como lo hace con las transferencias públicas.
Creación de una billetera privada
Al crear una billetera privada, la dirección de Solana se registra en un registro onchain. El registro asigna una dirección de Solana a una . Las transferencias se cifran internamente para la dirección protegida. Varias direcciones de Solana no pueden compartir una misma dirección protegida. Cada entrada del registro es una PDA propiedad del , que cualquiera puede consultar para comprobar si una dirección de Solana puede recibir transferencias privadas.En tu aplicación de billetera, puedes permitir que tus usuarios creen billeteras privadas únicamente para una clave pública específica de la “billetera privada”
o para cualquier clave pública.
Transferencias a una billetera privada
En cada transferencia, la API de privacidad busca la dirección de la billetera en el registro onchain para comprobar si el destinatario tiene una billetera privada. Si la encuentra, utiliza internamente la dirección protegida para cifrar la transferencia.Cuando el destinatario de una transferencia privada no tiene una billetera privada, la API de privacidad convierte la transferencia en un retiro de privado a público.Recomendamos solicitar una firma de usuario independiente en la interfaz para evitar que retire fondos accidentalmente a un saldo público.
Administración de claves
Una billetera privada agrega un par de claves protegido a una billetera de Solana a partir de tu par de claves de Solana.
El par de claves protegido es un conjunto formado por las claves de firma, anulación y visualización. No es un par de claves de Solana.
La dirección protegida corresponde a las claves públicas del par de claves protegido. Las transferencias se cifran para esa dirección.
Creación de un par de claves protegido
Una billetera puede crear el par de claves protegido de dos formas.-
Derivar claves de la frase semilla.
- Es el enfoque recomendado para billeteras basadas en una semilla.
- Anillos confidenciales: la clave de firma es la misma clave Ed25519 que una billetera de Solana deriva de esa semilla. Las claves de anulación y visualización son claves adicionales derivadas de la misma semilla.
- Anillos anónimos personalizados: la clave de firma es una clave P-256 adicional derivada de la semilla de la billetera.
- Siempre puedes recrear el par de claves protegido de la misma forma en que recreas la billetera de Solana.
-
Derivar claves de un mensaje fijo con la clave de Solana existente.
- Las firmas de Solana son deterministas, por lo que el mismo par de claves de Solana siempre genera el mismo par de claves protegido. La aplicación nunca recibe la clave privada.
- Es el enfoque recomendado para pruebas y billeteras que no utilizan una frase semilla. La billetera que realiza la integración debe garantizar que la firma no quede expuesta a terceros.
Integración de un par de claves protegido
Una billetera puede mantener por sí misma el par de claves protegido mediante la integración nativa de billeteras. Con la billetera de privacidad integrada, un proveedor de billeteras mantiene el par de claves protegido y ejecuta sus operaciones criptográficas.Modos de descifrado y sincronización de la billetera
Solo el propietario puede descifrar el saldo de una billetera privada con una clave de visualización. Para la divulgación selectiva, un propietario puede compartir una clave de visualización con un auditor. Así, el auditor puede consultar la actividad sin poder gastar fondos. En los anillos personalizados, la política puede designar a un auditor capaz de descifrar todos los saldos de ese anillo personalizado. Los anillos confidenciales (el anillo predeterminado y los anillos personalizados confidenciales) admiten descifrado local y delegado. Los anillos anónimos (solo anillos personalizados) admiten únicamente el descifrado delegado.Una billetera debe descifrar y actualizar los saldos siempre que ejecute recuperaciones de datos históricos: al desbloquear la billetera,
al abrir la billetera privada, al reanudar la aplicación, al reconectarse a la red, cuando haya una interrupción del flujo o al restaurar la billetera.
Descifrado local
En el modo de descifrado local, la billetera descifra y sincroniza localmente los saldos y el historial. Los servidores de Helius no reciben la frase mnemónica, la semilla, la clave privada de firma, las claves privadas de visualización ni el secreto de anulación.Descifrado delegado
En el modo de descifrado delegado, la billetera y el proveedor seleccionado comparten una clave de visualización. Esto permite que el proveedor descifre los saldos y el historial, pero no le concede autoridad para gastar. Una billetera también puede compartir claves de visualización anteriores cuando autoriza al proveedor a sincronizar la actividad histórica. El acceso de auditoría es independiente del descifrado delegado. Un auditor obtiene la visibilidad del anillo definida por la política, mientras que un proveedor delegado recibe acceso de sincronización limitado a la billetera.El indexador proporciona el estado cifrado
Así como las billeteras públicas dependen de un RPC de Solana, las billeteras privadas dependen de un indexador. El indexador proporciona el estado cifrado que una billetera necesita para consultar los saldos y crear transacciones privadas. De forma predeterminada, se puede acceder al indexador mediante la ; cualquiera también puede ejecutar su propio indexador sin permisos como alternativa.Saldo de la billetera privada
El saldo de la billetera privada se mantiene onchain en cuentas privadas de tokens de Solana como UTXO (salidas de transacciones no gastadas), no en una cuenta de tokens de Solana. El anillo predeterminado y todos los anillos personalizados almacenan los saldos privados en un único árbol de Merkle de estado. El saldo de la billetera privada es la suma de todos los UTXO que pertenecen a una billetera privada. Los programas de Solana pueden poseer UTXO de forma similar a las cuentas normales de Solana. Esta documentación utiliza indistintamente los términos cuentas privadas de tokens de Solana y UTXO.Balances in UTXOs vs Solana accounts
Balances in UTXOs vs Solana accounts
Para la experiencia del usuario, no importa si el saldo se mantiene en UTXO o en cuentas de tokens de Solana.A nivel técnico, gastar un saldo público reduce el valor de 
amount en una cuenta de tokens de Solana.
Gastar un saldo privado no sobrescribe el campo amount de un UTXO.
En su lugar, las transacciones privadas toman UTXO existentes como entradas (el SDK los selecciona automáticamente),
consumen las entradas y crean nuevas salidas para el destinatario y para el saldo restante del remitente.Por ejemplo, Alice tiene 50 USDC y envía 35 a Bob.- En una cuenta de tokens de Solana, su campo
amountpasa de 50 a 15, y el de Bob aumenta en 35. El número cambia en el mismo lugar. - Con UTXO, Alice tiene una nota de 50 USDC. La transacción la gasta y crea dos notas nuevas: una nota de 35 USDC para Bob y una nota de cambio de 15 USDC para Alice. Su antigua nota de 50 ahora está gastada.
- One input note
- Multiple input notes
Al depositar activos SOL y SPL en un saldo privado, una PDA de interfaz propiedad del programa de privacidad de Solana mantiene los tokens en custodia y crea UTXO cuyo propietario es el usuario.Al retirar fondos a un saldo público, los UTXO existentes se marcan como gastados y los tokens se liberan en las cuentas de tokens de Solana.
policy_program_id.
Cuentas privadas de tokens de Solana
Una cuenta privada de tokens de Solana es un UTXO que se comporta de forma similar a una cuenta de tokens de Solana, con dos diferencias principales:- una cuenta privada de tokens de Solana no necesita estar exenta de renta al crearla, y
- su saldo está cifrado onchain.
- Activo: el mint cuyas unidades contiene el UTXO. SOL es la dirección de mint predeterminada. El activo puede ser SOL o cualquier activo SPL o Token-2022.
- Monto: la cantidad de unidades de
assetque contiene la nota, expresada en la unidad más pequeña del activo. - Datos del programa y de la política: datos opcionales para que la política configurada del anillo agregue funciones similares a las de Token-2022
- Diagram
- Code
View Solana token account
View Solana token account
- Diagram
- Code