
Solana Dev 101 — Como transferir tokens da Solana com TypeScript
Índice
- 1. Configure o projeto
- 2. Importe as bibliotecas
- 3. Estabeleça uma conexão com a rede Solana
- 4. Defina os pares de chaves do pagador da taxa e do proprietário anterior
- 5. Especifique a chave pública do mint e o endereço da carteira do destinatário
- 6. Gere o endereço de token associado (ATA) do destinatário
- 7. Especifique as chaves públicas da conta de token de origem e da conta de destino
- 8. Crie uma nova transação e adicione a instrução de transferência
- 9. Envie a transação para a rede Solana
- Código completo
Na Solana, as contas de token são usadas para armazenar e gerenciar tokens, incluindo tokens não fungíveis (NFTs). Por isso, transferir tokens via código pode ser um pouco complicado para desenvolvedores iniciantes na Solana. Neste tutorial, aprenderemos a transferir NFTs de uma carteira para outra na blockchain da Solana. Para isso, criaremos uma nova Associated Token Account (ATA) para o destinatário e transferiremos o NFT para essa conta.
Simplifique o desenvolvimento de programas da Solana com o Kite.
Diferenças entre transferências de NFTs e SOL
Em uma transferência de token, é necessário criar uma nova Associated Token Account (ATA) para iniciar a transferência do proprietário anterior para o novo proprietário. Isso não ocorre por meio de uma transferência de carteira → carteira.
Isso é diferente de uma transferência comum envolvendo SOL, pois o programa do sistema processa a transferência, e não é necessário criar uma nova ATA para armazenar o SOL envolvido na transação.
Para uma breve representação visual do processo, consulte o seguinte:
Em resumo, em uma transferência de NFT/token, o ativo é enviado da ATA atual para uma ATA recém-criada que pertence ao destinatário, em vez de ser transferido diretamente para a carteira.
Pré-requisitos
Antes de continuar este tutorial, verifique se você atende aos seguintes pré-requisitos:
- Conhecimento básico de TypeScript.
- Node.js instalado em sua máquina.
- Gerenciador de pacotes npm ou yarn instalado.
Etapas de desenvolvimento
Agora, siga as etapas abaixo para criar o código:
1. Configure o projeto
- Crie um novo diretório chamado “Transfer” para o projeto.
- Abra um terminal e acesse a pasta do projeto.
- Inicialize um novo projeto Node.js usando o comando:
npm init -youyarn init -y. - Instale as dependências necessárias executando o comando:
npm install @solana/web3.js @solana/spl-token bs58- Crie um novo arquivo TypeScript, por exemplo, transferNFT.ts, e abra-o em um editor de código.
2. Importe as bibliotecas
Importe as bibliotecas necessárias e defina a função de transferência em um novo arquivo transferNFT.ts:
import { Keypair, Transaction, Connection, PublicKey } from "@solana/web3.js";
import { createTransferCheckedInstruction, getAssociatedTokenAddress } from "@solana/spl-token";
import * as bs58 from "bs58";
async function transfer() {
// Code for transferring NFTs goes here
}
transfer();No código acima, importamos os pacotes necessários e também criamos nossa função de transferência.
3. Estabeleça uma conexão com a rede Solana
const connection = new Connection("https://rpc.helius.xyz/?api-key=");No código acima, usamos nosso RPC da Helius para estabelecer uma conexão com a blockchain da Solana.
4. Defina os pares de chaves do pagador da taxa e do proprietário anterior
const feePayer = Keypair.fromSecretKey(bs58.decode("privateKey"));
const prevOwner = Keypair.fromSecretKey(bs58.decode("privateKey"));5. Especifique a chave pública do mint e o endereço da carteira do destinatário
A chave pública do mint será o endereço de token do NFT que você deseja transferir:
const mintPubkey = new PublicKey("4umMdShNxbdnoV2EZjUp6h5GYYneZFLH9otBEU2K3ZYP");
const receiveAddress = new PublicKey("2xSHLfiPs3aEhzbLnYbyzWYMEaYnwSwJwAnVh5CwHWwX");6. Gere o endereço de token associado (ATA) do destinatário
const ata = await getAssociatedTokenAddress(mintPubkey, receiveAddress);Neste código, definimos o proprietário da nova ATA como a chave pública de um endereço diferente. Ele não precisa ser o pagador da transação.
Defina receiveAddress como o endereço que deve receber o ativo transferido.
7. Especifique as chaves públicas da conta de token de origem e da conta de destino
const tokenAccount1Pubkey = new PublicKey("CE2uTSeVbBhy2Q8qVEnp8qAJYBQkVxMC4uGzchiAn6gG");
const tokenAccount2Pubkey = new PublicKey(ata);8. Crie uma nova transação e adicione a instrução de transferência
const tx = new Transaction();
tx.add(
createTransferCheckedInstruction(
tokenAccount1Pubkey,
mintPubkey,
tokenAccount2Pubkey,
prevOwner.publicKey,
1, // Amount you are transferring.
0 // Decimals, since this is an NFT you can leave 0.
)
);No código acima:
- Definimos as contas de token anterior e atual.
- Definimos a quantidade a ser transferida como 1 (pois o endereço do mint tem um fornecimento total de apenas 1).
- Definimos as casas decimais como 0, seguindo o padrão de token não fungível. Para um token fungível, você pode configurar corretamente as casas decimais para a transferência.
9. Envie a transação para a rede Solana
const txhash = await connection.sendTransaction(tx, [feePayer, prevOwner]);
console.log(`Transaction hash: ${txhash}`);Agora usamos o método sendTransaction para concluir a transação e indicar que o pagador da taxa e o proprietário anterior do ativo devem assiná-la.
Código completo
import { Keypair, Transaction, Connection, PublicKey } from "@solana/web3.js";
import { createTransferCheckedInstruction, getAssociatedTokenAddress } from "@solana/spl-token";
import * as bs58 from "bs58";
async function transfer() {
// connection to Solana.
const connection = new Connection("https://rpc.helius.xyz/?api-key=");
// Payer of new ATA.
const feePayer = Keypair.fromSecretKey(
bs58.decode("privateKey")
);
// Previous owner of Token or NFT
const prevOwner = Keypair.fromSecretKey(
bs58.decode("privateKey")
);
// Mint address of the NFT.
const mintPubkey = new PublicKey("4umMdShNxbdnoV2EZjUp6h5GYYneZFLH9otBEU2K3ZYP");
// Recipient of the NFT.
const receiveAdress = new PublicKey('2xSHLfiPs3aEhzbLnYbyzWYMEaYnwSwJwAnVh5CwHWwX')
// Original Token Account
const tokenAccount1Pubkey = new PublicKey("CE2uTSeVbBhy2Q8qVEnp8qAJYBQkVxMC4uGzchiAn6gG");
let ata = await getAssociatedTokenAddress(
mintPubkey, // mint
receiveAdress // owner
);
// Create transfer instruction to from the previous ATA owned by old wallet, to new ATA.
const tokenAccount2Pubkey = new PublicKey(ata);
let tx = new Transaction();
tx.add(
createTransferCheckedInstruction(
tokenAccount1Pubkey, // from
mintPubkey, // mint
tokenAccount2Pubkey, // to
prevOwner.publicKey, // from's owner
1, // amount
0 // decimals
)
);
// Send Transaction here.
console.log(`txhash: ${await connection.sendTransaction(tx, [feePayer, prevOwner])}`);
}
transfer()Lembre-se de substituir os valores de placeholder no código pelos valores reais, como a URL do RPC, as chaves secretas e as chaves públicas da transferência.
Conclusão
Parabéns! Você criou com sucesso o código para transferir NFTs na Solana, criando uma nova Associated Token Account (ATA) e transferindo o NFT para a conta do destinatário. Ao seguir este tutorial, você aprendeu a estabelecer uma conexão, gerar ATAs e enviar transações na blockchain da Solana. Agora você pode aplicar o que aprendeu aqui a qualquer exemplo de dApp que estiver criando.
Artigos relacionados
Assine a Helius
Acompanhe as novidades mais recentes do desenvolvimento Solana e receba atualizações quando publicarmos


