Unordered collections serialize differently across nodes, splitting consensus
- Severity
- High
- Class
- Consensus & liveness
- System
- Smart-contract Layer-1
The same contract state serializes to different bytes on different nodes, producing divergent state roots and a permanent chain split.
Contract state included collections whose iteration order wasn't fixed. When that state was serialized to compute a state root, different nodes could produce different byte sequences for the same logical state — and different bytes mean different roots.
Once two honest nodes disagree on the state root, they're on different chains, and the split is permanent.
Why it rated High
A consensus split is a severe liveness and integrity failure; here it stems from something as quiet as unordered iteration.
The fix class
Impose a deterministic ordering before serializing any collection that feeds the state root.

