Q

!

uint8uint64...uint128boolは必ずしもガスが安いわけではない」

EVMは32bytesを一度に処理するので、boolは一度32bytesに変換される過程で余計なガスがかかってしまいます。

だから今回は2通りしかなくても、uint256を使う方がガスの観点では好ましいのです。

// openzeppelinより!
abstract contract ReentrancyGuard {
     uint256 private constant _NOT_ENTERED = 1;
     uint256 private constant _ENTERED = 2;
 
     uint256 private _status;
 
     constructor() {
         _status = _NOT_ENTERED;
     }
 
     modifier nonReentrant() {
         require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
         _status = _ENTERED;
         _;
         _status = _NOT_ENTERED;
     }
 }
// Good
uint256 a; // slot 0
uint128 b; // slot 1
uint128 c; // slot 1 

// Bad
uint128 b; // slot 0
uint256 a; // slot 1 
uint128 c; // slot 2