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

2 stars 0 forks source link

Avoid unnecessary storage read can save gas #153

Open code423n4 opened 2 years ago

code423n4 commented 2 years ago

Handle

WatchPug

Vulnerability details

https://github.com/code-423n4/2022-01-timeswap/blob/bf50d2a8bb93a5571f35f96bd74af54d9c92a210/Timeswap/Timeswap-V1-Core/contracts/TimeswapPair.sol#L157-L163

if (pool.state.totalLiquidity == 0) {
    uint256 liquidityTotal = MintMath.getLiquidityTotal(xIncrease);
    liquidityOut = MintMath.getLiquidity(maturity, liquidityTotal, protocolFee);

    pool.state.totalLiquidity += liquidityTotal;
    pool.liquidities[factory.owner()] += liquidityTotal - liquidityOut;
}

At L157, we know that pool.state.totalLiquidity == 0, therefore at L161 += can be replaced with =.

Using = directly can avoid unnecessary storage read of pool.state.totalLiquidity and save some gas.

Recommendation

Change to:

if (pool.state.totalLiquidity == 0) {
    uint256 liquidityTotal = MintMath.getLiquidityTotal(xIncrease);
    liquidityOut = MintMath.getLiquidity(maturity, liquidityTotal, protocolFee);

    pool.state.totalLiquidity = liquidityTotal;
    pool.liquidities[factory.owner()] += liquidityTotal - liquidityOut;
}
Mathepreneur commented 2 years ago

The refactor makes this unnecessary.