branchCacheEntry stores no key: the cache is keyed by a 64-bit maphash of the prefix (execution/commitment/branch_cache.go), so a hash collision serves another prefix's branch bytes to Get. Because the maphash seed is per-process random, a collision is node-divergent: the affected node folds wrong branch bytes and computes a state root no other node computes — the wrong-trie-root consensus-split signature (#22152 class), with no shared-config way to reproduce it.
Astronomically unlikely at ~50k entries in a 2^64 hash space, but cheap to close: store the prefix in the entry and verify it on Get, treating a mismatch as a miss. Memory cost is tens of bytes per entry at the current cap.
branchCacheEntrystores no key: the cache is keyed by a 64-bit maphash of the prefix (execution/commitment/branch_cache.go), so a hash collision serves another prefix's branch bytes toGet. Because the maphash seed is per-process random, a collision is node-divergent: the affected node folds wrong branch bytes and computes a state root no other node computes — the wrong-trie-root consensus-split signature (#22152 class), with no shared-config way to reproduce it.Astronomically unlikely at ~50k entries in a 2^64 hash space, but cheap to close: store the prefix in the entry and verify it on
Get, treating a mismatch as a miss. Memory cost is tens of bytes per entry at the current cap.