That is a very good question.
The short answer is that there is no risk of forking in that case. The only thing that may happen is that the blockchain stalls until the network recovers.
Here are some more details.
To participate in consensus, an account needs to be marked online.
This is done by sending a special transaction, called a key registration transaction - Algorand Developer Docs).
The account is marked online 320 rounds after the key registration transaction is sent to the blockchain.
The sortition algorithm randomly selects a committee of online accounts.
To understand how things work, let’s make the following simplifying assumptions
- the committee is composed of 1,000 parties
- a block is committed if at least 700 of these parties vote for it
- each account on the blockchain has exactly 1 Algo. (Accounts with more Algos can be selected multiple times in a committee, as if each Algo of the account was selected individually.)
- there are X online Algos
Each online account (with 1 Algo) will be selected in the committee with probability 1,000 / X.
Note that the blockchain knows X because it knows the list of online accounts.
Now, if the network is partitioned, say 50% / 50%, with high probability, each group in the partition will have 500 selected parties in the committee. This is not enough to get 700 votes for the same block. Thus the blockchain stalls.
Note that since no blocks can be committed, in particular no key registration can be made, so no new party can vote in the consensus.
This really means that the blockchain just stalls until the network recovers.
A few remarks:
- The fact that the blockchain stalls in case of a 50/50 partition is unavoidable. It is essentially a consequence of the CAP theorem: Algorand is network tolerant and consistent, so it cannot be available in case of some network partitions.
- One great feature is that after the network recovers, the Algorand blockchain commits new blocks almost immediately. There is no long process to fix the network recovery.
- If the network is partitioned 90/10, then the largest group will grow the blockchain while the smaller group will just not see the new blocks. This is perfectly fine. There will still be no fork: the smallest group cannot commit to new block by itself.