เอกสารประกอบ Leader Slot Information API

Leader Slot Information (getLeaderSlots) API คืออะไร?

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

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

text
https://edge.erpc.global?api-key=<YOUR_API_KEY>
ระบุหมายเลข slot เริ่มต้นใน params
json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "getLeaderSlots",
  "params": [436946064]
}

ตัวอย่าง (HTTP)

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

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

Response ปัจจุบันจะห่อเรคคอร์ดไว้ใน result.data[] ส่วน result.total แสดงจำนวนเรคคอร์ดที่ถูกคืนกลับมา อาร์เรย์ data[] ด้านล่างถูกย่อเหลือ 3 รายการจาก 100 รายการของคำขอนี้ รายการแรกแสดง pingToLeaders จากจุดสังเกตการณ์ทั้ง 7 แห่งของ ERPC ส่วนรายการที่เหลือถูกตัดเหลือ 1 จุด เพื่อให้อ่านง่าย
json
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "success": true,
    "message": "Leader schedule records retrieved successfully",
    "total": 100,
    "data": [
      {
        "identity": "BXAxLMMMUNYfC1z166VjWHR3WjTmqzLxB837o5ghmRtH",
        "epoch": 1011,
        "slot": "436946064",
        "stakeWeight": 819031.365477103,
        "ipAddress": "202.8.10.164",
        "gossipPort": 8000,
        "tpuPort": null,
        "tpuQuicPort": 5010,
        "rpcAddress": null,
        "version": "4.1.2",
        "featureSet": "3345198602",
        "leaderRegion": "dublin",
        "leaderCity": "Crumlin",
        "leaderCountry": "IE",
        "leaderLat": 53.32154,
        "leaderLon": -6.31439,
        "leaderOrg": "AS20326 TeraSwitch Networks Inc.",
        "leaderTimezone": "Europe/Dublin",
        "pingToLeaders": [
          {
            "city": "Frankfurt am Main",
            "region": "frankfurt",
            "ms": 18.438,
            "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-03T06:20:48.000Z"
          },
          {
            "city": "Newark",
            "region": "ny",
            "ms": 74.981,
            "icmpReplied": true,
            "fromIp": "64.130.37.222",
            "country": "US",
            "lat": 40.73566,
            "lon": -74.17237,
            "org": "AS20326 TeraSwitch Networks Inc.",
            "postal": "07102",
            "timezone": "America/New_York",
            "measuredAt": "2026-08-03T06:22:21.000Z"
          },
          {
            "city": "London",
            "region": "london",
            "ms": 10.978,
            "icmpReplied": true,
            "fromIp": "67.209.52.250",
            "country": "GB",
            "lat": 51.50853,
            "lon": -0.12574,
            "org": "AS20326 TeraSwitch Networks Inc.",
            "postal": "WC2N",
            "timezone": "Europe/London",
            "measuredAt": "2026-08-03T06:23:06.000Z"
          },
          {
            "city": "Singapore",
            "region": "singapore",
            "ms": 166.379,
            "icmpReplied": true,
            "fromIp": "202.8.11.52",
            "country": "SG",
            "lat": 1.2959,
            "lon": 103.7907,
            "org": "AS20326 TeraSwitch Networks Inc.",
            "postal": "139963",
            "timezone": "Asia/Singapore",
            "measuredAt": "2026-08-03T06:24:52.000Z"
          },
          {
            "city": "Amsterdam",
            "region": "amsterdam",
            "ms": 12.827,
            "icmpReplied": true,
            "fromIp": "84.32.103.245",
            "country": "NL",
            "lat": 52.37403,
            "lon": 4.88969,
            "org": "AS59642 UAB Cherry Servers",
            "postal": "1012",
            "timezone": "Europe/Amsterdam",
            "measuredAt": "2026-08-03T06:21:33.000Z"
          },
          {
            "city": "Ebara",
            "region": "tokyo",
            "ms": 212.499,
            "icmpReplied": true,
            "fromIp": "198.13.133.88",
            "country": "JP",
            "lat": 35.617,
            "lon": 139.7486,
            "org": "AS20326 TeraSwitch Networks Inc.",
            "postal": "140-0002",
            "timezone": "Asia/Tokyo",
            "measuredAt": "2026-08-03T06:24:01.000Z"
          },
          {
            "city": "Sydney",
            "region": "sydney",
            "ms": 274.379,
            "icmpReplied": true,
            "fromIp": "82.26.116.36",
            "country": "AU",
            "lat": -33.86785,
            "lon": 151.20732,
            "org": "AS29802 HIVELOCITY, Inc.",
            "postal": "1001",
            "timezone": "Australia/Sydney",
            "measuredAt": "2026-08-03T06:25:50.000Z"
          }
        ]
      },
      {
        "identity": "BXAxLMMMUNYfC1z166VjWHR3WjTmqzLxB837o5ghmRtH",
        "epoch": 1011,
        "slot": "436946065",
        "stakeWeight": 819031.365477103,
        "ipAddress": "202.8.10.164",
        "gossipPort": 8000,
        "tpuPort": null,
        "tpuQuicPort": 5010,
        "rpcAddress": null,
        "version": "4.1.2",
        "featureSet": "3345198602",
        "leaderRegion": "dublin",
        "leaderCity": "Crumlin",
        "leaderCountry": "IE",
        "leaderLat": 53.32154,
        "leaderLon": -6.31439,
        "leaderOrg": "AS20326 TeraSwitch Networks Inc.",
        "leaderTimezone": "Europe/Dublin",
        "pingToLeaders": [
          {
            "city": "Frankfurt am Main",
            "region": "frankfurt",
            "ms": 18.438,
            "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-03T06:20:48.000Z"
          }
        ]
      },
      {
        "identity": "BXAxLMMMUNYfC1z166VjWHR3WjTmqzLxB837o5ghmRtH",
        "epoch": 1011,
        "slot": "436946066",
        "stakeWeight": 819031.365477103,
        "ipAddress": "202.8.10.164",
        "gossipPort": 8000,
        "tpuPort": null,
        "tpuQuicPort": 5010,
        "rpcAddress": null,
        "version": "4.1.2",
        "featureSet": "3345198602",
        "leaderRegion": "dublin",
        "leaderCity": "Crumlin",
        "leaderCountry": "IE",
        "leaderLat": 53.32154,
        "leaderLon": -6.31439,
        "leaderOrg": "AS20326 TeraSwitch Networks Inc.",
        "leaderTimezone": "Europe/Dublin",
        "pingToLeaders": [
          {
            "city": "Frankfurt am Main",
            "region": "frankfurt",
            "ms": 18.438,
            "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-03T06:20:48.000Z"
          }
        ]
      }
    ]
  }
}

ฟิลด์ของ Response

ฟิลด์ความหมาย
result.successระบุว่าคำขอสำเร็จหรือไม่
result.messageข้อความสถานะที่อ่านเข้าใจได้
result.totalจำนวนเรคคอร์ด leader slot ที่คืนกลับมา ปัจจุบัน API คืนค่า 100 เรคคอร์ดต่อหนึ่งคำขอ
result.data[]เรคคอร์ด leader slot ที่เรียงลำดับ โดยเริ่มจาก slot ที่ร้องขอ
identitypublic key ของ identity ของ leader validator
epochSolana epoch ที่บรรจุ slot นั้นอยู่
slotหมายเลข slot จะถูกคืนค่าเป็น string ดังนั้นไคลเอนต์ไม่ควรสันนิษฐานว่าเป็นตัวเลขแบบ JSON
stakeWeightstake ที่ถูกมอบหมายให้กับ leader validator โดยทั่วไป stake ที่สูงกว่าหมายความว่า validator จะปรากฏในตารางเวลา leader บ่อยขึ้นเมื่อเวลาผ่านไป
leaderRegionป้ายกำกับภูมิภาคการทำงานที่ถูกทำให้เป็นมาตรฐาน ใช้สำหรับการกำหนดเส้นทางและการวิเคราะห์ อาจจัดกลุ่มเมืองหรือตำแหน่งของผู้ให้บริการที่อยู่ใกล้กัน
leaderCity, leaderCountry, leaderLat, leaderLon, leaderOrg, leaderTimezoneตำแหน่งทางภูมิศาสตร์และองค์กรเครือข่ายโดยประมาณของ leader validator
pingToLeaders[]latency อ้างอิงจากภูมิภาคสังเกตการณ์ของ ERPC (frankfurt, amsterdam, ny, london, tokyo, singapore, sydney) ไปยัง leader รวมถึงภูมิภาค เมือง ms, icmpReplied, fromIp ประเทศ พิกัด องค์กร ASN รหัสไปรษณีย์ เขตเวลา และ measuredAt
pingToLeaders[].icmpRepliedระบุว่า validator ตอบกลับการวัดด้วย ICMP หรือไม่ เมื่อเป็น false ค่า ms จะเป็นค่าเซนติเนลที่เก็บไว้ ไม่ใช่ค่า latency จึงไม่ควรอ่านเป็น latency และควรถือว่า false แปลว่าไม่ทราบ ไม่ได้แปลว่าอยู่ไกลหรือใช้งานไม่ได้ เพราะ validator บางตัวไม่ตอบ ICMP แต่ยังให้บริการ TPU และ QUIC ได้ตามปกติ การกรองออกจึงอาจทำให้ leader ที่ปกติดีหลุดออกจากเส้นทางส่งของคุณ ตรวจ icmpReplied ก่อนจะเชื่อว่า ms เป็นค่า latency ฟิลด์นี้ตัดสินว่าตัวเลขนั้นใช้ได้หรือไม่ ไม่ใช่ตัดสินว่าจะส่งไปยัง validator ตัวใด
pingToLeaders[].measuredAtเวลาที่วัด latency ครั้งล่าสุด ในรูปแบบ ISO-8601 UTC ใช้เพื่อประเมินว่าค่าที่อ่านนั้นใหม่เพียงใด แต่ละจุดสังเกตการณ์วัดอย่างเป็นอิสระต่อกัน ดังนั้นรายการในอาร์เรย์ pingToLeaders เดียวกันอาจมี measuredAt ต่างกันได้ ค่า measuredAt ที่เก่ากว่าไม่ได้แปลว่าค่านั้นเสีย เมื่อรอบการวัดทำไม่สำเร็จ ระบบจะคงค่าที่เก็บไว้เดิมไว้แทนที่จะเขียนทับด้วยค่าที่กุขึ้น ค่านั้นจึงยังคงสะท้อนการวัดจริงที่เกิดขึ้นในอดีต

การมองเห็น Leader Slots เป็นภาพ

Response เดียวกันนี้สามารถมองเป็นไทม์ไลน์การทำงานแบบ slot ต่อ slot ได้ ตัวอย่างนี้ใช้ Frankfurt เป็นจุดสังเกตการณ์
ช่วง Slotภูมิภาคของ leaderตำแหน่งของ leaderน้ำหนัก stakePing จาก Frankfurtการตีความเชิงปฏิบัติการ
436946064-436946066dublinCrumlin, IE819,031.3718.438 msleader รายเดียวถือ slot ต่อเนื่องกัน 3 slot Frankfurt ให้บริการที่ 18.4 ms แต่ London (11.0 ms) และ Amsterdam (12.8 ms) อยู่ใกล้กว่า — สำหรับหน้าต่างนี้ ทรัพยากรใน London หรือ Amsterdam ให้ผลดีกว่า Frankfurt
436946068frankfurtFrankfurt am Main, DE166,438.250.062 msleader อยู่ในเมโทรเดียวกัน ทรัพยากรใน Frankfurt ได้เปรียบอย่างมากสำหรับ slot นี้
มุมมองนี้มีประโยชน์เพราะ Solana เป็นเครือข่ายระดับโลก ต่างจาก HFT แบบดั้งเดิมที่เป้าหมายหลักมักเป็นการอยู่ใกล้ matching engine เพียงตัวเดียว leader ของ Solana จะหมุนเวียนไปทั่ว validator รอบโลก ภูมิภาคที่เร็วที่สุดจะเปลี่ยนไปตามการเปลี่ยนแปลงของตารางเวลา leader

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

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

การใช้ Token

API ดึงเรคคอร์ด leader slot จำนวน 100 รายการโดยเริ่มจาก slot ที่ระบุ แต่ละคำขอใช้ 420 tokens
หากคุณต้องการหนึ่งรายการต่อหนึ่ง validator สำหรับทั้ง epoch แทนที่จะเป็นหนึ่งรายการต่อหนึ่ง slot ให้ใช้ Validators Information API ซึ่งคิดค่าใช้จ่ายตามจำนวน validator ที่ส่งคืน

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

  • หาก leader อยู่ห่างไกลในเชิงภูมิศาสตร์หรือในเส้นทางเครือข่าย การส่ง transaction โดยตรงจะมีประสิทธิภาพต่ำลง
  • น้ำหนัก stake ช่วยประเมินว่า validator มีแนวโน้มจะปรากฏในตารางเวลา leader บ่อยเพียงใดเมื่อเวลาผ่านไป
  • ในช่วงการเปลี่ยนผ่าน leader ระดับโลก กลยุทธ์การสลับตามภูมิภาคมีความสำคัญมากกว่าค่า latency เฉลี่ยระดับโลกเพียงค่าเดียว
  • การผสานข้อมูลตารางเวลา slot, น้ำหนัก stake, ตำแหน่งของ leader และข้อมูล ping ที่วัดได้ ช่วยให้สามารถปรับการกำหนดเส้นทางและการวางตำแหน่ง validator ให้เหมาะสมที่สุด

ความเป็นมา

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

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

  • การปรับการตรวจจับให้เหมาะสม: ให้ความสำคัญกับช่วงหน้าต่าง leader ที่อยู่ใกล้และมี latency ต่ำ
  • การ deploy หลายภูมิภาค: deploy ใน FRA, AMS, NY, TY, SGP และภูมิภาคเชิงกลยุทธ์อื่น ๆ เพื่อลดช่องว่างในช่วงเปลี่ยนผ่าน
  • การวางแผนโดยคำนึงถึง stake: ใช้ stakeWeight เพื่อทำความเข้าใจว่า leader รายใดมีความสำคัญบ่อยกว่าในช่วงหน้าต่างที่ยาวขึ้น
  • การมองเห็นเป็นภาพและการวิเคราะห์: ติดตามสัดส่วนของ leader, การกระจายตัวของ stake และการกระจายตัวของ latency แยกตามภูมิภาค

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

getLeaderSlots พร้อมให้บริการแก่ผู้ใช้ 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 ต่ำอย่างแท้จริง