RouterV1 is the primary entrypoint for all Decentralized Exchange (DEX) interactions. It handles routing Jetton transfers to the correct pools and manages sovereign operations like locking/unlocking trading or upgrading the contract.
It provides two main types of operations:
- Swaps: Exchanging one asset for another (Jetton-to-Jetton, Jetton-to-Ton, or Ton-to-Jetton).
- Liquidity Provision: Adding liquidity to a pool using either Jettons or Ton.
For every operation, you can either:
- Use
get...TxParams methods to retrieve the SenderArguments required to construct a transaction manually. - Use
send... methods to execute the transaction directly via a provided Sender.
Note that for Ton-based operations, you must provide a compatible AbstractPton instance (e.g., PtonV1).
// Example: Swapping Jetton for Jetton
const router = new RouterV1(provider);
await router.sendSwapJettonToJetton(sender, {
userWalletAddress: userAddress,
offerJettonAddress: tokenA,
offerJettonWalletAddress: tokenAWallet,
askJettonAddress: tokenB,
askJettonWalletAddress: tokenBWallet,
offerAmount: amountA,
minAskAmount: minAmountB,
referralAddress: 'optional_referral_address'
});
// Example: Swapping Ton for Jetton
await router.sendSwapTonToJetton(sender, {
userWalletAddress: userAddress,
proxyTon: ptonInstance,
offerJettonWalletAddress: tokenAWallet,
askJettonAddress: tokenA,
askJettonWalletAddress: tokenAWallet,
offerAmount: amountInTon,
minAskAmount: minAmountA
});
// Example: Providing Liquidity with Jettons
await router.sendProvideLiquidityJetton(sender, {
userWalletAddress: userAddress,
sendTokenAddress: tokenA,
otherTokenAddress: tokenB,
sendAmount: amountA,
minLpOut: minLp
});