fix: Fixed divisions in getLimits, added RESERVE_LIMIT_FACTOR as constant

This commit is contained in:
domenicodev
2024-01-23 19:06:02 +01:00
parent a4693f5300
commit 16237824a5
2 changed files with 9 additions and 4 deletions

View File

@@ -4,6 +4,7 @@ pragma solidity ^0.8.13;
/// @dev Wrapped imports (incl. ISwapAdapter and IERC20) are included in utils
import "./AngleUtils.sol";
import "forge-std/Test.sol";
/// @title AngleAdapter
contract AngleAdapter is ISwapAdapter {
@@ -59,7 +60,7 @@ contract AngleAdapter is ISwapAdapter {
/// @dev mint may have no limits, but we underestimate them to make sure, with the same amount of sellToken.
/// We use the quoteIn (incl. fee), because calculating fee requires a part of the implementation of
/// the Angle Diamond Storage, and therefore redundant functions and excessive contract size, with an high complexity.
/// In addition, we underestimate to * 0.9 to ensure swaps with OrderSide.Buy won't fail anyway.
/// In addition, we underestimate to / RESERVE_LIMIT_FACTOR to ensure swaps with OrderSide.Buy won't fail anyway.
function getLimits(bytes32, IERC20 sellToken, IERC20 buyToken)
external
view
@@ -79,8 +80,9 @@ contract AngleAdapter is ISwapAdapter {
else {
limits[0] = sellToken.balanceOf(transmuterAddress);
}
limits[0] = limits[0] * 90 / 100;
limits[1] = transmuter.quoteIn(limits[0], sellTokenAddress, buyTokenAddress);
limits[1] = limits[1] / RESERVE_LIMIT_FACTOR;
limits[0] = limits[0] / RESERVE_LIMIT_FACTOR;
}
else { // burn(sell agToken)
Collateral memory collatInfo = transmuter.getCollateralInfo(buyTokenAddress);
@@ -91,9 +93,9 @@ contract AngleAdapter is ISwapAdapter {
else {
collatLimit = buyToken.balanceOf(transmuterAddress);
}
collatLimit = collatLimit * 90 / 100;
limits[0] = transmuter.quoteIn(collatLimit, buyTokenAddress, sellTokenAddress);
limits[1] = collatLimit;
limits[1] = collatLimit / RESERVE_LIMIT_FACTOR;
limits[0] = limits[0] / RESERVE_LIMIT_FACTOR;
}
}
@@ -140,6 +142,7 @@ contract AngleAdapter is ISwapAdapter {
view
returns (Fraction memory)
{
console.log("log", amountIn, tokenIn, tokenOut);
uint256 amountOut = transmuter.quoteIn(amountIn, tokenIn, tokenOut);
return Fraction(
amountOut,

View File

@@ -9,6 +9,8 @@ pragma solidity ^0.8.13;
import {IERC20, ISwapAdapter} from "src/interfaces/ISwapAdapter.sol";
/// @dev custom reserve limit factor to prevent revert errors in OrderSide.Buy
uint256 constant RESERVE_LIMIT_FACTOR = 5;
interface IAgToken is IERC20 {
/*//////////////////////////////////////////////////////////////////////////////////////////////////////////////////