code-423n4 / 2022-02-jpyc-findings

1 stars 0 forks source link

Gas Optimizations #49

Open code423n4 opened 2 years ago

code423n4 commented 2 years ago
  1. set constant for save more gas

https://github.com/code-423n4/2022-02-jpyc/blob/main/contracts/v2/FiatTokenV2.sol https://github.com/code-423n4/2022-02-jpyc/blob/main/contracts/v1/FiatTokenV1.sol

on `FiatTokenV2.sol` and `FiatTokenV1.sol`, `name` , `symbol`, `decimals`  and `curenccy` can be set as constant inside contract so it would be more gas efficient.
  1. Unnecesary SafeERC20 lib usage

https://github.com/code-423n4/2022-02-jypc/blob/main/contracts/v1/Rescuable.sol#L32 https://github.com/code-423n4/2022-02-jpyc/blob/main/contracts/v1/Rescuable.sol#L65

The only SafeERC20.functions() are used in this contract is safeTransferFrom() & safeTransfer(). Using transfer & transferFrom function from ERC20 is the better way for gas saving

  1. Use the same compiler as before for saving more gas

https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Address.sol https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/IERC20.sol https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/utils/SafeERC20.sol https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/StorageSlot.sol https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/interfaces/draft-IERC1822.sol

  1. Dont set uint value https://github.com/code-423n4/2022-02-jpyc/blob/main/contracts/v1/FiatTokenV1.sol#L58 the default value of uint is 0. dont set it to save gas

    uint256 internal totalSupply_ = 0;
  2. != operator can save gas https://github.com/code-423n4/2022-02-jpyc/blob/main/contracts/v1/FiatTokenV1.sol#L136 using != to validate _amount can save gas

thurendous commented 2 years ago

Unnecesary SafeERC20 lib usage

Fixed and thanks!

Final change can be viewed here.