docs: update docs at _swap and testSplitOutputCyclicSwap

This commit is contained in:
royvardhan
2025-03-06 23:00:55 +05:30
parent 4d67df4096
commit bb10efc0cc
2 changed files with 16 additions and 12 deletions

View File

@@ -299,12 +299,15 @@ contract TychoRouter is AccessControl, Dispatcher, Pausable, ReentrancyGuard {
* - The indices of the input and output tokens (via `tokenInIndex()` and `tokenOutIndex()`). * - The indices of the input and output tokens (via `tokenInIndex()` and `tokenOutIndex()`).
* - The portion of the available amount to be used for the swap, indicated by the `split` value. * - The portion of the available amount to be used for the swap, indicated by the `split` value.
* *
* Two important notes: * Three important notes:
* - The contract assumes that token indexes follow a specific order: the sell token is at index 0, followed by any * - The contract assumes that token indexes follow a specific order: the sell token is at index 0, followed by any
* intermediary tokens, and finally the buy token. * intermediary tokens, and finally the buy token.
* - A `split` value of 0 is interpreted as 100% of the available amount (i.e., the entire remaining balance). * - A `split` value of 0 is interpreted as 100% of the available amount (i.e., the entire remaining balance).
* This means that in scenarios without explicit splits the value should be 0, and when splits are present, * This means that in scenarios without explicit splits the value should be 0, and when splits are present,
* the last swap should also have a split value of 0. * the last swap should also have a split value of 0.
* - In case of cyclic swaps, the output token is the same as the input token.
* `cyclicSwapAmountOut` is used to track the amount of the output token, and is updated when
* the `tokenOutIndex` is 0.
* *
* @param amountIn The initial amount of the sell token to be swapped. * @param amountIn The initial amount of the sell token to be swapped.
* @param nTokens The total number of tokens involved in the swap path, used to initialize arrays for internal tracking. * @param nTokens The total number of tokens involved in the swap path, used to initialize arrays for internal tracking.
@@ -346,6 +349,7 @@ contract TychoRouter is AccessControl, Dispatcher, Pausable, ReentrancyGuard {
currentAmountOut = _callExecutor( currentAmountOut = _callExecutor(
swapData.executor(), currentAmountIn, swapData.protocolData() swapData.executor(), currentAmountIn, swapData.protocolData()
); );
// Checks if the output token is the same as the input token
if (tokenOutIndex == 0) { if (tokenOutIndex == 0) {
cyclicSwapAmountOut += currentAmountOut; cyclicSwapAmountOut += currentAmountOut;
} else { } else {

View File

@@ -1232,11 +1232,11 @@ contract TychoRouterTest is TychoRouterTestSetup {
function testSplitInputCyclicSwap() public { function testSplitInputCyclicSwap() public {
// This test has start and end tokens that are the same // This test has start and end tokens that are the same
// The flow is: // The flow is:
// ┌─── WETH (Pool 1) ───┐ // ┌─── WETH (USV3 Pool 1) ───┐
// │ │ // │
// USDC (60% split) ─┤ ├─> USDC // USDC (60% split) ─┤ ├─> USDC
// │ │ // │
// └─── WETH (Pool 2) ───┘ // └─── WETH (USV3 Pool 2) ───┘
// //
// 60% of USDC is swapped to WETH using Pool 1, then swapped back to USDC using Pool 2 // 60% of USDC is swapped to WETH using Pool 1, then swapped back to USDC using Pool 2
// 40% of USDC is swapped to WETH using Pool 2, then swapped back to USDC using Pool 1 // 40% of USDC is swapped to WETH using Pool 2, then swapped back to USDC using Pool 1
@@ -1300,12 +1300,12 @@ contract TychoRouterTest is TychoRouterTestSetup {
function testSplitOutputCyclicSwap() public { function testSplitOutputCyclicSwap() public {
// This test has start and end tokens that are the same // This test has start and end tokens that are the same
// The flow is: // The flow is:
// ┌─── WETH (Pool 2, 60% split) ───┐ // ┌─── (USV3 Pool 1, 60% split) ───┐
// │ │ // │ │
// USDC ----─┤ ├─> USDC // USDC ──(USV2)── ┤WETH ├─> USDC
// │ │ // │ │
// └─── WETH (Pool 2, the rest) ───┘ // └─── (USV3 Pool 2, 40% split) ───┘
//
uint256 amountIn = 100 * 10 ** 6; uint256 amountIn = 100 * 10 ** 6;
deal(USDC_ADDR, tychoRouterAddr, amountIn); deal(USDC_ADDR, tychoRouterAddr, amountIn);