Debug: slash exception from upgrade ChainX v4.0.0
icodezjb opened this issue · 5 comments
Issue:
Since ChainX has been upgraded to v4.0.0 (runtime 11 -> 12), many validators have been slashed for no reason
Analyze:
Before the end of each session, pallet-im-online will submit offline validators to xstaking, and they will all be slashed. There are two conditions for pallet-im-online to determine whether the validator is online:
- (1) Whether to send heartbeat transactions in this session
- (2) Whether to produce block in this session
We also notice that the node that should be slashed is not slashed
Root Cause:
we tracked this pr
Force the validators in the waiting list to run an authority node
the XStaking::active_validator_set().collect()
return validators
which the order is not fixed.
and in pallet-im-online, mark whether to be online in the order of validator, And this is the root cause
let session_index = T::ValidatorSet::session_index();
let keys = Keys::<T>::get();
let current_validators = T::ValidatorSet::validators();
let offenders = current_validators
.into_iter()
.enumerate()
.filter(|(index, id)| !Self::is_online_aux(*index as u32, id))
.filter_map(|(_, id)| {
<T::ValidatorSet as ValidatorSetWithIdentification<T::AccountId>>::IdentificationOf::convert(
id.clone()
).map(|full_id| (id, full_id))
})
.collect::<Vec<IdentificationTuple<T>>>();
Fix:
/// Returns all the validators and candidates by order
#[inline]
pub fn active_candidates() -> Vec<T::AccountId> {
let mut candidates = Self::active_validator_set()
.map(|v| (Self::total_votes_of(&v), v))
.collect::<Vec<_>>();
candidates.sort_by(|&(ref b1, _), &(ref b2, _)| b2.cmp(b1));
candidates.into_iter().map(|(_, v)| v).collect()
}
More rewards for validators
For the security of the ChainX mainnet and to encourage more community users to participate in the ChainX validators selection, we have decided to increase the proportion of system rewards to validators from 10% to 20%
Rewards: 20% for validator and 80% for the reward pot.
Im still getting slashed after upgrade to v4.1.1
Im still getting slashed after upgrade to v4.1.1
ChainX mainnet is OK now, and you can
- (1) Check your session keys
- (2) Try set
--state-cache-size=0
It is slashing and i;m loosing 1 pcx everytimne it happens.
(1) i rechecked session keys and even set new ones
(2)state-cache-size=0 is set
It is slashing and i;m loosing 1 pcx everytimne it happens. (1) i rechecked session keys and even set new ones (2)state-cache-size=0 is set
Are you DOZENODES?
You were slashed during the candidate stage.
If you do not set the correct session keys in the candidate stage, it means that the heartbeat transaction (using the im-online key) cannot be sent to the system, the system thinks you are offline, and then you are slashed