triad_protocol/instructions/
update_ticker_price.rs1use crate::{
2 constraints::is_authority_for_ticker,
3 events::TickerPriceUpdateRecord,
4 state::{ Ticker, UpdateTickerPriceArgs },
5};
6
7use anchor_lang::prelude::*;
8
9#[derive(Accounts)]
10#[instruction(args: UpdateTickerPriceArgs)]
11pub struct UpdateTickerPrice<'info> {
12 #[account(mut)]
13 pub signer: Signer<'info>,
14
15 #[account(mut, constraint = is_authority_for_ticker(&ticker, &signer)?)]
16 pub ticker: Account<'info, Ticker>,
17
18 pub system_program: Program<'info, System>,
19}
20
21pub fn update_ticker_price(
22 ctx: Context<UpdateTickerPrice>,
23 args: UpdateTickerPriceArgs
24) -> Result<()> {
25 let ticker = &mut ctx.accounts.ticker;
26
27 ticker.updated_ts = Clock::get()?.unix_timestamp;
28 ticker.price = args.price;
29
30 emit!(TickerPriceUpdateRecord {
31 price: ticker.price,
32 ticker: ticker.key(),
33 ts: ticker.updated_ts,
34 });
35
36 Ok(())
37}