Skip to content

Commit 5d1c1fd

Browse files
committed
fix: during bootstrap, reject storage proposals from non-bootstrap validators
Other validators were overwriting our leaderboard with empty data via consensus (value_len=8 = empty Vec). During bootstrap, only the bootstrap validator's storage proposals should be accepted.
1 parent 9a5abe4 commit 5d1c1fd

File tree

1 file changed

+19
-5
lines changed

1 file changed

+19
-5
lines changed

bins/validator-node/src/main.rs

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2665,11 +2665,25 @@ async fn handle_network_event(
26652665
// Validate proposal before voting
26662666
let max_key_size = 1024;
26672667
let max_value_size = 10 * 1024 * 1024; // 10MB
2668-
let approve = !proposal.key.is_empty()
2669-
&& proposal.key.len() <= max_key_size
2670-
&& proposal.value.len() <= max_value_size
2671-
&& proposal.challenge_id.0 != uuid::Uuid::nil()
2672-
&& !proposal.signature.is_empty();
2668+
let in_bootstrap = state_manager.apply(|s| s.is_in_bootstrap_period());
2669+
let is_bootstrap_validator = proposal.proposer.to_ss58()
2670+
== platform_core::constants::BOOTSTRAP_VALIDATOR_SS58;
2671+
2672+
// During bootstrap, only accept storage proposals from bootstrap validator
2673+
let approve = if in_bootstrap && !is_bootstrap_validator {
2674+
debug!(
2675+
proposal_id = %hex::encode(&proposal.proposal_id[..8]),
2676+
proposer = %proposal.proposer.to_ss58(),
2677+
"Bootstrap: rejecting storage proposal from non-bootstrap validator"
2678+
);
2679+
false
2680+
} else {
2681+
!proposal.key.is_empty()
2682+
&& proposal.key.len() <= max_key_size
2683+
&& proposal.value.len() <= max_value_size
2684+
&& proposal.challenge_id.0 != uuid::Uuid::nil()
2685+
&& !proposal.signature.is_empty()
2686+
};
26732687

26742688
if !approve {
26752689
warn!(

0 commit comments

Comments
 (0)