Pular para o conteúdo
0%

O que é uma associated token account na Solana?

Petar Todorov headshot

Escrito por Petar Todorov

Publicado em 26 de janeiro de 20236 min de leitura

O Solana Account Model organiza e armazena todos os dados on-chain, e as Associated Token Accounts (ATAs) são uma das peças-chave desse modelo. Este artigo vai explicar o que é uma ATA, como ela funciona, e como criar uma Associated Token Account para você.

O que é uma associated token account?

Uma Associated Token Account é criada através do Solana Associated Token Account Program, que armazena informações sobre um token específico, seu saldo e seu dono. É uma variante de um Program Derived Address.

Aqui está o que cada termo significa:

  • Associated Token Account - uma conta que está associada a um token (pense no Solana Token Program)
  • Program Derived Address - um endereço que foi "derivado" (criado) a partir de um Solana Program, no caso, o Associated Token Account Program

Como funcionam as associated token accounts e as transferências entre elas?

Transferências entre Associated Token Accounts ocorrem diretamente entre as contas, e indiretamente através de seus endereços de wallet.

Token accounts são o equivalente a um ERC-20 token na Ethereum, mas com uma diferença fundamental: contratos inteligentes na Ethereum são donos de seu estado e código, enquanto uma token account na Solana contém apenas seu código e "exporta" seu estado (ex.: saldo do token) para uma Associated Token Account, que é criada para cada dono desse token.

Vamos examinar rapidamente o USDC para revisar o que aprendemos até aqui:

  • USDC na Solana é uma token account
  • Uma token account é criada pelo System Program, mas inicializada como Token mint pelo SPL Token Program
  • Uma vez que o token USDC foi iniciado, os usuários podem começar a fazer transferências
  • Usuários com tokens USDC têm Associated Token Accounts criadas através do Associated Token Account Program (ATP)
  • A troca de USDC entre duas pessoas acontece entre as ATAs dos usuários
Diagrama de uma transferência de USDC entre Associated Token Accounts na Solana
Associated Token Account na Solana

Transferências de USDC ocorrem diretamente entre as ATAs dos usuários e indiretamente entre seus endereços de wallet em nós Solana. Essas transferências precisam ser entre usuários cujas ATAs foram criadas com a mesma seed de token mint.

O que é o associated token account program?

Fazendo parte da Solana Program Library, o Associated Token Account Program é o programa pai de toda ATA, que mapeia a wallet de um usuário para as ATAs sobre as quais ele tem autoridade. Além disso, o ATA Program garante que, se um usuário quiser enviar um token para outro usuário, o destinatário vai recebê-lo, mesmo que não tenha uma ATA para o token correspondente. Nesse caso, o programa vai criar automaticamente uma conta ATA enquanto o smart contract é executado em um nó RPC.

O código-fonte do Associated Token Account Program é escrito em Rust e pode ser conferido no GitHub.

Veja como uma ATA é criada por baixo dos panos em TypeScript:

Código-fonte para criar o Associated Account Program na Solana
Código-fonte para criar o Associated Account Program na Solana

Como funciona o associated token account program?

Aqui está o que está acontecendo no ATA program:

1. Obter os IDs das constantes

Primeiro, obtemos as constantes `TOKEN_PROGRAM_ID` e `SPL_ASSOCIATED_TOKEN_ACCOUNT_PROGRAM_ID`. Um program ID é um nome mais elegante para o endereço do programa.

2. Obter a função findAssociatedTokenAddress

Em seguida, seguimos com a função `findAssociatedTokenAddress`, que retorna publicKey, que será o endereço da ATA recém-criada.

3. Invocar o método findProgramAddress

No corpo da função, o método `findProgramAddress` é invocado e dois argumentos são passados a ele:

  • Um Array de Seeds
  • SPL_ASSOCIATED_TOKEN_ACCOUNT_PROGRAM_ID

Como a ATA é uma forma de Program Derived Address (PDA), a conta pode ser criada passando argumentos ao programa. A criação de uma PDA envolve passar seeds como argumentos e, nesse caso, elas são:

  1. wallet_address - o endereço da conta, que será a dona dos fundos na ATA (autoridade)
  2. token_program_id - o program ID do SPL Token Program
  3. token_mint_address - o endereço da Token account que será armazenada na ATA

O ID do Associated Token Account Program é SPL_ASSOCIATED_TOKEN_ACCOUNT_PROGRAM_ID.

Como criar uma associated token account

Criar uma Associated Token Account é tão simples quanto chamar create-token usando o spl-token-cli na Solana. Criar uma ATA também assume que o token com o qual ela vai ser "associada" já existe.

Criando uma associated token account na Solana
Criando uma associated token account na Solana

‍O código invoca o comando `create-account`, que aceita `<TOKEN_MINT_ADDRESS>` como argumento.

Para criar uma Associated Token Account, você precisa seguir estes quatro passos:

  1. Transferir SOL - o System Program inicializa a ATA e a torna isenta de rent
  2. Criar Espaço Livre - o System Program atribui espaço livre para a ATA.
  3. Transferir Propriedade - o System Program transfere a propriedade da conta para o SPL Associated Token Account Program
  4. Inicializar a Conta - o processo resume a inicialização da conta e define o endereço do token, o endereço da ATA recém-criada, e seu dono

Qual é a diferença entre owners e authorities?

Owner é o tipo de programa Solana que controla a ATA, enquanto authority é a conta (wallet) que envia uma transação para o programa owner, que então altera os dados na ATA em nome da authority.

Qual é o custo de uma associated token account?

Por padrão, Associated Token Accounts devem ser marcadas como rent-exempt no momento de sua criação, então o valor mínimo que uma conta deve manter deve ser de pelo menos 0.00203928 SOL. O System Program transfere esse SOL para a ATA, valor que é deduzido da conta que iniciou a transação.

Além dessa taxa inicial, qualquer interação futura não custará mais do que uma transação comum na Solana.

Como verificar uma associated token account

Você pode verificar uma Associated Token Account através de clientes como o Phantom, que derivam automaticamente todas as ATAs sobre as quais a wallet de um usuário tem autoridade. Além disso, como a blockchain é pública, você também pode acessar essa informação com a ajuda de um explorer como o Solscan.io.

Cole o endereço da wallet que você gostaria de verificar e suas ATAs serão visualizadas em Token Accounts:

Interface do Solscan.io para verificar as ATAs de uma carteira
Interface do Solscan.io para verificar as ATAs de uma carteira

É possível vincular uma associated token account a uma conta existente?

Vincular uma Associated Token Account a uma conta existente é feito por padrão nos bastidores. Devido à forma como uma ATA é criada, um programa ou um cliente consegue ver facilmente as seeds de qualquer conta. Elas podem ser vistas como 'vínculos' para:

  • a wallet que tem autoridade sobre a ATA.
  • o endereço da Token account (ou seja, o tipo de token que a ATA armazena).

Construa seu app Solana com a Alchemy

Aprender sobre a Associated Token Account é um dos primeiros passos para se tornar um desenvolvedor Solana completo. Você pode usar nossa Solana API, fácil de usar, para ter uma vantagem inicial na construção do seu primeiro dApp assim que dominar os nós Solana e escolher um provedor de RPC.

Perguntas frequentes

O que é uma associated token account (ATA) na Solana?

Uma Associated Token Account é criada através do Solana Associated Token Account Program e armazena informações sobre um token específico, seu saldo e seu dono. É uma variante de um Program Derived Address que mapeia a wallet de um usuário para tokens específicos.

Em que uma ATA difere de uma token account comum?

Token accounts na Solana contêm apenas código e "exportam" seu estado para Associated Token Accounts, que são criadas para cada dono desse token. ATAs são endereços derivados deterministicamente, vinculados tanto a uma wallet quanto a um token mint específico.

O que é o associated token account program?

O Associated Token Account Program faz parte da Solana Program Library e mapeia a wallet de um usuário para as ATAs sobre as quais ele tem autoridade. Ele cria automaticamente contas ATA quando usuários enviam tokens para destinatários que não têm uma ATA para aquele token.

Quanto custa criar uma associated token account?

ATAs devem ser rent-exempt no momento da criação, exigindo um saldo mínimo de 0.00203928 SOL. Esse valor é transferido da conta que inicia a transação e cobre os requisitos contínuos de rent.

Quais seeds são usadas para derivar um endereço de ATA?

Endereços de ATA são derivados usando três seeds: o endereço da wallet (authority), o token program ID, e o endereço do token mint. Elas são passadas ao Associated Token Account Program para criar o endereço determinístico.

Como eu crio uma associated token account?

Você pode criar uma ATA usando o spl-token-cli, chamando o comando `create-account` com o endereço do token mint como argumento. O processo envolve transferir SOL, criar espaço, transferir a propriedade, e inicializar a conta.

Como posso verificar minhas associated token accounts?

Você pode visualizar suas ATAs através de wallets como o Phantom, que derivam automaticamente todas as ATAs sobre as quais sua wallet tem autoridade, ou usar explorers de blockchain como o Solscan.io, pesquisando o endereço da sua wallet e visualizando a seção Token Accounts.

O que acontece quando eu envio tokens para alguém sem ATA?

O Associated Token Account Program cria automaticamente a ATA do destinatário durante a transferência, caso ela não exista, deduzindo o valor de SOL rent-exempt da conta do remetente para financiar a nova ATA.

Background gradient

Construa magia blockchain

A Alchemy combina os produtos e ferramentas de desenvolvimento Web3 mais poderosos com recursos, comunidade e suporte lendário.