syncMsg+Happy path
This commit is contained in:
parent
7774109b96
commit
dbcd597b92
|
@ -207,13 +207,10 @@ def receive_block(block: Block):
|
|||
receive(parent)
|
||||
|
||||
if safe_block(block):
|
||||
|
||||
# This is not in the original spec, but
|
||||
# let's validate I have this clear.
|
||||
assert block.view == current_view
|
||||
|
||||
update_high_qc(block.qc)
|
||||
|
||||
vote = create_vote()
|
||||
if member_of_leaf_committee():
|
||||
if member_of_root_committee():
|
||||
|
@ -299,18 +296,18 @@ def receive_vote(vote: Vote):
|
|||
|
||||
if leader(vote.view+1): # Q? Which view? CURRENT_VIEW or vote.view? => Ans: vote.view+1 Vote for the view
|
||||
if root_commitee(vote.voter):
|
||||
if vote.view < CURRENT_VIEW - 1:
|
||||
if vote.view < CURRENT_VIEW:
|
||||
return
|
||||
|
||||
# Q: No filtering? I can just create a key and vote?
|
||||
# Q: No filtering? I can just create a key and vote? (Ans: A check is added to confirm the root_commitee voter)
|
||||
PENDING_VOTE_COLLECTION[vote.block].append(vote)
|
||||
if len(PENDING_VOTE_COLLECTION[vote.block])==supermajority():
|
||||
qc = build_qc(PENDING_VOTE_COLLECTION[vote.block])
|
||||
block = build_block(qc)
|
||||
block = build_block(txs,CURRENT_VIEW+1,qc, AggQC=None)
|
||||
broadcast(block)
|
||||
|
||||
# Q: we should probably return if we already received this vote
|
||||
if member_of_internal_com() and not_member_of_root():
|
||||
# Q: we should probably return if we already received this vote (Ans: Yes. It should be done, for all types of messages received. votes should be counted from )
|
||||
if member_of_internal_com() and not member_of_root():
|
||||
if child_commitee(vote.voter):
|
||||
PENDING_VOTE_COLLECTION[vote.block].append(vote)
|
||||
# else:
|
||||
|
@ -368,7 +365,7 @@ def receive_vote(vote: Vote):
|
|||
```python3
|
||||
def local_timeout():
|
||||
save_consensus_state()
|
||||
if member_of_internal_com() and not member_of_root() or member_of_leaf():
|
||||
if (member_of_internal_com() and not member_of_root()) or member_of_leaf():
|
||||
timeoutMsg = create_timeout(CURRENT_VIEW,HIGH_QC,HIGH_COMMITTED_QC, TIMEOUT_QC)
|
||||
send(timeoutMsg, parent_committee())
|
||||
|
||||
|
@ -425,37 +422,26 @@ def receive_timeout_qc(timeout_qc: Timeout_qc):
|
|||
def receive_syncMsg(sync_Msg: Sync_Msg):
|
||||
if CURRENT_VIEW > sync_Msg.view:
|
||||
return
|
||||
|
||||
# Update and download missing blocks.
|
||||
if sync_Msg.qc.view>high_qc.view:
|
||||
high_qc=sync_Msg.qc
|
||||
if sync_Msg.committed_qc.view>high_committed_qc.view:
|
||||
high_committed_qc=sync_Msg.committed_qc
|
||||
|
||||
PENDING_SYNCMSG_COLLECTION[sync_Msg.view].append(sync_Msg)
|
||||
if len(PENDING_SYNCMSG_COLLECTION[sync_Msg.view])== supermajority():
|
||||
if member_of_internal() and not member_of_root():
|
||||
sync_Msg = create_sync_Msg (CURRENT_VIEW, high_qc, high_committed_qc)
|
||||
send(sync_Msg, parent_committee())
|
||||
if member_of_root():
|
||||
sync_Msg = create_sync_Msg (CURRENT_VIEW, high_qc, high_committed_qc)
|
||||
sync_Msg_qc = create_sync_Msg_qc (PENDING_SYNCMSG_COLLECTION[sync_Msg.view])
|
||||
sync_Msg.sync_qc = sync_Msg_qc
|
||||
send(sync_Msg, leader(sync_Msg.view))
|
||||
if leader(sync_Msg.view):
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
if member_of_internal() and not member_of_root():
|
||||
sync_Msg = create_sync_Msg (CURRENT_VIEW, high_qc, high_committed_qc)
|
||||
send(sync_Msg, parent_committee())
|
||||
if member_of_root():
|
||||
sync_Msg = create_sync_Msg (CURRENT_VIEW, high_qc, high_committed_qc)
|
||||
sync_Msg_qc = create_sync_Msg_qc (PENDING_SYNCMSG_COLLECTION[sync_Msg.view])
|
||||
sync_Msg.sync_qc = sync_Msg_qc
|
||||
send(sync_Msg, leader(sync_Msg.view))
|
||||
if leader(sync_Msg.view):
|
||||
AggQC = (view, high_qc)
|
||||
AggQC = build_AggQC(PENDING_SYNCMSG_COLLECTION[sync_Msg.view])
|
||||
block = build_block(txs,CURRENT_VIEW+1,qc, AggQC=None)
|
||||
broadcast(block)
|
||||
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue