Ok, so I am trying to grok how, if at all, state moves through this setup.
Let's say a stellar node receives a transaction from a client that it wants to propose to the network. The node then sends an SCP nominate message with the transaction to its neighbors (a set of whom represent a quorum slice for the sending node). Let's do this with just two nodes for now. I think what happens is as follows:
Node 1 sends SCP nominate with Tx1 state: Vote
Node 2 receives SCP nominate with Tx1 state: Vote and replies to Node 1 with state: Accept
Node 1 receives SCP nominate with Tx1 state: Accept and replies to Node 2 with state: Accept
This concludes nominate (the final state of Nominate being "prepared"). Then we do commit.
Node 1 sends SCP Commit with Tx1 state: Vote
Node 2 receives SCP Commit with Tx1 state: Vote and replies to Node 1 with state: Accept
Node 1 receives SCP Commit with Tx1 state: Accept and replies to Node 2 with state: Accept
This concludes commit (the final state is that the transaction is written to the ledger/disk for all tx's in the ballot). Then we do externalize.
Node 1 sends SCP Externalize with Tx1 state: Vote
Node 2 receives SCP Externalize with Tx1 state: Vote and replies to Node 1 with state: Accept
Node 1 receives SCP Externalize with Tx1 state: Accept and replies to Node 2 with state: Accept
Is this correct? Can someone also clarify for me what externalize does that commit does not do?
If this is the case, is it possible that, assuming I disable the ability for nodes to change quorum slices mid-vote, after I have completed the 'prepare' state, I now have a set of nodes that represent quorum and I can just use a simpler algorithm like practical byzantine fault tolerance to federate the transactions?
It feels like the stellar algorithm is a 3-phase commit 3x and I'm not sure why we have to do the full 3-phase commit 3x if we completed it once (that is to say I don't know that doing 3PC again for the commit and externalization steps actually helps prevent byzantine faults in a cheaper way than PBFT).