Construindo um Programa com Pinocchio
Um programa Pinocchio combina entrypoint fino, validação rigorosa de contas, dispatch Borsh ou opcode, e helpers CPI - espelhando estrutura native com menos boilerplate.
Receita
entrypoint!(process_instruction);
fn process_instruction(id: &Pubkey, accounts: &[AccountInfo], data: &[u8]) -> ProgramResult {
match data.first() { Some(0) => init(id, accounts), _ => Err(ProgramError::InvalidInstructionData) }
}Quando usar isso:
- Programa greenfield sensível a performance.
- Reescrever uma instrução Anchor.
- Aprender padrões de framework leve.
Exemplo de Trabalho
pub fn init(program_id: &Pubkey, accounts: &[AccountInfo]) -> ProgramResult {
let [payer, state, system @ ..] = accounts else { return Err(ProgramError::NotEnoughAccountKeys) };
if !payer.is_signer() { return Err(ProgramError::MissingRequiredSignature); }
// CPI create via pinocchio invoke / system instructions
Ok(())
}O que isso demonstra:
- Destructuring de slice de contas fixo.
- Signer verificado primeiro.
- CPI System para create segue validação.
Deep Dive
Layout de Módulo
- entry.rs / lib.rs
- instructions/
- state.rs
- cpi.rs
IDL
Gere com Codama para clientes @solana/kit 7.0.0.
Notas Rust
// Centralize helpers de validação de conta.Armadilhas
- Pular validação - Pior que Anchor - sem guardrails.. Correção: Copie checklists native.
- IDL não publicado - Clientes quebram.. Correção: Pipeline Codama.
- Tipos mistos pinocchio/solana-program - Confusão FFI.. Correção: Escolha uma superfície SDK por crate.
- Feature creep - Re-adicionar macros estilo Anchor.. Correção: Mantenha disciplina.
- Sem testes - Regressões de CU passam despercebidas.. Correção: CI LiteSVM.
Alternativas
| Alternativa | Use Quando | Não Use Quando |
|---|---|---|
| Novo projeto Anchor | Velocidade | CU |
| Framework Steel | Mais açúcar | Ligeiramente mais pesado |
| Repos de template | Bootstrap | Manutenção |
FAQs
Pinocchio + anchor no mesmo repo?
Programas separados via CPI.
Alloc no entrypoint?
Configure conforme docs.
CPI Token?
Mesmos helpers spl.
Sign PDA?
Equivalente invoke_signed.
Comando build?
cargo build-sbf.
Verify?
solana-verify.
Deploy?
solana program deploy.
Upgrade?
Mesmo loader que native.
Erros?
Códigos u32 customizados.
Logs?
Syscall log mínimo.
Surfpool?
Teste de deploy local.
Agave 4.1.1?
Fixe toolchain.
Relacionado
- Noções Básicas de Pinocchio - Intro
- Noções Básicas de Programa Native - Conceitos paralelos
- Interop e Migração - Trocar stacks
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.