我可以使用 JSON RPC API 获得验证者 (solana) 的委托人列表吗?
Am I able to get a list of delegators by validator (solana) using the JSON RPC API?
因此,例如在 solanabeach.io 中,我能够看到验证者 - “放样”了包含地址、激活周期、放样量和份额百分比的委托人列表。
是否可以通过 JSON RPC API 或其他方法获取此信息?
当然可以!您必须使用 get_program_accounts
端点,获取属于质押计划的所有帐户,并过滤代表的投票帐户是否等于您要搜索的验证器。
关于 get_program_accounts
的信息:https://docs.solana.com/developing/clients/jsonrpc-api#getprogramaccounts
如果从枚举(4 个字节)向上计数,则 Meta
(rent_exempt_reserve
的 8 个字节 + authorized
的 64 个字节 + [=16= 的 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())
因此,例如在 solanabeach.io 中,我能够看到验证者 - “放样”了包含地址、激活周期、放样量和份额百分比的委托人列表。
是否可以通过 JSON RPC API 或其他方法获取此信息?
当然可以!您必须使用 get_program_accounts
端点,获取属于质押计划的所有帐户,并过滤代表的投票帐户是否等于您要搜索的验证器。
关于 get_program_accounts
的信息:https://docs.solana.com/developing/clients/jsonrpc-api#getprogramaccounts
如果从枚举(4 个字节)向上计数,则 Meta
(rent_exempt_reserve
的 8 个字节 + authorized
的 64 个字节 + [=16= 的 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())