Noções Básicas de Pinocchio
10 exemplos para começar com Pinocchio - 7 básicos e 3 intermediários.
Pré-requisitos
- Conceitos de programa native de Noções Básicas de Programa Native.
- Rust 1.91.1 e Solana CLI 3.0.10.
Exemplos Básicos
1. Adicionar dependência pinocchio
Pinocchio substitui entry do solana-program para overhead mínimo.
[dependencies]
pinocchio = "0.8"- Verifique release notes do pinocchio para compatibilidade Agave.
- Árvore de dependências menor que Anchor completo.
- Ainda
#![no_std]on-chain.
2. Macro entrypoint
Pinocchio fornece wiring de entrypoint.
use pinocchio::{account_info::AccountInfo, entrypoint, pubkey::Pubkey, ProgramResult};
entrypoint!(process_instruction);- Modelo mental similar ao solana-program.
- Caminho de invocação com menor overhead.
- Um entry por crate.
3. Acesso a AccountInfo
Leia flags de signer e writable.
if !account.is_signer() { return Err(ProgramError::MissingRequiredSignature); }- API espelha checks native.
- Você ainda valida tudo manualmente.
- Sem constraints automáticas.
4. Sem std alloc
Padrões opcionais de allocator.
#![no_std]
extern crate alloc;- Mesmas regras de alloc que native.
- Minimize uso de heap.
- Prefira armazenamento em conta.
5. Tipo Pubkey
Tipos pubkey do Pinocchio alinham com bytes do SDK.
let key = account.key();- Chaves de 32 bytes.
- Compare para checks de owner.
- Derivação PDA off-chain ou via helpers de syscall.
6. Retornos de erro
Padrão ProgramResult inalterado.
return Err(ProgramError::InvalidArgument);- Erros customizados mapeiam para u32.
- Sem macro de erro Anchor.
- Documente códigos para clientes.
7. CPI com pinocchio
Helpers invoke com semântica similar.
pinocchio::program::invoke(&ix, &accounts)?;- invoke_signed para PDAs.
- Ordem de meta de conta ainda definida pelo callee.
- Veja página de construção de programa.
Exemplos Intermediários
8. Parsing de instrução
Dispatch manual ou Borsh.
let (tag, rest) = data.split_at(1);
match tag[0] { 0 => init(rest), 1 => swap(rest), _ => Err(...) }- Estilo opcode economiza bytes.
- Borsh ainda serve para payloads complexos.
- Mantenha parser rigoroso.
Relacionado: Construindo um Programa com Pinocchio
9. Estilo consciente de CU
Evite fmt e logs em hot paths.
// sem msg no loop- Ganhos do Pinocchio erodidos por logging.
- Profile com Surfpool.
- Compare com baseline Anchor.
Relacionado: Ganhos de CU e Tamanho de Binário
10. Testes
LiteSVM 0.6.x executa binários pinocchio.
// deploy .so em fixture de teste- Mesmos padrões de integração que native.
- Snapshot métricas de CU.
- Fuzz parser de instrução.
Relacionado: LiteSVM
Versões da stack: Esta página foi escrita para Agave 4.1.1, Solana CLI 3.0.10, Anchor 0.32.1, anchor-lang 0.32.1, Rust 1.91.1, @solana/kit 7.0.0, Surfpool 0.12.0 e LiteSVM 0.6.x.