Lição: 020: Processamento de Transações no Solana
Nesta aula, vamos explorar o modelo de processamento de transações do Solana. Compreender como as transações funcionam é crucial para construir aplicações eficazes na blockchain Solana. Vamos cobrir o ciclo de vida de uma transação, desde a criação até a confirmação, e explorar alguns exemplos práticos.
O que é uma Transação?
Uma transação no Solana é um pacote de instruções que é executado de maneira atômica. Ela pode incluir múltiplas instruções, que podem interagir com vários programas e contas. Cada transação é assinada pelo remetente para prevenir fraudes e garantir a autenticidade.
Componentes Principais de uma Transação
-
Contas: Estes são os locais de armazenamento de dados na blockchain Solana. Cada conta possui uma chave pública e pode armazenar dados como saldo ou estado do programa.
-
Instruções: Estas são as operações que serão executadas em uma ou mais contas. Cada instrução faz referência a um programa (contrato inteligente) para realizar tarefas específicas.
-
Assinaturas: As transações devem ser assinadas pelas contas envolvidas na transação. Isso garante que apenas contas autorizadas possam fazer alterações.
Criando uma Transação
Para criar e enviar uma transação no Solana, normalmente usamos a biblioteca @solana/web3.js
. Abaixo está um exemplo simples de envio de SOL (o token nativo do Solana) de uma conta para outra.
Pré-requisitos
Certifique-se de ter os seguintes itens instalados:
- Node.js
- Yarn ou npm
- Biblioteca
@solana/web3.js
Para instalar a biblioteca, execute:
npm install @solana/web3.js
Código de Exemplo
const {
Connection,
PublicKey,
clusterApiUrl,
Keypair,
LAMPORTS_PER_SOL,
Transaction,
SystemProgram,
sendAndConfirmTransaction,
} = require('@solana/web3.js');
(async () => {
// Conectar-se ao cluster
const connection = new Connection(clusterApiUrl('devnet'), 'confirmed');
// Gerar um novo par de chaves para a conta do remetente
const senderKeypair = Keypair.generate();
console.log(`Chave Pública do Remetente: ${senderKeypair.publicKey.toString()}`);
// Airdrop de alguns SOL para a conta do remetente para testes
const airdropSignature = await connection.requestAirdrop(
senderKeypair.publicKey,
2 * LAMPORTS_PER_SOL
);
await connection.confirmTransaction(airdropSignature);
// Conta de destino
const destination = Keypair.generate();
console.log(`Chave Pública de Destino: ${destination.publicKey.toString()}`);
// Criar uma transação para transferir SOL
const transaction = new Transaction().add(
SystemProgram.transfer({
fromPubkey: senderKeypair.publicKey,
toPubkey: destination.publicKey,
lamports: 1 * LAMPORTS_PER_SOL,
})
);
// Assinar e enviar a transação
const signature = await sendAndConfirmTransaction(connection, transaction, [senderKeypair]);
console.log(`Transação bem-sucedida com a assinatura: ${signature}`);
})();
Explicação do Código
-
Conexão: Nos conectamos ao devnet do Solana para testes.
-
Par de Chaves: Geramos um novo par de chaves para a conta do remetente para fins de demonstração. Em uma aplicação real, você usaria contas existentes.
-
Airdrop: Realizamos um airdrop de alguns SOL para a conta do remetente para financiar a transação. Isso só está disponível no devnet.
-
Criação da Transação: Criamos uma nova transação que transfere 1 SOL da conta do remetente para uma conta de destino gerada aleatoriamente.
-
Assinatura e Envio da Transação: Usamos
sendAndConfirmTransaction
para assinar e enviar a transação. Se for bem-sucedido, retorna uma assinatura de transação.
Confirmação de Transações
Após enviar uma transação, você deve aguardar sua confirmação. A rede do Solana processa transações de forma paralela e altamente eficiente, confirmando-as geralmente em segundos.
A função sendAndConfirmTransaction
já cuida da confirmação para você, verificando o cluster para a conclusão da transação.
Monitorando o Status
Se você quiser monitorar manualmente o status de uma transação, pode usar o seguinte trecho de código:
const { getTransaction } = require('@solana/web3.js');
async function monitorTransaction(connection, signature) {
const transactionInfo = await getTransaction(connection, signature);
if (transactionInfo) {
console.log('Status da Transação:', transactionInfo.confirmations ? 'Confirmada' : 'Não Confirmada');
} else {
console.log('Transação não encontrada');
}
}
// Uso
monitorTransaction(connection, signature);
Conclusão
Nesta aula, aprendemos sobre o modelo de processamento de transações no Solana, incluindo como criar, enviar e monitorar transações. Esse conhecimento fundamental é essencial para trabalhar com aplicações Solana.
Em futuras aulas, exploraremos cenários de transação mais complexos, incluindo a criação e a interação com programas personalizados. Boa codificação!