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.