Findings
Informational
3 findings
1 fixed
2 acknowledged
Informational3 findings
Global mintId namespace allows cross-token key consumption
State
- Acknowledged
Severity
- Severity: Informational
Submitted by
Sujith S
Description
usedCreateIdsis shared globally across every registered token and caller. A whitelisted caller can consume an ID that another token’s caller intended to use. This is informational becausecreate()is only exposed to trusted whitelisted callers.Recommendation
Document the global trust assumption, if its intended.
Coinbase: Acknowledged.
Cantina: Acknowledged.
Empty mint IDs are accepted
State
- Acknowledged
Severity
- Severity: Informational
Submitted by
Sujith S
Description
create()does not validate thatmintIdcontains any data. The first call using""asmintIdsucceeds and consumes the global empty-string key.Recommendation
Reject empty IDs with if
(bytes(mintId).length == 0) revert InvalidMintId();Coinbase: Acknowledged. There is no on-chain schema so these values will be opaque to the contract itself.
Cantina: Acknowledged.
No view function is available to query consumed mint IDs
State
Severity
- Severity: Informational
Submitted by
Sujith S
Description
usedCreateIdsis stored privately without an external getter. Integrations must scanCreatedlogs or attempt a mint and handleDuplicateCreateId.Recommendation
Consider adding a view function:
isCreateIdUsed(string calldata mintId) external view returns (bool)Coinbase: Fixed in d809323
Cantina: Verified fix.