Skip to main content
  1. Uma retirada move tokens de um saldo privado para um saldo público Solana.
  2. As retiradas são enviadas em uma única transação Solana para um endereço de carteira Solana.

Retirada: O que é Privado

O Ring sem permissão é confidencial com quantidade e ativo criptografados. Um Ring personalizado pode ser configurado como confidencial ou anônimo (remetente, destinatário, ativo e quantidade criptografados).

Como Funciona uma Retirada

Uma retirada se comporta de forma similar a uma transferência pública Solana:
  1. O saldo SOL ou SPL do usuário é criptografado onchain.
  2. O usuário descriptografa o estado privado, a carteira cria uma retirada, e o proprietário assina.
    • Busca estado criptografado com métodos RPC dedicados. Somente o usuário pode descriptografar saldos localmente.
    • A carteira define a quantidade e o destinatário, depois solicita uma prova ZK. O provedor RPC gera a prova ZK por padrão e a retorna.
  3. O runtime Solana verifica as assinaturas e invoca o Solana Privacy Program, que verifica a prova ZK sem revelar o estado criptografado.
  4. O aplicativo rastreia o status via hash da transação Solana.
  1. O saldo SOL ou SPL do usuário é público onchain.
  2. A carteira lê o estado público, cria uma transferência, e o proprietário assina.
  3. O runtime Solana verifica as assinaturas e invoca o System Program ou Token Program, que atualiza o saldo público.
  4. O aplicativo rastreia o status via hash da transação Solana.
Este é o fluxo de transação de alto nível para o Ring confidencial sem permissão. Compare com Rings personalizados em concepts.

Introdução

1

Pré-requisitos

The TypeScript examples require Node.js 24 or later, pnpm 11.18.0, and the Solana CLI.
Source: sdk-libs/ts
Add a Helius API key:
.env
The examples use the Solana CLI wallet as the payer by default. The payer must hold devnet SOL. See How to Get Devnet SOL.
2

Retirar para um Saldo Público

  • O SDK retorna instruções. O aplicativo assina e as envia.
  • sendAndConfirmFactory constrói uma transação Kit, a envia e retorna a assinatura mais o slot ocupado.
  • O exemplo gasta a Conta de Token Privada Solana restante após a transferência anterior. Uma retirada pode gastar vários UTXOs.
  • withdrawalUtxo seleciona uma Conta de Token Privada Solana desse saldo.
  • ProofInputUtxo.fromKeypair prepara o UTXO selecionado como uma entrada de prova com o par de chaves privado da carteira do remetente.
  • O par de chaves deriva o nulificador que marca o UTXO de entrada como gasto enquanto o ativo e a quantidade de entrada permanecem criptografados.
  • senderAddress é o do remetente. A retirada é feita dessa carteira.
  • [withdrawalInput] lista os UTXOs selecionados pelo remetente. Uma retirada pode gastar vários UTXOs.
  • senderSigner.address é o endereço Solana do pagador da taxa. Um patrocinador de gás pode preencher esse papel para uma retirada confidencial.
  • WithdrawalTarget.sol é o destinatário público Solana. O destinatário pode ser o proprietário ou um terceiro.
  • SOL_MINT seleciona SOL. Uma retirada SPL ou Token 2022 passa a cunhagem do token.
  • WITHDRAW_AMOUNT é denominada nas unidades base do ativo. SOL usa lamports. Ativos SPL e Token 2022 usam as unidades base do token.
  • withdrawal.sign autoriza a transição de estado, criptografa a mudança privada restante e produz as entradas para o provador de conhecimento zero.
  • assets é o registro de ativos usado para resolver ativos privados suportados.
  • client.proveTransact gera a prova de conhecimento zero a partir da retirada assinada e retorna os dados de instrução serializados.
  • A prova demonstra que o remetente possui e pode gastar os insumos. O ativo e o valor retirados são públicos. Os valores de entrada e a mudança permanecem criptografados.
  • payer assina e paga pela transação Solana. Um patrocinador de gás pode preencher esse papel para uma retirada confidencial.
  • inputTree e outputTree são client.tree, a árvore Merkle de estado que contém os UTXOs gastos e recebe a mudança privada do remetente.
  • withdrawal é TransactWithdrawal.sol, a conta destinatária pública Solana.
  • data contém a prova de conhecimento zero e a mudança criptografada produzida na etapa anterior.
  • Uma retirada move o ativo de um saldo privado para uma conta pública Solana. Ela passa a conta destinatária pública.
  • sendAndConfirm assina e envia withdrawalInstruction como uma transação Solana.
  • A confirmação gera o slot ocupado usado para controlar a busca no indexador.

Exemplo de Código Completo

Clone e execute o exemplo:
Os exemplos usam um Ring confidencial no local/devnet aqui.
deposit_transfer_withdraw.ts

Guias Relacionados

Depósito

Transferir

Ler um Saldo Privado

Ler Histórico Privado

Didn’t find what you were looking for?

Reach out! Telegram | E-Mail | Contact