lib.rs 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. use anchor_spl::metadata::Metadata;
  2. use bolt_lang::*;
  3. use position::Position;
  4. use velocity::Velocity;
  5. declare_id!("6LHhFVwif6N9Po3jHtSmMVtPjF6zRfL3xMosSzcrQAS8");
  6. #[system]
  7. pub mod system_apply_velocity {
  8. pub fn execute(ctx: Context<Components>, _args: Vec<u8>) -> Result<Components> {
  9. ctx.accounts.velocity.x = 10;
  10. let mut clock = Clock::get()?;
  11. if let Ok(clock_account_info) = ctx.sysvar_clock() {
  12. clock = Clock::from_account_info(clock_account_info)?;
  13. ctx.accounts.position.z = 300;
  14. }
  15. ctx.accounts.velocity.last_applied = clock.unix_timestamp;
  16. ctx.accounts.position.x += 10 * (ctx.accounts.velocity.x + 2) + 3;
  17. msg!("last applied: {}", ctx.accounts.velocity.last_applied);
  18. msg!("Position: {}", ctx.accounts.position.x);
  19. msg!("Remaining accounts: {}", ctx.remaining_accounts.len());
  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!("6LHhFVwif6N9Po3jHtSmMVtPjF6zRfL3xMosSzcrQAS8"))]
  33. pub some_extra_account: AccountInfo,
  34. #[account(address = Metadata::id())]
  35. pub program_metadata: Program<Metadata>,
  36. }
  37. }