如何在 Raydium DEX 上兑换 Solana 代币?

问题描述 投票:0回答:1

我正在尝试编写一个简单的代码来交换 raydium defi 上的 solana 代币。但我有一个公钥问题。我不明白我的代码有什么问题。我真的很想编写一个非常简单的代码来进行测试。

const { Connection, Keypair, PublicKey } = require('@solana/web3.js');
const {
  Liquidity, 
  TokenAmount, 
  Token, 
  Percent
} = require('@raydium-io/raydium-sdk');

const devnetConnection = new Connection('https://api.devnet.solana.com');
const privateKey = [PRIVATEKEY];
const wallet = Keypair.fromSecretKey(new Uint8Array(privateKey));

const RAY_SOL_LP_V4_POOL_KEY = '89ZKE4aoyfLBe2RuV6jM3JGNhaV18Nxh8eNtjRcndBip';
const RAY_TOKEN_MINT = '4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R';
const SOL_MINT = 'So11111111111111111111111111111111111111112';

async function main() {
  const poolKeys = {
    id: new PublicKey(RAY_SOL_LP_V4_POOL_KEY),
  };

  const tokenA = new Token(new PublicKey(RAY_TOKEN_MINT), 6);
  const tokenB = new Token(new PublicKey(SOL_MINT), 9);

  const rawAmountIn = 1;
  const amountIn = new TokenAmount(tokenA, rawAmountIn, false);

  const slippage = new Percent(50, 10000);
  const poolInfo = await Liquidity.fetchInfo({ connection: devnetConnection, poolKeys });
  const { minAmountOut } = Liquidity.computeAmountOut({ poolKeys, poolInfo, amountIn, currencyOut: tokenB, slippage });

  const { transaction, signers } = await Liquidity.makeSwapTransaction({
    connection: devnetConnection,
    poolKeys,
    userKeys: {
    },
    amountIn,
    amountOut: minAmountOut,
    fixedSide: 'in',
  });

  const signature = await devnetConnection.sendTransaction(transaction, [wallet, ...signers]);
  console.log(`Transaction hash: ${signature}`);

  await devnetConnection.confirmTransaction(signature);
  console.log(`Transaction confirmée: ${signature}`);
}

main().catch(error => {
  console.error(error);
});

2 个具有一定金额的代币之间的简单交换代码。

javascript swap solana-web3js
1个回答
0
投票
const { Connection, Keypair, PublicKey } = require('@solana/web3.js');
const { Liquidity, TokenAmount, Token, Percent } = require('@raydium-io/raydium-sdk');

const devnetConnection = new Connection('https://api.devnet.solana.com');
const privateKey = [PRIVATEKEY]; // private key
const wallet = Keypair.fromSecretKey(new Uint8Array(privateKey));

const RAY_SOL_LP_V4_POOL_KEY = '89ZKE4aoyfLBe2RuV6jM3JGNhaV18Nxh8eNtjRcndBip';
const RAY_TOKEN_MINT = '4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R';
const SOL_MINT = 'So11111111111111111111111111111111111111112';

async function main() {
  const poolKeys = {
    id: new PublicKey(RAY_SOL_LP_V4_POOL_KEY),
    // ***** //
  };

  const tokenA = new Token(devnetConnection, new PublicKey(RAY_TOKEN_MINT), 6, wallet.publicKey);
  const tokenB = new Token(devnetConnection, new PublicKey(SOL_MINT), 9, wallet.publicKey);

  const rawAmountIn = 1; 
  const amountIn = new TokenAmount(tokenA, rawAmountIn * 10**tokenA.decimals, false);

  const slippage = new Percent(50, 10000); 
  const poolInfo = await Liquidity.fetchInfo(devnetConnection, poolKeys);
  const { minAmountOut } = Liquidity.computeAmountOut(poolInfo, amountIn, tokenB, slippage);

  const { transaction, signers } = await Liquidity.makeSwapTransaction({
    connection: devnetConnection,
    poolKeys,
    userKeys: {
      owner: wallet.publicKey,
      // *** //
    },
    amountIn,
    amountOut: minAmountOut,
    fixedSide: 'in',
  });

  const signature = await devnetConnection.sendTransaction(transaction, [wallet, ...signers]);
  console.log(`Transaction hash: ${signature}`);

  await devnetConnection.confirmTransaction(signature);
  console.log(`Transaction confirmed: ${signature}`);
}

main().catch(error => {
  console.error(error);
});
© www.soinside.com 2019 - 2024. All rights reserved.