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

Commit

Permalink
add monotonic transition to kovan (#5587)
Browse files Browse the repository at this point in the history
  • Loading branch information
keorn committed May 16, 2017
1 parent 6cce5c8 commit 71fb5c4
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 5 deletions.
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
12 changes: 9 additions & 3 deletions ethcore/src/engines/authority_round.rs
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,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 @@ -71,6 +73,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 All @@ -94,6 +97,7 @@ pub struct AuthorityRound {
calibrate_step: bool,
validate_score_transition: u64,
eip155_transition: u64,
validate_step_transition: u64,
}

fn header_step(header: &Header) -> Result<usize, ::rlp::DecoderError> {
Expand Down Expand Up @@ -136,6 +140,7 @@ impl AuthorityRound {
calibrate_step: our_params.start_step.is_none(),
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 @@ -343,9 +348,10 @@ impl Engine for AuthorityRound {

// Check if parent is from a previous step.
let parent_step = header_step(parent)?;
if step == parent_step {
trace!(target: "engine", "Multiple blocks proposed for step {}.", step);
self.validators.report_malicious(header.author());
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

0 comments on commit 71fb5c4

Please sign in to comment.