DeFi
Read-Only Reentrancy
// Burns liquidity and transfers pool tokens.
_burn(address(this),params.liquidity); // burn LP tokens
_transferTokens(token0, params.to, params.amount0, params.withdrawMode);
_transferTokens(token1, params.to, params.amount1, params.withdrawMode);
// Updates balances.
unchecked {
params.balance0 -= params.amount0;
params.balance1 -= params.amount1;
}
// Calls callback with data.
// Reserves are not updated at this point to allow read the old values.
if (_callback != address(0)) {
params.sender = _getVerifiedSender(_sender);
params.callbackData = _callbackData;
// Call ctoken for borrowing
ICallback(_callback).syncSwapBaseBurnCallback(params);
}
//reserve not updated
_updateReserves(params.balance0, params.balance1);
if (_feeOn) {
invariantLast = _computelnvariant(params.balance0, params.balance1);
}
_amounts = new TokenAmount[](2);
_amounts[0] = TokenAmount(token0, params.amount0);
_amounts[1] = TokenAmount(token1, params.amount1);
emit Burn(msg.sender, params.amount0, params.amount1, params.liquidity, params.to);Slippage
Last updated