Derivación de PDA en el lado del cliente
Los clientes deben derivar las mismas PDA que las restricciones seeds en la cadena. Utiliza bytes de semilla, orden e ID de programa idénticos.
Busca en todas las páginas de la documentación
Los clientes deben derivar las mismas PDA que las restricciones seeds en la cadena. Utiliza bytes de semilla, orden e ID de programa idénticos.
import { getAddressEncoder, getProgramDerivedAddress } from "@solana/kit";
const addressEncoder = getAddressEncoder();
const [pda] = await getProgramDerivedAddress({
programAddress: programId,
seeds: ["escrow", addressEncoder.encode(maker), u64ToLeBytes(escrowId)],
});Cuándo recurrir a esto: Al crear transacciones que pasan cuentas PDA a instrucciones de Anchor.
import { address, getAddressEncoder, getProgramDerivedAddress } from "@solana/kit";
const programId = address("Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS");
// u64 -> 8 bytes little-endian, explícitamente. No confíes en el orden de bytes nativo
// del host a través de 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 convierte una dirección base58 en sus 32 bytes crudos.
// getBytesEncoder NO haría esto; solo pasa bytes.
seeds: [
new TextEncoder().encode("escrow"),
getAddressEncoder().encode(makerAddress),
u64ToLeBytes(BigInt(escrowId)),
],
});
// Pasa escrowPda en el mapa de cuentas que coincide con el nombre de IDL "escrow"Lo que esto demuestra:
b"escrow"to_le_bytes de RustUtiliza los ayudantes de kit para la derivación de PDA y la codificación de direcciones. Comparte los constructores de semillas entre el programa (constantes de Rust) y el cliente (módulo TS) a través de la generación de código o constantes documentadas.
Asegura que la PDA del cliente coincida con los fixtures de prueba de Anchor para cada variante de semilla.
le en la cadena. Solución: Coincide con to_le_bytes.kit.| Alternativa | Usar cuándo | No usar cuándo |
|---|---|---|
Ayudantes .pda del cliente TS de Anchor | @coral-xyz/anchor heredado | @solana/kit Greenfield |
| PDAs generadas por Codama | A partir de metadatos de semillas de IDL | Matemáticas de semillas hechas a mano |
0.32.1 en toda esta sección.
No. Utiliza restricciones de semillas y firma CPI.
En el campo de la estructura de tu cuenta, establecido en la inicialización.
Utiliza @solana/kit 7.0.0 con bytes de semilla coincidentes.
La dirección declare_id de tu programa Anchor.
No en el array de semillas; el bump es un parámetro separado para find_program_address.
Compara las claves registradas; verifica las semillas y el ID del programa en el lado del cliente.
Sí, cuando contienen datos; financia con el pagador al inicializar.
Sí, con las mismas semillas de firmante para cada CPI.
Consulta los enlaces relacionados para obtener temas más profundos sobre PDA del cliente.
Versiones de la pila: Esta página se escribió 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 y LiteSVM 0.6.x.
Revisado por Chris St. John·Última actualización: 16 jul 2026