我可以使用 JSON RPC API 通过验证器 (solana) 获取委托人列表吗?

Nat*_*ate 1 python api cryptocurrency solana

例如,在solanabeach.io中,我可以看到验证者“抵押”了一个委托人列表,其中包含地址、激活周期、抵押金额和份额百分比。

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

Jon*_*n C 5

当然!您必须使用get_program_accounts端点,获取属于权益计划的所有帐户,并过滤委托的投票帐户与您要搜索的验证器相同的位置。

有关信息get_program_accountshttps ://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(8 个字节rent_exempt_reserve+ 64 个字节authorized+ 48 个字节lockup) 得到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())
Run Code Online (Sandbox Code Playgroud)