redeemer/
account_validators.rs1use crate::*;
2
3use vipers::validate::Validate;
4use vipers::{assert_keys_eq, invariant};
5
6impl<'info> Validate<'info> for CreateRedeemer<'info> {
7 fn validate(&self) -> Result<()> {
8 self.tokens.validate()?;
9
10 assert_keys_eq!(self.tokens.redemption_vault.owner, self.redeemer);
11 assert_keys_eq!(
12 self.tokens.redemption_vault.mint,
13 self.tokens.redemption_mint
14 );
15 invariant!(self.tokens.redemption_vault.delegate.is_none());
16 invariant!(self.tokens.redemption_vault.close_authority.is_none());
17
18 Ok(())
19 }
20}
21
22impl<'info> Validate<'info> for RedeemTokens<'info> {
23 fn validate(&self) -> Result<()> {
24 self.tokens.validate()?;
25 self.tokens.validate_token_accounts(&self.redeemer)?;
26
27 assert_keys_eq!(
28 self.iou_source.mint,
29 self.redeemer.iou_mint,
30 "iou_source.mint"
31 );
32
33 require!(self.source_authority.is_signer, Unauthorized);
34 assert_keys_eq!(
35 self.source_authority,
36 self.redemption_destination.owner,
37 "redemption_destination.owner"
38 );
39
40 Ok(())
41 }
42}
43
44impl<'info> Validate<'info> for RedeemTokensFromMintProxy<'info> {
45 fn validate(&self) -> Result<()> {
46 self.redeem_ctx.validate()?;
47
48 assert_keys_eq!(
49 self.minter_info.minter,
50 self.redeem_ctx.redeemer,
51 "minter_info.minter"
52 );
53 assert_keys_eq!(
54 self.mint_proxy_state.token_mint,
55 self.redeem_ctx.redeemer.redemption_mint,
56 "redemption_mint"
57 );
58
59 assert_keys_eq!(
60 self.proxy_mint_authority,
61 self.mint_proxy_state.proxy_mint_authority,
62 "proxy_mint_authority"
63 );
64
65 Ok(())
66 }
67}
68
69impl<'info> Validate<'info> for ReadonlyTokenPair<'info> {
70 fn validate(&self) -> Result<()> {
71 require!(
72 self.iou_mint.decimals == self.redemption_mint.decimals,
73 DecimalsMismatch
74 );
75 assert_keys_eq!(self.redemption_vault.mint, self.redemption_mint);
76
77 Ok(())
78 }
79}
80
81impl<'info> Validate<'info> for MutTokenPair<'info> {
82 fn validate(&self) -> Result<()> {
83 assert_keys_eq!(self.redemption_vault.mint, self.redemption_mint);
84
85 Ok(())
86 }
87}