# SushiXSwap Scenario Doc ## SushiXSwap - Cross Chain Swap Sushi-X-Swap enables cross chain swaps on Sushiswap on the supported networks. It supports all combinations of wallet, bentobox, trident and legacy AMM. It supports Stargate bridge as of now. ## Scenarios We assume that the tokens and bentobox approvals are already done. If not, add that at the start of the action. 1) Asset Transfer - Stargate Supported Assets - USDC, USDT, STG 1) BentoBox - Stargate - BentoBox In this case, use `ACTION_SRC_TRANSFER_FROM_BENTOBOX` and unwrap the tokens to this contract address. After this add action `STARGATE_TELEPORT`. On the dst chain, use `ACTION_DST_DEPOSIT_TO_BENTOBOX`, which deposits it to the bentobox. 2) Wallet - Stargate - Wallet In this case, use `ACTION_SRC_DEPOSIT_TO_BENTOBOX` and deposit to the address of msg.sender. After this add action `ACTION_SRC_TRANSFER_FROM_BENTOBOX` and unwrap the tokens to this contract address. After this add action `STARGATE_TELEPORT`. On dst chain, use `ACTION_DST_WITHDRAW_TOKEN` to withdraw it to user wallet. 3) Wallet - Stargate - BentoBox In this case, use `ACTION_SRC_DEPOSIT_TO_BENTOBOX` and deposit to the address of msg.sender. After this add action `ACTION_SRC_TRANSFER_FROM_BENTOBOX` and unwrap the tokens to this contract address. After this add action `STARGATE_TELEPORT`. On the dst chain, use `ACTION_DST_DEPOSIT_TO_BENTOBOX`, which deposits it to the bentobox. 4) BentoBox - Stargate - Wallet In this case, use `ACTION_SRC_TRANSFER_FROM_BENTOBOX` and unwrap the tokens to this contract address. After this add action `STARGATE_TELEPORT`. On dst chain, use `ACTION_DST_WITHDRAW_TOKEN` to withdraw it to user wallet. 2) Asset Transfer / Swaps - ERC20s and Native Token 1) BentoBox - Swap - Stargate - Swap - BentoBox In this case, use `ACTION_SRC_TRANSFER_FROM_BENTOBOX` and unwrap the tokens to the first pool of the swap, if it's legacy swap. If it's trident, transfer it to the first pool of the swap path. After this add action `ACTION_LEGACY_SWAP` or `ACTION_TRIDENT_SWAP`. If you have already deposited the tokens to the pool address, make sure to pass the correct amountIn. You can pass amountIn as 0 as well, however, in that case, it would automatically do the transfer, no need to deposit to the pool contract. In this case, make sure to withdraw tokens to this contract address. After this add action `STARGATE_TELEPORT`. On the dst chain, use `ACTION_DST_DEPOSIT_TO_BENTOBOX` for trident and deposit to the pool address of the swap path. In the case of legacy use `ACTION_DST_WITHDRAW_TOKEN` and transfer it to the first pool of the swap path or you can put amountIn as 0 for swap and it would automatically take the amounts from this contract, make sure to withdraw it. 3) Wallet - Swap - Stargate - Swap - Wallet 4) Wallet - Swap - Stargate - Swap - BentoBox 5) BentoBox - Swap - Stargate - Swap - Wallet