From 21be609f5281e44985c248433692a30cbd4fbe69 Mon Sep 17 00:00:00 2001 From: Christopher Goes Date: Tue, 14 Aug 2018 19:04:57 +0200 Subject: [PATCH] Changes WIP --- docs/spec/slashing/state-machine.md | 20 +++++++++++++++++--- docs/spec/slashing/state.md | 4 +++- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/docs/spec/slashing/state-machine.md b/docs/spec/slashing/state-machine.md index 1105cededac4..023d0a78b677 100644 --- a/docs/spec/slashing/state-machine.md +++ b/docs/spec/slashing/state-machine.md @@ -80,6 +80,20 @@ onValidatorUnbonded(address sdk.ValAddress) return ``` +#### Validator Power Changed + +When a validator's power changes, we update the in-progress `SlashingPeriod` with the validator's current power: + +```golang +onValidatorPowerChanged(address sdk.ValAddress, stakeBonded sdk.Rat) + + slashingPeriod = getSlashingPeriod(address, CurrentHeight) + slashingPeriod.MaxStakeBonded = max(slashingPeriod.MaxStakeBonded, stakeBonded) + setSlashingPeriod(slashingPeriod) + + return +``` + #### Validator Slashed When a validator is slashed, we look up the appropriate `SlashingPeriod` based on the validator @@ -90,11 +104,11 @@ address and the time of infraction, cap the fraction slashed as `max(SlashFracti beforeValidatorSlashed(address sdk.ValAddress, fraction sdk.Rat, infractionHeight int64) slashingPeriod = getSlashingPeriod(address, infractionHeight) - totalToSlash = max(slashingPeriod.SlashedSoFar, fraction) - slashingPeriod.SlashedSoFar = totalToSlash + totalFractionToSlash = max(slashingPeriod.SlashedSoFar, fraction) + slashingPeriod.FractionSlashedSoFar = totalToSlash setSlashingPeriod(slashingPeriod) - remainderToSlash = slashingPeriod.SlashedSoFar - totalToSlash + remainderToSlash = slashingPeriod.FractionSlashedSoFar - totalToSlash fraction = remainderToSlash continue with slashing diff --git a/docs/spec/slashing/state.md b/docs/spec/slashing/state.md index 050f4c9ae444..a8a8344769bd 100644 --- a/docs/spec/slashing/state.md +++ b/docs/spec/slashing/state.md @@ -75,6 +75,8 @@ type SlashingPeriod struct { ValidatorAddr sdk.ValAddress // Tendermint address of the validator StartHeight int64 // Block height at which slashing period begin EndHeight int64 // Block height at which slashing period ended - SlashedSoFar sdk.Rat // Fraction slashed so far, cumulative + MaxBondedStake sdk.Rat // Maximum bonded stake during period + StakeSlashedSoFar sdk.Rat // Amount of stake slashed so far + FractionSlashedSoFar sdk.Rat // Fraction slashed so far, cumulative } ```