Operation - Swap Out

The Swap-out Operation within the Nexus Yield Module (NYM) of the Satoshi Protocol allows users to convert $satUSD back into other stablecoins or supported assets like $USDT or $USDC.

Please note that the Swap-out process includes a pending period before the assets can be withdrawn.

Key Steps:

  1. Define satUSD Amount:

    • The amount of $satUSD to be swapped out is defined and converted into the correct units using parseUnits.

  2. Preview the Swap-out:

    • The getPreviewSwapOut function simulates the swap-out operation, providing details about the expected asset amount to be received and the associated fee.

  3. Execute the Swap-out:

    • The doNymSwapOut method is called to execute the swap-out transaction, converting the specified amount of $satUSD back into the target asset.

Example Code

import { parseUnits } from 'viem';
import { walletClient, publicClient, protocolConfig, collateral, DEBT_TOKEN_DECIMALS } from 'satoshi-sdk';

// Example usage:
doSwapIn('USDT', 1)
  .then((receipt) => console.log('Swap-out completed:', receipt))
  .catch((error) => console.error('Error during swap-out:', error));

async function doSwapOut(assetSymbol: string, amount: number) {
  // Initialize the SatoshiClient with protocol and wallet configurations
  const satoshiClient = new SatoshiClient(protocolConfig, walletClient);
  const asset = (satoshiClient.NexusYieldModule.getAssetList()).find(t => t.symbol === assetSymbol)!;

  // Fetch the current SAT balance before the swap
  const satBalanceBefore = await getBalanceOf(debtAddress);

  // Define the amount of SAT to swap out, converting to the appropriate units
  const satAmount = parseUnits(amount.toString(), DEBT_TOKEN_DECIMALS);

  // Preview the swap-out to get information on the expected asset amount and fees
  const previewSwapOut = await satoshiClient.NexusYieldModule.getPreviewSwapOut(asset.address, satAmount);
  const expectedReceiveAssetAmt = Number(previewSwapOut?.assetAmount); // Asset amount expected to be received

  // Execute the swap-out operation
  const receipt = await satoshiClient.NexusYieldModule.doNymSwapOut(asset.address, satAmount);

  // Fetch the SAT balance after the swap to validate the amount swapped out
  const satBalanceAfter = await getBalanceOf(debtAddress);

  // Confirm that the swap was successful
  if (receipt.status !== 'success') {
    throw new Error('Swap-out transaction failed.');
  }

  // Validate that the SAT balance decreased by the amount swapped out
  const swappedAmount = satBalanceBefore - satBalanceAfter;
  if (swappedAmount !== satAmount) {
    throw new Error(`Balance mismatch: expected to swap out ${satAmount}, but got ${swappedAmount}`);
  }

  console.log('Swap-out was successful:', receipt);
  return receipt;
}

Last updated