arrow_sunny/
account_validators.rs

1//! Validate accounts
2
3use anchor_lang::prelude::*;
4use vipers::{assert_keys_eq, program_err};
5
6use crate::*;
7
8impl<'info> StakeCommon<'info> {
9    /// Validates these accounts against an [ArrowMiner].
10    pub fn validate_miner(&self, miner: &ArrowMiner) -> Result<()> {
11        assert_keys_eq!(self.rewarder, miner.rewarder, "rewarder");
12        assert_keys_eq!(self.quarry, miner.quarry, "quarry");
13        assert_keys_eq!(self.miner, miner.miner, "miner");
14        assert_keys_eq!(self.miner_vault, miner.miner_vault, "miner_vault");
15        Ok(())
16    }
17}
18
19impl Arrow {
20    /// Gets the miner associated with the rewards mint.
21    pub fn miner_for_rewards(&self, rewards_mint: Pubkey) -> Result<&ArrowMiner> {
22        if rewards_mint == self.vendor_miner.rewards_mint {
23            Ok(&self.vendor_miner)
24        } else if rewards_mint == self.internal_miner.rewards_mint {
25            Ok(&self.internal_miner)
26        } else {
27            program_err!(InvalidRewardsMint)
28        }
29    }
30}