Lição: 017: Escrevendo Seu Primeiro Programa Solana em Rust
Nesta aula, vamos percorrer os passos para criar seu primeiro programa Solana usando Rust. Ao final deste tutorial, você terá um programa simples de contador que permite incrementar um contador armazenado na blockchain Solana.
Pré-requisitos
Antes de começarmos, certifique-se de ter o seguinte instalado em sua máquina:
- Rust e Cargo: Siga o guia de instalação oficial do Rust.
- Solana CLI: Você pode instalá-lo seguindo as instruções do guia de instalação do Solana CLI.
-
Anchor CLI (opcional, mas recomendado): Não abordaremos isso em detalhes, mas a instalação do Anchor pode simplificar o desenvolvimento em Solana. Você pode instalá-lo usando:
cargo install --git https://github.com/project-serum/anchor anchor-cli --locked
Criando um Novo Programa Solana
Passo 1: Configure Seu Projeto
Primeiro, crie um novo diretório para seu projeto e navegue até ele:
mkdir meu_programa_solana
cd meu_programa_solana
Agora, criaremos um novo projeto de biblioteca Rust:
cargo new --lib contador
cd contador
Passo 2: Atualize o Cargo.toml
Abra o arquivo Cargo.toml
e adicione as seguintes dependências:
[dependencies]
solana-program = "1.10.32" # Use a versão mais recente
Isso informará ao Cargo para incluir a biblioteca Solana Program, que fornece a funcionalidade necessária para construir aplicações Solana.
Passo 3: Escreva a Lógica do Programa
Agora vamos escrever a lógica do programa. Abra o arquivo src/lib.rs
e atualize-o da seguinte forma:
use anchor_lang::prelude::*;
use solana_program::{pubkey::Pubkey, msg};
declare_id!("SeuProgramID"); // substitua pelo seu ID de programa real
#[program]
pub mod contador {
use super::*;
pub fn inicializar(ctx: Context<Inicializar>) -> ProgramResult {
let conta_contador = &mut ctx.accounts.conta_contador;
conta_contador.contagem = 0;
msg!("Contador inicializado em 0.");
Ok(())
}
pub fn incrementar(ctx: Context<Incrementar>) -> ProgramResult {
let conta_contador = &mut ctx.accounts.conta_contador;
conta_contador.contagem += 1;
msg!("Contador incrementado para {}.", conta_contador.contagem);
Ok(())
}
}
#[account]
pub struct ContaContador {
pub contagem: u64,
}
#[derive(Accounts)]
pub struct Inicializar<'info> {
#[account(init, payer = usuario, space = 8 + std::mem::size_of::<ContaContador>())]
pub conta_contador: Account<'info, ContaContador>,
#[account(mut)]
pub usuario: Signer<'info>,
pub system_program: Program<'info, System>,
}
#[derive(Accounts)]
pub struct Incrementar<'info> {
#[account(mut)]
pub conta_contador: Account<'info, ContaContador>,
}
Passo 4: Compilar o Programa
Agora que definimos o programa, é hora de compilá-lo:
cargo build-bpf
Este comando compila seu programa para o formato Berkeley Packet Filter (BPF), que pode ser executado na Solana.
Passo 5: Implantar o Programa
Para implantar seu programa, use o Solana CLI. Primeiro, certifique-se de que você tem um validador local em execução (se estiver testando localmente). Você pode iniciar um validador local com:
solana-test-validator
Em outro terminal, implante o programa no cluster local:
solana program deploy target/deploy/contador.so
Certifique-se de substituir "contador.so" pelo caminho correto, se necessário. Anote o ID do Programa exibido após a implantação bem-sucedida; você o usará para interagir com seu programa.
Passo 6: Interagindo com o Programa
Para interagir com seu programa, você pode usar os comandos do Solana CLI. Por exemplo, para inicializar o contador:
-
Crie um novo par de chaves (se você não tiver um):
solana-keygen new --outfile meu-pares-de-chaves.json
-
Inicialize o contador:
solana program invoke SeuProgramID MeuNomeDeConta -- --inicializar
-
Para incrementar o contador:
solana program invoke SeuProgramID MeuNomeDeConta -- --incrementar
Verificação
Você pode verificar o valor do contador armazenado na blockchain usando:
solana account MeuNomeDeConta
Isso mostrará os dados associados à conta, incluindo o valor do contador.
Conclusão
Parabéns! Você escreveu e implantou seu primeiro programa Solana em Rust. Você aprendeu como criar um programa simples de contador que pode ser inicializado e incrementado. A partir daqui, você pode aprimorar seu programa adicionando recursos adicionais ou explorando funcionalidades mais complexas na Solana.
Continue experimentando com diferentes conceitos e boas codificações!