quarry_mint_wrapper/
account_validators.rs

1//! Validators for mint wrapper accounts.
2
3use crate::*;
4
5// --------------------------------
6// Instruction account structs
7// --------------------------------
8
9impl<'info> Validate<'info> for MinterUpdate<'info> {
10    fn validate(&self) -> Result<()> {
11        self.auth.validate()?;
12        assert_keys_eq!(self.minter.mint_wrapper, self.auth.mint_wrapper);
13        Ok(())
14    }
15}
16
17impl<'info> Validate<'info> for TransferAdmin<'info> {
18    fn validate(&self) -> Result<()> {
19        invariant!(self.admin.is_signer, Unauthorized);
20        assert_keys_eq!(self.admin, self.mint_wrapper.admin);
21        assert_keys_neq!(self.next_admin, self.mint_wrapper.admin);
22
23        Ok(())
24    }
25}
26
27impl<'info> Validate<'info> for AcceptAdmin<'info> {
28    fn validate(&self) -> Result<()> {
29        invariant!(self.pending_admin.is_signer, Unauthorized);
30        assert_keys_eq!(self.pending_admin, self.mint_wrapper.pending_admin);
31        Ok(())
32    }
33}
34
35impl<'info> Validate<'info> for PerformMint<'info> {
36    fn validate(&self) -> Result<()> {
37        invariant!(
38            self.mint_wrapper.to_account_info().is_writable,
39            Unauthorized
40        );
41        invariant!(self.minter.to_account_info().is_writable, Unauthorized);
42
43        invariant!(self.minter_authority.is_signer, Unauthorized);
44        invariant!(self.minter.allowance > 0, MinterAllowanceExceeded);
45        assert_keys_eq!(self.minter.mint_wrapper, self.mint_wrapper);
46        assert_keys_eq!(
47            self.minter_authority,
48            self.minter.minter_authority,
49            Unauthorized
50        );
51        assert_keys_eq!(self.token_mint, self.mint_wrapper.token_mint);
52        assert_keys_eq!(self.destination.mint, self.token_mint);
53        Ok(())
54    }
55}
56
57/// --------------------------------
58/// Account Structs
59/// --------------------------------
60
61impl<'info> Validate<'info> for OnlyAdmin<'info> {
62    fn validate(&self) -> Result<()> {
63        invariant!(self.admin.is_signer, Unauthorized);
64        assert_keys_eq!(self.admin, self.mint_wrapper.admin);
65        Ok(())
66    }
67}