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.