fix: Fixed prices

This commit is contained in:
domenicodev
2024-01-08 16:29:55 +01:00
parent 3a2e620246
commit 37ea829592
2 changed files with 18 additions and 12 deletions

View File

@@ -31,13 +31,8 @@ contract IntegralSwapAdapter is ISwapAdapter {
) external view override returns (Fraction[] memory _prices) {
_prices = new Fraction[](_specifiedAmounts.length);
uint256 price_ = relayer.getPriceByTokenAddresses(address(_sellToken), address(_buyToken));
for (uint256 i = 0; i < _specifiedAmounts.length; i++) {
_prices[i] = Fraction(
relayer.getPriceByTokenAddresses(address(_sellToken), address(_buyToken)) * 10**(ERC20(address(_sellToken)).decimals()) / 10**18,
10**(ERC20(address(_buyToken)).decimals())
);
_prices[i] = getPriceAt(address(_sellToken), address(_buyToken));
}
}
@@ -62,10 +57,7 @@ contract IntegralSwapAdapter is ISwapAdapter {
buy(sellToken, buyToken, specifiedAmount);
}
trade.gasUsed = gasBefore - gasleft();
trade.price = Fraction(
relayer.getPriceByTokenAddresses(address(sellToken), address(buyToken)) * 10**(ERC20(address(sellToken)).decimals()) / 10**18,
10**(ERC20(address(buyToken)).decimals())
);
trade.price = getPriceAt(address(sellToken), address(buyToken));
}
/// @inheritdoc ISwapAdapter
@@ -203,6 +195,20 @@ contract IntegralSwapAdapter is ISwapAdapter {
limits[0] = limitMax0;
limits[1] = limitMax1;
}
/// @notice Get swap price including fee
/// @param sellToken token to sell
/// @param buyToken token to buy
function getPriceAt(address sellToken, address buyToken) internal view returns(Fraction memory) {
uint256 priceWithoutFee = relayer.getPriceByTokenAddresses(address(sellToken), address(buyToken));
ITwapFactory factory = ITwapFactory(relayer.factory());
address pairAddress = factory.getPair(address(sellToken), address(buyToken));
return Fraction(
priceWithoutFee * 10**18,
10**(ERC20(sellToken).decimals()) * 10**18 * (10**18 - relayer.swapFee(pairAddress)) / 10**(ERC20(buyToken).decimals())
);
}
}
interface ITwapRelayer {