我是否可以使用JSON RPC API通过验证程序(solana)获取委托程序列表



例如,在solanabach.io中,我可以看到验证器-";"赌注";包含地址、激活时期、赌注金额和份额%的委托人列表。

是否可以通过JSON RPC API或其他方法获取此信息?

当然!您必须使用get_program_accounts端点,获取属于赌注程序的所有帐户,并筛选代表的投票帐户与您要搜索的验证器相等的位置。

关于get_program_accounts的信息:https://docs.solana.com/developing/clients/jsonrpc-api#getprogramaccounts

股权结构信息:https://github.com/solana-labs/solana/blob/e960634909a9617fb98d5d836c9c4c5e0d9d59cc/sdk/program/src/stake/state.rs#L22

如果从枚举向上计数(4个字节(,则Meta(rent_exempt_reserve为8个字节,authorized为64个字节,而lockup为48个字节(将到达voter_pubkey,从而得到124字节的偏移量。

这里有一个python脚本可以做到这一点,只需要solana-py包:

import asyncio
from solana.publickey import PublicKey
from solana.rpc.async_api import AsyncClient
from solana.rpc.commitment import Confirmed
from solana.rpc.types import MemcmpOpts
STAKE_PROGRAM_ID: PublicKey = PublicKey("Stake11111111111111111111111111111111111111")

async def main():
client = AsyncClient("https://api.mainnet-beta.solana.com", Confirmed)
print("Connecting...")
await client.is_connected()
memcmp_opts = [MemcmpOpts(offset=124, bytes="CAf8jfgqhia5VNrEF4A7Y9VLD3numMq9DVSceq7cPh
NY")] # put the pubkey of the validator vote address here
response = await client.get_program_accounts(
STAKE_PROGRAM_ID,
encoding="base64",
data_size=200,
memcmp_opts=memcmp_opts
)
for stake in response['result']:
print(stake)
await client.close()
asyncio.run(main())

最新更新