Ok so this is what I found so far
1- transaction need to be deterministic, this mean the value it write depend only on the value it read it’s not allowed to read wall clock time or generate random number ...
2- to queue a transaction for execution you need to define the full set of key that will be read and written, the key that will be touched are not allowed to dynamically depend on the value read during transaction execution.
So once the transaction is queued all partition would process it in the same order relative to other transaction ( the order transaction are in the queue) and all worker responsible for some of the key this transaction touch can be determined statically.
Once all those worker reach this transaction position in the queue, they first execute all the read operation and send the value read to all worker that will perform at least one write. Then all worker that are responsible for at least one write prepare the write locally and report if the transaction should rollback or not to all other node. If all node agree to commit all worker commit the local prepared writes.