1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
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,
            },
        ]
    }
}