In PreMarkets.createOffer()
the offerId which is used for generating addresses starts with 0, and it is incremented each time this function is called.
When generating the virtual addresses initially offerId=0 is used
A couple of code lines later the offerId is incremented by 1. Now the new value is 1
Later in createOffer()
a new entry for offerInfoMap
and stockInfoMap
are created. However the offerId assigned as id to them is not the same one which was used for generating their addresses(offerAddr, stockAddr).
This creates an inconsistency between the id's of the mappings and the way their keys were generated. This might be confusing for the users.
https://github.com/Cyfrin/2024-08-tadle/blob/main/src/core/PreMarkets.sol#L67-L69
https://github.com/Cyfrin/2024-08-tadle/blob/main/src/core/PreMarkets.sol#L83
https://github.com/Cyfrin/2024-08-tadle/blob/main/src/core/PreMarkets.sol#L116-L117
https://github.com/Cyfrin/2024-08-tadle/blob/main/src/core/PreMarkets.sol#L134-L135
Inconsistency between the offerId which was used for generating the offer, stock addresses and the values for id in: offerInfoMap.id
and stockInfoMap.id
Manual review
Increment the offerId at the end of createOffer()
, not in the middle of the function
I believe this is valid low severity, although there is inconsistency here when using the correct `offerId` for assigning offerIds and generating the unique addresses as seen [here](https://github.com/Cyfrin/2024-08-tadle/blob/04fd8634701697184a3f3a5558b41c109866e5f8/src/core/PreMarkets.sol#L67-L69), this is purely an accounting error for offerIds. If we generate the offerId using current `offerId - 1`, the appropriate listing/taker orders can still be created against those offers.
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.