1use anchor_lang::prelude::*;
2
3declare_id!("CmP2djJgABZ4cRokm4ndxuq6LerqpNHLBsaUv2XKEJua");
4
5#[program]
6pub mod bolt_component {
7 use super::*;
8
9 pub fn initialize(_ctx: Context<Initialize>) -> Result<()> {
10 Ok(())
11 }
12
13 pub fn update(_ctx: Context<Update>, _data: Vec<u8>) -> Result<()> {
14 Ok(())
15 }
16
17 #[derive(Accounts)]
18 pub struct Update<'info> {
19 #[account(mut)]
20 pub bolt_component: UncheckedAccount<'info>,
22 #[account()]
23 pub authority: Signer<'info>,
25 #[account(address = anchor_lang::solana_program::sysvar::instructions::id())]
26 pub instruction_sysvar_account: AccountInfo<'info>,
28 #[account()]
29 pub session_token: Option<UncheckedAccount<'info>>,
30 }
31}
32
33#[derive(Accounts)]
34pub struct Initialize<'info> {
35 #[account(mut)]
36 pub payer: Signer<'info>,
37 #[account(mut)]
38 pub data: UncheckedAccount<'info>,
40 #[account()]
41 pub entity: AccountInfo<'info>,
43 #[account()]
44 pub authority: AccountInfo<'info>,
46 #[account(address = anchor_lang::solana_program::sysvar::instructions::id())]
47 pub instruction_sysvar_account: AccountInfo<'info>,
49 pub system_program: Program<'info, System>,
50}
51
52#[derive(InitSpace, AnchorSerialize, AnchorDeserialize, Default, Copy, Clone)]
53pub struct BoltMetadata {
54 pub authority: Pubkey,
55}
56
57#[cfg(feature = "cpi")]
58pub trait CpiContextBuilder<'info>: ToAccountMetas + ToAccountInfos<'info> + Sized {
59 fn build_cpi_context(
60 self,
61 program: AccountInfo<'info>,
62 ) -> CpiContext<'info, 'info, 'info, 'info, Self>;
63}
64
65#[cfg(feature = "cpi")]
66impl<'info> CpiContextBuilder<'info> for cpi::accounts::Update<'info> {
67 fn build_cpi_context(
68 mut self,
69 program: AccountInfo<'info>,
70 ) -> CpiContext<'info, 'info, 'info, 'info, Self> {
71 let cpi_program = program.to_account_info();
72 self.session_token = Some(self.session_token.unwrap_or(program.to_account_info()));
73 CpiContext::new(cpi_program, self)
74 }
75}