需求
自定义最小的质押量,限制外部的加入门槛
代码分析

sdk/program/src/stake/instruction.rs
#[error("delegation amount is less than the minimum")] InsufficientDelegation,
programs/stake/src/stake_state.rs
fn validate_delegated_amount( account: &BorrowedAccount, meta: &Meta, feature_set: &FeatureSet, ) -> Result<ValidatedDelegatedInfo, InstructionError> { let stake_amount = account .get_lamports() .saturating_sub(meta.rent_exempt_reserve); // 确保委托的质押金额有效。这将检查帐户是否满足委托质押的最低余额要求。如果不满足,则返回错误。 // 质押账户可能会以低于最低委托额的质押额进行初始化,因此请在委托前检查是否满足最低要求。 if stake_amount < crate::get_minimum_delegation(feature_set) { return Err(StakeError::InsufficientDelegation.into()); } Ok(ValidatedDelegatedInfo { stake_amount }) }
/// 可以委托的最低股权金额,以 lampors 为单位。 /// 注意:这也用于计算股权账户的最低余额,即租金豁免储备加上最低股权委托。 #[inline(always)] pub fn get_minimum_delegation(feature_set: &FeatureSet) -> u64 { if feature_set.is_active(&feature_set::stake_raise_minimum_delegation_to_1_sol::id()) { const MINIMUM_DELEGATION_SOL: u64 = 1; MINIMUM_DELEGATION_SOL * LAMPORTS_PER_SOL } else { #[allow(deprecated)] solana_sdk::stake::MINIMUM_STAKE_DELEGATION } }
总结
目前测试验证节点,直接硬编码,设置一个较大值来限制外部加入,修改测试代码如下
/// 可以委托的最低股权金额,以 lampors 为单位。 /// 注意:这也用于计算股权账户的最低余额,即租金豁免储备加上最低股权委托。 #[inline(always)] pub fn get_minimum_delegation(feature_set: &FeatureSet) -> u64 { const MINIMUM_DELEGATION_SOL: u64 = 1000000000000; MINIMUM_DELEGATION_SOL * LAMPORTS_PER_SOL }