- Un UTXO no es una cuenta de Solana, por lo que no necesita exención de renta.
- Su saldo está cifrado en cadena.
- Propietario – par de claves de Solana, PDA o clave P-256.
- Activo – la acuñación (SOL, SPL o Token-2022).
- Cantidad – el número de unidades de
asset, en su unidad más pequeña. - Datos – un UTXO puede almacenar datos arbitrarios, por ejemplo, el propietario de tokens en custodia.
- Datos del programa y de la política – cumplimiento opcional configurado para el Ring.
- Diagram
- Code
Consulta el código fuente: Especificación · sdk-libs/transaction/src/utxo/note.rs
View Solana token account
View Solana token account
- Diagram
- Code
Saldo privado
El saldo privado es la suma de todos los UTXO de un activo que pertenecen a una billetera privada. La billetera muestra un solo saldo, independientemente de si un saldo privado consta de uno o varios UTXO. Una transferencia privada puede gastar varios UTXO a la vez.Transferencia privada
Las transferencias privadas con UTXO funcionan de manera diferente a las transferencias públicas con cuentas de tokens SPL:- Una transferencia desde una cuenta de tokens SPL actualiza el valor
amount. - Una transferencia privada con UTXO no actualiza el valor
amountde un UTXO. En su lugar, las transferencias privadas gastan los UTXO existentes y crean nuevos UTXO para el destinatario y para el saldo restante del remitente.
- Con cuentas de tokens SPL, el valor
amountde Alice disminuye de 50 a 15 y el de Bob aumenta en 35. - Con UTXO, Alice posee un UTXO de 50 USDC. La transacción gasta el UTXO existente y crea dos UTXO nuevos: uno de 35 USDC para Bob y otro de 15 USDC para Alice.
- Transfer with one UTXO
- Transfer with multiple UTXOs
Selección de UTXO
Para las transferencias privadas, el SDK selecciona UTXO no gastados que cubran la cantidad que quieres transferir. El algoritmo de selección de UTXO gasta la menor cantidad posible de UTXO por transferencia:- El SDK filtra tus UTXO según el activo que se envía y los ordena por cantidad.
- El SDK selecciona tantos UTXO como sean necesarios para cubrir la cantidad de la transferencia. Primero selecciona los UTXO más grandes hasta cubrir la cantidad de la transferencia.
Variantes de transacción
Cada transferencia privada utiliza una variante de transacción: una cantidad fija de espacios para los UTXO que se gastarán y los nuevos UTXO que se crearán. Las variantes abarcan de 1 a 36 UTXO gastados y cada variante tiene su propio circuito ZK. El circuito demuestra que los UTXO gastados son válidos y que los nuevos UTXO contienen la misma cantidad total. Si una transferencia necesita más de 36 UTXO, combínalos primero. El SDK elige una variante adecuada para la transferencia y rellena los espacios sin usar con UTXO ficticios. Los UTXO ficticios no contienen ningún valor y parecen UTXO reales en cadena.- 1 spent, 2 new
- 2 spent, 2 new
- 3 spent, 3 new
- 4 spent, 3 new
Alice envía 30 USDC a Bob. Su UTXO más grande cubre la transferencia.
Supported transaction variants
Supported transaction variants
Consulta el código fuente: Especificación · Variantes compatibles
Combinación de UTXO
Recibir muchas transferencias sin gastar puede fragmentar el saldo privado entre numerosos UTXO. Si una transferencia necesita más de 36 UTXO, combínalos primero para que el usuario pueda gastar todo el saldo en una sola transferencia. La mayoría de los usuarios rara vez encontrarán un saldo fragmentado, ya que una transferencia puede gastar hasta 36 UTXO.- Una combinación agrupa UTXO del mismo propietario y activo en un solo UTXO con el mismo valor total.
- Una combinación no puede gastar fondos ni cambiar el propietario.
- La combinación puede realizarse internamente sin afectar la experiencia de los usuarios finales.
Cada combinación es una transacción de Solana con una prueba ZK y convierte hasta 36 UTXO en uno.
Como el resultado de la combinación es determinista, las pruebas de combinación y la prueba de transferencia se generan en paralelo.
Ejemplo de uso de la instrucción de combinación
Tu aplicación puede realizar combinaciones en dos momentos:- Al sincronizar el saldo privado: al desbloquear la billetera, abrir la billetera privada, reanudar la aplicación, volver a conectarse a la red, detectar una interrupción del flujo o restaurar la billetera.
- Antes de una transferencia: cuando la transferencia necesita más de 36 UTXO.
Las combinaciones se ejecutan sin la firma del usuario. Los Rings personalizados establecen sus propios permisos de combinación.
Cuando usas la billetera privada integrada, la combinación se realiza internamente por ti.
Example for Merge
Example for Merge
Por ejemplo, una billetera privada contiene 1,296 USDC en 1,296 UTXO después de recibir 1,296 transferencias privadas de 1 USDC.
Una transferencia gasta como máximo 36 UTXO, por lo que la billetera gasta el saldo en dos etapas:
- Se ejecutan 36 transacciones de combinación en paralelo y se crean 36 UTXO de 36 USDC cada uno.
- Una transferencia de 36 entradas gasta todo el saldo de 1,296 USDC.
Consulta el código de ejemplo: sdk-tests/client/rust/optimized_merge_transfer.rs · sdk-tests/client/typescript/optimized-merge-transfer.test.ts
Concurrencia de UTXO
Los usuarios pueden gastar saldos privados en cuanto las transacciones sean definitivas. Un saldo privado puede gastarse simultáneamente cuando está dividido entre varios UTXO. Cada UTXO puede gastarse al mismo tiempo en una transacción independiente. Por ejemplo, un saldo con tres UTXO de 100 USDC cada uno puede financiar simultáneamente tres transferencias de hasta 100 USDC. La billetera selecciona qué UTXO gastar.Más información
Overview
Rings, garantías de privacidad y flujo de transacciones.
Architecture
Cómo interactúan las billeteras, los servicios RPC y los programas de Solana.
Encryption and Privacy Guarantees
Cómo se cifran los activos y cuál es la función del par de claves protegido.
Custom Enterprise Rings
Descubre cómo configurar un Ring personalizado.
¿No encontraste lo que buscabas?
¡Contáctanos! Telegram | Correo electrónico | Contacto