---
title: "O que é o modelo de contas do Solana?"
description: "Aprenda sobre o modelo de contas do Solana, os diferentes tipos de conta e como funcionam juntos"
---

# O que é o modelo de contas do Solana?

Tudo no Solana pode ser considerado uma conta, e as contas são a forma como o protocolo "organiza" os dados na blockchain. Este artigo fornecerá uma visão geral abrangente do Solana Account Model, incluindo tipos e categorias, componentes de conta e a noção de 'rent'.

## **O que é uma conta Solana e como ela funciona?**

**As contas Solana podem ser vistas como caixas de armazenamento, capazes de conter qualquer tipo de dado: desde tokens como SOL até variáveis de estado de um programa \(por exemplo, inteiros, strings, chaves públicas\), e até mesmo programas inteiros.** Toda conta tem um proprietário especificado, e um único proprietário pode possuir várias contas diferentes.

O Account Model é frequentemente comparado a um sistema de arquivos de computador:

<EmbeddedTable
  table={{
    columns: [
      { key: "1", width: 200, title: "Computer File", dataType: "object" },
      { key: "2", width: 200, title: "Solana Account", dataType: "object" },
    ],
    data: [
      {
        "1": { title: "<p>Name</p>", tooltip: "", icon: "" },
        "2": { title: "<p>lamports</p>", tooltip: "", icon: "" },
        id: 0,
      },
      {
        "1": { title: "<p>Address</p>", tooltip: "", icon: "" },
        "2": { title: "<p>owner</p>", tooltip: "", icon: "" },
        id: 1,
      },
      {
        "1": { title: "<p>Email</p>", tooltip: "", icon: "" },
        "2": { title: "<p>rent_epoch</p>", tooltip: "", icon: "" },
        id: 2,
      },
      {
        "1": { title: "<p>Experience</p>", tooltip: "", icon: "" },
        "2": { title: "<p>executable</p>", tooltip: "", icon: "" },
        id: 3,
      },
      {
        "1": { title: "<p>GeorgeBrownCV.docx</p>", tooltip: "", icon: "" },
        "2": { title: "<p>0cnjSElkwFlkffjckDSJRU432RIANCLk</p>", tooltip: "", icon: "" },
        id: 4,
      },
    ],
  }}
/>

## **Quais são os tipos de conta Solana?**

Os tipos de conta Solana se dividem em dois tipos principais: executáveis e não executáveis. Isso ocorre porque os programas Solana não armazenam estado como os smart contracts do Ethereum, então é necessário separar os dois tipos de ação.

### **O que são programas executáveis?**

Programas executáveis são compostos de código imutável que possui e cria outras contas que armazenam o estado. Esse código é escrito em uma linguagem como **Rust** e depois compilado para eBPF, que é uma forma de bytecode.

O exemplo mais comum de programa executável é o System Program principal do Solana, responsável pela criação das contas \(carteiras\) que as pessoas usam para acessar seus tokens e NFTs.

### **O que são programas não executáveis?**

Programas não executáveis são contas de "armazenamento" que contêm todos os outros tipos de dados, como variáveis de programa, saldos de tokens, NFTs, moedas fungíveis, etc. Por meio das contas não executáveis, o protocolo reflete as mudanças de estado que ocorreram após cada transação.

### **Smart contracts do Ethereum vs. programas Solana**

Um smart contract vem com um compartimento especial pré-construído chamado "[storage](https://www.alchemy.com/docs/smart-contract-storage-layout)", onde suas variáveis de estado são armazenadas. O smart contract então usa seu código executável para modificar essas variáveis de estado. Um contrato Ethereum pode ser visto como um local unificado onde código executável e não executável coexistem.

Vamos usar o token USDC como exemplo. Seu contrato contém um mapeamento chamado "balances" que mapeia o endereço de um usuário para sua própria quantidade de USDC. Ao enviar ou receber tokens USDC, o contrato reflete as mudanças por conta própria graças ao seu código executável.

O Solana trata isso de forma diferente. Existe um programa de token USDC que cria uma nova conta para cada detentor de token individual. Essas contas armazenam a quantidade de USDC disponível do detentor. Quando um usuário propaga uma transação, a conta do Token USDC procura as contas de token associadas dos usuários que desejam realizar a troca e então reflete a mudança nelas.

<ImageBlock
  src="https://media.alchemy.com/1703697343-solana-associated-token-account-structure.png"
  alt="Diagrama do programa de tokens da Solana criando contas de token associadas que armazenam o saldo de USDC de cada usuário"
  width={1600}
  height={901}
  caption="Estrutura de Conta de Token Associada da Solana"
/>

## **Quais são as categorias de conta Solana?**

Contas executáveis e não executáveis podem ser divididas em várias categorias adicionais, como native programs, [program accounts e data accounts](https://www.alchemy.com/overviews/solana-data-vs-program-accounts).

### **O que são native programs executáveis?**

**Native programs executáveis são "nativos" do [ecossistema Solana](https://www.alchemy.com/dapps/ecosystem/solana) e são responsáveis por tarefas como manter e executar os validator nodes. O exemplo mais conhecido desse tipo é o System Program**, responsável pela criação de novas system accounts \(o que comumente conhecemos como "carteiras"\), transferência de SOL, etc. Outros exemplos de Native Programs são o **Stake Program**, responsável pelo mecanismo de staking, e o BPF Loader, que é semelhante à EVM do Ethereum.

### **O que são program accounts executáveis?**

Program accounts executáveis são programas Solana pré-construídos que criam e armazenam outros programas. Um bom exemplo disso é a [Solana Program Library](https://www.alchemy.com/overviews/solana-program-library) \(SPL\) — uma coleção de programas que suportam diversas atividades on-chain, incluindo criação, troca e empréstimo de tokens, geração de stake pools e manutenção de um serviço de nomes on-chain. Um representante proeminente da SPL é o **Token Program**, que cria e gerencia tokens.

O token USDC do Solana é apenas uma Token account, gerenciada pelo Token Program. No entanto, a Token account não armazena os saldos de tokens dos usuários. Isso é tratado por um membro do terceiro tipo de conta: **data accounts.**

### **O que são data accounts não executáveis?**

Enquanto os Native Programs e as Program accounts são considerados executáveis, as data accounts são o oposto: são um registro que reflete as mudanças de estado de programas específicos e do protocolo Solana como um todo.

As data accounts podem ser divididas em:

1. **Token accounts** - contas criadas pelo Token Program
1. **Associated Token Accounts \(ATA\)** - contas que armazenam os saldos de tokens de cada usuário individual
1. **System Owned Accounts** - armazenam dados e permitem a assinatura de transações

As Token accounts representam cada moeda fungível individual \(USDC, USDT, etc.\), e contêm informações básicas sobre o token, como supply, número de decimais, nome, etc. Para cada Token account exclusiva, é gerada uma [associated token account \(ATA\)](https://www.alchemy.com/overviews/associated-token-account) diferente. Por exemplo, se você possui tanto USDC quanto USDT, você tem acesso a duas ATAs que foram criadas pelas Token accounts do USDC e do USDT, respectivamente.

<ImageBlock
  src="https://media.alchemy.com/1703697445-solana-account-types-and-categories.png"
  alt="Diagrama das categorias de conta da Solana: programas nativos, contas de programa e contas de dados"
  width={1600}
  height={901}
  caption="Tipos e categorias de conta da Solana"
/>

## **Quais são os elementos de conta Solana?**

**Cada elemento de conta é um conjunto de metadados, para que o protocolo possa facilmente entender o tipo da conta e informações adicionais.** Os metadados consistem em:

- **lamports** - o saldo de SOL da conta, denominado em lamports, onde 1 lamport equivale a um bilionésimo de um token SOL
- **owner** - este é o endereço do programa que possui a conta
- **executable** - uma variável booleana que indica se a conta contém código executável
- **data** - o array bruto de bytes de dados armazenado na conta, sejam eles variáveis de armazenamento ou código executável
- **rent_epoch** - indica o próximo epoch em que a conta deverá pagar rent

A diferença entre um **owner** e um **holder** é que o owner é o programa que controla a conta, e um holder é o usuário que possui a chave privada da conta. Por exemplo, a System Owned Account é possuída pelo Native System Program do Solana.

### **O que é o rent de conta Solana?**

Toda conta [**paga uma taxa de rent**](https://www.alchemy.com/overviews/how-to-calculate-rent-for-solana-programs) para usar memória na blockchain, o que é uma medida preventiva para impedir que atacantes sobrecarreguem a rede usando toda a sua memória.

Para que uma blockchain satisfaça todos os seus usuários, ela precisa incluir algum tipo de incentivo econômico. Isso se aplica especialmente aos validators, que fornecem seu hardware e poder computacional para verificar todas as transações. Os validators precisam manter uma cópia funcional de todas as mudanças de estado e recebem rent como recompensa.

Uma conta que mantém um saldo mínimo equivalente a 2 anos de taxas de rent é isenta. Caso contrário, ela é cobrada quando referenciada por uma transação ou a cada epoch, o que atualmente equivale a dois dias. Se uma conta não contiver a quantidade mínima de SOL para ser isenta de rent, seus dados são excluídos da chain.

## **Como criar uma conta Solana**

Criar uma System Account no Solana é o que as [**carteiras Solana**](https://www.alchemy.com/overviews/solana-wallets) fazem em segundo plano toda vez que um usuário cria uma nova "carteira". Uma carteira cria uma nova conta gerando um par de chaves de 64 bytes que reside em uma curva elíptica ED25519. Os primeiros 32 bytes são a chave privada, usada quando o usuário deseja criar uma transação e interagir com outra conta ou programa. O segundo conjunto de 32 bytes é a chave pública da carteira.

## **Comece a construir no Solana**

O Account Model é o sistema que o protocolo Solana usa para organizar dados. As contas podem ser vistas como caixas de armazenamento, capazes de conter tudo - desde dados brutos, código e variáveis de estado, até saldos de tokens, NFTs, etc. As contas são de 2 tipos principais: executáveis e não executáveis.

Para começar a construir com a Alchemy, [abra uma conta de desenvolvedor Solana gratuita](https://dashboard.alchemy.com/signup/?a=solana-account-model) hoje mesmo!
