> ## Documentation Index
> Fetch the complete documentation index at: https://www.helius.dev/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Arquitectura

> Aprende cómo interactúan las billeteras, los RPC y los programas de Solana con los anillos de privacidad de Solana.

<a id="architecture" />

<Tabs sync={false}>
  <Tab title="Permissionless Confidential Ring">
    ```mermaid theme={"system"}
    %%{init: {
      'theme': 'base',
      'themeVariables': {
        'primaryColor': '#FFFFFF',
        'primaryTextColor': '#737373',
        'primaryBorderColor': '#9CA3AF',
        'lineColor': '#FF6B35',
        'secondaryColor': '#F5F5F5',
        'tertiaryColor': '#FFFFFF',
        'clusterBkg': '#FF6B350A',
        'clusterBorder': '#9CA3AF',
        'edgeLabelBackground': '#FFFFFF'
      }
    }}%%
    flowchart LR
        Users["Users"]

        subgraph RPC["RPC"]
            direction TB
            Indexer["Photon Indexer"]
            Prover["Prover"]
            TransactionRPC["Transaction RPC"]
        end

        subgraph Solana["Solana"]
            direction LR
            Swap["ZK Swap Program"]
            subgraph State[" "]
                direction TB
                SPP["SPP<br/>Solana Privacy Program"]
                Pools["SPL interface"]
                Trees["State Merkle tree account"]
            end
            Swap -->|CPI| SPP
        end

        Forester["Forester"]

        Users <-.->|Fetch encrypted UTXOs| Indexer
        Users <-.->|Fetch proofs| Prover
        Users -->|Send transaction| TransactionRPC
        TransactionRPC -->|Confidential transfer| SPP
        TransactionRPC --> Swap
        Forester --> Trees

        style State fill:none,stroke:none
    ```
  </Tab>

  <Tab title="Custom Confidential Ring">
    ```mermaid theme={"system"}
    %%{init: {
      'theme': 'base',
      'themeVariables': {
        'primaryColor': '#FFFFFF',
        'primaryTextColor': '#737373',
        'primaryBorderColor': '#9CA3AF',
        'lineColor': '#FF6B35',
        'secondaryColor': '#F5F5F5',
        'tertiaryColor': '#FFFFFF',
        'clusterBkg': '#FF6B350A',
        'clusterBorder': '#9CA3AF',
        'edgeLabelBackground': '#FFFFFF'
      }
    }}%%
    flowchart LR
        Users["Users"]

        subgraph RPC["RPC"]
            direction TB
            Indexer["Photon Indexer"]
            RingRPC["Ring RPC with auditor · optional"]
            Prover["Prover"]
            TransactionRPC["Transaction RPC"]
        end

        subgraph Solana["Solana"]
            direction LR
            Swap["ZK Swap Program"]
            Ring1["Custom Ring Program 1"]
            RingN["Custom Ring Program N"]
            subgraph State[" "]
                direction TB
                SPP["SPP<br/>Solana Privacy Program"]
                Pools["SPL interface"]
                Trees["State Merkle tree account"]
            end
            Swap -->|CPI| Ring1
            Ring1 -->|CPI| SPP
            RingN -->|CPI| SPP
        end

        Forester["Forester"]

        Users <-.->|Fetch encrypted UTXOs| Indexer
        Users <-.->|Fetch decrypted UTXOs| RingRPC
        Users <-.->|Fetch proofs| Prover
        Users -->|Send transaction| TransactionRPC
        TransactionRPC -->|Confidential transfer| Ring1
        TransactionRPC --> RingN
        TransactionRPC --> Swap
        Forester --> Trees

        style State fill:none,stroke:none
    ```
  </Tab>

  <Tab title="Custom Anonymous Ring">
    ```mermaid theme={"system"}
    %%{init: {
      'theme': 'base',
      'themeVariables': {
        'primaryColor': '#FFFFFF',
        'primaryTextColor': '#737373',
        'primaryBorderColor': '#9CA3AF',
        'lineColor': '#FF6B35',
        'secondaryColor': '#F5F5F5',
        'tertiaryColor': '#FFFFFF',
        'clusterBkg': '#FF6B350A',
        'clusterBorder': '#9CA3AF',
        'edgeLabelBackground': '#FFFFFF'
      }
    }}%%
    flowchart LR
        Users["Users"]

        subgraph RPC["RPC"]
            direction TB
            RingRPC["Ring RPC with auditor"]
            Prover["Prover"]
            TransactionRPC["Transaction RPC<br/>Relayer for anonymous transactions"]
        end

        subgraph Solana["Solana"]
            direction LR
            Swap["ZK Swap Program"]
            Ring1["Custom Ring Program 1"]
            RingN["Custom Ring Program N"]
            subgraph State[" "]
                direction TB
                SPP["SPP<br/>Solana Privacy Program"]
                Pools["SPL interface"]
                Trees["State Merkle tree account"]
            end
            Swap -->|CPI| Ring1
            Ring1 -->|CPI| SPP
            RingN -->|CPI| SPP
        end

        Forester["Forester"]

        Users <-.->|Fetch decrypted UTXOs| RingRPC
        Users <-.->|Fetch proofs| Prover
        Users -->|Send transaction| TransactionRPC
        TransactionRPC -->|Relayed anonymous transaction| Ring1
        TransactionRPC --> RingN
        TransactionRPC --> Swap
        Forester --> Trees

        style State fill:none,stroke:none
    ```
  </Tab>
</Tabs>

## Billetera privada y usuario

Los usuarios mantienen su saldo cifrado en una billetera privada y firman transacciones privadas con su clave Ed25519 de Solana existente. Una integración de billetera privada agrega un par de claves blindado a tu sistema de gestión de claves. Puedes [integrarlo tú mismo](/docs/es/privacy/integration/wallet) o usar la [billetera privada integrada](/docs/es/privacy/integration/embedded-wallet).

## Transacciones privadas

Las transferencias privadas son transacciones normales de Solana. El entorno de ejecución de Solana verifica las firmas e invoca el Programa de Privacidad de Solana, que verifica la prueba ZK sin revelar el estado cifrado.

Una transferencia confidencial típica ocupa alrededor de 927 bytes, muy por debajo del límite de 4096 bytes de v1.

<Accordion title="Example Confidential Transfer">
  | Componente | Bytes |
  | - | -: |
  | Prueba Groth16 | 192 |
  | Otros datos de instrucciones de privacidad: textos cifrados, compromisos, anuladores, claves y metadatos | 418 |
  | Seis direcciones de cuenta × 32 bytes | 192 |
  | Una firma Ed25519 | 64 |
  | Hash de bloque reciente | 32 |
  | Versión, encabezado del mensaje, máscara de configuración y conteos | 10 |
  | Límites de unidades de cómputo y de datos de cuentas cargadas | 8 |
  | Encabezado de la instrucción | 4 |
  | Siete índices de cuentas de instrucciones | 7 |
  | **Total** | **927** |

  <Info>
    Para el ejemplo de transferencia confidencial con 2 entradas y 3 salidas de la especificación.
    Consulta el código fuente: [Especificación](https://github.com/helius-labs/zolana/blob/680667f27cf9ba4203a0b69284f4c304b874092f/docs/spec.md#transact) · [xtask/src/main.rs](https://github.com/helius-labs/zolana/blob/680667f27cf9ba4203a0b69284f4c304b874092f/xtask/src/main.rs#L412)

    Consulta la [estructura de transacciones v1 de Solana](https://solana.com/docs/core/transactions/versioned-transactions#v1-wire-layout).
  </Info>
</Accordion>

## RPC

Una <Tooltip tip="https://devnet.helius-rpc.com/?api-key=<API_KEY> or https://mainnet.helius-rpc.com/?api-key=<API_KEY>">única URL RPC de Helius</Tooltip> permite acceder al RPC de Solana, al indexador y a un generador de pruebas remoto.

* **RPC de Solana** – Devuelve el saldo público y envía transacciones a la red de Solana.

* **Indexador** – El indexador proporciona el estado cifrado que una billetera necesita para consultar saldos y crear transacciones privadas. Cualquiera también puede ejecutar su propio indexador sin permisos como alternativa.

* **Generador de pruebas** – Las pruebas de conocimiento cero pueden generarse localmente o mediante un servidor de generación de pruebas en milisegundos, según la transacción y el hardware. Helius usa GPU para generar pruebas.

Para los anillos personalizados, las funciones opcionales incluyen un RPC de anillo que proporciona saldos descifrados y el historial mediante una clave de visualización compartida o una clave de auditor configurada para el anillo. Además, las transacciones anónimas usan un retransmisor para que el usuario no aparezca como pagador de la comisión de la transacción.

## Privacidad y programas de Solana

El Programa de Privacidad de Solana (SPP) es el programa principal que verifica y ejecuta todas las transiciones de estado privado. Los programas de anillos personalizados y los programas ZK de Solana agregan lógica de cumplimiento o de aplicación y luego invocan SPP para actualizar el estado privado.

Otros programas de Solana pueden interactuar con estos programas mediante CPI en la misma transacción, dentro de los límites de transacción de Solana, como el límite de profundidad de CPI de 5.

<Accordion title="ZK Program Transaction Flow">
  <Tabs sync={false}>
    <Tab title="Permissionless Ring">
      <Tabs sync={false}>
        <Tab title="ZK Program alone">
          ```mermaid theme={"system"}
          %%{init: {
            'theme': 'base',
            'themeVariables': {
              'lineColor':           '#FF6B35',
              'primaryTextColor':    '#737373',
              'primaryBorderColor':  '#9CA3AF',
              'actorBkg':            '#FFFFFF',
              'actorBorder':         '#9CA3AF',
              'actorTextColor':      '#737373',
              'signalColor':         '#FF6B35',
              'signalTextColor':     '#737373',
              'labelBoxBkgColor':    '#FF6B351F',
              'labelBoxBorderColor': '#FF6B35',
              'noteBkgColor':        '#F5F5F5',
              'noteTextColor':       '#737373',
              'noteBorderColor':     '#9CA3AF'
            }
          }}%%
          sequenceDiagram
              box Offchain
              participant Client
              end
              box Onchain
              participant Runtime as Solana Runtime
              participant ZK as ZK Solana Program
              participant SPP as Solana Privacy Program
              end

              Client->>Runtime: Sign and send transaction
              Note over Runtime: Check signatures
              Runtime->>ZK: invoke
              Note over ZK: Verify proof for ZK program logic
              ZK->>SPP: CPI
              Note over SPP: Verify proof for private state transition
              Note over SPP: Update private state<br/>(nullify input UTXOs, create output UTXOs)
              Note over ZK: Update Solana accounts (optional)

          ```
        </Tab>

        <Tab title="ZK Program and additional Solana Program">
          ```mermaid theme={"system"}
          %%{init: {
            'theme': 'base',
            'themeVariables': {
              'lineColor':           '#FF6B35',
              'primaryTextColor':    '#737373',
              'primaryBorderColor':  '#9CA3AF',
              'actorBkg':            '#FFFFFF',
              'actorBorder':         '#9CA3AF',
              'actorTextColor':      '#737373',
              'signalColor':         '#FF6B35',
              'signalTextColor':     '#737373',
              'labelBoxBkgColor':    '#FF6B351F',
              'labelBoxBorderColor': '#FF6B35',
              'noteBkgColor':        '#F5F5F5',
              'noteTextColor':       '#737373',
              'noteBorderColor':     '#9CA3AF'
            }
          }}%%
          sequenceDiagram
              box Offchain
              participant Client
              end
              box Onchain
              participant Runtime as Solana Runtime
              participant ZK as ZK Solana Program
              participant SPP as Solana Privacy Program
              participant Program as Solana Program
              end

              Client->>Runtime: Sign and send transaction
              Note over Runtime: Check signatures
              Runtime->>ZK: invoke
              Note over ZK: Verify proof for ZK program logic
              ZK->>SPP: CPI
              Note over SPP: Verify proof for private state transition
              Note over SPP: Update private state<br/>(nullify input UTXOs, create output UTXOs)
              ZK->>Program: CPI
              Note over Program: Update Solana accounts

          ```
        </Tab>
      </Tabs>
    </Tab>

    <Tab title="Custom Rings">
      <Tabs sync={false}>
        <Tab title="ZK Program alone">
          ```mermaid theme={"system"}
          %%{init: {
            'theme': 'base',
            'themeVariables': {
              'lineColor':           '#FF6B35',
              'primaryTextColor':    '#737373',
              'primaryBorderColor':  '#9CA3AF',
              'actorBkg':            '#FFFFFF',
              'actorBorder':         '#9CA3AF',
              'actorTextColor':      '#737373',
              'signalColor':         '#FF6B35',
              'signalTextColor':     '#737373',
              'labelBoxBkgColor':    '#FF6B351F',
              'labelBoxBorderColor': '#FF6B35',
              'noteBkgColor':        '#F5F5F5',
              'noteTextColor':       '#737373',
              'noteBorderColor':     '#9CA3AF'
            }
          }}%%
          sequenceDiagram
              box Offchain
              participant Client
              end
              box Onchain
              participant Runtime as Solana Runtime
              participant ZK as ZK Solana Program
              participant Ring as Custom Ring Program
              participant SPP as Solana Privacy Program
              end

              Client->>Runtime: Sign and send transaction
              Note over Runtime: Check signatures
              Runtime->>ZK: invoke
              Note over ZK: Verify proof for ZK program logic
              ZK->>Ring: CPI
              Note over Ring: Verify proof for custom compliance logic
              Ring->>SPP: CPI
              Note over SPP: Verify proof for private state transition
              Note over SPP: Update private state<br/>(nullify input UTXOs, create output UTXOs)
              Note over ZK: Update Solana accounts (optional)

          ```
        </Tab>

        <Tab title="ZK Program and additional Solana Program">
          ```mermaid theme={"system"}
          %%{init: {
            'theme': 'base',
            'themeVariables': {
              'lineColor':           '#FF6B35',
              'primaryTextColor':    '#737373',
              'primaryBorderColor':  '#9CA3AF',
              'actorBkg':            '#FFFFFF',
              'actorBorder':         '#9CA3AF',
              'actorTextColor':      '#737373',
              'signalColor':         '#FF6B35',
              'signalTextColor':     '#737373',
              'labelBoxBkgColor':    '#FF6B351F',
              'labelBoxBorderColor': '#FF6B35',
              'noteBkgColor':        '#F5F5F5',
              'noteTextColor':       '#737373',
              'noteBorderColor':     '#9CA3AF'
            }
          }}%%
          sequenceDiagram
              box Offchain
              participant Client
              end
              box Onchain
              participant Runtime as Solana Runtime
              participant ZK as ZK Solana Program
              participant Ring as Custom Ring Program
              participant SPP as Solana Privacy Program
              participant Program as Solana Program
              end

              Client->>Runtime: Sign and send transaction
              Note over Runtime: Check signatures
              Runtime->>ZK: invoke
              Note over ZK: Verify proof for ZK program logic
              ZK->>Ring: CPI
              Note over Ring: Verify proof for custom compliance logic
              Ring->>SPP: CPI
              Note over SPP: Verify proof for private state transition
              Note over SPP: Update private state<br/>(nullify input UTXOs, create output UTXOs)
              ZK->>Program: CPI
              Note over Program: Update Solana accounts

          ```
        </Tab>
      </Tabs>
    </Tab>
  </Tabs>
</Accordion>

### Programa de Privacidad de Solana (SPP)

El Programa de Privacidad de Solana verifica pruebas de conocimiento cero y actualiza el estado privado. Úsalo para depositar tokens, transferir saldos privados y retirar tokens a cuentas públicas.

Otros programas invocan SPP mediante CPI para ejecutar transiciones de estado privado.

### Programa de anillo personalizado

Un programa de anillo personalizado define los permisos de transferencia y cualquier autoridad adicional, de forma similar a Token-2022. Úsalo para configurar auditores, exigir un cofirmante o permitir que una autoridad congele saldos.

Verifica una prueba ZK para aplicar su lógica de cumplimiento personalizada y luego invoca SPP para actualizar el estado privado.

### Programa ZK de Solana

Los programas de conocimiento cero (ZK) de Solana permiten crear depósitos en garantía privados en programas de Solana para aplicar lógica de aplicación sobre saldos privados. Puedes crear intercambios privados, staking, préstamos y mucho más con programas ZK de Solana. Por ejemplo, un intercambio confidencial puede hacer cumplir los montos y el precio acordados sin hacerlos públicos.

El programa verifica una prueba ZK de su lógica de aplicación y luego invoca SPP, directamente o mediante un programa de anillo personalizado, para actualizar el estado privado.

## Árbol de Merkle de estado y Forester

El anillo predeterminado y todos los anillos personalizados almacenan el estado privado en una cuenta de árbol de Merkle de estado, mantenida por un nodo Forester.
Las cuentas de árbol confirman el estado privado sin almacenarlo en cuentas de Solana separadas.

Por lo tanto, debes consultar los saldos y el historial de transacciones con métodos RPC específicos del indexador, como `getShieldedTransactionsByTags`, en lugar de usar métodos de cuentas de Solana como `getAccountInfo`. Consulta [Leer un saldo privado](/docs/es/privacy/guides/read-balance) y [Leer el historial de transacciones privadas](/docs/es/privacy/guides/read-history).

### Rendimiento

El árbol se almacena en una cuenta de Solana con permisos de escritura.
Las transferencias privadas que escriben en esta cuenta comparten el límite de bloqueo de escritura de 12 millones de CU por cuenta y por bloque de Solana.
Se pueden gastar diferentes UTXO de forma independiente, pero las transacciones que escriben en el mismo árbol siguen compartiendo los bloqueos de cuenta y los límites de cómputo de Solana.

Una transferencia confidencial consume aproximadamente 140 000 CU en la [prueba de rendimiento de instrucciones](https://github.com/helius-labs/zolana/blob/a3ddedda42b40d4951ae8fcdde2500374c4f2125/program-tests/shielded-pool/CU_BENCHMARK.md#12-transfer-eddsa-2x3).
Por lo tanto, un árbol admite aproximadamente 86 transferencias privadas por bloque, o cerca de 215 transacciones por segundo con los tiempos de bloque actuales de Solana de unos 400 milisegundos.

El protocolo puede agregar más árboles para aumentar el rendimiento.
Cada árbol es una cuenta independiente con permisos de escritura y su propio presupuesto de cómputo por cuenta, por lo que las transacciones de árboles diferentes no compiten por el mismo presupuesto de bloqueo de escritura.

<a id="interface-pda-account" />

## Interfaz SPL

La interfaz SPL permite la interoperabilidad entre tokens mantenidos de forma pública y privada. Es un depósito en garantía por cada emisión de token, que puede crearse sin permisos,
pero debe crearse una sola vez por emisión.

* Al depositar activos SOL y SPL en un saldo privado, una PDA de interfaz propiedad del Programa de Privacidad de Solana mantiene los tokens en depósito y crea UTXO cuyo propietario es el usuario.
* Al retirar a un saldo público, los UTXO existentes se marcan como gastados y los tokens se liberan a las cuentas de tokens de Solana.

Para las emisiones de tokens que aún no tengan una PDA de interfaz, el primer depósito puede incluir una instrucción para crearla en la misma transacción.

```mermaid theme={"system"}
%%{init: {
  'theme': 'base',
  'themeVariables': {
    'primaryColor': '#FFFFFF',
    'primaryTextColor': '#737373',
    'primaryBorderColor': '#9CA3AF',
    'lineColor': '#FF6B35',
    'edgeLabelBackground': '#FFFFFF'
  }
}}%%
flowchart LR
    GetAccount["Get account"] --> Exists{"Interface PDA exists?"}
    Exists -->|Yes| Deposit["Deposit to private balance"]
    Exists -->|No| Create["Create interface PDA<br/>and token account"]
    Create --> Deposit
```

<span id="creation-of-a-private-wallet" />

<span id="decryption-modes-and-wallet-sync" />

<span id="delegated-decryption" />

<span id="encryption-and-shielded-keypair" />

<span id="integrating-a-shielded-keypair" />

<span id="latency-and-concurrency" />

<span id="local-decryption" />

<span id="on-concurrency" />

<span id="private-solana-token-accounts" />

<span id="private-solana-token-accounts-are-utxos" />

<span id="private-wallet" />

<span id="private-wallet-balance" />

<span id="shielded-keypair" />

<span id="spending-a-utxo" />

## Más información

<CardGroup cols={2}>
  <Card title="Overview" icon="book" href="/docs/es/privacy/concepts/overview">
    Anillos, garantías de privacidad y flujo de transacciones.
  </Card>

  <Card title="Private State and UTXOs" icon="database" href="/docs/es/privacy/concepts/utxo">
    Cómo se almacenan y gastan los saldos privados.
  </Card>

  <Card title="Encryption and Privacy Guarantees" icon="key" href="/docs/es/privacy/concepts/encryption">
    Cómo se cifran los activos y la función del par de claves blindado.
  </Card>

  <Card title="Custom Enterprise Rings" icon="building" href="/docs/es/privacy/integration/enterprise">
    Aprende a configurar un anillo personalizado.
  </Card>
</CardGroup>

## ¿No encontraste lo que buscabas?

<Callout type="info">
  ¡Contáctanos! [Telegram](https://t.me/tilo_light) | [Correo electrónico](mailto:sales@helius.xyz) | [Contacto](https://www.helius.dev/contact)
</Callout>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.