triad_protocol/instructions/
update_ticker_price.rs

1use 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}