This section contains SDK example for performing swap in DEX
In this section, to illustrate all three possible types of a swap, we will do following exchange chain
swap 1 TON to STON (ton to jetton swap)
swap STON to GEMSTON (jetton to jetton swap)
swap GEMSTON back to TON (jetton to ton swap)
Swap TON to jetton
import { TonClient, toNano } from "@ton/ton";
import { DEX, pTON } from "@ston-fi/sdk";
const client = new TonClient({
endpoint: "https://toncenter.com/api/v2/jsonRPC",
});
const router = client.open(new DEX.v1.Router());
// swap 1 TON to STON but not less than 1 nano STON
const txParams = await router.getSwapTonToJettonTxParams({
userWalletAddress: "", // ! replace with your address
proxyTon: new pTON.v1(),
offerAmount: toNano("1"),
askJettonAddress: "EQA2kCVNwVsil2EM2mB0SkXytxCqQjS4mttjDpnXmwG9T6bO", // STON
minAskAmount: "1",
queryId: 12345,
});
To execute the transaction, you need to send a transaction with these parameters to the blockchain. This code will be different based on the wallet you are using to send the tx from, so please check our doc section about transaction sending guide with examples for different libraries.
Swap jetton to jetton
import { TonClient, toNano } from "@ton/ton";
import { DEX, pTON } from "@ston-fi/sdk";
const client = new TonClient({
endpoint: "https://toncenter.com/api/v2/jsonRPC",
});
const router = client.open(new DEX.v1.Router());
// swap 1 STON to GEMSTON but not less than 1 nano GEMSTON
const txParams = await router.getSwapJettonToJettonTxParams({
userWalletAddress: "", // ! replace with your address
offerJettonAddress: "EQA2kCVNwVsil2EM2mB0SkXytxCqQjS4mttjDpnXmwG9T6bO", // STON
offerAmount: toNano("1"),
askJettonAddress: "EQBX6K9aXVl3nXINCyPPL86C4ONVmQ8vK360u6dykFKXpHCa", // GEMSTON
minAskAmount: "1",
queryId: 12345,
});
To execute the transaction, you need to send a transaction with these parameters to the blockchain. This code will be different based on the wallet you are using to send the tx from, so please check our doc section about transaction sending guide with examples for different libraries.
Swap jetton to TON
import { TonClient, toNano } from "@ton/ton";
import { DEX, pTON } from "@ston-fi/sdk";
const client = new TonClient({
endpoint: "https://toncenter.com/api/v2/jsonRPC",
});
const router = client.open(new DEX.v1.Router());
// swap 1 GEMSTON to TON but not less than 1 nano TON
const txParams = await router.getSwapJettonToTonTxParams({
userWalletAddress: "", // ! replace with your address
offerJettonAddress: "EQBX6K9aXVl3nXINCyPPL86C4ONVmQ8vK360u6dykFKXpHCa", // GEMSTON
offerAmount: toNano("1"),
proxyTon: new pTON.v1(),
minAskAmount: "1",
queryId: 12345,
});
To execute the transaction, you need to send a transaction with these parameters to the blockchain. This code will be different based on the wallet you are using to send the tx from, so please check our doc section about transaction sending guide with examples for different libraries.
Recommended gas values
Below are recommended values for TON sent and forward gas for each type of the swap:
This section contains SDK example for providing liquidity in DEX
Provide liquidity for a pool
Jetton/Jetton pool deposit
import { TonClient, toNano } from "@ton/ton";
import { DEX } from "@ston-fi/sdk";
const USER_WALLET_ADDRESS = ""; // ! replace with your address
const JETTON_0_ADDRESS = "EQA2kCVNwVsil2EM2mB0SkXytxCqQjS4mttjDpnXmwG9T6bO"; // STON
const JETTON_1_ADDRESS = "EQBX6K9aXVl3nXINCyPPL86C4ONVmQ8vK360u6dykFKXpHCa"; // GEMSTON
const client = new TonClient({
endpoint: "https://toncenter.com/api/v2/jsonRPC",
});
const router = client.open(new DEX.v1.Router());
const txsParams = await Promise.all([
// deposit 0.5 STON to the STON/GEMSTON pool and get at least 1 nano LP token
router.getProvideLiquidityJettonTxParams({
userWalletAddress: USER_WALLET_ADDRESS,
sendTokenAddress: JETTON_0_ADDRESS,
sendAmount: toNano("0.5"),
otherTokenAddress: JETTON_1_ADDRESS,
minLpOut: "1",
queryId: 12345,
}),
// deposit 2 GEMSTON to the STON/GEMSTON pool and get at least 1 nano LP token
router.getProvideLiquidityJettonTxParams({
userWalletAddress: USER_WALLET_ADDRESS,
sendTokenAddress: JETTON_1_ADDRESS,
sendAmount: toNano("2.0"),
otherTokenAddress: JETTON_0_ADDRESS,
minLpOut: "1",
queryId: 123456,
}),
]);
To execute the transaction, you need to send a transaction with these parameters to the blockchain. This code will be different based on the wallet you are using to send the tx from, so please check our doc section about transaction sending guide with examples for different libraries.
TON/Jetton pool deposit
import { TonClient, toNano } from "@ton/ton";
import { DEX, pTON } from "@ston-fi/sdk";
const USER_WALLET_ADDRESS = ""; // ! replace with your address
const JETTON_0_ADDRESS = "EQA2kCVNwVsil2EM2mB0SkXytxCqQjS4mttjDpnXmwG9T6bO"; // STON
const client = new TonClient({
endpoint: "https://toncenter.com/api/v2/jsonRPC",
});
const router = client.open(new DEX.v1.Router());
const txsParams = await Promise.all([
// deposit 1 TON to the STON/TON pool and get at least 1 nano LP token
router.getProvideLiquidityTonTxParams({
userWalletAddress: USER_WALLET_ADDRESS,
proxyTon: new pTON.v1(),
sendAmount: toNano("1"),
otherTokenAddress: JETTON_0_ADDRESS,
minLpOut: "1",
queryId: 12345,
}),
// deposit 0.5 STON to the STON/TON pool and get at least 1 nano LP token
router.getProvideLiquidityJettonTxParams({
userWalletAddress: USER_WALLET_ADDRESS,
sendTokenAddress: JETTON_0_ADDRESS,
sendAmount: toNano("0.5"),
otherTokenAddress: new pTON.v1().address,
minLpOut: "1",
queryId: 123456,
}),
]);
To execute the transaction, you need to send a transaction with these parameters to the blockchain. This code will be different based on the wallet you are using to send the tx from, so please check our doc section about transaction sending guide with examples for different libraries.
refund liquidity
This section contains SDK example for refunding undeposited liquidity in DEX
Refund tokens that were sent to LP account but weren't added to a liquidity pool yet
To execute the transaction, you need to send a transaction with these parameters to the blockchain. This code will be different based on the wallet you are using to send the tx from, so please check our doc section about transaction sending guide with examples for different libraries.
burn liquidity tokens
This section contains SDK example for withdrawing liquidity from DEX
Burn all liquidity tokens to free liquidity from a pool
To execute the transaction, you need to send a transaction with these parameters to the blockchain. This code will be different based on the wallet you are using to send the tx from, so please check our doc section about transaction sending guide with examples for different libraries.