Primeiro Programa e dApp
Este caminho guiado leva um novo colega de anchor init a um programa Anchor 0.32.1 implantado em devnet mais um client mínimo @solana/kit 7.0.0 que lê e escreve state on-chain. Espere um a dois dias em devnet Agave 4.1.1 com Solana CLI 3.0.10.
Receita
Card de receita de referência rápida - pronto para copiar e colar.
avm use 0.32.1
anchor init hello_counter
cd hello_counter
anchor build && anchor test
anchor deploy --provider.cluster devnet
# then scaffold Next.js client with @solana/kit@7.0.0Quando usar:
- Capstone da semana 1 de onboarding.
- Provar toolchain antes de entrar no monorepo compartilhado.
- Ensinar fluxo full-stack em workshops.
- Template para starter kits internos futuros.
Exemplo Funcional
1. Programa (Anchor)
use anchor_lang::prelude::*;
declare_id!("<GENERATED_PROGRAM_ID>");
#[program]
pub mod hello_counter {
use super::*;
pub fn initialize(ctx: Context<Initialize>) -> Result<()> {
ctx.accounts.counter.count = 0;
Ok(())
}
pub fn increment(ctx: Context<Increment>) -> Result<()> {
ctx.accounts.counter.count = ctx.accounts.counter.count.checked_add(1).unwrap();
Ok(())
}
}
#[account]
pub struct Counter {
pub count: u64,
}
#[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>,
}
#[derive(Accounts)]
pub struct Increment<'info> {
#[account(mut)]
pub counter: Account<'info, Counter>,
}anchor build
anchor test # uses LiteSVM or validator per Anchor.toml
anchor deploy --provider.cluster devnet
solana program show <PROGRAM_ID>2. Client (kit)
import { createSolanaRpc, address } from "@solana/kit";
const rpc = createSolanaRpc("https://api.devnet.solana.com");
const counter = address("<COUNTER_ACCOUNT_PUBKEY>");
const info = await rpc.getAccountInfo(counter, { encoding: "base64" }).send();
console.log("account data length:", info.value?.data.length);
// Wire Codama-generated increment ix in the next onboarding stepO que isso demonstra:
- Programa Anchor com instructions init + mutate.
- Conta isenta de rent com discriminator + payload
u64. - Deploy devnet com program id verificado pela CLI.
- Client lê existência de conta antes de wiring de codegen.
Aprofundamento
Marcos Guiados
| Passo | Output | Verificação |
|---|---|---|
| Init repo | Anchor.toml, programs/ | anchor build |
| Testes | Testes Rust TS ou LiteSVM | anchor test verde |
| IDL | target/idl/*.json | Commitado ou gerado em CI |
| Deploy | Program id devnet | solana program show |
| Read client | UI/console mostra conta | RPC getAccountInfo |
| Write client | Tx increment pousa | Sucesso de signature no explorer |
Esboço de Arquitetura
Browser (wallet) --sign--> kit tx --> devnet RPC --> Agave 4.1.1
^
|
Anchor program (.so)
Notas Rust / TypeScript
# Generate kit client from IDL (team Codama config)
npx codama run --config codama.json
# Map env vars
NEXT_PUBLIC_PROGRAM_ID=...
NEXT_PUBLIC_RPC_URL=https://api.devnet.solana.comErros Comuns
- Implantar antes de testes passarem - desperdiça SOL devnet e tempo. Correção: gate
anchor testno script. - Mismatch de program id -
declare_id!vs key implantada. Correção:anchor keys syncapósanchor deploy. - Drift de cluster do client - UI em RPC mainnet, programa em devnet. Correção: RPC URL dirigido por env.
- Wallet não assinando fee payer - erros de simulação. Correção: conecte wallet antes do pipeline send.
- Pular IDL no repo - codegen client obsoleto. Correção: commite IDL ou codegen CI determinístico.
Alternativas
| Alternativa | Use Quando | Não Use Quando |
|---|---|---|
Template create-solana-dapp | Scaffold UI mais rápido | Aprender internals Anchor |
| Client AnchorPy Python | Demo apenas backend | UX wallet browser |
| Apenas validator local | Modo avião | Precisa links share explorer |
| Fork Surfpool | Dependência de state mainnet | Primeiro hello-world |
FAQs
Next.js ou Vite?
Qualquer um - kit funciona em ambos; template do time escolhe default.
Wallet adapter?
Adicione após read raw kit funcionar - reduz variáveis do Dia 1.
Quanto SOL?
< 2 SOL devnet para deploy + rent de conta com airdrops.
Deploy upgradeable?
Upgradeable padrão é ok em devnet; documente holder de upgrade authority.
Testes TS?
Suite TS opcional anchor test ou Bankrun após testes Rust passarem.
Demo pública?
Compartilhe links explorer devnet - nunca keys mainnet no README.
Merge monorepo?
Porte programa para workspace compartilhado após revisão do capstone.
Escopo de segurança?
Não é seguro para produção - foque fluência de workflow, não economia.
CI?
Adicione GitHub Action rodando anchor build + testes LiteSVM em PR.
Critérios de conclusão?
Buddy assiste increment live da UI e verifica count on-chain.
Relacionado
- Checklist de Onboarding de Devs - onde isso se encaixa
- Checklist de Setup de Ambiente - pré-requisitos
- create-solana-dapp - template completo
- Noções Básicas @solana/kit - SDK client
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.