locked_voter/instructions/
revoke_program_lock_privilege.rs1use crate::*;
4
5#[derive(Accounts)]
7pub struct RevokeProgramLockPrivilege<'info> {
8 pub locker: Account<'info, Locker>,
10 #[account(mut, has_one = locker, close = payer)]
12 pub whitelist_entry: Account<'info, LockerWhitelistEntry>,
13
14 pub governor: Account<'info, Governor>,
16
17 pub smart_wallet: Signer<'info>,
19
20 #[account(mut)]
22 pub payer: Signer<'info>,
23}
24
25impl<'info> RevokeProgramLockPrivilege<'info> {
26 pub fn revoke_program_lock_privilege(&mut self) -> Result<()> {
28 emit!(RevokeLockPrivilegeEvent {
29 locker: self.whitelist_entry.locker,
30 program_id: self.whitelist_entry.program_id,
31 timestamp: Clock::get()?.unix_timestamp
32 });
33
34 Ok(())
35 }
36}
37
38impl<'info> Validate<'info> for RevokeProgramLockPrivilege<'info> {
39 fn validate(&self) -> Result<()> {
40 assert_keys_eq!(self.governor.smart_wallet, self.smart_wallet);
41 assert_keys_eq!(self.whitelist_entry.locker, self.locker);
42 Ok(())
43 }
44}
45
46#[event]
47pub struct RevokeLockPrivilegeEvent {
49 #[index]
51 pub locker: Pubkey,
52 pub program_id: Pubkey,
54 pub timestamp: i64,
56}