use crate::borsh::BorshSerialize;
use crate::prelude::*;
use switchboard_common::SbError;
pub struct OracleHeartbeat {
pub oracle: Pubkey,
pub oracle_authority: Pubkey,
pub token_account: Pubkey,
pub gc_oracle: Pubkey,
pub oracle_queue: Pubkey,
pub permission: Pubkey,
pub data_buffer: Pubkey,
}
#[derive(Clone, AnchorSerialize, AnchorDeserialize)]
pub struct OracleHeartbeatParams {
pub permission_bump: u8,
}
impl Discriminator for OracleHeartbeat {
const DISCRIMINATOR: [u8; 8] = [10, 175, 217, 130, 111, 35, 117, 54];
}
impl<'info> OracleHeartbeat {
pub fn get_instruction(
&self,
program_id: Pubkey,
params: OracleHeartbeatParams,
) -> std::result::Result<Instruction, SbError> {
let accounts = self.to_account_metas(None);
let mut data: Vec<u8> = OracleHeartbeat::discriminator().try_to_vec()?;
let mut param_vec: Vec<u8> = params.try_to_vec()?;
data.append(&mut param_vec);
let instruction = Instruction::new_with_bytes(program_id, &data, accounts);
Ok(instruction)
}
#[allow(unused_variables)]
fn to_account_metas(&self, is_signer: Option<bool>) -> Vec<AccountMeta> {
vec![
AccountMeta {
pubkey: self.oracle.key(),
is_signer: false,
is_writable: true,
},
AccountMeta {
pubkey: self.oracle_authority.key(),
is_signer: true,
is_writable: false,
},
AccountMeta {
pubkey: self.token_account.key(),
is_signer: false,
is_writable: false,
},
AccountMeta {
pubkey: self.gc_oracle.key(),
is_signer: false,
is_writable: true,
},
AccountMeta {
pubkey: self.oracle_queue.key(),
is_signer: false,
is_writable: true,
},
AccountMeta {
pubkey: self.permission.key(),
is_signer: false,
is_writable: false,
},
AccountMeta {
pubkey: self.data_buffer.key(),
is_signer: false,
is_writable: true,
},
]
}
}