fix: (TychoRouter) Revert if empty swaps
- This is for security purposes. Max uncovered a vulnerability where funds could be stolen if we don't ether the while loop (i.e. if we have empty swaps).
This commit is contained in:
@@ -17,6 +17,7 @@ import {LibSwap} from "../lib/LibSwap.sol";
|
|||||||
|
|
||||||
error TychoRouter__WithdrawalFailed();
|
error TychoRouter__WithdrawalFailed();
|
||||||
error TychoRouter__AddressZero();
|
error TychoRouter__AddressZero();
|
||||||
|
error TychoRouter__EmptySwaps();
|
||||||
error TychoRouter__NegativeSlippage(uint256 amount, uint256 minAmount);
|
error TychoRouter__NegativeSlippage(uint256 amount, uint256 minAmount);
|
||||||
error TychoRouter__AmountInNotFullySpent(uint256 leftoverAmount);
|
error TychoRouter__AmountInNotFullySpent(uint256 leftoverAmount);
|
||||||
error TychoRouter__MessageValueMismatch(uint256 value, uint256 amount);
|
error TychoRouter__MessageValueMismatch(uint256 value, uint256 amount);
|
||||||
@@ -191,6 +192,10 @@ contract TychoRouter is
|
|||||||
internal
|
internal
|
||||||
returns (uint256)
|
returns (uint256)
|
||||||
{
|
{
|
||||||
|
if (swaps_.length == 0) {
|
||||||
|
revert TychoRouter__EmptySwaps();
|
||||||
|
}
|
||||||
|
|
||||||
uint256 currentAmountIn;
|
uint256 currentAmountIn;
|
||||||
uint256 currentAmountOut;
|
uint256 currentAmountOut;
|
||||||
uint8 tokenInIndex = 0;
|
uint8 tokenInIndex = 0;
|
||||||
|
|||||||
@@ -672,6 +672,13 @@ contract TychoRouterTest is TychoRouterTestSetup {
|
|||||||
assertGe(finalBalance, expAmountOut);
|
assertGe(finalBalance, expAmountOut);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function testEmptySwapsRevert() public {
|
||||||
|
uint256 amountIn = 10 ** 18;
|
||||||
|
bytes memory swaps = "";
|
||||||
|
vm.expectRevert(TychoRouter__EmptySwaps.selector);
|
||||||
|
tychoRouter.exposedSwap(amountIn, 2, swaps);
|
||||||
|
}
|
||||||
|
|
||||||
function testSingleSwapIntegration() public {
|
function testSingleSwapIntegration() public {
|
||||||
// Test created with calldata from our router encoder, replacing the executor
|
// Test created with calldata from our router encoder, replacing the executor
|
||||||
// address with the USV2 executor address.
|
// address with the USV2 executor address.
|
||||||
|
|||||||
Reference in New Issue
Block a user