Open code423n4 opened 2 years ago
Using bools for storage incurs overhead abi.encode() is less efficient than abi.encodePacked() require() strings longer than 32 bytes cost extra gas
We need to check if these are ture. If they are true we will fix them.
Using 1e18 rather than 10**18 saves gas
We think this is valid. And we will fix this.
Using > 0 costs more gas than != 0 when used on uints in a require() statement It costs more gas to initialize variables to zero than to let the default of zero be applied
This part is the duplicate of #2
Using bools for storage incurs overhead
Using 1e18 rather than 10**18 saves gas
Fixed and thanks!
Final change can be viewed here.
Using
bool
s for storage incurs overheadhttps://github.com/OpenZeppelin/openzeppelin-contracts/blob/58f635312aa21f947cae5f8578638a85aa2519f5/contracts/security/ReentrancyGuard.sol#L23-L27
https://github.com/code-423n4/2022-02-jpyc/blob/main/contracts/v1/EIP3009.sol#L53
https://github.com/code-423n4/2022-02-jpyc/blob/main/contracts/v1/FiatTokenV1.sol#L54
https://github.com/code-423n4/2022-02-jpyc/blob/main/contracts/v1/FiatTokenV1.sol#L59
https://github.com/code-423n4/2022-02-jpyc/blob/main/contracts/v1/FiatTokenV1.altered.sol#L54
https://github.com/code-423n4/2022-02-jpyc/blob/main/contracts/v1/FiatTokenV1.altered.sol#L59
https://github.com/code-423n4/2022-02-jpyc/blob/main/contracts/v1/Pausable.sol#L49
https://github.com/code-423n4/2022-02-jpyc/blob/main/contracts/v1/Blocklistable.sol#L35
https://github.com/code-423n4/2022-02-jpyc/blob/main/contracts/v2/FiatTokenV2.sol#L54
https://github.com/code-423n4/2022-02-jpyc/blob/main/contracts/v2/FiatTokenV2.sol#L59
https://github.com/code-423n4/2022-02-jpyc/blob/main/contracts/v2/FiatTokenV2.sol#L62
abi.encode()
is less efficient thanabi.encodePacked()
https://github.com/code-423n4/2022-02-jpyc/blob/main/contracts/v1/EIP3009.sol#L102
https://github.com/code-423n4/2022-02-jpyc/blob/main/contracts/v1/EIP3009.sol#L148
https://github.com/code-423n4/2022-02-jpyc/blob/main/contracts/v1/EIP3009.sol#L183
https://github.com/code-423n4/2022-02-jpyc/blob/main/contracts/v1/EIP2612.sol#L72
require()
strings longer than 32 bytes cost extra gashttps://github.com/code-423n4/2022-02-jpyc/blob/main/contracts/util/SafeERC20.sol#L76
https://github.com/code-423n4/2022-02-jpyc/blob/main/contracts/util/SafeERC20.sol#L96
https://github.com/code-423n4/2022-02-jpyc/blob/main/contracts/util/StorageSlot.sol#L23*
https://github.com/code-423n4/2022-02-jpyc/blob/main/contracts/util/Address.sol#L59
https://github.com/code-423n4/2022-02-jpyc/blob/main/contracts/util/Address.sol#L129
https://github.com/code-423n4/2022-02-jpyc/blob/main/contracts/util/Address.sol#L157
https://github.com/code-423n4/2022-02-jpyc/blob/main/contracts/util/Address.sol#L184
https://github.com/code-423n4/2022-02-jpyc/blob/main/contracts/upgradeability/ERC1967Upgrade.sol#L45
https://github.com/code-423n4/2022-02-jpyc/blob/main/contracts/upgradeability/ERC1967Upgrade.sol#L92
https://github.com/code-423n4/2022-02-jpyc/blob/main/contracts/v1/EIP3009.sol#L145
https://github.com/code-423n4/2022-02-jpyc/blob/main/contracts/v1/FiatTokenV1.sol#L78
https://github.com/code-423n4/2022-02-jpyc/blob/main/contracts/v1/FiatTokenV1.sol#L116
https://github.com/code-423n4/2022-02-jpyc/blob/main/contracts/v1/FiatTokenV1.sol#L135
https://github.com/code-423n4/2022-02-jpyc/blob/main/contracts/v1/FiatTokenV1.sol#L136
https://github.com/code-423n4/2022-02-jpyc/blob/main/contracts/v1/FiatTokenV1.sol#L245
https://github.com/code-423n4/2022-02-jpyc/blob/main/contracts/v1/FiatTokenV1.sol#L246
https://github.com/code-423n4/2022-02-jpyc/blob/main/contracts/v1/FiatTokenV1.sol#L309
https://github.com/code-423n4/2022-02-jpyc/blob/main/contracts/v1/FiatTokenV1.sol#L310
https://github.com/code-423n4/2022-02-jpyc/blob/main/contracts/v1/FiatTokenV1.sol#L368
https://github.com/code-423n4/2022-02-jpyc/blob/main/contracts/v1/FiatTokenV1.sol#L369
https://github.com/code-423n4/2022-02-jpyc/blob/main/contracts/v1/FiatTokenV1.altered.sol#L78
https://github.com/code-423n4/2022-02-jpyc/blob/main/contracts/v1/FiatTokenV1.altered.sol#L116
https://github.com/code-423n4/2022-02-jpyc/blob/main/contracts/v1/FiatTokenV1.altered.sol#L135
https://github.com/code-423n4/2022-02-jpyc/blob/main/contracts/v1/FiatTokenV1.altered.sol#L136
https://github.com/code-423n4/2022-02-jpyc/blob/main/contracts/v1/FiatTokenV1.altered.sol#L245
https://github.com/code-423n4/2022-02-jpyc/blob/main/contracts/v1/FiatTokenV1.altered.sol#L246
https://github.com/code-423n4/2022-02-jpyc/blob/main/contracts/v1/FiatTokenV1.altered.sol#L309
https://github.com/code-423n4/2022-02-jpyc/blob/main/contracts/v1/FiatTokenV1.altered.sol#L310
https://github.com/code-423n4/2022-02-jpyc/blob/main/contracts/v1/FiatTokenV1.altered.sol#L368
https://github.com/code-423n4/2022-02-jpyc/blob/main/contracts/v1/FiatTokenV1.altered.sol#L369
https://github.com/code-423n4/2022-02-jpyc/blob/main/contracts/v1/Pausable.sol#L63
https://github.com/code-423n4/2022-02-jpyc/blob/main/contracts/v1/Ownable.sol#L52
https://github.com/code-423n4/2022-02-jpyc/blob/main/contracts/v1/Rescuable.sol#L50
https://github.com/code-423n4/2022-02-jpyc/blob/main/contracts/v2/FiatTokenV2.sol#L84
https://github.com/code-423n4/2022-02-jpyc/blob/main/contracts/v2/FiatTokenV2.sol#L122
https://github.com/code-423n4/2022-02-jpyc/blob/main/contracts/v2/FiatTokenV2.sol#L142
https://github.com/code-423n4/2022-02-jpyc/blob/main/contracts/v2/FiatTokenV2.sol#L143
https://github.com/code-423n4/2022-02-jpyc/blob/main/contracts/v2/FiatTokenV2.sol#L253
https://github.com/code-423n4/2022-02-jpyc/blob/main/contracts/v2/FiatTokenV2.sol#L254
https://github.com/code-423n4/2022-02-jpyc/blob/main/contracts/v2/FiatTokenV2.sol#L319
https://github.com/code-423n4/2022-02-jpyc/blob/main/contracts/v2/FiatTokenV2.sol#L320
https://github.com/code-423n4/2022-02-jpyc/blob/main/contracts/v2/FiatTokenV2.sol#L378
https://github.com/code-423n4/2022-02-jpyc/blob/main/contracts/v2/FiatTokenV2.sol#L379
Using
1e18
rather than10**18
saves gashttps://github.com/code-423n4/2022-02-jpyc/blob/main/contracts/v2/FiatTokenV2.sol#L624
Functions not called by the contract itself should be
external
rather thanpublic
https://github.com/code-423n4/2022-02-jpyc/blob/main/contracts/v1/Ownable.sol#L51
https://github.com/code-423n4/2022-02-jpyc/blob/main/contracts/v2/FiatTokenV2test.sol#L11
Using
> 0
costs more gas than!= 0
when used on uints in arequire()
statementhttps://github.com/code-423n4/2022-02-jpyc/blob/main/contracts/v1/FiatTokenV1.sol#L136
https://github.com/code-423n4/2022-02-jpyc/blob/main/contracts/v1/FiatTokenV1.sol#L368
https://github.com/code-423n4/2022-02-jpyc/blob/main/contracts/v1/FiatTokenV1.altered.sol#L136
https://github.com/code-423n4/2022-02-jpyc/blob/main/contracts/v1/FiatTokenV1.altered.sol#L368
https://github.com/code-423n4/2022-02-jpyc/blob/main/contracts/v2/FiatTokenV2.sol#L143
https://github.com/code-423n4/2022-02-jpyc/blob/main/contracts/v2/FiatTokenV2.sol#L378
It costs more gas to initialize variables to zero than to let the default of zero be applied
https://github.com/code-423n4/2022-02-jpyc/blob/main/contracts/v1/FiatTokenV1.sol#L58
https://github.com/code-423n4/2022-02-jpyc/blob/main/contracts/v1/FiatTokenV1.sol#L350
https://github.com/code-423n4/2022-02-jpyc/blob/main/contracts/v1/FiatTokenV1.altered.sol#L58
https://github.com/code-423n4/2022-02-jpyc/blob/main/contracts/v2/FiatTokenV2.sol#L58