code-423n4 / 2022-01-elasticswap-findings

1 stars 0 forks source link

Use short reason strings can save gas #149

Closed code423n4 closed 2 years ago

code423n4 commented 2 years ago

Handle

WatchPug

Vulnerability details

Every reason string takes at least 32 bytes.

Use short reason strings that fits in 32 bytes or it will become more expensive.

Instances include:

https://github.com/code-423n4/2022-01-elasticswap/blob/d107a198c0d10fbe254d69ffe5be3e40894ff078/elasticswap/src/contracts/Exchange.sol#L134-L138

require(
    IERC20(baseToken).balanceOf(address(this)) ==
        tokenQtys.baseTokenQty,
    "Exchange: FEE_ON_TRANSFER_NOT_SUPPORTED"
);

https://github.com/code-423n4/2022-01-elasticswap/blob/d107a198c0d10fbe254d69ffe5be3e40894ff078/elasticswap/src/contracts/Exchange.sol#L177-L180

require(
    _baseTokenQtyMin > 0 && _quoteTokenQtyMin > 0,
    "Exchange: MINS_MUST_BE_GREATER_THAN_ZERO"
);

https://github.com/code-423n4/2022-01-elasticswap/blob/d107a198c0d10fbe254d69ffe5be3e40894ff078/elasticswap/src/libraries/MathLib.sol#L495-L502

require(
    _baseTokenQtyDesired > 0,
    "MathLib: INSUFFICIENT_BASE_QTY_DESIRED"
);
require(
    _quoteTokenQtyDesired > 0,
    "MathLib: INSUFFICIENT_QUOTE_QTY_DESIRED"
);

https://github.com/code-423n4/2022-01-elasticswap/blob/d107a198c0d10fbe254d69ffe5be3e40894ff078/elasticswap/src/libraries/MathLib.sol#L265-L268

require(
    baseTokenQtyDecayChange > 0,
    "MathLib: INSUFFICIENT_CHANGE_IN_DECAY"
);

https://github.com/code-423n4/2022-01-elasticswap/blob/d107a198c0d10fbe254d69ffe5be3e40894ff078/elasticswap/src/contracts/ExchangeFactory.sol#L44-L53

require(_baseToken != _quoteToken, "ExchangeFactory: IDENTICAL_TOKENS");
require(
    _baseToken != address(0) && _quoteToken != address(0),
    "ExchangeFactory: INVALID_TOKEN_ADDRESS"
);
require(
    exchangeAddressByTokenAddress[_baseToken][_quoteToken] ==
        address(0),
    "ExchangeFactory: DUPLICATE_EXCHANGE"
);

https://github.com/code-423n4/2022-01-elasticswap/blob/d107a198c0d10fbe254d69ffe5be3e40894ff078/elasticswap/src/contracts/ExchangeFactory.sol#L73-L76

require(
    _feeAddress != address(0) && _feeAddress != feeAddress_,
    "ExchangeFactory: INVAlID_FEE_ADDRESS"
);
0xean commented 2 years ago

dupe of #159