Both the horseId => fedTimestamp and (owner, operator) => approval for all mappings are used without a storage slot.
Only the value of the keys is hashed to define the storage slot location and this could result in a hash collision, in particular if more features are added to the contract.
If two mappings contain the same key (for example 0), then they will both use the same storage location (keccak256(0)) for the same key.
If a storage slot is defined for each mapping, then the storage pointer will be added to the key hashes, which will guarantee that both mappings will use different storage pointers for their keys, thus avoiding collision.
See Hashmap.huff::STORE_ELEMENT and Hashmap.huff::GET_SLOT_FROM_KEY.
Define a storage slot for all mappings and use
STORE_ELEMENT_FROM_KEYS for the horseId => fedTimestamp mapping.
STORE_ELEMENT_FROM_KEYS_2D for the (owner, operator) => approval for all mapping.
The contest is live. Earn rewards by submitting a finding.
This is your time to appeal against judgements on your submissions.
Appeals are being carefully reviewed by our judges.