New: getTransactionsForAddress - Query transaction history with advanced filtering, sorting, and pagination. Learn More
New: getTransactionsForAddress - Query transaction history with advanced filtering, sorting, and pagination. Learn More
getTokenAccountsByOwner 的增强版本,具有附加功能,包括基于游标的分页和 changedSinceSlot 支持,以便高效检索由特定钱包地址拥有的 SPL 代币账户。
curl --request POST \
--url 'https://mainnet.helius-rpc.com/?api-key=' \
--header 'Content-Type: application/json' \
--data '
{
"jsonrpc": "2.0",
"id": "1",
"method": "getTokenAccountsByOwnerV2",
"params": [
"A1TMhSGzQxMr1TboBKtgixKz1sS6REASMxPo1qsyTSJd",
{
"programId": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"
},
{
"encoding": "jsonParsed",
"limit": 1000
}
]
}
'{
"jsonrpc": "2.0",
"id": "1",
"result": {
"context": {
"apiVersion": "2.0.15",
"slot": 341197933
},
"value": [
{
"pubkey": "BGocb4GEpbTFm8UFV2VsDSaBXHELPfAXrvd4vtt8QWrA",
"account": {
"lamports": 2039280,
"owner": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
"data": {
"program": "spl-token",
"parsed": {
"info": {
"isNative": false,
"mint": "2cHr7QS3xfuSV8wdxo3ztuF4xbiarF6Nrgx3qpx3HzXR",
"owner": "A1TMhSGzQxMr1TboBKtgixKz1sS6REASMxPo1qsyTSJd",
"state": "initialized",
"tokenAmount": {
"amount": "420000000000000",
"decimals": 6,
"uiAmount": 420000000,
"uiAmountString": "420000000"
}
}
},
"space": 165
},
"executable": false,
"rentEpoch": 18446744073709552000,
"space": 165
}
}
],
"paginationKey": "8WzDXwBbmkg8ZTbNMqUxvQRAyrZzDsGYdLVL9zYtAWWM",
"totalResults": 5000
}
}getTokenAccountsByOwnerV2 是标准 getTokenAccountsByOwner 方法的增强版本,专为高效查询代币组合和处理拥有大量代币的钱包而设计。此方法引入了基于游标的分页和增量更新功能。
changedSinceSlot 仅获取最近修改的代币账户getTokenAccountsByOwner 参数和过滤器mint(特定代币)或 programId(SPL 代币或 Token-2022 程序)。不支持在没有过滤器的情况下查询所有代币类型的所有者。changedSinceSlot 进行增量更新,实时监控组合变化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
}
]
})
});
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 }
]
})
});
{
"jsonrpc": "2.0",
"id": "1",
- "method": "getTokenAccountsByOwner",
+ "method": "getTokenAccountsByOwnerV2",
"params": [
"9WzDXwBbmkg8ZTbNMqUxvQRAyrZzDsGYdLVL9zYtAWWM",
{ "programId": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" },
{
"encoding": "jsonParsed",
+ "limit": 1000
}
]
}
JSON-RPC 协议版本。
2.0 "2.0"
请求的唯一标识符。
"1"
要调用的 RPC 方法名称。
getTokenAccountsByOwnerV2 "getTokenAccountsByOwnerV2"
用于查询由特定公钥拥有的分页代币账户的参数。
要查询代币持有的账户所有者的 Solana 钱包地址(公钥),以 base-58 编码字符串表示。
"A1TMhSGzQxMr1TboBKtgixKz1sS6REASMxPo1qsyTSJd"
成功检索到按所有者分页的代币账户。
JSON-RPC协议版本。
2.0 "2.0"
与请求匹配的标识符。
"1"
带有导航元数据的分页令牌账户。
显示 子属性
当前页面的令牌账户列表。
显示 子属性
作为base-58编码字符串的账户公钥。
"BGocb4GEpbTFm8UFV2VsDSaBXHELPfAXrvd4vtt8QWrA"
令牌账户详细信息。
显示 子属性
分配给账户的lamports数量。
2039280
分配给该账户的程序的公钥。
"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"
与账户关联的令牌状态数据。
显示 子属性
程序名称。
"spl-token"
解析的代币数据。
显示 子属性
代币账户信息。
显示 子属性
指示账户是否持有本地SOL。
false
代币铸造的公钥。
"2cHr7QS3xfuSV8wdxo3ztuF4xbiarF6Nrgx3qpx3HzXR"
账户所有者的公钥。
"A1TMhSGzQxMr1TboBKtgixKz1sS6REASMxPo1qsyTSJd"
代币账户状态。
"initialized"
代币数量详情。
显示 子属性
不含小数的原始余额。
"420000000000000"
小数位数。
6
用户友好格式的余额。
420000000
余额作为字符串。
"420000000"
为账户分配的空间。
165
指示账户是否包含程序。
false
账户下次需要支付租金的纪元。
18446744073709552000
账户的数据大小。
165
下一页的分页游标。仅当没有返回令牌账户时为null(分页结束)。请注意,由于过滤,返回的账户可能少于限制,但这并不表示分页结束。
"8WzDXwBbmkg8ZTbNMqUxvQRAyrZzDsGYdLVL9zYtAWWM"
与查询匹配的令牌账户总数(如果可用)。
5000
此页面对您有帮助吗?
curl --request POST \
--url 'https://mainnet.helius-rpc.com/?api-key=' \
--header 'Content-Type: application/json' \
--data '
{
"jsonrpc": "2.0",
"id": "1",
"method": "getTokenAccountsByOwnerV2",
"params": [
"A1TMhSGzQxMr1TboBKtgixKz1sS6REASMxPo1qsyTSJd",
{
"programId": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"
},
{
"encoding": "jsonParsed",
"limit": 1000
}
]
}
'{
"jsonrpc": "2.0",
"id": "1",
"result": {
"context": {
"apiVersion": "2.0.15",
"slot": 341197933
},
"value": [
{
"pubkey": "BGocb4GEpbTFm8UFV2VsDSaBXHELPfAXrvd4vtt8QWrA",
"account": {
"lamports": 2039280,
"owner": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
"data": {
"program": "spl-token",
"parsed": {
"info": {
"isNative": false,
"mint": "2cHr7QS3xfuSV8wdxo3ztuF4xbiarF6Nrgx3qpx3HzXR",
"owner": "A1TMhSGzQxMr1TboBKtgixKz1sS6REASMxPo1qsyTSJd",
"state": "initialized",
"tokenAmount": {
"amount": "420000000000000",
"decimals": 6,
"uiAmount": 420000000,
"uiAmountString": "420000000"
}
}
},
"space": 165
},
"executable": false,
"rentEpoch": 18446744073709552000,
"space": 165
}
}
],
"paginationKey": "8WzDXwBbmkg8ZTbNMqUxvQRAyrZzDsGYdLVL9zYtAWWM",
"totalResults": 5000
}
}