CachingBeaconChainSpec::hash_tree_root can be passed with a mutable object, e.g. MutableBeaconState or WriteList/WriteVector. Thus it can return wrong value, if the mutable object is modified, since the caching code uses Object identity (BeaconStateImple::hashCode is not overridden).
There are several possible ways to solve the problem:
- implement proper
BeaconStateImple::hashCode to match the BeaconStateImple::equals implementation
- Invalidate cache based on updates
- Do not cache mutable objects. This will require implementing an appropriate flag/interface to manifest (im)mutability.
CachingBeaconChainSpec::hash_tree_rootcan be passed with a mutable object, e.g.MutableBeaconStateorWriteList/WriteVector. Thus it can return wrong value, if the mutable object is modified, since the caching code usesObjectidentity (BeaconStateImple::hashCodeis not overridden).There are several possible ways to solve the problem:
BeaconStateImple::hashCodeto match theBeaconStateImple::equalsimplementation