Executing Swaps

This guide covers implementing token swaps through VinuSwap.

Overview

VinuSwap supports four swap types:

Type
Description

exactInputSingle

Swap exact input for minimum output (single pool)

exactInput

Swap exact input for minimum output (multi-hop)

exactOutputSingle

Swap maximum input for exact output (single pool)

exactOutput

Swap maximum input for exact output (multi-hop)

Prerequisites

const { ethers } = require('ethers');

// Contract addresses
const SWAP_ROUTER = '0x48f450475a8b501A7480C1Fd02935a7327F713Ad';
const QUOTER = '0xEed635Fa2343355d9bA726C379F2B5dEa70fE65C';
const WVC = '0xEd8c5530a0A086a12f57275728128a60DFf04230';   // Wrapped VC (native token)
const USDT = '0xC0264277fcCa5FCfabd41a8bC01c1FcAF8383E41';  // USDT on VinuChain

// ABIs
const routerABI = require('./abi/SwapRouter.json');
const quoterABI = require('./abi/VinuSwapQuoter.json');
const erc20ABI = require('./abi/ERC20.json');

// Connect to provider
const provider = new ethers.providers.JsonRpcProvider(RPC_URL);
const signer = new ethers.Wallet(PRIVATE_KEY, provider);

// Contract instances
const router = new ethers.Contract(SWAP_ROUTER, routerABI, signer);
const quoter = new ethers.Contract(QUOTER, quoterABI, provider);

Single Swaps

Exact Input Single

Swap a known amount of input tokens for a minimum amount of output tokens.

Exact Output Single

Swap a maximum amount of input tokens for a known amount of output tokens.

Multi-Hop Swaps

Path Encoding

Multi-hop swaps use an encoded path:

Exact Input Multi-Hop

Exact Output Multi-Hop

Note: For exact output, the path is encoded in reverse order.

Swapping with Native Token (VC)

VC → Token

Send VC with the transaction:

Token → VC

Use multicall to swap and unwrap:

Using Permit for Gasless Approvals

If the token supports ERC20 Permit:

Finding the Best Route

Compare routes to find optimal path:

Error Handling

Next Steps

Last updated