Omniscia Nexera Audit

DataPointRegistry Code Style Findings

DataPointRegistry Code Style Findings

DPR-01C: Ineffectual Usage of Safe Arithmetics

Description:

The linked mathematical operation is guaranteed to be performed safely by logical inference, such as surrounding conditionals evaluated in require checks or if-else constructs.

Example:

contracts/DataPointRegistry.sol
37uint256 newCounter = ++_counter;
38if (newCounter > type(uint32).max) revert CounterOverflow();

Recommendation:

Given that safe arithmetics are toggled on by default in pragma versions of 0.8.X, we advise the linked statement to be wrapped in an unchecked code block thereby optimizing its execution cost.

Alleviation:

The referenced operation has been wrapped in an unchecked code block as advised, optimizing its gas cost.

DPR-02C: Inefficient Invocations of DataPointRegistry::isAdmin

Description:

The referenced statements will inefficiently invoke the DataPointRegistry::isAdmin function even though they have both locally cached the _accessData lookup to a dpd variable.

Example:

contracts/DataPointRegistry.sol
56/// @inheritdoc IDataPointRegistry
57function grantAdminRole(DataPoint dp, address account) external returns (bool) {
58 DPAccessData storage dpd = _accessData[dp];
59 if (msg.sender != dpd.owner) revert InvalidDataPointOwner(dp, msg.sender);
60 if (!isAdmin(dp, account)) {
61 dpd.isAdmin[account] = true;
62 emit DataPointAdminGranted(dp, account);
63 return true;
64 }
65 return false;
66}

Recommendation:

We advise the local variable to be utilized directly and its isAdmin mapping to be accessed, optimizing the gas cost of both functions.

Alleviation:

The code has been refactored to utilize an EnumerableSet rendering the advised optimization no longer applicable.