> ## 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.

# Arquitetura

> Saiba como carteiras, RPCs e programas Solana interagem com os Solana Privacy Rings.

<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>

## Carteira privada e usuário

Os usuários mantêm o saldo criptografado em uma Carteira Privada e assinam transações privadas com a chave Solana Ed25519 existente. Uma integração de carteira privada adiciona um par de chaves protegido ao seu gerenciamento de chaves. Você pode [fazer a integração por conta própria](/docs/pt-BR/privacy/integration/wallet) ou usar a [Carteira Privada Incorporada](/docs/pt-BR/privacy/integration/embedded-wallet).

## Transações privadas

Transferências privadas são transações Solana comuns. O runtime da Solana verifica as assinaturas e invoca o Solana Privacy Program, que verifica a prova ZK sem revelar o estado criptografado.

Uma transferência confidencial típica utiliza cerca de 927 bytes, bem abaixo do limite de 4.096 bytes da v1.

<Accordion title="Example Confidential Transfer">
  | Componente | Bytes |
  | - | -: |
  | Prova Groth16 | 192 |
  | Outros dados de instrução de privacidade: textos cifrados, compromissos, anuladores, chaves e metadados | 418 |
  | Seis endereços de conta × 32 bytes | 192 |
  | Uma assinatura Ed25519 | 64 |
  | Hash de bloco recente | 32 |
  | Versão, cabeçalho da mensagem, máscara de configuração e contagens | 10 |
  | Limites de unidades de computação e de dados de contas carregadas | 8 |
  | Cabeçalho da instrução | 4 |
  | Sete índices de contas da instrução | 7 |
  | **Total** | **927** |

  <Info>
    Para o exemplo de transferência confidencial com 2 entradas e 3 saídas da especificação.
    Veja o código-fonte: [Especificação](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)

    Consulte o [layout de transações da Solana v1](https://solana.com/docs/core/transactions/versioned-transactions#v1-wire-layout).
  </Info>
</Accordion>

## RPC

Uma <Tooltip tip="https://devnet.helius-rpc.com/?api-key=<API_KEY> or https://mainnet.helius-rpc.com/?api-key=<API_KEY>">única URL de RPC da Helius</Tooltip> disponibiliza o RPC da Solana, o indexador e um provador remoto.

* **RPC da Solana** – Retorna o saldo público e envia transações para a rede Solana.

* **Indexador** – O indexador fornece o estado criptografado de que uma carteira precisa para consultar saldos e criar transações privadas. Qualquer pessoa também pode executar seu próprio indexador sem permissão como alternativa.

* **Provador** – As provas de conhecimento zero podem ser geradas localmente ou por um servidor provador em milissegundos, dependendo da transação e do hardware. A Helius usa GPUs para gerar provas.

Para Rings personalizados, os recursos opcionais incluem um RPC do Ring para fornecer saldos descriptografados e o histórico usando uma chave de visualização compartilhada ou uma chave configurada de auditor do Ring. Além disso, transações anônimas usam um retransmissor para que o usuário não apareça como pagador da taxa da transação.

## Privacidade e programas Solana

O Solana Privacy Program (SPP) é o programa principal que verifica e executa todas as transições de estado privado. Programas de Ring personalizado e programas ZK da Solana adicionam lógica de conformidade ou de aplicação e, em seguida, invocam o SPP para atualizar o estado privado.

Outros programas Solana podem interagir com esses programas por meio de CPI na mesma transação, dentro dos limites de transação da Solana, como o limite de profundidade 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>

### Solana Privacy Program (SPP)

O Solana Privacy Program verifica provas de conhecimento zero e atualiza o estado privado. Use-o para depositar tokens, transferir saldos privados e sacar tokens para contas públicas.

Outros programas invocam o SPP por meio de CPI para executar transições de estado privado.

### Programa de Ring personalizado

Um programa de Ring personalizado define permissões de transferência e quaisquer autoridades adicionais, de forma semelhante ao Token-2022. Use-o para configurar auditores, exigir um cossignatário ou permitir que uma autoridade congele saldos.

Ele verifica uma prova ZK para aplicar sua lógica personalizada de conformidade e, em seguida, invoca o SPP para atualizar o estado privado.

### Programa ZK da Solana

Os programas de conhecimento zero (ZK) da Solana permitem que depósitos em garantia privados em programas Solana apliquem lógica de aplicação a saldos privados. Você pode criar swaps privados, staking, empréstimos e muito mais com programas ZK da Solana. Por exemplo, um swap confidencial pode aplicar os valores e o preço acordados sem torná-los públicos.

O programa verifica uma prova ZK da sua lógica de aplicação e, em seguida, invoca o SPP, diretamente ou por meio de um programa de Ring personalizado, para atualizar o estado privado.

## Árvore de Merkle de estado e Forester

O Ring Padrão e todos os Rings personalizados armazenam o estado privado em uma conta de árvore de Merkle de estado, mantida por um nó Forester.
As contas de árvore registram compromissos com o estado privado sem armazená-lo em contas Solana separadas.

Portanto, você consulta saldos e o histórico de transações com métodos RPC dedicados do indexador, como `getShieldedTransactionsByTags`, em vez de métodos de contas Solana como `getAccountInfo`. Consulte [Consultar um saldo privado](/docs/pt-BR/privacy/guides/read-balance) e [Consultar o histórico de transações privadas](/docs/pt-BR/privacy/guides/read-history).

### Taxa de transferência

A árvore é armazenada em uma conta Solana gravável.
As transferências privadas que gravam nessa conta compartilham o limite de bloqueio de gravação por conta de 12 milhões de CU por bloco da Solana.
UTXOs diferentes podem ser gastos de forma independente, mas as transações que gravam na mesma árvore ainda compartilham os bloqueios de conta e os limites de computação da Solana.

Uma transferência confidencial consome aproximadamente 140.000 CU no [benchmark da instrução](https://github.com/helius-labs/zolana/blob/a3ddedda42b40d4951ae8fcdde2500374c4f2125/program-tests/shielded-pool/CU_BENCHMARK.md#12-transfer-eddsa-2x3).
Portanto, uma árvore comporta aproximadamente 86 transferências privadas por bloco ou cerca de 215 transações por segundo com os tempos atuais de bloco da Solana, de aproximadamente 400 milissegundos.

O protocolo pode adicionar mais árvores para aumentar a taxa de transferência.
Cada árvore é uma conta gravável separada com seu próprio orçamento de computação por conta. Assim, transações em árvores diferentes não disputam o mesmo orçamento de bloqueio de gravação.

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

## Interface SPL

A interface SPL permite a interoperabilidade entre tokens mantidos de forma pública e privada. Ela é um depósito em garantia por mint, que pode ser criado sem permissão,
mas precisa ser criado uma única vez por mint.

* Ao depositar SOL e ativos SPL em um saldo privado, uma PDA de interface pertencente ao Solana Privacy Program mantém os tokens em depósito em garantia e cria UTXOs com o usuário como proprietário.
* Ao sacar para um saldo público, as UTXOs existentes são marcadas como gastas e os tokens são liberados para as contas de token da Solana.

Para mints que ainda não têm uma PDA de interface, o primeiro depósito pode incluir uma instrução para criar a PDA de interface na mesma transação.

```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" />

## Saiba mais

<CardGroup cols={2}>
  <Card title="Overview" icon="book" href="/docs/pt-BR/privacy/concepts/overview">
    Rings, garantias de privacidade e fluxo de transações.
  </Card>

  <Card title="Private State and UTXOs" icon="database" href="/docs/pt-BR/privacy/concepts/utxo">
    Como os saldos privados são armazenados e gastos.
  </Card>

  <Card title="Encryption and Privacy Guarantees" icon="key" href="/docs/pt-BR/privacy/concepts/encryption">
    Como os ativos são criptografados e qual é a função do par de chaves protegido.
  </Card>

  <Card title="Custom Enterprise Rings" icon="building" href="/docs/pt-BR/privacy/integration/enterprise">
    Saiba como configurar um Ring personalizado.
  </Card>
</CardGroup>

## Não encontrou o que estava procurando?

<Callout type="info">
  Entre em contato! [Telegram](https://t.me/tilo_light) | [E-Mail](mailto:sales@helius.xyz) | [Typeform](https://form.typeform.com/to/LPFASU8a)
</Callout>


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