เอกสารประกอบ Validators Information API

Validators Information (getValidatorsInformation) API คืออะไร?

getValidatorsInformation เป็นเมธอด Solana RPC แบบขยายที่คืนค่า validator ทุกตัวที่ถือ leader slot อย่างน้อยหนึ่ง slot ใน epoch ปัจจุบัน โดยรวมน้ำหนัก stake, เมตาดาตาของ endpoint เครือข่าย, ตำแหน่งโดยประมาณของ leader และค่าวัด latency อ้างอิงไว้เป็นหนึ่งแถวต่อหนึ่ง validator เมธอดนี้ไม่ได้คืนรายชื่อโหนดทั้งหมดในเครือข่าย และไม่คืนโหนด RPC หากคุณถือ ERPC usage credits (API tokens) คุณสามารถเรียกใช้งานได้ในรูปแบบเดียวกับเมธอด Solana RPC มาตรฐาน
API นี้ให้ข้อมูล:
  • หนึ่งแถวต่อหนึ่ง validator ที่ถือ leader slot ใน epoch ปัจจุบัน โดย slotCount แสดงจำนวน slot ที่ validator นั้นถือ — ต่างจาก getLeaderSlots ที่คืนหนึ่งแถวต่อหนึ่ง slot
  • stakeWeight ของ leader validator แต่ละราย
  • ภูมิภาค เมือง ประเทศ พิกัด องค์กร ASN และเขตเวลาโดยประมาณของ leader
  • ค่าวัด ping อ้างอิงจากภูมิภาคสังเกตการณ์ของ ERPC ผ่าน pingToLeaders

ตัวอย่าง Endpoint และ Request Body

text
https://edge.erpc.global?api-key=<YOUR_API_KEY>
ทุกพารามิเตอร์เป็นตัวเลือก หากละ params ไว้หรือส่ง params: [] จะได้ validator ทุกตัวที่ถือ leader slot ใน epoch ปัจจุบัน
json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "getValidatorsInformation",
  "params": []
}
หากต้องการจำกัดผลลัพธ์ ให้ส่งอ็อบเจกต์ที่มี limit, country และ region ตัวอย่างนี้ขอ validator ในประเทศเยอรมนีไม่เกิน 5 ราย ซึ่งมีค่าใช้จ่ายน้อยกว่าคำขอแบบไม่กรองด้านบนด้วย
json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "getValidatorsInformation",
  "params": [{ "limit": 5, "country": "DE" }]
}
พารามิเตอร์ทั้งสามเป็นตัวเลือกทั้งหมด country จับคู่กับ leaderCountry ด้วยรหัส ISO 3166-1 alpha-2 โดยไม่แยกตัวพิมพ์เล็กพิมพ์ใหญ่ ส่วน region จับคู่กับ leaderRegion แบบตรงกันทุกตัวอักษรและแยกตัวพิมพ์เล็กพิมพ์ใหญ่ — ให้อ่านค่า leaderRegion จาก response แบบไม่กรอง เพื่อดูค่าที่ใช้ได้สำหรับ validator เป้าหมายของคุณ limit รับค่า 1 ถึง 2000 และจะถูกลดลงมาเท่าจำนวน validator จริงใน epoch ดังนั้น limit ที่มากกว่าจำนวนจริงจะไม่ทำให้เกิด error

ตัวอย่าง (HTTP)

bash
curl 'https://edge.erpc.global?api-key=<YOUR_API_KEY>' \
  --header 'Content-Type: application/json' \
  --data '{
    "jsonrpc":"2.0",
    "id":1,
    "method":"getValidatorsInformation",
    "params":[]
  }'

ตัวอย่าง Response (JSON)

result.total แสดงจำนวน validator ที่คำขอนี้คืนกลับมา อาร์เรย์ data[] ด้านล่างถูกย่อเหลือ 3 รายการจาก 670 รายการของ epoch นี้ และ pingToLeaders ของแต่ละรายการถูกตัดเหลือจุดสังเกตการณ์เดียวเพื่อให้อ่านง่าย
json
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "success": true,
    "message": "Validator information retrieved successfully",
    "epoch": 1010,
    "total": 670,
    "totalValidators": 670,
    "data": [
      {
        "identity": "JupmVLmA8RoyTUbTMMuTtoPWHEiNQobxgTeGTrPNkzT",
        "gossipNodeId": 2233,
        "slotCount": 13232,
        "stakeWeight": 12254651.761860535,
        "ipAddress": "64.130.41.46",
        "gossipPort": 8000,
        "tpuPort": 9001,
        "tpuQuicPort": 9007,
        "rpcAddress": null,
        "version": "3.1.13",
        "featureSet": "534737035",
        "leaderRegion": "frankfurt",
        "leaderCity": "Frankfurt am Main",
        "leaderCountry": "DE",
        "leaderLat": 50.1924,
        "leaderLon": 8.6753,
        "leaderOrg": "AS20326 TeraSwitch Networks Inc.",
        "leaderTimezone": "Europe/Berlin",
        "pingToLeaders": [
          {
            "city": "Frankfurt am Main",
            "region": "frankfurt",
            "ms": 0.974,
            "icmpReplied": true,
            "fromIp": "185.191.118.11",
            "country": "DE",
            "lat": 50.139,
            "lon": 8.6725,
            "org": "AS213896 UAB Cherry Servers",
            "postal": "60320",
            "timezone": "Europe/Berlin",
            "measuredAt": "2026-08-01T06:02:18.000Z"
          }
        ]
      },
      {
        "identity": "BSVckjdW2f8kcXPGcrPPtV9kUDBZ8w8PjrrGVnxgEdwq",
        "gossipNodeId": 1487,
        "slotCount": 2704,
        "stakeWeight": 2502391.138720913,
        "ipAddress": "5.199.172.175",
        "gossipPort": 12000,
        "tpuPort": 12003,
        "tpuQuicPort": 12009,
        "rpcAddress": null,
        "version": "3.1.13",
        "featureSet": "534737035",
        "leaderRegion": "stockholm",
        "leaderCity": "Šiauliai",
        "leaderCountry": "LT",
        "leaderLat": 55.93333,
        "leaderLon": 23.31667,
        "leaderOrg": "AS16125 UAB Cherry Servers",
        "leaderTimezone": "Europe/Vilnius",
        "pingToLeaders": [
          {
            "city": "Frankfurt am Main",
            "region": "frankfurt",
            "ms": 27.742,
            "icmpReplied": true,
            "fromIp": "185.191.118.11",
            "country": "DE",
            "lat": 50.139,
            "lon": 8.6725,
            "org": "AS213896 UAB Cherry Servers",
            "postal": "60320",
            "timezone": "Europe/Berlin",
            "measuredAt": "2026-08-01T06:02:53.000Z"
          }
        ]
      },
      {
        "identity": "2oHUYyW2PU9VJh4XBs5TbGgzdernunvGqyKth3kxW4ns",
        "gossipNodeId": 902,
        "slotCount": 304,
        "stakeWeight": 280745.689124988,
        "ipAddress": "64.130.43.229",
        "gossipPort": 8001,
        "tpuPort": 5004,
        "tpuQuicPort": 5010,
        "rpcAddress": null,
        "version": "3.1.13",
        "featureSet": "534737035",
        "leaderRegion": "amsterdam",
        "leaderCity": "Amsterdam",
        "leaderCountry": "NL",
        "leaderLat": 52.37403,
        "leaderLon": 4.88969,
        "leaderOrg": "AS20326 TeraSwitch Networks Inc.",
        "leaderTimezone": "Europe/Amsterdam",
        "pingToLeaders": [
          {
            "city": "Frankfurt am Main",
            "region": "frankfurt",
            "ms": 16.835,
            "icmpReplied": true,
            "fromIp": "185.191.118.11",
            "country": "DE",
            "lat": 50.139,
            "lon": 8.6725,
            "org": "AS213896 UAB Cherry Servers",
            "postal": "60320",
            "timezone": "Europe/Berlin",
            "measuredAt": "2026-08-01T06:03:07.000Z"
          }
        ]
      }
    ]
  }
}

ฟิลด์ของ Response

ฟิลด์ความหมาย
result.successระบุว่าคำขอสำเร็จหรือไม่
result.messageข้อความสถานะที่อ่านเข้าใจได้
result.epochepoch ที่ชุด leader ซึ่งคืนกลับมาสังกัดอยู่ เป็น epoch ล่าสุดที่มีในตารางเวลา leader
result.totalจำนวน validator ใน data ราคาคิดจากจำนวนนี้ ไม่ใช่จำนวนที่ร้องขอ
result.totalValidatorsจำนวน leader validator ใน epoch นั้นก่อนใช้ country, region หรือ limit เทียบกับ result.total เพื่อดูว่าตัวกรองทำให้ชุดผลลัพธ์แคบลงเพียงใด
result.data[]หนึ่งรายการต่อหนึ่ง validator เรียงตาม slotCount จากมากไปน้อย แล้วตามด้วย identity ดังนั้น limit จะคืน validator ที่ถือ slot มากที่สุดก่อน
identitypublic key ของ identity ของ validator
gossipNodeIdตัวระบุของเรคคอร์ดโหนด gossip ที่ผูกกับ validator นี้ จะเป็น null เมื่อไม่มีโหนด gossip ผูกอยู่ กรณีนั้นฟิลด์ตำแหน่ง พอร์ต และ ping จะว่างด้วย validator ที่ไม่มีโหนด gossip ผูกอยู่จะถูกคืนในคำขอแบบไม่กรอง แต่ไม่สามารถตรงกับตัวกรอง country หรือ region ได้
slotCountจำนวน leader slot ที่ validator นี้ถือใน epoch ที่รายงาน แต่ละรายการครอบคลุมหนึ่ง validator ไม่ใช่หนึ่ง slot
stakeWeightstake ที่ใช้งานอยู่ของ identity ของ validator หน่วยเป็น SOL validator ที่ไม่มีโหนด gossip ผูกอยู่จะรายงานค่า 0
ipAddress, gossipPort, tpuPort, tpuQuicPort, rpcAddressเมตาดาตาของ endpoint เครือข่าย gossip ของ validator
version, featureSetเวอร์ชันไคลเอนต์ Solana และ feature set ที่ validator รายงาน
leaderRegionป้ายกำกับภูมิภาคการทำงานที่ถูกทำให้เป็นมาตรฐาน ใช้สำหรับการกำหนดเส้นทางและการวิเคราะห์ อาจจัดกลุ่มเมืองหรือตำแหน่งของผู้ให้บริการที่อยู่ใกล้กัน และเป็นค่าที่พารามิเตอร์ region ใช้เทียบ
leaderCity, leaderCountry, leaderLat, leaderLon, leaderOrg, leaderTimezoneตำแหน่งทางภูมิศาสตร์และองค์กรเครือข่ายโดยประมาณของ validator
pingToLeaders[]latency อ้างอิงจากแต่ละจุดวัดของ ERPC มายัง validator นี้ รวมถึงภูมิภาค เมือง ms, icmpReplied, fromIp ประเทศ พิกัด องค์กร ASN รหัสไปรษณีย์ เขตเวลา และ measuredAt
pingToLeaders[].icmpRepliedระบุว่า validator ตอบกลับการวัดหรือไม่ เมื่อเป็น false ค่า ms จะเป็นค่าเซนติเนลที่เก็บไว้ ไม่ใช่ค่า latency จึงไม่ควรอ่านเป็น latency
pingToLeaders[].measuredAtเวลาที่วัด latency ครั้งล่าสุด ในรูปแบบ ISO-8601 UTC ใช้เพื่อประเมินว่าค่าที่อ่านนั้นใหม่เพียงใด

การมองเห็นความครอบคลุมของ Validator เป็นภาพ

Response เดียวกันนี้สามารถอ่านเป็นแผนที่ความครอบคลุมระดับ epoch แทนการค้นหาแบบราย slot ได้ ตัวอย่างนี้ใช้ Frankfurt เป็นจุดสังเกตการณ์
ภูมิภาคของ validatorตำแหน่งSlot ใน epochน้ำหนัก stakePing จาก Frankfurtการตีความเชิงปฏิบัติการ
frankfurtFrankfurt am Main, DE13,23212,254,651.760.974 ms13,232 จากประมาณ 432,000 slot ของ epoch อยู่ในเมโทรเดียวกัน ทรัพยากรใน Frankfurt รองรับ validator นี้ตลอดทั้ง epoch ไม่ใช่เฉพาะช่วง slot เดียว
stockholmŠiauliai, LT2,7042,502,391.1427.742 msถือสัดส่วนของ epoch อย่างต่อเนื่อง แต่ตำแหน่งอื่นในยุโรปให้ latency ที่ดีกว่า
amsterdamAmsterdam, NL304280,745.6916.835 msมี slot ต่อ epoch ไม่มาก เส้นทางสั้น แต่ลำพังเท่านั้นยังไม่ใช่เหตุผลในการวางทรัพยากร
getLeaderSlots ตอบว่า validator ใดจะถือ slot ถัดไป จึงเหมาะกับการกำหนดเส้นทางของ transaction ในตอนนี้ ส่วนเมธอดนี้ตอบว่า validator ใดถือ slot ใน epoch นี้บ้างและบ่อยเพียงใด จึงเหมาะกับการตัดสินใจว่าควรวางทรัพยากรไว้ที่ใดตลอด epoch

เว็บไซต์ข้อมูลเครือข่าย Solana

Validators Solutions - Solana network data
สำหรับมุมมองสาธารณะของการกระจายตัวของเครือข่าย ให้ใช้ Validators Solutions จากนั้นใช้ getValidatorsInformation เพื่อดูจำนวน slot, stake, ตำแหน่ง และ latency ที่วัดได้ของ validator แต่ละราย

การใช้ Token

เมธอดนี้คิดค่าใช้จ่ายตามจำนวน validator ที่ส่งคืน โดยคิดเป็นชุดละ 10 ราย: validator ทุก 10 ราย คิด 100 tokens และเศษที่ไม่ครบชุดจะนับเป็นหนึ่งชุดเต็ม ดังนั้น response ที่มี validator 95 ราย จึงถูกคิดเป็น 10 ชุด หรือ 1,000 tokens
เนื่องจากค่าใช้จ่ายอิงตามสิ่งที่ส่งคืนจริง ไม่ใช่สิ่งที่ร้องขอ การจำกัดผลลัพธ์ด้วย country หรือ region จึงมีค่าใช้จ่ายลดลงตามสัดส่วน และคำขอที่ไม่ตรงกับ validator ใดเลยจะไม่มีค่าใช้จ่าย ส่วน limit ที่มากกว่าจำนวน validator ใน epoch จะถูกลดลงมาเท่าจำนวนจริง คำขอจึงไม่ต้องจ่ายให้กับ validator ที่ไม่มีอยู่
ขนาดของชุด leader เปลี่ยนไปในแต่ละ epoch ใน epoch ที่แสดงด้านบนมี 670 validator การอ่านทั้งหมดจึงราว 6,700 tokens

ทำไมข้อมูล Validator จึงสำคัญ

  • หนึ่งแถวต่อหนึ่ง validator ตอบได้ว่าใครถือ slot ใน epoch นี้และมากเพียงใด โดยไม่ต้องรวมข้อมูลระดับ slot หลายแสนแถวฝั่งไคลเอนต์
  • slotCount แสดงว่า validator เป็น leader บ่อยเพียงใดใน epoch นี้ เส้นทางสั้นไปยัง validator ที่มี slotCount สูงจึงคุ้มค่าซ้ำ ๆ
  • country และ region แสดงว่ากำลังการเป็น leader ของ epoch นี้อยู่ที่ใดจริง ๆ
  • การดู ping ร่วมกับ measuredAt ช่วยแยกเส้นทางที่ช้าออกจากค่าที่วัดไว้นานแล้ว

ความเป็นมา

หนึ่ง Solana epoch ประกอบด้วย slot ประมาณ 432,000 slot เมื่อจัดกลุ่มการมอบหมาย leader ของ slot เหล่านั้นตาม identity ของ validator จะยุบลงเหลือประมาณ 670 แถวของ validator ERPC ดูแลตารางเวลา leader, เมตาดาตาของ validator, ตำแหน่งทางภูมิศาสตร์ และการเก็บค่า latency แล้วเปิดเผยผลลัพธ์ผ่านอินเทอร์เฟซ RPC

กรณีการใช้งานเชิงกลยุทธ์

  • การวางแผนกำลังการรองรับระดับ epoch: กำหนดขนาดโครงสร้างพื้นฐานจากชุด validator ทั้งหมดที่ถือ slot ใน epoch ปัจจุบัน ไม่ใช่จากหน้าต่าง slot ที่เลื่อนไป
  • การคัดรายชื่อตามภูมิภาค: ใช้ country และ region เพื่อดึง validator ที่ถือ slot ในตำแหน่งเป้าหมาย
  • การจัดลำดับความสำคัญโดยคำนึงถึง slot และ stake: ผสาน slotCount กับ stakeWeight เพื่อจัดอันดับ validator ภายในรายชื่อที่คัดไว้
  • การติดตามข้าม epoch: เปรียบเทียบการกระจายตัวของ leaderRegion ระหว่าง epoch เพื่อดูว่าภูมิศาสตร์ของ leader เปลี่ยนไปอย่างไร

ความพร้อมใช้งาน

getValidatorsInformation พร้อมให้บริการแก่ผู้ใช้ ERPC ทุกราย สามารถออกหรือตรวจสอบ API tokens และ usage credits ได้บน ERPC Web Dashboard

อัตราความสำเร็จของ Transaction และ SWQoS Endpoint

เพื่อยกระดับอัตราความสำเร็จของ transaction และความเร็วในการดำเนินการให้ดียิ่งขึ้น เราขอแนะนำให้ใช้ SWQoS Endpoint โดย SWQoS (Stake-weighted Quality of Service) จะให้ความสำคัญกับ validator ที่มีการเชื่อมต่อแบบ stake leader จะจัดสรรแบนด์วิดท์ประมาณ 80% ให้กับทราฟฟิกที่มีลำดับความสำคัญ และ 20% ให้กับทราฟฟิกที่ไม่มีลำดับความสำคัญ โดยเลนที่มีลำดับความสำคัญให้ throughput มากกว่าประมาณ 5 เท่า การจัดลำดับนี้เกิดขึ้นก่อนการประเมิน Priority-fee ซึ่งหมายความว่าการเข้าสู่เลนลำดับความสำคัญของ SWQoS เป็นเงื่อนไขเบื้องต้นสำหรับประสิทธิภาพ latency ต่ำอย่างแท้จริง