Saltar al contenido principal
  1. Un depósito transfiere tokens del saldo público de Solana del usuario a su propio saldo privado o al de otra persona.
  2. Los depósitos se envían en una sola transacción de Solana a una dirección de billetera de Solana.

Depósito: qué es privado

El anillo sin permisos es confidencial y cifra el monto y el activo. Un anillo personalizado puede configurarse como confidencial o anónimo (remitente, destinatario, activo y monto cifrados).

Cómo funciona un depósito

Un depósito es una transferencia pública de Solana que genera un saldo privado.
  1. El saldo de SOL o SPL del usuario es público en la cadena.
  2. La billetera establece el monto y el destinatario, crea el depósito y el propietario firma. Un depósito no solicita una prueba ZK.
  3. El entorno de ejecución de Solana verifica las firmas e invoca el Programa de Privacidad de Solana.
  4. La aplicación rastrea el estado mediante el hash de la transacción de Solana.
  1. El saldo de SOL o SPL del usuario es público en la cadena.
  2. La billetera lee el estado público, crea una transferencia y el propietario firma.
  3. El entorno de ejecución de Solana verifica las firmas e invoca el Programa del Sistema o el Programa de Tokens, que actualiza el saldo público.
  4. La aplicación rastrea el estado mediante el hash de la transacción de Solana.
Este es el flujo de transacción de alto nivel para el Ring confidencial sin permisos. Compáralo con los Rings personalizados en Flujo de transacción de alto nivel.

Comienza

1

Requisitos previos

Los ejemplos de TypeScript requieren Node.js 24 o una versión posterior, pnpm 11.18.0 y la CLI de Solana.
Agrega una clave de API de Helius:
.env
Los ejemplos usan de forma predeterminada la billetera de la CLI de Solana como pagador. El pagador debe tener SOL de devnet. Consulta Cómo obtener SOL de devnet.
2

Deposita en un saldo privado

  • El SDK devuelve instrucciones. La aplicación las firma y las envía.
  • sendAndConfirmFactory crea una transacción de Kit, la envía y devuelve la firma junto con el slot en el que se confirmó.
Cada mint de SPL necesita una interfaz de tokens para almacenar los tokens depositados. Si la interfaz no existe, créala en la misma transacción que el depósito. El creador paga la renta de la cuenta.
  • senderAddress es la del destinatario. Este ejemplo deposita en la cuenta del remitente. El destinatario puede ser el remitente o una billetera de terceros.
  • senderViewTag es senderAddress.confidentialViewTag(), la clave pública de Solana del remitente en Rings confidenciales. El indexador la usa para devolver las salidas cifradas correspondientes.
  • client.tree es el árbol de Merkle de estado que recibe el nuevo compromiso de salida.
  • depositor / senderSigner financia y firma el depósito de público a privado.
  • DepositAsset.sol() selecciona SOL. DepositAsset.spl recibe el mint, la cuenta de tokens de origen y el programa de tokens para activos SPL y Token 2022.
  • recipientOwnerHash es senderAddress.ownerHash(). Ese hash de las claves públicas de firma y de anulador del destinatario es el campo de propietario que se confirma en la nueva cuenta privada de tokens.
  • DEPOSIT_AMOUNT usa lamports para SOL o las unidades base del token para activos SPL y Token 2022.
  • sendAndConfirm firma y envía depositIx como una transacción de Solana.
  • La confirmación devuelve el slot en el que se incluyó la transacción, que se usa para controlar la consulta al indexador.

Ejemplo de código completo

Clona y ejecuta el ejemplo:
Los ejemplos usan un Ring confidencial en local/devnet aquí.
deposit_transfer_withdraw.ts

Guías relacionadas

Create a Private Wallet

Transfer

Withdraw

Read a Private Balance

Read Private History

¿No encontraste lo que buscabas?