F-2025-0013·gas-optimization

Use Custom errors instead of string-based require statements

Acknowledgednftstakingeip-712
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 interfaces
error ClaimNotInActiveQueue(uint256 claimId);
error InvalidRecipient(address expected, address actual);
// In implementation
if (!$._claimQueueIds.contains(index_)) {
revert ClaimNotInActiveQueue(index_);
}

This change would reduce gas costs, improve error clarity with dynamic values, and enhance integration with development tools.

F-2025-0013

oog
zealynx

Smart Contract Security Digest

Monthly exploit breakdowns, audit checklists, and DeFi security research — straight to your inbox

© 2026 Zealynx