I'm interested in learning how Solana's consensus mechanism works. I understand that in a proof of stake system, stake is bonded (usually in a smart contract). While this is a great way for creating an "identity" for validators, I'm wondering if the rest of the consensus mechanism is carried out on or off-chain. For example, are block proposals, attestations, and reports for dishonest/offline nodes sent in a transaction to the staking contract? Or are they carried out off-chain through the use of a gossip protocol? Or maybe a combination of both?
Please let me know and provide any resources I can read myself,
Thanks!