You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用Meteora DLMM API的getPositionsByUserAndLbPair接口返回410错误求助

解决Meteora DLMM API获取用户持仓的410错误问题

问题分析

你遇到的410 Gone错误,要么是当前用的Solana RPC节点禁用了该API依赖的特定RPC方法,要么是getPositionsByUserAndLbPair的参数传递不符合要求。而不带参数调用返回空数组,是因为方法缺少必要过滤条件,无法定位到你的实际持仓。

解决方案

1. 更换支持DLMM调用的RPC节点

默认的Solana公共RPC节点常因资源限制禁用部分方法,导致这类错误。你需要切换到支持DLMM相关调用的RPC节点:

import { Connection } from "@solana/web3.js";
import { DlmmPool } from "@meteora-ag/dlmm";

// 使用支持DLMM的RPC节点(如付费节点或Meteora推荐的节点)
const connection = new Connection("https://your-valid-rpc-url", "confirmed");
// 初始化DLMM池时传入该connection实例
const dlmmPool = new DlmmPool(
  connection,
  new PublicKey("your-lb-pool-address"),
  // 其他必要参数
);

2. 传递正确的方法参数

getPositionsByUserAndLbPair需要两个必填参数:用户公钥和LB Pair的公钥,你之前只传了用户公钥,参数不完整触发错误。正确调用方式如下:

// 从已初始化的dlmmPool实例中获取LB Pair公钥
const lbPairPubkey = dlmmPool.lbPair.publicKey;
// 传入两个参数调用方法
const { userPositions } = await dlmmPool.getPositionsByUserAndLbPair(
  WALLET_KEYPAIR.publicKey,
  lbPairPubkey
);

3. 改用替代方法获取持仓

如果上述方法仍有问题,可使用getAllUserPositions获取用户全量DLMM持仓,再过滤当前池的内容:

// 获取用户所有DLMM持仓
const allUserPositions = await dlmmPool.getAllUserPositions(WALLET_KEYPAIR.publicKey);
// 过滤出当前池的持仓
const targetPoolPositions = allUserPositions.filter(pos => 
  pos.lbPairAddress.equals(dlmmPool.lbPair.publicKey)
);

4. 更新Meteora DLMM SDK

旧版本SDK可能存在调用逻辑bug,更新到最新版本可解决兼容性问题:

# npm用户
npm update @meteora-ag/dlmm

# yarn用户
yarn upgrade @meteora-ag/dlmm

内容的提问来源于stack exchange,提问作者Christophe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 14:52:09