From f1a4e04a479120da4132073089154f4f9d87bed1 Mon Sep 17 00:00:00 2001 From: mjalalzai <33738574+MForensic@users.noreply.github.com> Date: Sun, 8 Oct 2023 22:13:55 -0700 Subject: [PATCH] propose_block --- carnot/carnot-vote-aggregation.py | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/carnot/carnot-vote-aggregation.py b/carnot/carnot-vote-aggregation.py index 9917441..e810002 100644 --- a/carnot/carnot-vote-aggregation.py +++ b/carnot/carnot-vote-aggregation.py @@ -391,12 +391,12 @@ class Carnot: # Forward the vote to the parent committee return Send(to=self.overlay.parent_committee, payload=vote) - def forward_new_view(self, msg: NewView) -> Optional[Event]: +# ToDo: Is not needed anymore + def forward_timeout_qc(self, msg: TimeoutQc) -> Optional[Event]: # Assertions for input validation - assert msg.view == self.current_view, "Received NewView with correct view" - assert self.overlay.is_member_of_child_committee(self.id, - msg.sender) or \ - self.overlay.is_member_of_my_committee(self.id, msg.sender), "Sender is a member of child committee" + assert msg.view == self.current_view, "Received TimeoutQc with correct view" + assert self.overlay.is_member_of_child_committee(self.id, msg.sender) + #or self.overlay.is_member_of_my_committee(self.id, msg.sender), "Sender is a member of child committee" assert self.highest_voted_view == msg.view, "Can only forward NewView after voting ourselves" if self.overlay.is_member_of_root_committee(self.id): @@ -437,3 +437,21 @@ class Carnot: # Return a Broadcast event with the proposed block return BroadCast(payload=block) + + def local_timeout(self) -> Optional[Event]: + """ + Root committee changes for each failure, so repeated failure will be handled by different + root committees + """ + # avoid voting after we timeout + self.highest_voted_view = self.current_view + + timeout_msg: Timeout = Timeout( + view=self.current_view, + high_qc=self.local_high_qc, + # local_timeout is only true for the root committee or members of its children + # root committee or its children can trigger the timeout. + timeout_qc=self.last_view_timeout_qc, + sender=self.id + ) + return Send(payload=timeout_msg, to=self.overlay.)