@@ -12,7 +12,7 @@ use stakenet_sdk::utils::accounts::{get_all_validator_history_accounts, get_stak
1212
1313use crate :: {
1414 bam_delegation_criteria:: BamDelegationCriteria ,
15- bam_validator_eligibility:: BamValidatorEligibility ,
15+ bam_validator_eligibility:: { BamValidatorEligibility , IneligibilityReason } ,
1616} ;
1717
1818mod bam_delegation_criteria;
@@ -106,33 +106,62 @@ impl BamWriterService {
106106 . await ?;
107107
108108 let eligibility_checker = BamValidatorEligibility :: new ( epoch, & validator_histories) ;
109- let mut bam_eligible_validators : Vec < BamValidator > = Vec :: new ( ) ;
109+ let mut bam_validators : Vec < BamValidator > = Vec :: new ( ) ;
110110
111111 for validator_history in validator_histories. iter ( ) {
112112 if let Some ( vote_account) = bam_validator_map. get ( & validator_history. vote_account ) {
113+ let vote_pubkey = & vote_account. vote_pubkey ;
114+ let mut bam_validator = BamValidator :: new (
115+ vote_account. activated_stake ,
116+ epoch,
117+ & vote_account. node_pubkey ,
118+ false ,
119+ vote_pubkey,
120+ ) ;
121+
113122 match eligibility_checker. check_eligibility ( validator_history) {
114123 Ok ( ( ) ) => {
115- let bam_validator = BamValidator :: new (
116- vote_account. activated_stake ,
117- epoch,
118- & vote_account. node_pubkey ,
119- & vote_account. vote_pubkey ,
120- ) ;
121- bam_eligible_validators. push ( bam_validator) ;
124+ bam_validator. set_is_eligible ( true ) ;
122125 }
123126 Err ( reason) => {
124- log:: debug!(
125- "Validator {} ineligible: {:?}" ,
126- vote_account. vote_pubkey,
127- reason
128- ) ;
127+ let reason_string = match reason {
128+ IneligibilityReason :: NotBamClient => "NotBamClient" . to_string ( ) ,
129+ IneligibilityReason :: NonZeroCommission { epoch, commission } => {
130+ format ! ( "NonZeroCommission: {} in epoch {}" , commission, epoch)
131+ }
132+ IneligibilityReason :: HighMevCommission {
133+ epoch,
134+ mev_commission,
135+ } => {
136+ format ! ( "HighMevCommission: {} in epoch {}" , mev_commission, epoch)
137+ }
138+ IneligibilityReason :: InSuperminority { epoch } => {
139+ format ! ( "InSuperminority in epoch {}" , epoch)
140+ }
141+ IneligibilityReason :: LowVoteCredits {
142+ epoch,
143+ credits,
144+ min_required,
145+ } => {
146+ format ! (
147+ "LowVoteCredits: {} credits (required: {}) in epoch {}" ,
148+ credits, min_required, epoch
149+ )
150+ }
151+ IneligibilityReason :: InsufficientHistory => {
152+ "InsufficientHistory: Less than 3 epochs" . to_string ( )
153+ }
154+ } ;
155+ bam_validator. set_ineligibility_reason ( Some ( reason_string) ) ;
129156 }
130157 }
158+
159+ bam_validators. push ( bam_validator) ;
131160 }
132161 }
133162
134163 self . bam_validators_store
135- . insert_many ( & bam_eligible_validators )
164+ . insert_many ( & bam_validators )
136165 . await ?;
137166
138167 let total_stake = vote_accounts
@@ -141,8 +170,11 @@ impl BamWriterService {
141170 . map ( |v| v. activated_stake )
142171 . sum ( ) ;
143172
144- let eligible_bam_validator_count = bam_eligible_validators. len ( ) as u64 ;
145- let bam_stake = bam_eligible_validators
173+ let eligible_bam_validators = bam_validators
174+ . into_iter ( )
175+ . filter ( |bv| bv. is_eligible ( ) )
176+ . collect :: < Vec < BamValidator > > ( ) ;
177+ let bam_stake = eligible_bam_validators
146178 . iter ( )
147179 . map ( |v| v. get_active_stake ( ) )
148180 . sum ( ) ;
@@ -152,7 +184,7 @@ impl BamWriterService {
152184 bam_stake,
153185 total_stake,
154186 jitosol_stake,
155- eligible_bam_validator_count ,
187+ eligible_bam_validators . len ( ) as u64 ,
156188 ) ;
157189
158190 let previous_epoch_metric = if let Some ( prev_epoch) = epoch. checked_sub ( 1 ) {
0 commit comments