fix: Fixed prices
This commit is contained in:
Submodule evm/lib/forge-std updated: 155d547c44...f73c73d201
@@ -30,14 +30,9 @@ contract IntegralSwapAdapter is ISwapAdapter {
|
|||||||
uint256[] memory _specifiedAmounts
|
uint256[] memory _specifiedAmounts
|
||||||
) external view override returns (Fraction[] memory _prices) {
|
) external view override returns (Fraction[] memory _prices) {
|
||||||
_prices = new Fraction[](_specifiedAmounts.length);
|
_prices = new Fraction[](_specifiedAmounts.length);
|
||||||
|
|
||||||
uint256 price_ = relayer.getPriceByTokenAddresses(address(_sellToken), address(_buyToken));
|
|
||||||
|
|
||||||
for (uint256 i = 0; i < _specifiedAmounts.length; i++) {
|
for (uint256 i = 0; i < _specifiedAmounts.length; i++) {
|
||||||
_prices[i] = Fraction(
|
_prices[i] = getPriceAt(address(_sellToken), address(_buyToken));
|
||||||
relayer.getPriceByTokenAddresses(address(_sellToken), address(_buyToken)) * 10**(ERC20(address(_sellToken)).decimals()) / 10**18,
|
|
||||||
10**(ERC20(address(_buyToken)).decimals())
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -62,10 +57,7 @@ contract IntegralSwapAdapter is ISwapAdapter {
|
|||||||
buy(sellToken, buyToken, specifiedAmount);
|
buy(sellToken, buyToken, specifiedAmount);
|
||||||
}
|
}
|
||||||
trade.gasUsed = gasBefore - gasleft();
|
trade.gasUsed = gasBefore - gasleft();
|
||||||
trade.price = Fraction(
|
trade.price = getPriceAt(address(sellToken), address(buyToken));
|
||||||
relayer.getPriceByTokenAddresses(address(sellToken), address(buyToken)) * 10**(ERC20(address(sellToken)).decimals()) / 10**18,
|
|
||||||
10**(ERC20(address(buyToken)).decimals())
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// @inheritdoc ISwapAdapter
|
/// @inheritdoc ISwapAdapter
|
||||||
@@ -203,6 +195,20 @@ contract IntegralSwapAdapter is ISwapAdapter {
|
|||||||
limits[0] = limitMax0;
|
limits[0] = limitMax0;
|
||||||
limits[1] = limitMax1;
|
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 {
|
interface ITwapRelayer {
|
||||||
|
|||||||
Reference in New Issue
Block a user