Skip to main content
Um saldo privado é armazenado em UTXOs (saídas de transação não gastas). Você pode considerar as UTXOs como contas privadas de tokens SPL, com duas diferenças principais:
  1. Uma UTXO não é uma conta da Solana, portanto não precisa de isenção de aluguel.
  2. Seu saldo é criptografado on-chain.
O layout de dados da UTXO é semelhante ao das contas de tokens SPL:
  • 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.
Uma conta privada de tokens da Solana. O programa de privacidade da Solana é proprietário de uma conta privada de tokens, que se expande em seus campos de UTXO: proprietário, ativo, quantidade, dados, dados da política e ID do programa da política.
Conta de tokens da Solana.

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. Uma carteira privada conectada por linhas tracejadas a várias UTXOs, cada uma contendo uma quantidade de um ativo. O saldo da carteira é a soma das UTXOs.

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 amount de 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.
Ainda assim, para o usuário, as transferências públicas com contas de tokens da Solana e as transferências privadas com UTXOs parecem semelhantes. Por exemplo, Alice tem 50 USDC e envia 35 USDC para Bob.
  • Com contas de tokens SPL, o amount de 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.
Gastar uma UTXO

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:
  1. O SDK filtra suas UTXOs pelo ativo enviado e as ordena por quantidade.
  2. 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.
Por exemplo, Alice envia 80 USDC para Bob. Suas três maiores UTXOs são suficientes para cobrir a transferência: Alice envia 80 USDC. Suas UTXOs são ordenadas da maior para a menor: 40, 25, 20, 10 e 5 USDC. O SDK seleciona 40, 25 e 20 USDC, que cobrem 80 USDC, e deixa 10 e 5 USDC sem seleção. Menos UTXOs mantêm a transação pequena. Cada UTXO gasta adiciona 66 bytes para uma conta anuladora, que marca a UTXO como gasta. A conta impede que a UTXO . Exemplos de transferências privadas sem dados adicionais ou outras instruções:

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.
Alice envia 30 USDC para Bob. Sua maior UTXO cobre a transferência.A UTXO de 40 USDC de Alice é gasta, e suas UTXOs de 25, 20, 10 e 5 USDC permanecem não gastas. A transação cria 30 USDC para Bob e 10 USDC para Alice.
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.
Uma mesclagem gasta cinco UTXOs de Alice de 1 USDC cada e cria uma nova UTXO de 5 USDC para Alice. O número de mesclagens necessárias para gastar todo o saldo em uma única transferência depende de quantas UTXOs o contêm: 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.
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:
  1. 36 transações de mesclagem são executadas em paralelo e criam 36 UTXOs de 36 USDC cada.
  2. Uma transferência com 36 entradas gasta todo o saldo de 1.296 USDC.

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. As três UTXOs de Alice de 100 USDC cada financiam três transferências ao mesmo tempo, uma UTXO por transferência. Uma única UTXO só pode ser gasta uma vez. Para conhecer os limites de throughput do protocolo, consulte Árvore de Merkle de estado e Forester.

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.

Não encontrou o que estava procurando?

Entre em contato! Telegram | E-Mail | Typeform