- Un UTXO n’est pas un compte Solana et ne nécessite donc aucune exemption de loyer.
- Son solde est chiffré sur la chaîne.
- Propriétaire – paire de clés Solana, PDA ou clé P-256.
- Actif – le mint (SOL, SPL ou Token-2022).
- Montant – le nombre d’unités de
asset, dans sa plus petite unité. - Données – un UTXO peut stocker des données arbitraires, par exemple le propriétaire de jetons sous séquestre.
- Données de programme et de politique – conformité Ring configurée facultative.
- Diagram
- Code
Consultez le code source : Spécification · sdk-libs/transaction/src/utxo/note.rs
View Solana token account
View Solana token account
- Diagram
- Code
Solde privé
Le solde privé correspond à la somme de tous les UTXO d’un actif détenus par un portefeuille privé. Le portefeuille affiche un seul solde, que celui-ci soit constitué d’un ou de plusieurs UTXO. Un transfert privé peut dépenser plusieurs UTXO à la fois.Transfert privé
Les transferts privés avec des UTXO fonctionnent différemment des transferts publics avec des comptes de jetons SPL :- Un transfert depuis un compte de jetons SPL met à jour le champ
amount. - Un transfert privé avec des UTXO ne met pas à jour le champ
amountd’un UTXO. À la place, les transferts privés dépensent les UTXO existants et créent de nouveaux UTXO pour le destinataire et le solde restant de l’expéditeur.
- Avec des comptes de jetons SPL, le champ
amountd’Alice passe de 50 à 15, tandis que celui de Bob augmente de 35. - Avec des UTXO, Alice détient un UTXO de 50 USDC. La transaction dépense l’UTXO existant et crée deux nouveaux UTXO : un de 35 USDC pour Bob et un de 15 USDC pour Alice.
- Transfer with one UTXO
- Transfer with multiple UTXOs
Sélection des UTXO
Pour les transferts privés, le SDK sélectionne les UTXO non dépensés qui couvrent le montant que vous souhaitez transférer. L’algorithme de sélection des UTXO dépense le moins d’UTXO possible par transfert :- Le SDK filtre vos UTXO selon l’actif envoyé et les trie par montant.
- Le SDK sélectionne autant d’UTXO que nécessaire pour couvrir le montant du transfert. Il sélectionne d’abord les UTXO les plus importants, jusqu’à ce que le montant du transfert soit couvert.
Variantes de transaction
Chaque transfert privé utilise une variante de transaction : un nombre fixe d’emplacements pour les UTXO à dépenser et les nouveaux UTXO à créer. Les variantes vont de 1 à 36 UTXO dépensés, et chacune possède son propre circuit ZK. Le circuit prouve que les UTXO dépensés sont valides et que les nouveaux UTXO contiennent le même montant total. Si un transfert nécessite plus de 36 UTXO, fusionnez-les d’abord. Le SDK choisit une variante adaptée au transfert et remplit les emplacements inutilisés avec des UTXO factices. Les UTXO factices n’ont aucune valeur et ressemblent à de véritables UTXO sur la chaîne.- 1 spent, 2 new
- 2 spent, 2 new
- 3 spent, 3 new
- 4 spent, 3 new
Alice envoie 30 USDC à Bob. Son UTXO le plus important couvre le transfert.
Supported transaction variants
Supported transaction variants
Consultez le code source : Spécification · Variantes prises en charge
Fusion des UTXO
Recevoir de nombreux transferts sans effectuer de dépense peut fragmenter le solde privé entre de nombreux UTXO. Si un transfert nécessite plus de 36 UTXO, fusionnez-les d’abord afin que l’utilisateur puisse dépenser la totalité du solde en un seul transfert. La plupart des utilisateurs rencontreront rarement un solde fragmenté, car un transfert peut dépenser jusqu’à 36 UTXO.- Une fusion combine les UTXO d’un même propriétaire et d’un même actif en un seul UTXO de valeur totale identique.
- Une fusion ne peut ni dépenser des fonds ni changer le propriétaire.
- La fusion peut être effectuée en arrière-plan sans affecter l’expérience des utilisateurs finaux.
Chaque fusion correspond à une transaction Solana avec une preuve ZK et transforme jusqu’à 36 UTXO en un seul.
Comme le résultat de la fusion est déterministe, les preuves de fusion et la preuve de transfert sont générées en parallèle.
Exemple d’utilisation de l’instruction de fusion
Votre application peut effectuer une fusion à deux moments :- Lors de la synchronisation du solde privé : au déverrouillage du portefeuille, à l’ouverture du portefeuille privé, à la reprise de l’application, à la reconnexion au réseau, lors d’une interruption du flux ou de la restauration du portefeuille.
- Avant un transfert : lorsque le transfert nécessite plus de 36 UTXO.
Les fusions s’exécutent sans signature de l’utilisateur. Les Rings personnalisés définissent leurs propres autorisations de fusion.
Lorsque vous utilisez le portefeuille privé intégré, la fusion est effectuée pour vous en arrière-plan.
Example for Merge
Example for Merge
Par exemple, un portefeuille privé détient 1 296 USDC dans 1 296 UTXO après avoir reçu 1 296 transferts privés de 1 USDC.
Un transfert peut dépenser au maximum 36 UTXO. Le portefeuille dépense donc le solde en deux étapes :
- 36 transactions de fusion s’exécutent en parallèle et créent 36 UTXO de 36 USDC chacun.
- Un transfert à 36 entrées dépense la totalité du solde de 1 296 USDC.
Consultez l’exemple de code : sdk-tests/client/rust/optimized_merge_transfer.rs · sdk-tests/client/typescript/optimized-merge-transfer.test.ts
Concurrence des UTXO
Les utilisateurs peuvent dépenser leurs soldes privés dès que les transactions sont finalisées. Un solde privé peut être dépensé simultanément lorsqu’il est réparti entre plusieurs UTXO. Chaque UTXO peut être dépensé en même temps dans une transaction distincte. Par exemple, un solde composé de trois UTXO de 100 USDC chacun peut financer simultanément trois transferts allant jusqu’à 100 USDC. Le portefeuille sélectionne les UTXO à dépenser.En savoir plus
Overview
Rings, garanties de confidentialité et flux des transactions.
Architecture
Comment les portefeuilles, les services RPC et les programmes Solana interagissent.
Encryption and Privacy Guarantees
Comment les actifs sont chiffrés et le rôle de la paire de clés protégée.
Custom Enterprise Rings
Découvrez comment configurer un Ring personnalisé.