PDAs e Seeds
Endereços derivados de programas para contas pertencentes ao programa sem chaves privadas. Os resultados aparecem na mesma seção: comentários // na mesma linha quando curtos, blocos // de várias linhas abaixo da amostra quando não.
Busque em todas as páginas da documentação
Endereços derivados de programas para contas pertencentes ao programa sem chaves privadas. Os resultados aparecem na mesma seção: comentários // na mesma linha quando curtos, blocos // de várias linhas abaixo da amostra quando não.
Busca um PDA off-curve válido + bump.
// let (pda, bump) = Pubkey::find_program_address(&[b"user", user.as_ref()], program_id);
// bump em 255..=0 até off-curveCria a partir de seeds incluindo bump - pode falhar se on-curve.
// Pubkey::create_program_address(&[b"user", user.as_ref(), &[bump]], program_id)?Armazena o bump para que invocações futuras não precisem pesquisar novamente.
// state.bump = bump;CPI com seeds de assinante PDA.
// invoke_signed(&ix, accounts, &[&[b"user", user.as_ref(), &[bump]]])?Prefira o bump de find_program_address para unicidade.
// sempre persista o bump de find_program_addressSeeds são slices de bytes; mantenha-as curtas e estáveis.
// seeds: chave pública do usuário, string "vault", chave pública da mintATA é um PDA do programa ATA.
// getAssociatedTokenAddress(mint, owner)PDAs não podem assinar exceto via invoke_signed.
// não existe chave privada para um PDAA ordem das seeds é significativa.
// [b"cfg", authority.as_ref()] != [authority.as_ref(), b"cfg"]Seeds são sempre com um program_id.
// mesmas seeds, programa diferente => PDA diferenteSystemProgram create_account + assign via CPI signed.
// create_account + assign para program_id com invoke_signedAnchor valida se as seeds correspondem.
// seeds = [b"user", user.key().as_ref()], bumpRedimensiona os dados da conta com realloc (cuidado com o rent).
// account.realloc(new_len, false)?Transfere lamports para fora e zera os dados cuidadosamente.
// drena lamports para o destino; marca como fechadocreate_program_address retorna erro se a chave estiver on curve.
// Erro se as seeds produzirem um ponto on-curveVersões do Stack: Esta página foi escrita para Agave 4.1.1, Solana CLI 3.0.10, Anchor 0.32.1, Rust 1.91.1 e @solana/kit 7.0.0.
Revisado por Chris St. John·Última atualização: 18 de jul. de 2026