How to reach consensus for algorand

hello eyeryone, I am a scientific researcher in algorand. I want to know the process of reaching a consensus for algorand, that means how algorand completes the generation of blocks by votes based on the algo.
Which file should I watch in the source code? I use the GO-SDK mainly.
Can someone help me or give me some advices. Thanks

The agreement code defines the consensus implementation. The referenced README provides a good overview and some hints about where to dig for more within the code. Please let us know the level of detail you are seeking in your code exploration and where we can provide specific guidance. Below, is a high level visual explainer video about the consensus process.

Thanks ryanRfox. After I see this video, I have a good understanding of reaching consensus about the Algorand nodes. I have a question to ask you.
After the VRF elects the committee (rounds 2 and 3), how do the committee members decide their votes, that means, under what circumstances they vote for and under what circumstances they vote against.
Is this voting process random or artificial (exaggeratedly speaking, it depends on people’s mood)
If I were a malicious node, I would definitely try my best to destroy it

I don’t have a deep understanding of Algorand. Please correct me if I say it inappropriately.
Thank you

At a very high level, honest nodes would vote for a block if the block is valid (all transactions inside are valid) and if they did not yet vote for another block.
Details can be found in Section 7.4 of the specs overview: specs/Algorand_v1_spec-2.pdf at ac2255d586c4474d4ebcf3809acccb59b7ef34ff · algorandfoundation/specs · GitHub

A malicious node can do anything: vote for invalid blocks, vote for multiple blocks, do not vote at all.