An individual FireFly instance preserves the order that it received messages from application instances.
Where possible, batching is used to roll-up hundreds of transactions into a single blockchain transaction.
Blockchain allows these messages to be globally sequenced with messages submitted by other members of the network.
All member FireFly runtimes see every transaction in the same sequence.
This includes when transactions are being submitted by both sides concurrently.
A queue of events is maintained for each matching app subscription.
The public/private payloads travel separately to the blockchain, and arrive at different times. FireFly assembles these together prior to delivery.
If data associated with a blockchain transaction is late, or does not arrive, all messages on the same “context” will be blocked.
It is good practice to send messages that don’t need to be processed in order, with different “context” fields. For example use the ID of your business transaction, or other long-running process / customer identifier.
Events are processed consistently by all parties.
All FireFly runtimes see every event that they are subscribed to, in the same sequence.
The submitter must also apply the logic only in the sequence ordered by the blockhain. It cannot assume the order even if it is the member that submitted it.