Noções Básicas de Padrões de Programa
10 exemplos para você começar com Padrões de Programa - 7 básicos e 3 intermediários.
Pré-requisitos
- Noções básicas de PDAs, CPIs e serialização das seções anteriores de on-chain-rust.
Exemplos Básicos
1. Padrão de init de conta
Criar + escrever discriminador + estado.
// 1. create_account CPI 2. set disc 3. serialize State- Rejeite reinit se lamports > 0.
- O pagador assina o rent.
- Veja padrões de inicialização de conta.
2. Custódia de cofre PDA
O programa mantém fundos via autoridade PDA.
// seeds [b"vault", user] + invoke_signed transfers- Regras de negócio antes de assinar.
- Sementes por usuário.
- Variantes de token + SOL.
3. Verificação de autoridade
A pubkey armazenada deve assinar ou corresponder à PDA.
if !authority.is_signer { return Err(...); }- Separação de papéis admin vs usuário.
- Transferência de propriedade em duas etapas.
- Evite um único admin global.
4. Enum de máquina de estados
A conta armazena status; a instrução valida transições.
enum Status { Open, Filled, Cancelled }- Transição ilegal retorna erro.
- Estados terminais rejeitam novas operações.
- Emita evento na transição.
5. Coleta de taxas
Divide o valor para a tesouraria na ação.
let fee = amount.checked_mul(bps)?.checked_div(10000)?;- Matemática verificada.
- Tesouraria PDA ou ATA.
- Documente fee bps de forma imutável ou via config.
6. Expiração baseada em Clock
Leia o sysvar Clock para prazos.
let clock = Clock::get()?;
if clock.unix_timestamp > deadline { return Err(...); }- Slots vs tempo unix.
- O relógio do validador é confiável dentro de limites.
- Períodos de carência explícitos.
7. Fechar conta
Zera dados, transfere lamports, marca como fechada.
// zero data, transfer rent to recipient- Previne ataques de revival.
- Somente a autoridade pode fechar.
- Padrão de constraint
closedo Anchor.
Exemplos Intermediários
8. Liberação de escrow
Condições + CPI de token da PDA de escrow.
// verify + invoke_signed token transfer- Ordenação CEI.
- Consciente de reentrância.
- Veja a página de cofre e escrow.
Relacionado: Cofre e Escrow
9. Conta de config
Parâmetros globais com rotação de admin.
struct Config { admin: Pubkey, fee_bps: u16 }- Timelock opcional.
- Limites em fee_bps.
- Layout seguro para upgrade.
Relacionado: Controle de Acesso e Autoridades
10. Schema versionado
Instrução de migração para layout v2.
if version == 1 { migrate_v1_to_v2()? }- Migração lazy.
- Janela de leitura dupla.
- Veja design seguro para upgrade.
Relacionado: Design de Dados Seguro para Upgrade
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.