Derivação de PDA no Lado do Cliente
Clientes devem derivar as mesmas PDAs que as restrições de seeds on-chain. Use bytes de seed, ordem e program ID idênticos.
Busque em todas as páginas da documentação
Clientes devem derivar as mesmas PDAs que as restrições de seeds on-chain. Use bytes de seed, ordem e program ID idênticos.
import { getAddressEncoder, getProgramDerivedAddress } from "@solana/kit";
const addressEncoder = getAddressEncoder();
const [pda] = await getProgramDerivedAddress({
programAddress: programId,
seeds: ["escrow", addressEncoder.encode(maker), u64ToLeBytes(escrowId)],
});Quando usar isso: Construindo transações que passam contas PDA para instruções Anchor.
import { address, getAddressEncoder, getProgramDerivedAddress } from "@solana/kit";
const programId = address("Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS");
// u64 -> 8 bytes little-endian, explicitamente. Não confie na ordem de bytes nativa
// do host via BigUint64Array#buffer.
function u64ToLeBytes(value: bigint): Uint8Array {
const bytes = new Uint8Array(8);
new DataView(bytes.buffer).setBigUint64(0, value, true);
return bytes;
}
const [escrowPda] = await getProgramDerivedAddress({
programAddress: programId,
// getAddressEncoder converte um Address base58 em seus 32 bytes brutos.
// getBytesEncoder NÃO faria isso - ele apenas passa os bytes.
seeds: [
new TextEncoder().encode("escrow"),
getAddressEncoder().encode(makerAddress),
u64ToLeBytes(BigInt(escrowId)),
],
});
// Passe escrowPda no mapa de contas correspondendo ao nome "escrow" no IDLO que isso demonstra:
b"escrow"to_le_bytes do RustUse helpers do kit para derivação de PDA e codificação de endereço. Compartilhe construtores de seed entre o programa (constantes Rust) e o cliente (módulo TS) via codegen ou constantes documentadas.
Afirme que a PDA do cliente corresponde aos fixtures de teste do Anchor para cada variante de seed.
to_le_bytes.| Alternativa | Use quando | Não use quando |
|---|---|---|
Helpers .pda do cliente TS Anchor | @coral-xyz/anchor legado | Greenfield @solana/kit |
| PDAs geradas por Codama | A partir de metadados de seeds do IDL | Matemática de seed manual |
0.32.1 em toda esta seção.
Não. Use restrições de seeds e assinatura em CPI.
No campo da sua struct de conta, definido na inicialização.
Use @solana/kit 7.0.0 com bytes de seed correspondentes.
O endereço declare_id do seu programa Anchor.
Não no array de seeds; o bump é um parâmetro separado para find_program_address.
Compare as chaves logadas; verifique seeds e program id no lado do cliente.
Sim quando detêm dados; financie com o pagador na inicialização.
Sim com as mesmas signer seeds para cada CPI.
Veja os links em Relacionados para tópicos mais aprofundados sobre PDAs de cliente.
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.
Revisado por Chris St. John·Última atualização: 16 de jul. de 2026