Dados de Instruction (de)Serialização
Instruction data é o contrato entre clients e seu programa. Enums Borsh são padrão; opcodes manuais funcionam para controle fino. Ambos exigem disciplina de versionamento estável.
Busque em todas as páginas da documentação
Instruction data é o contrato entre clients e seu programa. Enums Borsh são padrão; opcodes manuais funcionam para controle fino. Ambos exigem disciplina de versionamento estável.
#[derive(BorshSerialize, BorshDeserialize)]
pub enum MarketInstruction {
PlaceOrder { price: u64, qty: u64 },
}Quando usar:
#[derive(BorshSerialize, BorshDeserialize)]
pub enum MarketInstruction {
PlaceOrder { price: u64, qty: u64 },
CancelOrder { order_id: u64 },
}
pub fn parse(data: &[u8]) -> Result<MarketInstruction, ProgramError> {
MarketInstruction::deserialize(&mut &data[..]).map_err(|_| ProgramError::InvalidInstructionData)
}O que isso demonstra:
version: u8 antes do body para mudanças breaking.Publique um crate instructions compartilhado por programa e clients TS/Rust.
let data = ix.try_to_vec()?; // off-chain builder#[repr(C)] com cuidado.| Alternativa | Use Quando | Não Use Quando |
|---|---|---|
| Crate compartilhado + Codama | Clients orientados a IDL | Scripts rápidos |
Anchor #[program] | Serialização automática | Layouts customizados |
| Raw byte slices | Instruction de campo único | Enums complexos |
Limites do pacote de transação - mantenha ix pequeno.
Para <256 variantes sim.
Suportado - documente endianness.
32 bytes em Borsh.
Use Option<T> em Borsh.
Apenas se programa de instruction única.
Use para auditorias de upgrade.
Recomendado em CI.
Retorna erro de parse.
Encoding diferente se misturar - evite.
Apenas off-chain; on-chain é binário.
Verifique em fixtures hex.
Versões do 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.
Revisado por Chris St. John·Última atualização: 16 de jul. de 2026