PDAs y Semillas
Direcciones derivadas de programas para cuentas propiedad del programa sin claves privadas. Los resultados aparecen en la misma sección de código: comentarios // en la misma línea cuando son cortos, bloques // multilínea debajo de la muestra cuando no lo son.
Busca una PDA fuera de la curva válida + bump.
// let (pda, bump) = Pubkey::find_program_address(&[b"user", user.as_ref()], program_id);
// bump en 255..=0 hasta que esté fuera de la curva
Crea a partir de semillas, incluido el bump; puede fallar si está en la curva.
// Pubkey::create_program_address(&[b"user", user.as_ref(), &[bump]], program_id)?
Almacena el bump para que las invocaciones futuras no necesiten volver a buscar.
CPI con semillas firmantes de PDA.
// invoke_signed(&ix, accounts, &[&[b"user", user.as_ref(), &[bump]]])?
⚠️ Importante: No copies y pegues código de Solana en tu aplicación sin realizar tu propia auditoría de calidad/seguridad. Los bloques de código son solo ejemplos genéricos para aprendizaje y experimentación en entornos de desarrollo/pruebas, y puede que no sean adecuados para tu aplicación. Este sitio está en fase BETA y en evaluación continua de calidad, por lo que puede contener errores de código. No se ofrece ninguna garantía: consulta los términos .
Prefiere el bump de find_program_address para la unicidad.
// siempre persiste el bump de find_program_address
Las semillas son slices de bytes; mantenlas cortas y estables.
// seeds: pubkey del usuario, str "vault", pubkey de la mint
ATA es una PDA del programa ATA.
// getAssociatedTokenAddress(mint, owner)
Las PDAs no pueden firmar excepto a través de invoke_signed.
// no existe clave privada para una PDA
El orden de las semillas es significativo.
// [b"cfg", authority.as_ref()] != [authority.as_ref(), b"cfg"]
Las semillas siempre van con un program_id.
// mismas semillas diferente programa => diferente PDA
SystemProgram create_account + assign a través de CPI firmada.
// create_account + assign al program_id con invoke_signed
⚠️ Importante: No copies y pegues código de Solana en tu aplicación sin realizar tu propia auditoría de calidad/seguridad. Los bloques de código son solo ejemplos genéricos para aprendizaje y experimentación en entornos de desarrollo/pruebas, y puede que no sean adecuados para tu aplicación. Este sitio está en fase BETA y en evaluación continua de calidad, por lo que puede contener errores de código. No se ofrece ninguna garantía: consulta los términos .
Anchor valida que las semillas coincidan.
// seeds = [b"user", user.key().as_ref()], bump
Redimensiona los datos de la cuenta con realloc (cuidado con el alquiler).
// account.realloc(new_len, false)?
Transfiere los lamports de salida y borra los datos con cuidado.
// drena lamports al destino; marca como cerrada
create_program_address falla si la clave está en la curva.
// Err si las semillas producen un punto en la curva
Versiones de Stack: Esta página fue escrita para Agave 4.1.1 , Solana CLI 3.0.10 , Anchor 0.32.1 , Rust 1.91.1 , y @solana/kit 7.0.0 .