Fix Schlesi-splitting penalty bug (#1166)

* Fix Schlesi-splitting penalty bug
* Print correct spec version in lcli
This commit is contained in:
Michael Sproul 2020-05-19 13:49:23 +10:00 committed by GitHub
parent 309cd95b2c
commit ddd63c0de1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 20 additions and 4 deletions

View File

@ -225,7 +225,9 @@ fn get_attestation_delta<T: EthSpec>(
delta.penalize(spec.base_rewards_per_epoch.safe_mul(base_reward)?)?; delta.penalize(spec.base_rewards_per_epoch.safe_mul(base_reward)?)?;
// Additionally, all validators whose FFG target didn't match are penalized extra // Additionally, all validators whose FFG target didn't match are penalized extra
if !validator.is_previous_epoch_target_attester { // This condition is equivalent to this condition from the spec:
// `index not in get_unslashed_attesting_indices(state, matching_target_attestations)`
if validator.is_slashed || !validator.is_previous_epoch_target_attester {
delta.penalize( delta.penalize(
validator validator
.current_epoch_effective_balance .current_epoch_effective_balance

View File

@ -56,6 +56,8 @@ pub trait EthSpec: 'static + Default + Sync + Send + Clone + Debug + PartialEq {
fn default_spec() -> ChainSpec; fn default_spec() -> ChainSpec;
fn spec_name() -> &'static str;
fn genesis_epoch() -> Epoch { fn genesis_epoch() -> Epoch {
Epoch::new(Self::GenesisEpoch::to_u64()) Epoch::new(Self::GenesisEpoch::to_u64())
} }
@ -159,6 +161,10 @@ impl EthSpec for MainnetEthSpec {
fn default_spec() -> ChainSpec { fn default_spec() -> ChainSpec {
ChainSpec::mainnet() ChainSpec::mainnet()
} }
fn spec_name() -> &'static str {
"mainnet"
}
} }
pub type FoundationBeaconState = BeaconState<MainnetEthSpec>; pub type FoundationBeaconState = BeaconState<MainnetEthSpec>;
@ -196,6 +202,10 @@ impl EthSpec for MinimalEthSpec {
fn default_spec() -> ChainSpec { fn default_spec() -> ChainSpec {
ChainSpec::minimal() ChainSpec::minimal()
} }
fn spec_name() -> &'static str {
"minimal"
}
} }
pub type MinimalBeaconState = BeaconState<MinimalEthSpec>; pub type MinimalBeaconState = BeaconState<MinimalEthSpec>;
@ -231,6 +241,10 @@ impl EthSpec for InteropEthSpec {
fn default_spec() -> ChainSpec { fn default_spec() -> ChainSpec {
ChainSpec::interop() ChainSpec::interop()
} }
fn spec_name() -> &'static str {
"interop"
}
} }
pub type InteropBeaconState = BeaconState<InteropEthSpec>; pub type InteropBeaconState = BeaconState<InteropEthSpec>;

View File

@ -18,7 +18,7 @@ pub fn run_parse_hex<T: EthSpec>(matches: &ArgMatches) -> Result<(), String> {
let hex = hex::decode(&hex).map_err(|e| format!("Failed to parse hex: {:?}", e))?; let hex = hex::decode(&hex).map_err(|e| format!("Failed to parse hex: {:?}", e))?;
info!("Using minimal spec"); info!("Using {} spec", T::spec_name());
info!("Type: {:?}", type_str); info!("Type: {:?}", type_str);
match type_str { match type_str {

View File

@ -26,7 +26,7 @@ pub fn run<T: EthSpec>(matches: &ArgMatches) -> Result<(), String> {
.parse::<PathBuf>() .parse::<PathBuf>()
.map_err(|e| format!("Failed to parse output path: {}", e))?; .map_err(|e| format!("Failed to parse output path: {}", e))?;
info!("Using minimal spec"); info!("Using {} spec", T::spec_name());
info!("Pre-state path: {:?}", pre_state_path); info!("Pre-state path: {:?}", pre_state_path);
info!("Slots: {:?}", slots); info!("Slots: {:?}", slots);

View File

@ -25,7 +25,7 @@ pub fn run_transition_blocks<T: EthSpec>(matches: &ArgMatches) -> Result<(), Str
.parse::<PathBuf>() .parse::<PathBuf>()
.map_err(|e| format!("Failed to parse output path: {}", e))?; .map_err(|e| format!("Failed to parse output path: {}", e))?;
info!("Using minimal spec"); info!("Using {} spec", T::spec_name());
info!("Pre-state path: {:?}", pre_state_path); info!("Pre-state path: {:?}", pre_state_path);
info!("Block path: {:?}", block_path); info!("Block path: {:?}", block_path);