diff --git a/node/components/bft/src/chonky_bft/new_view.rs b/node/components/bft/src/chonky_bft/new_view.rs index 52948365..7054bed1 100644 --- a/node/components/bft/src/chonky_bft/new_view.rs +++ b/node/components/bft/src/chonky_bft/new_view.rs @@ -55,9 +55,13 @@ impl StateMachine { let message = &signed_message.msg; let author = &signed_message.key; - // If the replica is already in this view, then ignore it. - // TODO: allow for the same view number for the proposer. - if message.view().number <= self.view_number { + // If the replica is already in this view (and the message is NOT from the leader), then ignore it. + // See `start_new_view()` for explanation why we need to process the message from the + // leader. + if message.view().number < self.view_number + || (message.view().number == self.view_number + && author != &self.config.genesis().view_leader(self.view_number)) + { return Err(Error::Old { current_view: self.view_number, }); diff --git a/node/tools/src/bin/localnet_config.rs b/node/tools/src/bin/localnet_config.rs index b5b14784..2f2a3252 100644 --- a/node/tools/src/bin/localnet_config.rs +++ b/node/tools/src/bin/localnet_config.rs @@ -75,7 +75,7 @@ fn main() -> anyhow::Result<()> { .metrics_server_port .map(|port| SocketAddr::new(Ipv4Addr::UNSPECIFIED.into(), port)), genesis: setup.genesis.clone(), - max_payload_size: 100000, + max_payload_size: args.payload_size, node_key: node_keys[i].clone(), validator_key: validator_keys.get(i).cloned(), attester_key: attester_keys.get(i).cloned(),