lib.rs 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637
  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. Ok(ctx.accounts)
  17. }
  18. #[system_input]
  19. pub struct Components {
  20. pub velocity: Velocity,
  21. pub position: Position,
  22. }
  23. #[extra_accounts]
  24. pub struct ExtraAccounts {
  25. #[account(address = bolt_lang::solana_program::sysvar::clock::id())]
  26. pub sysvar_clock: AccountInfo,
  27. #[account(address = pubkey!("tEsT3eV6RFCWs1BZ7AXTzasHqTtMnMLCB2tjQ42TDXD"))]
  28. pub some_extra_account: AccountInfo,
  29. #[account(address = mpl_token_metadata::ID)]
  30. pub program_metadata: Program<mpl_token_metadata::Metadata>,
  31. }
  32. }