Skip to content
This repository has been archived by the owner on Nov 6, 2020. It is now read-only.

Add monotonic step transition #5587

Merged
merged 1 commit into from
May 15, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
3 changes: 2 additions & 1 deletion ethcore/res/ethereum/kovan.json
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,8 @@
]
},
"validateScoreTransition": 1000000,
"eip155Transition": 1000000
"eip155Transition": 1000000,
"validateStepTransition": 1500000
}
}
},
Expand Down
8 changes: 7 additions & 1 deletion ethcore/src/engines/authority_round.rs
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,8 @@ pub struct AuthorityRoundParams {
pub validate_score_transition: u64,
/// Number of first block where EIP-155 rules are validated.
pub eip155_transition: u64,
/// Monotonic step validation transition block.
pub validate_step_transition: u64,
}

impl From<ethjson::spec::AuthorityRoundParams> for AuthorityRoundParams {
Expand All @@ -70,6 +72,7 @@ impl From<ethjson::spec::AuthorityRoundParams> for AuthorityRoundParams {
start_step: p.start_step.map(Into::into),
validate_score_transition: p.validate_score_transition.map_or(0, Into::into),
eip155_transition: p.eip155_transition.map_or(0, Into::into),
validate_step_transition: p.validate_step_transition.map_or(0, Into::into),
}
}
}
Expand Down Expand Up @@ -128,6 +131,7 @@ pub struct AuthorityRound {
validators: Box<ValidatorSet>,
validate_score_transition: u64,
eip155_transition: u64,
validate_step_transition: u64,
}

// header-chain validator.
Expand Down Expand Up @@ -208,6 +212,7 @@ impl AuthorityRound {
validators: new_validator_set(our_params.validators),
validate_score_transition: our_params.validate_score_transition,
eip155_transition: our_params.eip155_transition,
validate_step_transition: our_params.validate_step_transition,
});
// Do not initialize timeouts for tests.
if should_timeout {
Expand Down Expand Up @@ -379,7 +384,8 @@ impl Engine for AuthorityRound {

// Ensure header is from the step after parent.
let parent_step = header_step(parent)?;
if step <= parent_step {
if step == parent_step
|| (header.number() >= self.validate_step_transition && step <= parent_step) {
trace!(target: "engine", "Multiple blocks proposed for step {}.", parent_step);
self.validators.report_malicious(header.author(), header.number(), Default::default());
Err(EngineError::DoubleVote(header.author().clone()))?;
Expand Down
6 changes: 5 additions & 1 deletion json/src/spec/authority_round.rs
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,9 @@ pub struct AuthorityRoundParams {
/// See main AuthorityRoundParams docs.
#[serde(rename="eip155Transition")]
pub eip155_transition: Option<Uint>,
/// Block from which monotonic steps start.
#[serde(rename="validateStepTransition")]
pub validate_step_transition: Option<Uint>,
}

/// Authority engine deserialization.
Expand All @@ -71,7 +74,8 @@ mod tests {
},
"blockReward": "0x50",
"startStep" : 24,
"eip155Transition": "0x42"
"eip155Transition": "0x42",
"validateStepTransition": 150
}
}"#;

Expand Down