Skip to content
This repository was archived by the owner on Nov 15, 2023. It is now read-only.
Merged
Changes from 1 commit
Commits
Show all changes
95 commits
Select commit Hold shift + click to select a range
4def98e
TODOs
gavofyork Dec 18, 2019
338362a
Remove superfluous:
gavofyork Dec 18, 2019
0c22a21
Merge remote-tracking branch 'origin/master' into gav-lazy-rewards
gui1117 Jan 7, 2020
f92f0e8
partial implementation
gui1117 Jan 7, 2020
bb71353
full implementation
gui1117 Jan 8, 2020
3a4a9be
fix preferences
gui1117 Jan 9, 2020
7a80d10
Merge remote-tracking branch 'origin/master' into gav-lazy-rewards
gui1117 Jan 9, 2020
5345095
update comments
gui1117 Jan 9, 2020
dbe3a64
upgrade test WIP
gui1117 Jan 9, 2020
f41ee81
fix more tests
gui1117 Jan 10, 2020
fd48681
fix cutoff
gui1117 Jan 10, 2020
fa38f84
fix saturation
gui1117 Jan 10, 2020
c4b0f2f
comment
gui1117 Jan 10, 2020
4315218
upgrade mock
gui1117 Jan 10, 2020
a26e9da
upgrade test
gui1117 Jan 10, 2020
cc6dd63
Merge remote-tracking branch 'origin/master' into gav-lazy-rewards
gui1117 Jan 13, 2020
245ec98
WIP migration
gui1117 Jan 13, 2020
4206435
WIP migration
gui1117 Jan 14, 2020
f1586b2
Merge commit '857f7338b2066a03dc956acf004b101b4bdcf593' into gav-lazy…
gui1117 Jan 14, 2020
8e0bfa4
Merge commit 'd63ff7b9ac8d766b87a7a2cd99d5d73a521f97a9' into gav-lazy…
gui1117 Jan 14, 2020
70b9ff8
remove slot stake stuff
gui1117 Jan 14, 2020
61881d6
Merge commit '6688c3be1ff71803d5963935df7a0d646b2d50d2' into gav-lazy…
gui1117 Jan 14, 2020
fd5bafc
Merge remote-tracking branch 'origin/master' into gav-lazy-rewards
gui1117 Jan 14, 2020
f392d4a
fix merge
gui1117 Jan 14, 2020
2b9f806
migration of ledger
gui1117 Jan 14, 2020
d0431f4
remove equalize from test
gui1117 Jan 14, 2020
10232de
add test
gui1117 Jan 14, 2020
6367fda
fix
gui1117 Jan 14, 2020
30eb57c
update doc
gui1117 Jan 14, 2020
8eb8a58
fix compilation
gui1117 Jan 14, 2020
eb0d4e5
improve test readibility
gui1117 Jan 15, 2020
54b670f
Merge remote-tracking branch 'origin/master' into gav-lazy-rewards
gui1117 Jan 16, 2020
16a6fd0
improve doc
gui1117 Jan 20, 2020
ceffbfd
Merge commit 'c3af86cee45d98dd5f97fb2de419ba4e25ac14b7' into gav-lazy…
gui1117 Jan 20, 2020
c2cda09
Merge commit '561bd727489501cfb24d29020062b3a5d4fdcca9' into gav-lazy…
gui1117 Jan 20, 2020
a241d95
Merge remote-tracking branch 'origin/master' into gav-lazy-rewards
gui1117 Jan 20, 2020
3d426bb
fix most todo
gui1117 Jan 20, 2020
5d4c2e5
fix migration and test
gui1117 Jan 21, 2020
3590769
remove println
gui1117 Jan 21, 2020
df3a4de
WIP
gui1117 Jan 21, 2020
70979ac
add test and spec
gui1117 Jan 22, 2020
3c56ab3
weight
gui1117 Jan 22, 2020
c088756
update doc
gui1117 Jan 22, 2020
72ff737
safer end_era
gui1117 Jan 30, 2020
58a2c90
fix exposure of conversion
gui1117 Jan 30, 2020
02c05b2
Merge remote-tracking branch 'origin/master' into gav-lazy-rewards
gui1117 Jan 30, 2020
dd7590f
Revert "safer end_era"
gui1117 Jan 30, 2020
c99772b
fix useless put
gui1117 Jan 30, 2020
eb1a6ef
exposure clipped
gui1117 Jan 30, 2020
4e1d12d
doc
gui1117 Jan 30, 2020
33afe32
fix payout with clipped
gui1117 Jan 30, 2020
35f76ab
fix node runtime
gui1117 Jan 30, 2020
d35dafc
add doc
gui1117 Jan 31, 2020
381d5ef
pluggable and generalized staking module
gui1117 Jan 31, 2020
2519aef
remove print
gui1117 Jan 31, 2020
e881add
update doc
gui1117 Jan 31, 2020
1f7b353
refactor
gui1117 Jan 31, 2020
086eb8d
improve documentation and implementation
gui1117 Feb 1, 2020
5162c0b
fix test
gui1117 Feb 1, 2020
1d9f460
Merge remote-tracking branch 'origin/master' into gav-lazy-rewards
gui1117 Feb 1, 2020
9cd88e2
Fix test
gui1117 Feb 1, 2020
68105c8
fix test
gui1117 Feb 1, 2020
827847b
fix test
gui1117 Feb 1, 2020
e2af768
fix remove lowest stake from exposure, not biggest.
gui1117 Feb 3, 2020
ea4ef67
nomination index arguments in nominator_payout
gui1117 Feb 3, 2020
74a4cbe
add test
gui1117 Feb 3, 2020
0116e20
Merge remote-tracking branch 'origin/master' into gav-lazy-rewards
gui1117 Feb 3, 2020
faaddec
try to fix offence
gui1117 Feb 3, 2020
20b28b3
apply slashed and bond eras until active era
gui1117 Feb 3, 2020
7dd7975
doc
gui1117 Feb 3, 2020
a89202e
update spec version
gui1117 Feb 3, 2020
3f860bd
Merge branch 'master' into gav-lazy-rewards
gavofyork Feb 12, 2020
8e652b1
Merge branch 'master' into gav-lazy-rewards
gavofyork Feb 12, 2020
89974f8
Merge remote-tracking branch 'origin/master' into gav-lazy-rewards
gui1117 Feb 19, 2020
c87a3d6
add test upgrade from previous test environment
gui1117 Feb 19, 2020
961618d
Apply suggestions from code review
gui1117 Feb 21, 2020
751b993
nominators upgrade has been cleaned
gui1117 Feb 21, 2020
e56e70a
dynamic history depth implementation
gui1117 Feb 21, 2020
975a6eb
make current_era - history_depth included
gui1117 Feb 21, 2020
3d78f79
Change equality check to start era to less than or equal
shawntabrizi Feb 22, 2020
b834b4e
Use era specific validator prefs
shawntabrizi Feb 23, 2020
23a4b2b
Add print statement and comment about start era if <
shawntabrizi Feb 23, 2020
45bf05b
fix next_reward overflow
gui1117 Feb 24, 2020
3dce1b0
make more check for bad era claim for zero cost
gui1117 Feb 24, 2020
22c46b5
small refactor
gui1117 Feb 24, 2020
2f70fbe
Merge branch 'master' into gav-lazy-rewards
shawntabrizi Feb 24, 2020
24d334f
code refactor + fix use of deprecated storage
gui1117 Feb 26, 2020
7edfdae
fix wasm build
gui1117 Feb 26, 2020
5627b2b
Merge remote-tracking branch 'origin/master' into gav-lazy-rewards
gui1117 Feb 26, 2020
4caa747
add comment
gui1117 Feb 26, 2020
015c39a
Fix tests
shawntabrizi Feb 28, 2020
f7ba093
Merge remote-tracking branch 'origin/master' into gav-lazy-rewards
gui1117 Mar 2, 2020
c4d27b2
remove outdated comment
gui1117 Mar 2, 2020
129a6d9
Apply suggestions from code review
gui1117 Mar 3, 2020
d5b3080
gather active era information into one storage
gui1117 Mar 3, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
apply slashed and bond eras until active era
  • Loading branch information
gui1117 committed Feb 3, 2020
commit 20b28b3d1f3ec176b1264176c0a2645f081f9e59
75 changes: 37 additions & 38 deletions frame/staking/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -805,6 +805,9 @@ decl_storage! {
map hasher(blake2_256) EraIndex => Vec<UnappliedSlash<T::AccountId, BalanceOf<T>>>;

/// A mapping from still-bonded eras to the first session index of that era.
///
/// Must contains information for eras for the range:
/// `[active_era - bounding_duration; active_era]`
BondedEras: Vec<(EraIndex, SessionIndex)>;

/// All slashing events on validators, mapped by era to the highest slash proportion
Expand Down Expand Up @@ -1631,14 +1634,40 @@ impl<T: Trait> Module<T> {
}

/// Increment `ActiveEra` and reset `ActiveEraStart`
fn start_era(_start_session: SessionIndex) {
ActiveEra::mutate(|s| {
fn start_era(start_session: SessionIndex) {
let active_era = ActiveEra::mutate(|s| {
*s = Some(s.map(|s| s + 1).unwrap_or(0));
s.unwrap()
});

// Set new active era start in next `on_finalize`. To guarantee usage of `Time::now`.
<ActiveEraStart<T>>::kill();

let bonding_duration = T::BondingDuration::get();

BondedEras::mutate(|bonded| {
bonded.push((active_era, start_session));

if active_era > bonding_duration {
let first_kept = active_era - bonding_duration;

// prune out everything that's from before the first-kept index.
let n_to_prune = bonded.iter()
.take_while(|&&(era_idx, _)| era_idx < first_kept)
.count();

// kill slashing metadata.
for (pruned_era, _) in bonded.drain(..n_to_prune) {
slashing::clear_era_metadata::<T>(pruned_era);
}

if let Some(&(_, first_session)) = bonded.first() {
T::SessionInterface::prune_historical_up_to(first_session);
}
}
});

Self::apply_unapplied_slashes(active_era);
}

/// Compute payout for era.
Expand Down Expand Up @@ -1681,42 +1710,17 @@ impl<T: Trait> Module<T> {
ErasStartSessionIndex::remove(old_era);
}

let bonding_duration = T::BondingDuration::get();

BondedEras::mutate(|bonded| {
bonded.push((current_era, start_session_index));

if current_era > bonding_duration {
let first_kept = current_era - bonding_duration;

// prune out everything that's from before the first-kept index.
let n_to_prune = bonded.iter()
.take_while(|&&(era_idx, _)| era_idx < first_kept)
.count();

// kill slashing metadata.
for (pruned_era, _) in bonded.drain(..n_to_prune) {
slashing::clear_era_metadata::<T>(pruned_era);
}

if let Some(&(_, first_session)) = bonded.first() {
T::SessionInterface::prune_historical_up_to(first_session);
}
}
});

// Set staking information for new era.
let maybe_new_validators = Self::select_validators(current_era);
Self::apply_unapplied_slashes(current_era);

maybe_new_validators
}

/// Apply previously-unapplied slashes on the beginning of a new era, after a delay.
fn apply_unapplied_slashes(current_era: EraIndex) {
fn apply_unapplied_slashes(active_era: EraIndex) {
let slash_defer_duration = T::SlashDeferDuration::get();
<Self as Store>::EarliestUnappliedSlash::mutate(|earliest| if let Some(ref mut earliest) = earliest {
let keep_from = current_era.saturating_sub(slash_defer_duration);
let keep_from = active_era.saturating_sub(slash_defer_duration);
for era in (*earliest)..keep_from {
let era_slashes = <Self as Store>::UnappliedSlashes::take(&era);
for slash in era_slashes {
Expand Down Expand Up @@ -2026,18 +2030,13 @@ impl <T: Trait> OnOffenceHandler<T::AccountId, pallet_session::historical::Ident
}
active_era.unwrap()
};
let current_era = Self::current_era()
.unwrap_or_else(|| {
frame_support::print("Error: current must exist if active_era exist");
0
});
let active_era_start_session_index = Self::eras_start_session_index(active_era)
.unwrap_or_else(|| {
frame_support::print("Error: start_session_index must be set for current_era");
0
});

let window_start = current_era.saturating_sub(T::BondingDuration::get());
let window_start = active_era.saturating_sub(T::BondingDuration::get());

// fast path for active-era report - most likely.
// `slash_session` cannot be in a future active era. It must be in `active_era` or before.
Expand All @@ -2055,7 +2054,7 @@ impl <T: Trait> OnOffenceHandler<T::AccountId, pallet_session::historical::Ident

<Self as Store>::EarliestUnappliedSlash::mutate(|earliest| {
if earliest.is_none() {
*earliest = Some(current_era)
*earliest = Some(active_era)
}
});

Expand All @@ -2076,7 +2075,7 @@ impl <T: Trait> OnOffenceHandler<T::AccountId, pallet_session::historical::Ident
exposure,
slash_era,
window_start,
now: current_era,
now: active_era,
reward_proportion,
});

Expand All @@ -2088,7 +2087,7 @@ impl <T: Trait> OnOffenceHandler<T::AccountId, pallet_session::historical::Ident
} else {
// defer to end of some `slash_defer_duration` from now.
<Self as Store>::UnappliedSlashes::mutate(
current_era,
active_era,
move |for_later| for_later.push(unapplied),
);
}
Expand Down