- Uma UTXO não é uma conta da Solana, portanto não precisa de isenção de aluguel.
- Seu saldo é criptografado on-chain.
- Proprietário – par de chaves da Solana, PDA ou chave P-256.
- Ativo – o mint (SOL, SPL ou Token-2022).
- Quantidade – o número de unidades de
asset, em sua menor unidade. - Dados – uma UTXO pode armazenar dados arbitrários, por exemplo, o proprietário de tokens em custódia.
- Dados do programa e da política – conformidade opcional configurada do Ring.
- Diagram
- Code
Veja o código-fonte: Especificação · sdk-libs/transaction/src/utxo/note.rs
View Solana token account
View Solana token account
- Diagram
- Code
Saldo privado
O saldo privado é a soma de todas as UTXOs de um ativo pertencentes a uma carteira privada. A carteira exibe um único saldo, independentemente de o saldo privado consistir em uma ou várias UTXOs. Uma transferência privada pode gastar várias UTXOs de uma só vez.Transferência privada
As transferências privadas com UTXOs funcionam de forma diferente das transferências públicas com contas de tokens SPL:- Uma transferência de uma conta de tokens SPL atualiza o
amount. - Uma transferência privada com UTXOs não atualiza o
amountde uma UTXO. Em vez disso, as transferências privadas gastam UTXOs existentes e criam novas UTXOs para o destinatário e para o saldo restante do remetente.
- Com contas de tokens SPL, o
amountde Alice diminui de 50 para 15, e o de Bob aumenta em 35. - Com UTXOs, Alice possui uma UTXO de 50 USDC. A transação gasta a UTXO existente e cria duas novas UTXOs: uma com 35 USDC para Bob e outra com 15 USDC para Alice.
- Transfer with one UTXO
- Transfer with multiple UTXOs
Seleção de UTXOs
Para transferências privadas, o SDK seleciona UTXOs não gastas que cobrem a quantidade que você deseja transferir. O algoritmo de seleção de UTXOs gasta o menor número possível de UTXOs por transferência:- O SDK filtra suas UTXOs pelo ativo enviado e as ordena por quantidade.
- O SDK seleciona quantas UTXOs forem necessárias para cobrir a quantidade da transferência. Ele seleciona primeiro as maiores UTXOs até que a quantidade da transferência seja coberta.
Variantes de transação
Toda transferência privada usa uma variante de transação: um número fixo de posições para UTXOs a serem gastas e novas UTXOs a serem criadas. As variantes abrangem de 1 a 36 UTXOs gastas, e cada variante tem seu próprio circuito ZK. O circuito comprova que as UTXOs gastas são válidas e que as novas UTXOs contêm a mesma quantidade total. Se uma transferência precisar de mais de 36 UTXOs, mescle-as primeiro. O SDK escolhe uma variante adequada à transferência e preenche as posições não utilizadas com UTXOs fictícias. As UTXOs fictícias não têm valor e se parecem com UTXOs reais on-chain.- 1 spent, 2 new
- 2 spent, 2 new
- 3 spent, 3 new
- 4 spent, 3 new
Alice envia 30 USDC para Bob. Sua maior UTXO cobre a transferência.
Supported transaction variants
Supported transaction variants
Veja o código-fonte: Especificação · Variantes compatíveis
Mesclagem de UTXOs
Receber muitas transferências sem gastar pode fragmentar o saldo privado entre várias UTXOs. Se uma transferência precisar de mais de 36 UTXOs, mescle-as primeiro para que o usuário possa gastar todo o saldo em uma única transferência. A maioria dos usuários raramente encontrará um saldo fragmentado, pois uma transferência pode gastar até 36 UTXOs.- Uma mesclagem combina UTXOs do mesmo proprietário e ativo em uma única UTXO com o mesmo valor total.
- Uma mesclagem não pode gastar fundos nem alterar o proprietário.
- A mesclagem pode ser feita nos bastidores sem afetar a experiência dos usuários finais.
Cada mesclagem é uma transação da Solana com uma prova ZK e transforma até 36 UTXOs em uma.
Como o resultado da mesclagem é determinístico, as provas de mesclagem e a prova da transferência são geradas em paralelo.
Exemplo de uso da instrução de mesclagem
Seu aplicativo pode realizar a mesclagem em dois momentos:- Ao sincronizar o saldo privado: no desbloqueio da carteira, na abertura da carteira privada, na retomada do aplicativo, na reconexão da rede, em uma lacuna no stream ou na restauração da carteira.
- Antes de uma transferência: quando a transferência precisar de mais de 36 UTXOs.
As mesclagens são executadas sem a assinatura do usuário. Rings personalizados definem suas próprias permissões de mesclagem.
Ao usar a carteira privada integrada, a mesclagem é feita para você nos bastidores.
Example for Merge
Example for Merge
Por exemplo, uma carteira privada contém 1.296 USDC em 1.296 UTXOs após receber 1.296 transferências privadas de 1 USDC.
Uma transferência gasta no máximo 36 UTXOs, portanto a carteira gasta o saldo em duas etapas:
- 36 transações de mesclagem são executadas em paralelo e criam 36 UTXOs de 36 USDC cada.
- Uma transferência com 36 entradas gasta todo o saldo de 1.296 USDC.
Veja o código de exemplo: sdk-tests/client/rust/optimized_merge_transfer.rs · sdk-tests/client/typescript/optimized-merge-transfer.test.ts
Concorrência de UTXOs
Os usuários podem gastar saldos privados assim que as transações forem finalizadas. Um saldo privado pode ser gasto simultaneamente quando está dividido entre várias UTXOs. Cada UTXO pode ser gasta em uma transação separada ao mesmo tempo. Por exemplo, um saldo de três UTXOs de 100 USDC cada pode financiar simultaneamente três transferências de até 100 USDC. A carteira seleciona quais UTXOs gastar.Saiba mais
Overview
Rings, garantias de privacidade e fluxo de transações.
Architecture
Como carteiras, serviços RPC e programas da Solana interagem.
Encryption and Privacy Guarantees
Como os ativos são criptografados e a função do par de chaves protegido.
Custom Enterprise Rings
Saiba como configurar um Ring personalizado.