CPI Cross Program
Chame outros programas com CPI. 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
Chame outros programas com CPI. 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.
CPI sem signatário PDA.
// invoke(&ix, &[from.clone(), to.clone(), system_program.clone()])?CPI onde um PDA deve assinar.
// invoke_signed(&ix, accounts, signer_seeds)?Passe fatias de AccountInfo correspondendo à ordem das metadados da instrução.
// accounts: &[AccountInfo]CPI não pode escalar privilégios além do chamador.
// não pode marcar como gravável se o ix original não tinha permissão de gravaçãoO tempo de execução limita a profundidade da chamada CPI.
// mantenha os gráficos de CPI rasosset_return_data / get_return_data para resultados de CPI.
// sol_set_return_data(bytes)Transfira lamports através do programa do sistema.
// system_instruction::transfer(&from, &to, lamports)Transferência de token SPL via CPI.
// spl_token::instruction::transfer(...)AccountInfo é clonado de forma barata (referência a estado compartilhado).
// account_info.clone()Contas extras para alvos flexíveis de CPI.
// ctx.remaining_accountsVerifique o ID do programa chamado antes da CPI.
// require_keys_eq!(token_program.key(), spl_token::id())O chamado pode fazer CPI adicional até o limite de profundidade.
// projete para segurança contra reentradaErros de CPI sobem como ProgramError.
// map_err para seu enum de erroO PDA deve ser gravável nas metadados para mutação.
// AccountMeta::new(pda, false)As fatias de seeds devem viver durante a chamada invoke_signed.
// let seeds: &[&[u8]] = &[...]Versõ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