Lição: 045: O Runtime e o Modelo de Execução do Solana
Solana é uma plataforma de blockchain de alto desempenho projetada para suportar aplicativos descentralizados e criptomoedas. Um dos principais diferenciais do Solana é seu modelo de runtime e execução exclusivo, que permite alcançar alta capacidade de processamento e baixa latência. Nesta aula, exploraremos os fundamentos do runtime e do modelo de execução do Solana, juntamente com alguns exemplos práticos de código.
Entendendo o Runtime do Solana
O runtime do Solana é responsável pela execução de contratos inteligentes conhecidos como "programas". O runtime fornece um conjunto de APIs que os programas podem usar para interagir com a blockchain e modificar estados de contas.
Principais Características do Runtime do Solana
-
Execução em Thread Única: Ao contrário de outras blockchains que executam transações em paralelo ou em múltiplas threads, o Solana as executa de maneira sequencial, em uma única thread. Essa abordagem evita mecanismos de bloqueio complexos e simplifica a execução.
-
Modelo de Conta: No Solana, informações e estados são armazenados em contas. Cada conta é identificada por uma chave pública e pode conter dados necessários para os programas. Os programas leem e escrevem nessas contas.
-
Processamento de Transações: Quando uma transação é submetida, ela passa por uma série de etapas de validação e processamento de instruções antes de ser executada. Cada transação contém uma série de instruções que especificam quais ações realizar nas contas.
-
Transações Pipelined: A arquitetura do Solana permite o pipelining, onde múltiplas etapas do processamento de transações podem ocorrer simultaneamente, resultando em maior capacidade de processamento.
Escrevendo um Programa Simples no Solana
Para ilustrar como o runtime opera, vamos escrever um programa simples que permite aos usuários armazenar e recuperar um valor.
Configuração do Ambiente
Antes de mergulhar no código, verifique se você tem as ferramentas necessárias instaladas:
- Rust: A linguagem de programação usada para escrever programas do Solana.
- Solana CLI: A interface de linha de comando para interagir com a rede do Solana.
Certifique-se de instalar as dependências e configurar seu ambiente de desenvolvimento conforme as diretrizes oficiais.
Programa Olá Mundo
Aqui está um exemplo simples de um programa "Olá Mundo" que permite aos usuários definir e obter uma mensagem de saudação.
1. Crie um novo projeto:
cargo new hello_sol
cd hello_sol
2. Atualize o Cargo.toml
:
Adicione dependências do SDK do Solana atualizando seu arquivo Cargo.toml
:
[dependencies]
solana-program = "1.10.0"
3. Escreva o programa:
No arquivo src/lib.rs
, escreva o seguinte código:
use borsh::{BorshDeserialize, BorshSerialize};
use solana_program::{
account_info::AccountInfo,
entrypoint,
entrypoint::ProgramResult,
info,
msg,
pubkey::Pubkey,
rent::Rent,
system_instruction,
program_pack::Pack,
};
#[derive(BorshSerialize, BorshDeserialize, Debug)]
pub struct Greeting {
pub message: String,
}
entrypoint!(process_instruction);
fn process_instruction(
program_id: &Pubkey,
accounts: &[AccountInfo],
instruction_data: &[u8],
) -> ProgramResult {
let accounts_iter = &mut accounts.iter();
let account = next_account_info(accounts_iter)?;
if !account.is_writable {
msg!("A conta deve ser gravável");
return Err(ProgramError::InvalidAccountData);
}
let greeting: Greeting = Greeting::try_from_slice(instruction_data)?;
// Armazena a mensagem de saudação nos dados da conta
greeting.serialize(&mut &mut account.data.borrow_mut()[..])?;
msg!("Saudação armazenada: {:?}", greeting.message);
Ok(())
}
Explicação do Programa
-
Estrutura de Dados: A estrutura
Greeting
é definida para manter a mensagem que será armazenada na conta. -
Ponto de Entrada: A função
process_instruction
serve como ponto de entrada para o programa. Ela processa as instruções recebidas. -
Manipulação de Contas: O programa garante que a conta é gravável antes de prosseguir para serializar a mensagem de saudação em seus dados.
-
Serialização: O método
serialize
escreve a mensagem na conta, utilizando o formato de serialização Borsh.
Interagindo com o Programa
Para interagir com nosso programa, você precisará implantá-lo na blockchain do Solana e então escrever um cliente para enviar transações.
Implantando o Programa
- Compile o programa:
cargo build-bpf
- Implante-o no cluster Solana:
solana program deploy target/deploy/hello_sol.so
Copie o ID do programa da saída, pois você precisará dele para enviar transações.
Enviando Transações
Você pode usar o CLI do Solana para enviar uma transação com a mensagem de saudação.
solana program invoke <PROGRAM_ID> --data "<SUA_MENSAGEM>"
Conclusão
Nesta aula, exploramos o runtime e o modelo de execução do Solana, focando em como ele processa instruções e gerencia os estados das contas. Escrevemos um programa simples de saudação para demonstrar como interagir com o runtime do Solana. Compreender esses fundamentos é crucial enquanto você se aprofunda na construção de aplicativos mais complexos e ricos em recursos na blockchain do Solana.
Sinta-se à vontade para explorar mais e aprimorar seus programas adicionando mais funcionalidades, experimentando diferentes estruturas de conta, ou otimizando o desempenho com os recursos avançados do Solana. Boa codificação!