lib.rs 1.0 KB

1234567891011121314151617181920212223242526272829303132333435
  1. use anchor_lang::prelude::*;
  2. use zero_copy::cpi::accounts::UpdateBar;
  3. use zero_copy::program::ZeroCopy;
  4. use zero_copy::{self, Bar, Foo};
  5. declare_id!("ErjUjtqKE5AGWUsjseSJCVLtddM6rhaMbDqmhzraF9h6");
  6. #[program]
  7. pub mod zero_cpi {
  8. use super::*;
  9. pub fn check_cpi(ctx: Context<CheckCpi>, data: u64) -> Result<()> {
  10. let cpi_program = ctx.accounts.zero_copy_program.to_account_info();
  11. let cpi_accounts = UpdateBar {
  12. authority: ctx.accounts.authority.clone(),
  13. bar: ctx.accounts.bar.to_account_info(),
  14. foo: ctx.accounts.foo.to_account_info(),
  15. };
  16. let cpi_ctx = CpiContext::new(cpi_program, cpi_accounts);
  17. zero_copy::cpi::update_bar(cpi_ctx, data);
  18. Ok(())
  19. }
  20. }
  21. #[derive(Accounts)]
  22. pub struct CheckCpi<'info> {
  23. #[account(
  24. mut,
  25. has_one = authority,
  26. )]
  27. bar: AccountLoader<'info, Bar>,
  28. #[account(signer)]
  29. authority: AccountInfo<'info>,
  30. foo: AccountLoader<'info, Foo>,
  31. zero_copy_program: Program<'info, ZeroCopy>,
  32. }