In this guide, we will provide a use case for Solana token exchange through the OKX DEX. The process includes:
Import the necessary Node.js libraries and set up your environment variables. Define helper functions and assembly parameters Node.js Environment Settings.
Additionally, you need to import the following libraries after completing the above steps.
const bs58 = require('bs58');
const solanaWeb3 = require('@solana/web3.js');
const {Connection} = require("@solana/web3.js");
npm i bs58
npm i @solana/web3.js
curl --location --request GET 'https://www.okx.com/api/v5/dex/aggregator/swap?amount=1000&chainId=501&fromTokenAddress=11111111111111111111111111111111&toTokenAddress=So11111111111111111111111111111111111111112&userWalletAddress=3cUbuUEJkcgtzGxvsukksNzmgqaUK9jwFS5pqxxxxxxx&slippage=0.05' \
async function signTransaction(callData, privateKey) {
// decode
const transaction = bs58.decode(callData)
let tx
// There are two types of callData, one is the old version and the other is the new version.
try {
tx = solanaWeb3.Transaction.from(transaction)
} catch (error) {
tx = solanaWeb3.VersionedTransaction.deserialize(transaction)
}
// Replace the latest block hash
const recentBlockHash = await connection.getLatestBlockhash();
if (tx instanceof solanaWeb3.VersionedTransaction) {
tx.message.recentBlockhash = recentBlockHash.blockhash;
} else {
tx.recentBlockhash = recentBlockHash.blockhash
}
let feePayer = solanaWeb3.Keypair.fromSecretKey(bs58.decode(privateKey))
// sign
if (tx instanceof solanaWeb3.VersionedTransaction) {
// v0 callData
tx.sign([feePayer])
} else {
// legacy callData
tx.partialSign(feePayer)
}
console.log(tx)
}
// 'xxxxxxx' means your privateKey
signTransaction(callData,'xxxxxxx')
const txId = await connection.sendRawTransaction(tx.serialize());
console.log('txId:', txId)
// Verify whether it has been broadcast on the chain.
await connection.confirmTransaction(txId);
console.log(`https://solscan.io/tx/${txId}`);