测试版发布:请注意,getTokenAccountsByOwnerV2
可供早期使用。如遇到任何问题,请联系支持。
getTokenAccountsByOwnerV2
是标准 getTokenAccountsByOwner
方法的增强版本,专为高效查询代币组合和处理拥有大量代币的钱包而设计。此方法引入了基于游标的分页和增量更新功能。
V2 中的新功能:
- 基于游标的分页:每次请求可配置从 1 到 10,000 个代币账户的限制
- 增量更新:使用
changedSinceSlot
仅获取最近修改的代币账户
- 组合可扩展性:高效处理拥有数千个代币账户的钱包
- 向后兼容性:支持所有现有的
getTokenAccountsByOwner
参数和过滤器
过滤器要求:您必须在查询中提供 mint
(特定代币)或 programId
(SPL 代币或 Token-2022 程序)。不支持在没有过滤器的情况下查询所有代币类型的所有者。
主要优势
大型组合
处理拥有数千个代币账户的钱包,无超时或内存问题
实时跟踪
使用 changedSinceSlot
进行增量更新,实时监控组合变化
分页最佳实践
重要的分页行为:分页结束仅在未返回代币账户时指示。由于过滤,API 可能返回的账户少于您的限制 - 始终继续分页,直到 paginationKey
是 null
。
基本投资组合查询
// Get all SPL Token accounts for a wallet
let allTokenAccounts = [];
let paginationKey = null;
do {
const response = await fetch(`https://mainnet.helius-rpc.com/?api-key=${API_KEY}`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
jsonrpc: '2.0',
id: '1',
method: 'getTokenAccountsByOwnerV2',
params: [
"9WzDXwBbmkg8ZTbNMqUxvQRAyrZzDsGYdLVL9zYtAWWM", // wallet address
{ "programId": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" },
{
encoding: 'jsonParsed',
limit: 1000,
...(paginationKey && { paginationKey })
}
]
})
});
const data = await response.json();
allTokenAccounts.push(...data.result.value);
paginationKey = data.result.paginationKey;
} while (paginationKey);
console.log(`Total token accounts: ${allTokenAccounts.length}`);
增量投资组合更新
// Get only token accounts modified since a specific slot
const portfolioUpdates = await fetch(`https://mainnet.helius-rpc.com/?api-key=${API_KEY}`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
jsonrpc: '2.0',
id: '1',
method: 'getTokenAccountsByOwnerV2',
params: [
walletAddress,
{ "programId": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" },
{
encoding: 'jsonParsed',
limit: 1000,
changedSinceSlot: lastUpdateSlot // Only get recent changes
}
]
})
});
代币程序支持
Token-2022 支持:使用 TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb
作为 programId
来查询具有扩展功能的 Token-2022 账户,例如转账费用、计息代币等。
// Query Token-2022 accounts (supports token extensions)
const token2022Response = await fetch(`https://mainnet.helius-rpc.com/?api-key=${API_KEY}`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
jsonrpc: '2.0',
id: '1',
method: 'getTokenAccountsByOwnerV2',
params: [
walletAddress,
{ "programId": "TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb" }, // Token-2022
{ encoding: 'jsonParsed', limit: 1000 }
]
})
});
从 getTokenAccountsByOwner 迁移
迁移很简单 - 只需在现有查询中添加分页参数:
{
"jsonrpc": "2.0",
"id": "1",
- "method": "getTokenAccountsByOwner",
+ "method": "getTokenAccountsByOwnerV2",
"params": [
"9WzDXwBbmkg8ZTbNMqUxvQRAyrZzDsGYdLVL9zYtAWWM",
{ "programId": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" },
{
"encoding": "jsonParsed",
+ "limit": 1000
}
]
}
相关方法
您的Helius API密钥。您可以在仪表板中免费获取一个。
method
enum<string>
default:getTokenAccountsByOwnerV2
Available options:
getTokenAccountsByOwnerV2
Example:"getTokenAccountsByOwnerV2"