Programas Solana
Crie programas Solana on-chain com Anchor - restrições de conta, instruções e invocação entre programas em Rust.
Busque em todas as páginas da documentação
Crie programas Solana on-chain com Anchor - restrições de conta, instruções e invocação entre programas em Rust.
use anchor_lang::prelude::*;
declare_id!("Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS");
#[program]
pub mod hello_anchor {
use super::*;
pub fn initialize(ctx: Context<Initialize>) -> Result<()> {
ctx.accounts.counter.count = 0;
Ok(())
}
}
#[derive(Accounts)]
pub struct Initialize<'info> {
#[account(init, payer = user, space = 8 + 8)]
pub counter: Account<'info, Counter>,
#[account(mut)]
pub user: Signer<'info>,
pub system_program: Program<'info, System>,
}
#[account]
pub struct Counter {
pub count: u64,
}Quando usar isso:
Instrução de incremento com restrições de signatário e de conta:
use anchor_lang::prelude::*;
declare_id!("Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS");
#[program]
pub mod counter {
use super::*;
pub fn increment(ctx: Context<Increment>) -> Result<()> {
ctx.accounts.counter.count = ctx.accounts.counter.count
.checked_add(1)
.ok_or(ProgramError::InvalidArgument)?;
Ok(())
}
}
#[derive(Accounts)]
pub struct Increment<'info> {
#[account(mut, has_one = authority)]
pub counter: Account<'info, Counter>,
pub authority: Signer<'info>,
}
#[account]
pub struct Counter {
pub authority: Pubkey,
pub count: u64,
}O que isso demonstra:
has_one vincula o signatário à chave pública da autoridade armazenada#[account(...)] do Anchor validam proprietários, sementes e aluguel.transfer do SPL Token com sementes de signatário invocadas.| Tipo | Uso |
|---|---|
Account<T> | Dados desserializados de propriedade do Anchor |
Signer | Deve assinar a transação |
UncheckedAccount | Apenas validação manual |
space = 8 + sizeof(T) mais discriminador.Signer e mut corretamente na struct Accounts.| Alternativa | Use Quando | Não Use Quando |
|---|---|---|
| Rust Nativo Solana (sem Anchor) | Tamanho mínimo do binário | Equipe quer IDL e macros de segurança |
| Ethereum Solidity | Liquidez e ferramentas EVM | Precisa de vazão da Solana |
| Pallet Substrate | Cadeia L1 personalizada | App em cluster Solana existente |
| Rust Off-chain + oracle | Computação pesada | Estado deve ser on-chain confiavelmente |
solana-test-validator mais anchor test executa migrações e testes de integração contra o cluster local.
Discriminador de conta do Anchor - não o esqueça no cálculo de space.
Implante com autoridade de atualização, então transfira a autoridade para multisig ou queime para imutabilidade quando auditado.
CPI para programa de token com sementes de signatário PDA para o padrão de autoridade de cofre.
anchor build emite IDL; use @coral-xyz/anchor ou anchor-client em testes de integração Rust.
Contas precisam de lamports mínimos para o tamanho; financie no init ou recupere no close.
Defina o enum #[error_code] para erros visíveis ao usuário em vez de falhas genéricas.
Airdrops da Devnet não são confiáveis; use validador local para CI, devnet para QA manual.
Leia Segurança e Auditoria antes de implantar na mainnet.
Chaves de implantação fora de laptops quentes - veja Carteiras e Gerenciamento de Chaves.
Versões da Stack: Esta página foi escrita para Rust 1.97.0 (edição 2024), Tokio 1.x, Axum 0.8, serde 1.0, sqlx 0.8, clap 4, e Polars 0.46+.
Revisado por Chris St. John·Última atualização: 19 de jul. de 2026