Omniscia fetchai Audit
ACT Code Style Findings
ACT Code Style Findings
ACT-01C: Inefficient Swap
Type | Severity | Location |
---|---|---|
Gas Optimization | Informational | ACT.sol:L191-L208 |
Description:
The swapACTData
function is meant to swap the data of two Detail
structs but does so inefficiently.
Example:
contracts/RWAT/ACT.sol
186function swapACTData(uint256 actId0, uint256 actId1) external whenNotPaused() {187 requireIsPrivilegedRole();188 require(isValidId(lookupHashName, actId0), "ACT: invalid actId0");189 require(isValidId(lookupHashName, actId1), "ACT: invalid actId1");190
191 Detail memory detailsTemp;192 Detail storage details0 = actDetails[actId0];193 Detail storage details1 = actDetails[actId1];194
195 // act0 to temp196 detailsTemp.contractHashName = details0.contractHashName;197 detailsTemp.assetId = details0.assetId;198 detailsTemp.totalMinted = details0.totalMinted;199
200 // act1 to act0201 details0.contractHashName = details1.contractHashName;202 details0.assetId = details1.assetId;203 details0.totalMinted = details1.totalMinted;204
205 // temp to act 1206 details1.contractHashName = detailsTemp.contractHashName;207 details1.assetId = detailsTemp.assetId;208 details1.totalMinted = detailsTemp.totalMinted;209
210 emit SwapACTData(211 actId0,212 details1.assetId,213 details1.contractHashName,214 details1.totalMinted,215 actId1,216 details0.assetId,217 details0.contractHashName,218 details0.totalMinted219 );220}
Recommendation:
We advise direct assignments to be utilized whereby detailsTemp
is set to actDetails[actId0]
, actDetails[actId0]
is set to actDetails[actId1]
and finally actDetails[actId1]
is set to detailsTemp
.
Alleviation:
The swapping of data now properly uses direct assignments optimizing the statements of the function.