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

# Conceitos

> Entenda como funciona o Helius Privacy, incluindo fluxos de usuário, o que permanece público ou privado em uma transferência, e anéis com política personalizável.

## Introdução aos Anéis

Toda transação no Solana é publicamente legível: endereços, saldos e histórico de transferências são visíveis para qualquer pessoa.
Os anéis criptografam saldos onchain e são sempre não-custodiais por padrão:

* Em anéis confidenciais, o ativo e a quantidade são privados, enquanto o remetente e o destinatário permanecem visíveis.
* Em anéis anônimos, o ativo, a quantidade, o remetente e o destinatário são privados.

<img src="https://mintcdn.com/helius/ANceN_N6YhA2y60D/images/privacy/transaction-visibility-cards.svg?fit=max&auto=format&n=ANceN_N6YhA2y60D&q=85&s=d775dd0d4ebcf7b299ef0f3ccfb025ca" alt="Dois cartões de transação Solana lado a lado. O cartão confidencial mostra o hash da transação, remetente e destinatário enquanto o ativo e a quantidade estão ocultos. O cartão anônimo mostra apenas o hash da transação; o remetente, ativo, quantidade e destinatário estão todos ocultos. O hash da transação permanece público em ambos." width="2320" height="540" data-path="images/privacy/transaction-visibility-cards.svg" />

Existem diferentes tipos de Anéis:

1. O Anel Padrão é sem permissão e confidencial. Ele criptografa o ativo e a quantidade, pode ser usado por qualquer pessoa e não possui controles de política personalizados.
2. Anéis Personalizados são programas Solana que tornam a privacidade no Solana programável, semelhante ao Token-2022. Um Anel Personalizado pode ser confidencial ou anônimo com política personalizada, relatórios e regras de visibilidade.

<Info>
  Para a maioria das aplicações, recomendamos o Anel Padrão, confidencial e sem permissão.
  Para controles de política e conformidade personalizados, [contate-nos](https://www.helius.dev/contact) para começar com um Anel Personalizado.
</Info>

<img src="https://mintcdn.com/helius/iNBk0QZ3vdaUiFW5/images/privacy/privacy-network.svg?fit=max&auto=format&n=iNBk0QZ3vdaUiFW5&q=85&s=af61b324d07f1184da1f3912d9f050fb" alt="Saldos privados mostrados como uma zona onchain pontilhada contendo dois anéis. O Anel Padrão é confidencial, autogestão e sem permissão. O Anel Personalizado é confidencial ou anônimo, autogestão, e adiciona política personalizada e conformidade personalizada. Uma transferência privada conecta os anéis, e cada um deposita e saca de uma camada de saldos públicos Solana abaixo." width="850" height="540" data-path="images/privacy/privacy-network.svg" />

### Anéis Personalizados São Programáveis

Anéis personalizados são programas Solana simples que tornam a privacidade programável, com recursos semelhantes ao Token-2022.

Um Anel Personalizado pode definir regras totalmente customizadas para transferências e visibilidade/auditoria.

<Accordion title="Exemplos de políticas de Anéis Personalizados">
  | Política                    | Exemplo                                                                           |
  | --------------------------- | --------------------------------------------------------------------------------- |
  | Ativos permitidos           | Apenas USDC ou uma stablecoin emitida específica                                  |
  | Limites de transferência    | Exigir aprovação extra acima de um limite                                         |
  | Co-assinatura               | Exigir aprovação de conformidade para pagamentos selecionados                     |
  | Listas de Permissão         | Permitir transferências apenas para contas, comerciantes ou anéis aprovados       |
  | Listas de Bloqueio          | Bloquear destinos sancionados ou de risco                                         |
  | Congelar/descongelar        | Congelar um saldo enquanto uma investigação está em andamento                     |
  | Delegado permanente         | Permitir que uma autoridade configurada mova fundos sob política                  |
  | Visibilidade do Auditor     | Permitir que conformidade, contabilidade ou reguladores vejam a atividade do anel |
  | Regras entre anéis          | Permitir ou bloquear movimentação entre anéis específicos                         |
  | Regras de saque             | Restringir saques públicos ou exigir aprovação                                    |
  | Suporte à conta inteligente | Permitir uso nativo com contas inteligentes                                       |
  | Recuperação de conta        | Permitir que uma autoridade configurada ou identidade alternativa recupere contas |
</Accordion>

As autoridades dos anéis são declaradas na criação do anel, para que os usuários possam inspecionar a política antes de escolher um anel.
O Anel Padrão é sem permissão e não possui autoridade personalizada ou auditor.

<Tip>
  Se você deseja configurar seu próprio Anel Personalizado, [contate-nos](https://www.helius.dev/contact) e vamos ajudá-lo a configurar.
  Você pode trazer sua própria conformidade ou usar a solução gerenciada de KYC e triagem de sanções da Helius.
</Tip>

## Fluxos de Usuário e Garantias de Privacidade

Transações com Helius Privacy são executadas nativamente onchain e se compõem com outros programas Solana em uma única transação.
Os usuários podem entrar, transferir de forma privada dentro ou sair de um Anel:

**1. Depósito ou on ramp.** Os usuários enviam tokens de um saldo público Solana ou de um saldo fiduciário, diretamente para um saldo privado.

**2. Transferência privada.** Os usuários enviam tokens entre saldos privados no mesmo Anel ou para um diferente.

**3. Saque ou off ramp.** Os usuários enviam tokens de um saldo privado para um saldo público Solana ou diretamente para um saldo fiduciário.

<img src="https://mintcdn.com/helius/df3Lmw7POmPkuUJN/images/privacy/privacy-rings-lifecycle.svg?fit=max&auto=format&n=df3Lmw7POmPkuUJN&q=85&s=54d057b2674ad3a194575858d35db167" alt="Diagrama do ciclo de vida do Anel. Um saldo público de 100 USDC deposita-se em um Anel e um saldo fiduciário de USD / EUR / ... entra no mesmo Anel, fundos se movem entre dois saldos privados via transferência privada, depois são sacados para um saldo público ou saem para um saldo fiduciário." width="1420" height="240" data-path="images/privacy/privacy-rings-lifecycle.svg" />

Usuários enviam tokens para um endereço de carteira Solana, assim como fazem com saldos públicos.
A Privacy API roteia a transferência automaticamente para a Carteira Privada, se o destinatário tiver uma.
Caso contrário, a transferência é um saque para o endereço público do destinatário.

Qualquer pessoa pode depositar em qualquer Carteira Privada conhecendo apenas o endereço da carteira pública do destinatário.
Quando o aplicativo do remetente não suporta privacidade, o destinatário recebe os fundos publicamente e pode criptografá-los para o seu próprio saldo privado em um segundo passo.

### Depósito em um Saldo Privado: O Que É Privado

Os usuários podem depositar em um saldo privado de duas maneiras:

1. On-ramp de um saldo fiduciário para um saldo cripto privado
2. Depósito de um saldo cripto público para um privado

<Tabs>
  <Tab title="On-ramp from fiat balance">
    | Field                    | Visibility                                                  | Why                                                                                                                                                                                                                                                                                                   |
    | ------------------------ | ----------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
    | Fiat balance and payment | Not onchain                                                 | The fiat payment is not onchain                                                                                                                                                                                                                                                                       |
    | Asset                    | Private                                                     | The asset is encrypted onchain                                                                                                                                                                                                                                                                        |
    | Amount                   | Private                                                     | The transferred amount is encrypted onchain                                                                                                                                                                                                                                                           |
    | Onramp Provider          | Public in a confidential Ring, private in an anonymous Ring | In a confidential Ring the wallet address of the provider is visible. An anonymous Ring uses a relayer, so the public ledger does not reveal the source private wallet.                                                                                                                               |
    | User wallet address      | Public in a confidential Ring, private in an anonymous Ring | In a confidential Ring the user wallet address is visible onchain. The user address used for the onramp cannot be linked to the user, if it is new and is not later tied to a known wallet address by a confidential transfer. In an anonymous Ring, the public ledger does not reveal the recipient. |
  </Tab>

  <Tab title="Deposit from public crypto balance">
    | Field                      | Visibility | Why                                                |
    | -------------------------- | ---------- | -------------------------------------------------- |
    | Source public wallet       | Public     | The source wallet address is visible onchain       |
    | Asset                      | Public     | The asset is visible onchain                       |
    | Amount                     | Public     | The deposited amount is visible onchain            |
    | Destination wallet address | Public     | The destination wallet address is visible onchain  |
    | Resulting private balance  | Private    | The resulting private balance is encrypted onchain |
  </Tab>
</Tabs>

### Transferência Privada: O Que É Privado

Os usuários podem enviar uma transferência privada de duas maneiras:

1. Transferir no mesmo Anel
2. Transferir para um Anel diferente

<Info>
  Para a maioria das aplicações, recomendamos o Anel Padrão, confidencial e sem permissão.
  Para controles de política e conformidade personalizados, [contate-nos](https://www.helius.dev/contact) para começar com um Anel Personalizado.
</Info>

<Tabs>
  <Tab title="Permissionless Confidential Ring">
    | Field                 | Visibility | Why                                                                  |
    | --------------------- | ---------- | -------------------------------------------------------------------- |
    | Asset                 | Private    | The asset is encrypted onchain                                       |
    | Amount                | Private    | The transferred amount is encrypted onchain                          |
    | Source private wallet | Public     | In a confidential Ring the source private wallet is visible onchain. |
    | Recipient             | Public     | In a confidential Ring the recipient is visible onchain.             |
  </Tab>

  <Tab title="Custom Rings">
    Transfers from and within a ring reveal the program ID of the custom Ring.

    A balance in a Custom Ring can exit to an SPL token account, to the Default Ring, or to another Ring, as long as the source Ring's policy permits it.
    The default Ring is permissionless and does not have a policy or authority.

    One transaction can combine balances from the Default Ring and one Custom Ring. A transfer between two Custom Rings routes through the Default Ring.

    | Private transfer       | Custom confidential Rings | Custom anonymous Rings                                                                                      | Default confidential to or from Custom confidential | Confidential (Default or Custom) to Custom anonymous | Custom anonymous to confidential (Default or Custom)                                                        |
    | ---------------------- | ------------------------- | ----------------------------------------------------------------------------------------------------------- | --------------------------------------------------- | ---------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- |
    | Amount                 | Private                   | Private                                                                                                     | Private                                             | Private                                              | Private                                                                                                     |
    | Asset                  | Private                   | Private                                                                                                     | Private                                             | Private                                              | Private                                                                                                     |
    | Source private wallet  | Public                    | Private. A relayer submits the transaction, so the public ledger does not reveal the source private wallet. | Public                                              | Public                                               | Private. A relayer submits the transaction, so the public ledger does not reveal the source private wallet. |
    | Recipient              | Public                    | Private                                                                                                     | Public                                              | Private                                              | Public                                                                                                      |
    | Custom Ring program ID | Public                    | Public                                                                                                      | Public                                              | Public                                               | Public                                                                                                      |
  </Tab>
</Tabs>

### Saque de um Saldo Privado: O Que É Privado

Os usuários podem sacar de um saldo privado de duas maneiras:

1. Off-ramp de cripto privado para um saldo fiduciário
2. Saque de cripto privado para um saldo cripto público

<Tabs>
  <Tab title="Off-ramp to fiat balance">
    | Field               | Visibility                                                  | Why                                                                                                                                                                                                                                                                                                        |
    | ------------------- | ----------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
    | Fiat payout         | Not onchain                                                 | The fiat payout is not onchain                                                                                                                                                                                                                                                                             |
    | Asset               | Private                                                     | The asset is encrypted onchain                                                                                                                                                                                                                                                                             |
    | Amount              | Private                                                     | The transferred amount is encrypted onchain                                                                                                                                                                                                                                                                |
    | Offramp Provider    | Public in a confidential Ring, private in an anonymous Ring | In a confidential Ring an observer can see that a user offramped with this Offramp Provider. In an anonymous Ring the public ledger does not reveal sender and recipient.                                                                                                                                  |
    | User wallet address | Public in a confidential Ring, private in an anonymous Ring | In a confidential Ring the user wallet address is visible onchain. Another wallet address cannot be linked to this address if this address is new and is not later tied to a known wallet address by a confidential transfer. In an anonymous Ring the public ledger does not reveal sender and recipient. |
  </Tab>

  <Tab title="Withdraw to public crypto balance">
    | Field                     | Visibility | Why                                                                  |
    | ------------------------- | ---------- | -------------------------------------------------------------------- |
    | Source private wallet     | Public     | In a confidential Ring the source private wallet is visible onchain. |
    | Asset                     | Public     | The asset is visible onchain                                         |
    | Amount                    | Public     | The withdrawn amount is visible onchain                              |
    | Destination public wallet | Public     | The destination wallet address is visible onchain                    |
    | Resulting public balance  | Public     | The resulting public balance is visible onchain                      |
    | Remaining private balance | Private    | The remaining balance is encrypted onchain                           |
  </Tab>
</Tabs>

## Fluxo de Transação em Alto Nível

Uma transferência privada se comporta de maneira semelhante às transferências públicas e é executada em uma única transação Solana.

<Tabs>
  <Tab title="Transferência privada">
    1. O saldo de SOL ou SPL do usuário é criptografado onchain.
    2. Buscar estado criptografado e descriptografar localmente, ou um provedor delegado descriptografa e serve o estado descriptografado.
    3. A carteira define a quantidade e o destinatário, em seguida solicita uma prova ZK.
    4. O provedor RPC gera a prova ZK por padrão e a retorna. Um Anel Personalizado também requer uma prova de política.
    5. A carteira constrói a transação Solana. As provas ZK são verificadas sem revelar o estado criptografado. Os programas invocados e quem assina e submete dependem do Anel:

    |                     | Anel Confidencial Sem Permissão                               | Anel Confidencial Personalizado                                 | Anel Anônimo Personalizado                                      |
    | ------------------- | ------------------------------------------------------------- | --------------------------------------------------------------- | --------------------------------------------------------------- |
    | Programas Invocados | Programa de Privacidade Solana                                | Programa do Anel Personalizado e Programa de Privacidade Solana | Programa do Anel Personalizado e Programa de Privacidade Solana |
    | Assinante           | O remetente assina. Um patrocinador de gás pode pagar a taxa. | O remetente assina. Um patrocinador de gás pode pagar a taxa.   | Um relé, então o remetente não está vinculado à transação.      |

    6. O aplicativo acompanha o status por meio do hash da transação Solana.

    <Tabs sync={false}>
      <Tab title="Anel Confidencial Sem Permissão">
        ```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
            participant Wallet
            participant RPC as RPC Provider
            participant Solana

            rect rgba(255, 107, 53, 0.06)
                Note left of Wallet: Local
                Wallet->>RPC: Fetch encrypted state
                RPC-->>Wallet: Encrypted state
                Note over Wallet: Decrypt locally
            end
            rect rgba(255, 107, 53, 0.06)
                Note left of Wallet: Delegated
                Wallet->>RPC: Get private balance
                Note over RPC: Decrypt and serve decrypted state
                RPC-->>Wallet: Decrypted state
            end

            Note over Wallet: Set amount and recipient
            Wallet->>RPC: Request ZK proof
            Note over RPC: Generate ZK proof
            RPC-->>Wallet: ZK proof
            Note over Wallet: Build transaction, sign

            Wallet->>RPC: Submit Transaction
            RPC->>Solana: Forward transaction
            Note over Solana: Verify signatures
            Note over Solana: CPI Solana Privacy Program
            Note over Solana: Verify ZK proof
            RPC-->>Wallet: Transaction signature
        ```
      </Tab>

      <Tab title="Anel Confidencial Personalizado">
        ```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
            participant Wallet
            participant RPC as RPC Provider
            participant Solana

            rect rgba(255, 107, 53, 0.06)
                Note left of Wallet: Local
                Wallet->>RPC: Fetch encrypted state
                RPC-->>Wallet: Encrypted state
                Note over Wallet: Decrypt locally
            end
            rect rgba(255, 107, 53, 0.06)
                Note left of Wallet: Delegated
                Wallet->>RPC: Get private balance
                Note over RPC: Decrypt and serve decrypted state
                RPC-->>Wallet: Decrypted state
            end

            Note over Wallet: Set amount and recipient
            Wallet->>RPC: Request ZK proof
            Note over RPC: Generate ZK proof and policy proof
            RPC-->>Wallet: ZK proof and policy proof
            Note over Wallet: Build transaction, sign

            Wallet->>RPC: Submit Transaction
            RPC->>Solana: Forward transaction
            Note over Solana: Verify signatures
            Note over Solana: CPI Custom Ring Program
            Note over Solana: Verify policy ZK proof
            Note over Solana: CPI Solana Privacy Program
            Note over Solana: Verify SPP ZK proof
            RPC-->>Wallet: Transaction signature
        ```
      </Tab>

      <Tab title="Anel Anônimo Personalizado">
        ```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
            participant Wallet
            participant RPC as RPC Provider
            participant Relayer
            participant Solana

            rect rgba(255, 107, 53, 0.06)
                Note left of Wallet: Delegated
                Wallet->>RPC: Get private balance
                Note over RPC: Decrypt and serve decrypted state
                RPC-->>Wallet: Decrypted state
            end

            Note over Wallet: Set amount and recipient, sign
            Wallet->>RPC: Request ZK proof
            Note over RPC: Generate ZK proof and policy proof
            RPC-->>Wallet: ZK proof and policy proof
            Note over Wallet: Build transaction

            Wallet->>Relayer: Submit Transaction
            Relayer->>Solana: Forward transaction
            Note over Solana: Verify signatures
            Note over Solana: CPI Custom Ring Program
            Note over Solana: Verify policy ZK proof
            Note over Solana: CPI Solana Privacy Program
            Note over Solana: Verify SPP ZK proof
            Relayer-->>Wallet: Transaction signature
        ```
      </Tab>
    </Tabs>
  </Tab>

  <Tab title="Transferência Solana">
    1. O saldo de SOL ou SPL do usuário é público onchain.
    2. A carteira lê o estado público, constrói uma transferência, e o proprietário assina.
    3. O runtime do Solana verifica as assinaturas e invoca o Programa de Sistema ou Programa de Token, que atualiza o saldo público.
    4. O aplicativo acompanha o status via o hash da transação Solana.

    ```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
        participant Wallet
        participant RPC
        participant Solana

        Wallet->>RPC: Get public balance
        RPC-->>Wallet: Public state
        Note over Wallet: Build transfer, owner signs
        Wallet->>RPC: sendTransaction
        RPC->>Solana: Forward transaction
        Note over Solana: Verify signatures
        Note over Solana: CPI System / Token Program
        Note over Solana: Update balance
        RPC-->>Wallet: Transaction signature
    ```
  </Tab>
</Tabs>

## Carteira Privada

Os usuários mantêm seu saldo criptografado em uma Carteira Privada.

A Carteira Privada recebe transferências no endereço público Solana do usuário, servindo como o `inbox`.
Desta forma, o remetente sempre insere o endereço Solana do destinatário, assim como fazem com transferências públicas.

| Comparação            | Carteira Solana          | Carteira Privada                 |
| --------------------- | ------------------------ | -------------------------------- |
| Identificador Público | Endereço Solana          | O mesmo endereço Solana          |
| Armazenamento Onchain | Contas de token públicas | Contas de token privadas (UTXOs) |

### Criação de uma Carteira Privada

Após a criação de uma carteira privada, o endereço Solana é registrado em um registro onchain.

O registro mapeia um endereço Solana para um <Tooltip tip="O Endereço Protegido não é um par de chaves Solana, ele é derivado de forma determinística das chaves públicas de assinatura, nulo e visualização.">Endereço Protegido</Tooltip>.
As transferências são criptografadas nos bastidores para o Endereço Protegido.
Vários endereços Solana não podem compartilhar um Endereço Protegido.
Cada registro é um PDA de propriedade do <Tooltip tip="regyS5rkAcw2YzDJCmTwCTHs2s246FXxbmuRZ42u2PD">[programa de registro](https://orbmarkets.io/address/regyS5rkAcw2YzDJCmTwCTHs2s246FXxbmuRZ42u2PD)</Tooltip>, que qualquer pessoa pode consultar para ver se um endereço Solana pode receber transferências privadas.

<img src="https://mintcdn.com/helius/NHXFc7ysJd1NoY9P/images/privacy/wallet-shape.svg?fit=max&auto=format&n=NHXFc7ysJd1NoY9P&q=85&s=7e96783047c79ed30c4e995623f197a6" alt="Carteira do usuário mostrando duas carteiras Solana públicas e uma carteira privada. Uma seta de entrada conecta a chave pública da Carteira Pública A ao Endereço Protegido da carteira privada." width="1120" height="570" data-path="images/privacy/wallet-shape.svg" />

<Info>
  No aplicativo de carteira, você pode permitir que seus usuários criem carteiras privadas apenas para uma chave pública "Carteira Privada" dedicada,
  ou para qualquer chave pública.
</Info>

### Transferências para uma Carteira Privada

Em cada transferência, a Privacy API consulta o endereço da carteira no registro onchain para verificar se o destinatário tem uma carteira privada.
Em um acerto, ela utiliza o Endereço Protegido nos bastidores para criptografar a transferência.

<Info>
  Quando o destinatário de uma transferência privada não possui uma Carteira Privada, a Privacy API resolve a transferência para um saque privado-para-público.

  Recomendamos solicitar uma assinatura separada do usuário na interface para garantir que o usuário não saque acidentalmente para um saldo público.
</Info>

```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
    participant User
    participant Privacy API
    participant Solana

    User->>Privacy API: Initiate Private Transfer
    Privacy API->>Solana: Look up Solana address
    rect rgba(255, 107, 53, 0.06)
        Note left of User: Recipient has a Private Wallet
        Solana-->>Privacy API: Registered
        Privacy API->>User: Request Signature
        User->>Privacy API: Sign private transfer
        Privacy API-->>Solana: Send Private Transfer
    end
    rect rgba(255, 107, 53, 0.06)
        Note left of User: Recipient has no Private Wallet
        Solana-->>Privacy API: Not Registered
        Privacy API->>User: Request Signature
        User->>Privacy API: Sign to Confirm Withdrawal
        Privacy API-->>Solana: Private-to-Public Withdrawal
    end
```

### Gerenciamento de Chaves

Uma Carteira Privada adiciona um par de chaves protegido a uma carteira Solana a partir do seu par de chaves Solana.

| Chave                    | Carteira Solana                           | Carteira Privada                                       |
| ------------------------ | ----------------------------------------- | ------------------------------------------------------ |
| Chave pública            | Compartilhada para receber transferências | Compartilhada para receber transferências              |
| Chave privada            | Usada para assinar transações             | Usada para assinar transações                          |
| Frase Semente            | Recria a carteira                         | Recria a carteira                                      |
| Par de chaves protegidos | N/A                                       | Conjunto das chaves de assinatura, nulo e visualização |

O par de chaves protegido é um conjunto das chaves de assinatura, nulo e visualização. Não é um par de chaves Solana.

| Chave                 | Anéis Confidenciais                          | Anéis Anônimos Personalizados                |
| --------------------- | -------------------------------------------- | -------------------------------------------- |
| Chave de assinatura   | Chave Ed25519 da carteira pública            | Chave P-256 da carteira privada              |
| Chave Nula            | Marca UTXOs como gastos                      | Marca UTXOs como gastos                      |
| Chave de Visualização | P-256 somente leitura. Descriptografa saldos | P-256 somente leitura. Descriptografa saldos |

O Endereço Protegido é as chaves públicas do par de chaves protegidos. As transferências são criptografadas para ele.

```
ShieldedAddress = (signing_pk, nullifier_pk, viewing_pk)
```

#### Criando um Par de Chaves Protegidos

Uma carteira pode criar o par de chaves protegidos de duas maneiras.

1. **Derivar chaves da Frase Semente.**

   * A abordagem recomendada para carteiras baseadas em semente.
   * Anéis Confidenciais: a chave de assinatura é a mesma chave Ed25519 que uma carteira Solana deriva da semente. As chaves nulo e visualização são chaves adicionais derivadas da mesma semente.
   * Anéis Anônimos Personalizados: a chave de assinatura é uma chave P-256 adicional derivada da semente da carteira.
   * Você sempre pode recriar o par de chaves protegidos da mesma forma que recria a carteira Solana.

2. **Derivar chaves de uma mensagem fixa com a chave Solana existente.**

   * Assinaturas Solana são determinísticas, portanto o mesmo par de chaves Solana sempre produz o mesmo par de chaves protegidos. O aplicativo nunca recebe a chave privada.
   * A abordagem recomendada para testes e carteiras que não usam uma frase semeadura. A carteira integradora deve garantir que a assinatura não seja exposta a terceiros.

#### Integrando um Par de Chaves Protegidos

Uma carteira pode manter o par de chaves protegidos ela mesma através da [Integração de Carteira](/docs/pt-BR/privacy/integration/wallet) nativa.
Com a [Carteira de Privacidade Incorporada](/docs/pt-BR/privacy/integration/embedded-wallet), um Provedor de Carteira mantém o par de chaves protegidos e executa suas operações de chave em vez disso.

| Gerenciamento de chaves                                                           | Quem mantém o par de chaves protegidos | Onde suas operações são executadas        |
| --------------------------------------------------------------------------------- | -------------------------------------- | ----------------------------------------- |
| [Integração de Carteira](/docs/pt-BR/privacy/integration/wallet) nativa                | A carteira                             | No dispositivo                            |
| [Carteira de Privacidade Incorporada](/docs/pt-BR/privacy/integration/embedded-wallet) | Um Provedor de Carteira                | Na infraestrutura do Provedor de Carteira |

### Modos de Descriptografia e Sincronização da Carteira

Somente o proprietário pode descriptografar um Saldo de Carteira Privada com uma Chave de Visualização.

Para divulgação seletiva, um proprietário pode compartilhar uma chave de visualização com um auditor, para que o auditor possa ler a atividade sem poder gastar.
Em anéis personalizados, a política pode declarar um auditor que pode descriptografar todos os saldos desse anel personalizado.

Anéis confidenciais (o Anel Padrão e Anéis Personalizados confidenciais) suportam descriptografia local e delegada.
Anéis anônimos (apenas Anéis Personalizados) suportam apenas descriptografia delegada.

| Modo     | Onde a descriptografia acontece | Quem tem acesso de visualização | Compromisso de carteira                                                           | Quem usa isso                                                           |
| -------- | ------------------------------- | ------------------------------- | --------------------------------------------------------------------------------- | ----------------------------------------------------------------------- |
| Local    | Dentro da carteira              | Apenas a carteira               | Melhor privacidade, mas requer estado local e ciclo de sincronização              | Anéis confidenciais: o Anel Padrão e Anéis Personalizados confidenciais |
| Delegado | Provedor RPC autorizado         | Carteira + provedor             | Menos trabalho de sincronização local, mas o provedor pode ver saldos e histórico | Qualquer anel; o único modo em Anéis Anônimos Personalizados            |

<Info>
  Uma carteira deve descriptografar e atualizar saldos sempre que executar backfills: ao desbloquear a carteira,
  abertura de carteira privada, retomar de app, reconectar à rede, gap de stream, ou restauração de carteira.
</Info>

#### Descriptografia Local

No modo de descriptografia local, a carteira descriptografa e sincroniza saldos e histórico localmente.
Os servidores Helius não recebem a mnemônica, a semente, a chave privada de assinatura, chaves privadas de visualização ou segredo nulo.

#### Descriptografia Delegada

No modo de descriptografia delegada, a carteira e um provedor selecionado compartilham uma chave de visualização.
Isso permite que o provedor descriptografe saldos e histórico, mas não concede autoridade de gastos.
Uma carteira também pode compartilhar chaves de visualização anteriores quando autoriza o provedor a sincronizar a atividade histórica.

O acesso de auditoria é separado da descriptografia delegada.
Um auditor recebe visibilidade do Anel definida pela política, enquanto um provedor delegado recebe acesso de sincronização com escopo de carteira.

#### O Indexador Serve o Estado Criptografado

Assim como as carteiras públicas dependem de um RPC Solana, as Carteiras Privadas dependem de um indexador.
O indexador serve o estado criptografado que uma carteira precisa para ler saldos e construir transações privadas.

Por padrão, o indexador é acessível via <Tooltip text="https://devnet.helius-rpc.com/?api-key=<API_KEY> / https://mainnet.helius-rpc.com/?api-key=<API_KEY>">URL do Helius RPC</Tooltip>; qualquer pessoa também pode executar seu próprio indexador sem permissão como alternativa.

## Saldo da Carteira Privada

O Saldo da Carteira Privada é mantido onchain em Contas de Token Privadas Solana como UTXOs (saídas de transação não gastas), não uma conta de token Solana.
O Anel Padrão e todos os Anéis Personalizados armazenam saldos privados em uma árvore de Merkle de estado único.

O Saldo da Carteira Privada é a soma de todos os UTXOs de propriedade de uma Carteira Privada.
Programas Solana podem possuir UTXOs semelhantes a contas Solana regulares.
Esta documentação usa Contas de Token Privadas Solana e UTXOs de forma intercambiável.

<img src="https://mintcdn.com/helius/KNGZoSuCXDUVm6yU/images/privacy/utxo-set-to-wallet.svg?fit=max&auto=format&n=KNGZoSuCXDUVm6yU&q=85&s=92c14cfcf72e56cbaff498a7b95c638b" alt="Uma Carteira Privada conectada por linhas pontilhadas a várias notas UTXO, cada uma com um valor de um ativo. O saldo da carteira é a soma das notas." width="700" height="276" data-path="images/privacy/utxo-set-to-wallet.svg" />

<Accordion title="Saldos em UTXOs vs contas Solana">
  Para a experiência do usuário, não importa se o saldo é mantido em UTXOs ou contas de token Solana.

  A nível técnico, gastar um saldo público reduz o `amount` em uma conta de token Solana.
  Gastar um Saldo Privado não sobrescreve o campo `amount` de um UTXO.
  Em vez disso, transações privadas usam UTXOs existentes como inputs (automaticamente escolhidos pelo SDK),
  consomem os inputs e criam novos outputs para o destinatário e para o saldo restante do remetente.

  Por exemplo, Alice tem 50 USDC e envia 35 para Bob.

  * Em uma conta de token Solana, seu campo `amount` vai de 50 para 15, e o de Bob aumenta em 35. O número muda no local.
  * Com UTXOs, Alice possui uma nota de 50 USDC. A transação gasta-a e cria duas novas notas: uma nota de 35 USDC para Bob e uma nota de troco de 15 USDC para Alice. Sua nota de 50 antiga agora está gasta.

  <Tabs>
    <Tab title="Uma nota de input">
      <img src="https://mintcdn.com/helius/KNGZoSuCXDUVm6yU/images/privacy/spend-comparison.svg?fit=max&auto=format&n=KNGZoSuCXDUVm6yU&q=85&s=3d0ce046ce268daf75ab8546766bc427" alt="Alice envia 35 dos seus 50 USDC para Bob. Em uma conta de token Solana o campo de quantidade muda no local de 50 para 15. Com UTXOs, a única nota de 50 USDC de Alice é gasta e duas novas notas são criadas: uma nota de 35 USDC para Bob e uma nota de troco de 15 USDC para Alice." width="1016" height="240" data-path="images/privacy/spend-comparison.svg" />
    </Tab>

    <Tab title="Várias notas de input">
      <img src="https://mintcdn.com/helius/KNGZoSuCXDUVm6yU/images/privacy/spend-comparison-multi.svg?fit=max&auto=format&n=KNGZoSuCXDUVm6yU&q=85&s=f4502ff2086c41f41908e337f3c12f7b" alt="Alice envia 35 dos seus 50 USDC para Bob, mantidos como três notas de 20, 20 e 10. Em uma conta de token Solana o campo de quantidade muda no local de 50 para 15. Com UTXOs, todas as três notas de input são gastas e duas novas notas são criadas: uma nota de 35 USDC para Bob e uma nota de troco de 15 USDC para Alice." width="1016" height="240" data-path="images/privacy/spend-comparison-multi.svg" />
    </Tab>
  </Tabs>

  |              | Conta de token Solana                | Conta de token privada Solana (UTXO)                           |
  | ------------ | ------------------------------------ | -------------------------------------------------------------- |
  | Mantém       | Um número de saldo no campo `amount` | Um conjunto de notas, cada uma uma quantidade fixa de um ativo |
  | Saldo        | O número na conta                    | A soma de todos os UTXOs não gastos                            |
  | Gastar       | Subtrai do campo `amount` no local   | Consome UTXOs de entrada e escreve um novo UTXO de troco       |
  | Visibilidade | Público onchain                      | Criptografado onchain                                          |

  <Info>
    No depósito para um saldo privado de ativos SOL e SPL, uma PDA de interface de propriedade do Programa de Privacidade Solana guarda tokens e cria UTXOs com o usuário como proprietário.

    No saque para um saldo público, UTXOs existentes são marcados como gastos, e tokens são liberados para as contas de token Solana.
  </Info>
</Accordion>

Uma Carteira Privada pode manter saldos em vários Anéis ao mesmo tempo, sem limites para o número de Anéis.
A qual Anel um saldo pertence não é uma propriedade da carteira. É uma propriedade de cada UTXO, armazenada no seu campo `policy_program_id`.

## Contas de Token Privadas Solana

Uma Conta de Token Privada Solana é um UTXO que se comporta de maneira semelhante a uma conta de token Solana com duas diferenças principais:

* uma Conta de Token Privada Solana não requer isenção de aluguel após a criação, e
* seu saldo é criptografado onchain.

Ainda assim, as Contas de Token Privadas Solana armazenam os mesmos dados, como:

* **Ativo:** a emissão que o UTXO mantém unidades. SOL é o endereço de emissão padrão. O ativo pode ser SOL ou qualquer ativo SPL ou Token-2022.
* **Quantidade:** o número de unidades que a nota `asset` mantém, na menor unidade do ativo.
* **Programa e dados de política:** dados opcionais para a política do anel configurado adicionar funcionalidade semelhante ao Token-2022.

<Tabs>
  <Tab title="Diagrama">
    <img src="https://mintcdn.com/helius/KNGZoSuCXDUVm6yU/images/privacy/account-comparison-private.svg?fit=max&auto=format&n=KNGZoSuCXDUVm6yU&q=85&s=860d0d2f3894b0a0ac169b82e538a934" alt="Uma Conta de Token Privada Solana. O Programa de Privacidade Solana possui uma Conta de Token Privada, que se expande para seus campos PrivateAccount: proprietário, ativo, quantidade, dados de política e id. do programa de política." width="1080" height="590" data-path="images/privacy/account-comparison-private.svg" />
  </Tab>

  <Tab title="Código">
    O registro completo armazenado para cada Conta de Token Privada Solana é um UTXO plano:

    ```rust Private Solana Token Account (UTXO) theme={"system"}
    struct Utxo {
        /// Constant separating UTXOs from other Poseidon-hashed records.
        domain: u16,
        /// Recipient's `owner_hash` from their Shielded Address.
        /// Senders write this value directly; the spender supplies the preimage
        /// components as proof witness.
        owner: [u8; 32],
        /// Asset mint. SOL is Address::default().
        asset: Address,
        /// Amount in the smallest unit of `asset`.
        amount: u64,
        /// Random bytes ensuring distinct UTXO hashes for equal
        /// `(owner, asset, amount)` triples.
        blinding: [u8; 31],
        /// Arbitrary program data.
        program_data: Option<Vec<u8>>,
        /// Arbitrary policy data.
        policy_data: Option<Vec<u8>>,
        /// The policy program that authorizes spends of this UTXO.
        policy_program_id: Option<Address>,
    }
    ```
  </Tab>
</Tabs>

<Accordion title="Visualizar conta de token Solana">
  <Tabs>
    <Tab title="Diagrama">
      <img src="https://mintcdn.com/helius/KNGZoSuCXDUVm6yU/images/privacy/account-comparison-solana.svg?fit=max&auto=format&n=KNGZoSuCXDUVm6yU&q=85&s=89ff901091255f2038972208fcb5d538" alt="Uma Conta de Token Solana. O Programa de Token possui uma Conta de Token, expandida em seus campos AccountInfo (Data, Executável, Lamports, Proprietário) e o campo Data expandido em Dados da Conta (Emitir, Proprietário, Quantidade)." width="1080" height="462" data-path="images/privacy/account-comparison-solana.svg" />
    </Tab>

    <Tab title="Código">
      ```rust Solana Token Account theme={"system"}
      pub struct Account {
          /// The mint associated with this account
          pub mint: Pubkey,
          /// The owner of this account.
          pub owner: Pubkey,
          /// The amount of tokens this account holds.
          pub amount: u64,
          /// If `delegate` is `Some` then `delegated_amount` represents
          /// the amount authorized by the delegate
          pub delegate: COption<Pubkey>,
          /// The account's state
          pub state: AccountState,
          /// If is_native.is_some, this is a native token, and the value logs the
          /// rent-exempt reserve. An Account is required to be rent-exempt, so
          /// the value is used by the Processor to ensure that wrapped SOL
          /// accounts do not drop below this threshold.
          pub is_native: COption<u64>,
          /// The amount delegated
          pub delegated_amount: u64,
          /// Optional authority to close the account.
          pub close_authority: COption<Pubkey>,
      }
      ```
    </Tab>
  </Tabs>
</Accordion>

## Sobre Concurrência

Os usuários podem gastar saldos privados assim que as transações forem finais.

Ou seja, o saldo de um par de chaves pode ser usado simultaneamente quando é dividido entre um número de UTXOs.
A carteira seleciona quais UTXOs gastar.

Uma árvore de Merkle armazena o estado privado para o Anel Padrão sem permissão e todos os Anéis Personalizados.
A árvore é armazenada em uma conta Solana gravável.
Transferências privadas que escrevem para essa conta compartilham o limite de trava de gravação de 12 milhões de CU por conta por bloco do Solana.

Uma transferência privada consome aproximadamente 220.000 CU.
Uma árvore, portanto, suporta aproximadamente 54 transferências privadas por bloco, ou aproximadamente 130 transações por segundo nos tempos de bloco atuais do Solana de cerca de 400 milissegundos.

O protocolo pode adicionar mais árvores para aumentar o throughput.
Cada árvore é uma conta gravável separada com seu próprio orçamento de computação por conta, então transações em diferentes árvores não competem pelo mesmo orçamento de trava de gravação.

## Sobre o Tempo de Geração de Provas

Atualmente, provas de conhecimento zero são geradas por um servidor provedor; uma transferência confidencial típica prova em dezenas de milissegundos; a prova local para Anéis Confidenciais está planejada.
O tempo de prova está sendo ativamente otimizado para garantir uma experiência de usuário suave.

## Termos

| Termo                         | Significado                                                                                                                                                                                                                       | Também escrito como                                                                                                           |
| ----------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- |
| AES-GCM                       | O cifrador simétrico que criptografa o conteúdo do UTXO e detecta adulterações                                                                                                                                                    |                                                                                                                               |
| Auditor                       | Um visualizador configurado para um Anel Personalizado. Auditores podem ler dados do anel, mas não podem gastar                                                                                                                   |                                                                                                                               |
| Anel Personalizado            | Um anel empresarial dedicado com regras, visibilidade e autoridades personalizadas.                                                                                                                                               | anteriormente "Anel de Política"                                                                                              |
| Modo de Descriptografia       | Como um Anel suporta descriptografia de saldo e histórico: anéis confidenciais (o Anel Padrão e Anéis Personalizados confidenciais) suportam Local e Delegado; anéis anônimos personalizados suportam apenas Delegado             |                                                                                                                               |
| Descriptografia delegada      | Modo de sincronização em que um provedor selecionado usa uma chave de visualização compartilhada para ler saldos e histórico sem autoridade para gastos                                                                           |                                                                                                                               |
| Anel Padrão                   | Um grupo de carteiras privadas com saldos no Anel confidencial sem permissão; ativo e quantidade são privados enquanto remetente e destinatário permanecem públicos                                                               |                                                                                                                               |
| Depósito                      | Uma transferência público-para-privado em um Anel de um endereço público Solana                                                                                                                                                   | entrar, depósito público-para-privado                                                                                         |
| ECDH                          | Diffie-Hellman de Curva Elíptica, que permite que remetente e destinatário derivem um segredo compartilhado de suas chaves sem trocá-lo                                                                                           |                                                                                                                               |
| Autoridade de Congelamento    | Uma autoridade configurada que pode congelar ou descongelar saldos quando a política permite                                                                                                                                      |                                                                                                                               |
| HPKE                          | Encriptação de chave pública híbrida, o esquema combinando o acordo de chave ECDH com um cifrador simétrico para criptografar um UTXO para a chave do destinatário                                                                |                                                                                                                               |
| Caixa de Entrada              | A chave pública Solana usada como endereço de recebimento público para uma Carteira Privada                                                                                                                                       | endereço de recebimento público                                                                                               |
| Proprietário                  | A chave pública Solana, conta inteligente ou assinante apoiado por provedor que autoriza ações da Carteira Privada                                                                                                                |                                                                                                                               |
| Programa de política          | O programa onchain público que aplica as regras de um Anel Personalizado e revela qual Anel Personalizado uma transação usa                                                                                                       | conjunto de regras de política, política de anel                                                                              |
| Privacy API                   | Helius API para criar Carteiras Privadas, ler saldos/histórico, preparar transferências, gerar provas e enviar transações                                                                                                         | Provedor RPC (os documentos combinam os dois como "Privacy API / Provedor RPC"; veja o Modelo de Confiança em enterprise.mdx) |
| Saldo privado                 | O saldo criptografado de um usuário mantido dentro de um Anel                                                                                                                                                                     | saldo protegido, saldo criptografado, fundos privados                                                                         |
| Conta de Token Privada Solana | Um UTXO onchain contendo uma quantidade de um ativo, de propriedade de uma Carteira Privada. O Saldo da Carteira Privada é a soma de todos os UTXOs não gastos                                                                    | UTXO, nota, saída de transação não gasta                                                                                      |
| Transferência privada         | Uma transferência entre Carteiras Privadas que não revela ativo ou quantidade. No anel público confidencial, o remetente e o destinatário permanecem visíveis; um anel anônimo usa um relé e não revela nenhuma das partes        | transferência privada-para-privada, transferência no anel                                                                     |
| Carteira Privada              | Um conta de pagamento com saldos e transferências onchain criptografados                                                                                                                                                          | conta privada, conta de pagamento privada, conta privada gerenciada                                                           |
| Saldo da Carteira Privada     | A soma de todos os UTXOs não gastos de propriedade de uma Carteira Privada                                                                                                                                                        |                                                                                                                               |
| Saldo público                 | O saldo normal, público de token SPL de um usuário fora de qualquer Anel                                                                                                                                                          | conta pública, conta de token pública, saldo de token SPL                                                                     |
| Registro                      | Mapeia um endereço Solana para seu Endereço Protegido para que remetentes possam pagar o endereço de forma privada. Um registro significa que o endereço pode receber transferências privadas, não que ele possua fundos privados |                                                                                                                               |
| Relé                          | Envia transações de Anel-anônimo e paga sua taxa de transação Solana, para que o remetente não esteja vinculado à transação                                                                                                       |                                                                                                                               |
| Anel Personalizado            | Um grupo de carteiras privadas com saldos em um Anel personalizado governado por uma política.                                                                                                                                    |                                                                                                                               |
| Endereço Protegido            | O pacote de chaves públicas (chaves de assinatura, nulo e visualização) publicado no registro de um usuário. Não é um endereço onchain                                                                                            | Chave Pública Protegida, pubkey protegido                                                                                     |
| Par de chaves protegidos      | O conjunto das chaves de assinatura, nulo e visualização de uma Carteira Privada. Mantido pela carteira, ou por um Provedor de Carteira na Carteira de Privacidade Incorporada                                                    | chaves protegidas                                                                                                             |
| TSPP                          | O Protocolo de Privacidade Solana de código aberto, um padrão desenvolvido e mantido pela Helius Labs que impulsiona as transições de estado subjacentes onchain.                                                                 | Protocolo de Privacidade Solana                                                                                               |
| Chave de visualização         | Um par de chaves P-256 somente leitura que descriptografa um Saldo de Carteira Privada. O proprietário pode compartilhá-la com um auditor para divulgação seletiva                                                                | chave de visualização                                                                                                         |
| Provedor de Carteira          | O sistema que gerencia contas de usuário, assinantes, contas inteligentes ou carteiras de tesouraria e mantém chaves de privacidade não exportáveis, como Turnkey, Privy, Squads, Rain, ou uma pilha de custódia interna          | Gestor de Chaves de Carteira, serviço de gerenciamento de chaves, infraestrutura segura de chaves                             |
| Saque                         | Uma transferência privado-para-público de um Anel para um endereço público                                                                                                                                                        | saque privado-para-público                                                                                                    |

## Didn't find what you were looking for?

<Callout type="info">
  Reach out! [Telegram](https://t.me/tilo_light) | [E-Mail](mailto:sales@helius.xyz) | [Contact](https://www.helius.dev/contact)
</Callout>
