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.