SwiftHTML & CSSSolidityDesenvolvimento de JogosSolana/Rust
14.11.2024

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

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

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

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

  1. Conexão: Nos conectamos ao devnet do Solana para testes.

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

  3. Airdrop: Realizamos um airdrop de alguns SOL para a conta do remetente para financiar a transação. Isso só está disponível no devnet.

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

  5. 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!

Did you like this article? Rate it from 1 to 5:

Thank you for voting!