F-2025-0013·gas-optimization
Use Custom errors instead of string-based require statements
TL;DR
Protocol uses string-based require statements; switching to custom errors saves gas, improves debugging context, and integrates better with ABI tools.
Severity
INFO
Impact
LOW
Likelihood
LOW
Method
MManual review
CAT.
Complexity
LOW
Exploitability
LOW
02Section · Description
Description
The MatChain Genesis License protocol uses string-based require statements for error handling:
solidity
require($._claimQueueIds.contains(index_), "Invalid Claim request");require(to_ == msg.sender, "Invalid recipient");
This approach is less gas-efficient than custom errors (available since Solidity 0.8.4), provides limited context for debugging, and lacks ABI integration for frontends.
03Section · Recommendation
Recommendation
Implement custom errors throughout the protocol:
solidity
// In interfaceserror ClaimNotInActiveQueue(uint256 claimId);error InvalidRecipient(address expected, address actual);// In implementationif (!$._claimQueueIds.contains(index_)) {revert ClaimNotInActiveQueue(index_);}
This change would reduce gas costs, improve error clarity with dynamic values, and enhance integration with development tools.

