mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-06-12 00:41:08 +00:00
Lazy payouts (#4474)
* TODOs * Remove superfluous: * partial implementation * full implementation * fix preferences * update comments * upgrade test WIP * fix more tests * fix cutoff * fix saturation * comment * upgrade mock * upgrade test * WIP migration * WIP migration * remove slot stake stuff * fix merge * migration of ledger * remove equalize from test * add test * fix * update doc * fix compilation * improve test readibility * improve doc * fix most todo * fix migration and test * remove println * WIP * add test and spec * weight * update doc * safer end_era * fix exposure of conversion * Revert "safer end_era" This reverts commit 72ff737d27be67d87308514b13e2574bc5f09fce. * fix useless put * exposure clipped * doc * fix payout with clipped * fix node runtime * add doc * pluggable and generalized staking module * remove print * update doc * refactor * improve documentation and implementation * fix test * Fix test * fix test * fix test * fix remove lowest stake from exposure, not biggest. * nomination index arguments in nominator_payout * add test * try to fix offence * apply slashed and bond eras until active era * doc * update spec version * add test upgrade from previous test environment * Apply suggestions from code review Co-Authored-By: Shawn Tabrizi <shawntabrizi@gmail.com> * nominators upgrade has been cleaned * dynamic history depth implementation * make current_era - history_depth included * Change equality check to start era to less than or equal * Use era specific validator prefs * Add print statement and comment about start era if < * fix next_reward overflow * make more check for bad era claim for zero cost * small refactor * code refactor + fix use of deprecated storage * fix wasm build * add comment * Fix tests * remove outdated comment * Apply suggestions from code review Co-Authored-By: Shawn Tabrizi <shawntabrizi@gmail.com> * gather active era information into one storage Co-authored-by: thiolliere <gui.thiolliere@gmail.com> Co-authored-by: Shawn Tabrizi <shawntabrizi@gmail.com>
This commit is contained in:
@@ -108,6 +108,7 @@ pub trait SessionManager<ValidatorId, FullIdentification>: crate::SessionManager
|
||||
/// If there was a validator set change, its returns the set of new validators along with their
|
||||
/// full identifications.
|
||||
fn new_session(new_index: SessionIndex) -> Option<Vec<(ValidatorId, FullIdentification)>>;
|
||||
fn start_session(start_index: SessionIndex);
|
||||
fn end_session(end_index: SessionIndex);
|
||||
}
|
||||
|
||||
@@ -146,6 +147,9 @@ impl<T: Trait, I> crate::SessionManager<T::ValidatorId> for NoteHistoricalRoot<T
|
||||
|
||||
new_validators
|
||||
}
|
||||
fn start_session(start_index: SessionIndex) {
|
||||
<I as SessionManager<_, _>>::start_session(start_index)
|
||||
}
|
||||
fn end_session(end_index: SessionIndex) {
|
||||
<I as SessionManager<_, _>>::end_session(end_index)
|
||||
}
|
||||
|
||||
@@ -162,10 +162,15 @@ pub trait SessionManager<ValidatorId> {
|
||||
/// Because the session pallet can queue validator set the ending session can be lower than the
|
||||
/// last new session index.
|
||||
fn end_session(end_index: SessionIndex);
|
||||
/// Start the session.
|
||||
///
|
||||
/// The session start to be used for validation
|
||||
fn start_session(start_index: SessionIndex);
|
||||
}
|
||||
|
||||
impl<A> SessionManager<A> for () {
|
||||
fn new_session(_: SessionIndex) -> Option<Vec<A>> { None }
|
||||
fn start_session(_: SessionIndex) {}
|
||||
fn end_session(_: SessionIndex) {}
|
||||
}
|
||||
|
||||
@@ -423,6 +428,8 @@ decl_storage! {
|
||||
|
||||
<Validators<T>>::put(initial_validators_0);
|
||||
<QueuedKeys<T>>::put(queued_keys);
|
||||
|
||||
T::SessionManager::start_session(0);
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -520,6 +527,8 @@ impl<T: Trait> Module<T> {
|
||||
// Inform the session handlers that a session is going to end.
|
||||
T::SessionHandler::on_before_session_ending();
|
||||
|
||||
T::SessionManager::end_session(session_index);
|
||||
|
||||
// Get queued session keys and validators.
|
||||
let session_keys = <QueuedKeys<T>>::get();
|
||||
let validators = session_keys.iter()
|
||||
@@ -532,12 +541,12 @@ impl<T: Trait> Module<T> {
|
||||
DisabledValidators::take();
|
||||
}
|
||||
|
||||
T::SessionManager::end_session(session_index);
|
||||
|
||||
// Increment session index.
|
||||
let session_index = session_index + 1;
|
||||
CurrentIndex::put(session_index);
|
||||
|
||||
T::SessionManager::start_session(session_index);
|
||||
|
||||
// Get next validator set.
|
||||
let maybe_next_validators = T::SessionManager::new_session(session_index + 1);
|
||||
let (next_validators, next_identities_changed)
|
||||
|
||||
@@ -92,6 +92,7 @@ impl SessionHandler<u64> for TestSessionHandler {
|
||||
pub struct TestSessionManager;
|
||||
impl SessionManager<u64> for TestSessionManager {
|
||||
fn end_session(_: SessionIndex) {}
|
||||
fn start_session(_: SessionIndex) {}
|
||||
fn new_session(_: SessionIndex) -> Option<Vec<u64>> {
|
||||
if !TEST_SESSION_CHANGED.with(|l| *l.borrow()) {
|
||||
VALIDATORS.with(|v| {
|
||||
@@ -112,6 +113,7 @@ impl SessionManager<u64> for TestSessionManager {
|
||||
#[cfg(feature = "historical")]
|
||||
impl crate::historical::SessionManager<u64, u64> for TestSessionManager {
|
||||
fn end_session(_: SessionIndex) {}
|
||||
fn start_session(_: SessionIndex) {}
|
||||
fn new_session(new_index: SessionIndex)
|
||||
-> Option<Vec<(u64, u64)>>
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user