Skip to content

commitment: branchCacheEntry stores no key — a maphash collision serves the wrong branch #22212

Description

@yperbasis

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.

Metadata

Metadata

Labels

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions