如何在 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 = []; // PRIVATE KEY HIDDEN
const wallet = Keypair.fromSecretKey(new Uint8Array(privateKey));

const OWNER = '675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8';
const TOKEN = 'EP2ib6dYdEeqD8MfE2ezHCxX3kP3K2eLKkirfPm5eyMx';
const SOL = 'So11111111111111111111111111111111111111112';
const PAIR = 'CQurpF3WS3yEqFEt1Bu8s5zmZqznQG3EJkcYvsyg3sLc';

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

  const tokenA = new Token(devnetConnection, new PublicKey(SOL), 9, wallet.publicKey);
  const tokenB = new Token(devnetConnection, new PublicKey(TOKEN), 6, 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);
});

2 个具有一定金额的代币之间的简单交换代码。 但是当我运行节点时我得到了这个响应:

  reason: 'invalid public key',
  code: 'INVALID_ARGUMENT',
  argument: 'publicKey',

我的代码中是否遗漏了任何内容?如果有的话,我在哪里可以找到这些信息?

我查看了 raydium 的 git,但我想要一些更简单的代码来进行测试,就像我所做的那样,但有效:) https://github.com/abbylow/raydium-swap

最后,应该不会很复杂:

  • 开发网络环境
  • 钱包私钥
  • 要输出的代币A
  • 一个tokenB进入
  • 发送金额
  • 管理矿池的 dex

这应该足够了!

以太坊或 BSC 上的操作要简单得多,这让我对 Solana 感到疯狂。在以太坊上,我们有 Uniswap 或 Pancakeswap,它们的文档非常详细,但 Raydium 或 Orca 的文档还不够完整。我们只有一些 Git。

javascript swap solana solana-web3js solana-transaction-instruction
1个回答
0
投票
const tokenA = new Token(devnetConnection, new PublicKey(SOL), 9, wallet.publicKey);

一定是

const { TOKEN_PROGRAM_ID } = require('@raydium-io/raydium-sdk');
const tokenA = new Token(TOKEN_PROGRAM_ID, new PublicKey(SOL), 9);
© www.soinside.com 2019 - 2024. All rights reserved.