Messages between validator nodes to do the polka

I have a question concerning the number of messages sent between the validators of a Tendermint system:

See: https://tendermint.com/docs/introduction/what-is-tendermint.html#consensus-overview
As far as I am aware, the phases of a block creation cycle are: Propose, Prevote, Precommit and Commit

See: https://tendermint.com/docs/spec/p2p/connection.html#mconnection
The P2P messaging is organised in unique channels between the peers and incoming messages are processed by the respective reactor.

This means that for a block creation cycle the following messages are passed between N nodes:

Proposal:
Proposer: N - 1 messages containing the proposed block hash

Prevote:
Per validator: N - 1 messages containing the prevote
Total: N \cdot (N - 1) messages containing prevotes

Precommit:
Per validator: N - 1 messages containing precommit
Total: N \cdot (N - 1) messages containing precommits

Commit:
No messages are necessary to confirm commit as the requirements for a valid commit are defined by the protocol.

In total this would yield (2 N + 1) \cdot (N - 1) --> 2 \cdot N^2 - N - 1

So in a 10 validator system we require 2 \cdot 10^2 - 10 - 1 = 189 messages.

First of all my question is: Is this correct?

And if it is: Could multiple validators “subscribe” to a single channel to enable a broadcast message type, which would reduce the number of messages to 2 \cdot N + 1 as each node just has to broadcast their prevote and precommit messages only once.

Maybe I am totally off with this, but I would appreciate any clarification or points to read up on it :blush:

Is N the number of peers you are connected to or the number of validators?

Also we don’t necessarily send every message to every peer. Peers might tell us, “hey I have this vote so don’t send it to me”.

There’s more detail here: https://tendermint.com/docs/spec/reactors/consensus/consensus-reactor.html

And there’s an even better description / formalization in progress