lib.rs 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. use bolt_lang::*;
  2. use position::Position;
  3. use velocity::Velocity;
  4. declare_id!("6LHhFVwif6N9Po3jHtSmMVtPjF6zRfL3xMosSzcrQAS8");
  5. #[system]
  6. pub mod system_apply_velocity {
  7. pub fn execute(ctx: Context<Components>, _args: Vec<u8>) -> Result<Components> {
  8. ctx.accounts.velocity.x = 10;
  9. let mut clock = Clock::get()?;
  10. if let Ok(clock_account_info) = ctx.sysvar_clock() {
  11. clock = Clock::from_account_info(clock_account_info)?;
  12. ctx.accounts.position.z = 300;
  13. }
  14. ctx.accounts.velocity.last_applied = clock.unix_timestamp;
  15. ctx.accounts.position.x += 10 * (ctx.accounts.velocity.x + 2) + 3;
  16. msg!("last applied: {}", ctx.accounts.velocity.last_applied);
  17. msg!("Position: {}", ctx.accounts.position.x);
  18. msg!("Remaining accounts len: {}", ctx.remaining_accounts.len());
  19. msg!("Remaining accounts: {:?}", ctx.remaining_accounts);
  20. msg!("Authority: {}", ctx.accounts.authority.key);
  21. Ok(ctx.accounts)
  22. }
  23. #[system_input]
  24. pub struct Components {
  25. pub velocity: Velocity,
  26. pub position: Position,
  27. }
  28. #[extra_accounts]
  29. pub struct ExtraAccounts {
  30. #[account(address = bolt_lang::solana_program::sysvar::clock::id())]
  31. pub sysvar_clock: AccountInfo,
  32. #[account(address = pubkey!("tEsT3eV6RFCWs1BZ7AXTzasHqTtMnMLCB2tjQ42TDXD"))]
  33. pub some_extra_account: AccountInfo,
  34. #[account(address = mpl_token_metadata::ID)]
  35. pub program_metadata: Program<mpl_token_metadata::Metadata>,
  36. }
  37. }