وثائق Validators Information API

ما هي Validators Information (getValidatorsInformation) API؟

getValidatorsInformation هي طريقة RPC موسّعة في Solana تُعيد المدققين الذين يقودون خانة واحدة على الأقل في الحقبة الحالية، مع دمج وزن الحصة وبيانات نقطة النهاية الشبكية والموقع التقديري للقائد وقياسات زمن الاستجابة المرجعية في صف واحد لكل مدقق. وهي لا تُعيد قائمة بجميع العقد على الشبكة، ولا تُعيد عقد RPC. إذا كنت تملك أرصدة استخدام ERPC (رموز API)، فيمكنك استدعاؤها بنفس تنسيق طريقة Solana RPC القياسية.
توفر هذه API ما يلي:
  • صف واحد لكل مدقق يقود خانة في الحقبة الحالية، مع slotCount الذي يوضح عدد الخانات التي يقودها — على خلاف getLeaderSlots التي تُعيد صفًا واحدًا لكل خانة
  • stakeWeight لكل مدقق قائد
  • المنطقة والمدينة والدولة والإحداثيات ومنظمة ASN والمنطقة الزمنية التقديرية للقائد
  • قياسات ping مرجعية من مناطق مراقبة ERPC عبر pingToLeaders

مثال على نقطة النهاية ونص الطلب

text
https://edge.erpc.global?api-key=<YOUR_API_KEY>
كل معامل اختياري؛ فحذف params أو تمرير params: [] يُعيد جميع المدققين الذين يقودون خانة في الحقبة الحالية.
json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "getValidatorsInformation",
  "params": []
}
لتضييق النتيجة، مرّر كائنًا يحتوي limit وcountry وregion. يطلب هذا المثال ما يصل إلى 5 مدققين في ألمانيا، وهو أقل تكلفة أيضًا من الطلب غير المُصفّى أعلاه.
json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "getValidatorsInformation",
  "params": [{ "limit": 5, "country": "DE" }]
}
المعاملات الثلاثة كلها اختيارية. تُطابَق country مع leaderCountry باستخدام رموز ISO 3166-1 alpha-2 دون حساسية لحالة الأحرف. وتُطابَق region مع leaderRegion تطابقًا تامًا مع الحساسية لحالة الأحرف — اقرأ leaderRegion من استجابة غير مُصفّاة لمعرفة القيم الصالحة للمدققين المستهدفين. تقبل limit القيم من 1 إلى 2000 وتُثبَّت عند العدد الفعلي للمدققين في الحقبة، لذا فإن limit الأعلى من العدد الحقيقي لا تُسبب خطأً أبدًا.

مثال (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":[]
  }'

مثال على الاستجابة (JSON)

يعرض result.total عدد المدققين الذين أعادهم هذا الطلب. مصفوفة data[] أدناه مختصرة إلى ثلاثة من الإدخالات الـ 673 لهذه الحقبة. يعرض الإدخال الأول pingToLeaders من مناطق مراقبة ERPC السبع جميعها؛ أما الإدخالات المتبقية فقد قُلِّمت إلى منطقة واحدة تسهيلًا للقراءة.
json
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "success": true,
    "message": "Validator information retrieved successfully",
    "epoch": 1011,
    "total": 673,
    "totalValidators": 673,
    "data": [
      {
        "identity": "Fd7btgySsrjuo25CJCj7oE7VPMyezDhnx7pZkj2v69Nk",
        "gossipNodeId": 734,
        "slotCount": 16912,
        "stakeWeight": 16803592.923637684,
        "ipAddress": "141.95.45.24",
        "gossipPort": 8001,
        "tpuPort": null,
        "tpuQuicPort": 8022,
        "rpcAddress": null,
        "version": "4.1.1",
        "featureSet": "2220189554",
        "leaderRegion": "frankfurt",
        "leaderCity": "Frankfurt am Main",
        "leaderCountry": "DE",
        "leaderLat": 50.11552,
        "leaderLon": 8.68417,
        "leaderOrg": "AS16276 OVH SAS",
        "leaderTimezone": "Europe/Berlin",
        "pingToLeaders": [
          {
            "city": "Frankfurt am Main",
            "region": "frankfurt",
            "ms": 1.374,
            "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": "London",
            "region": "london",
            "ms": 16.174,
            "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": "Ebara",
            "region": "tokyo",
            "ms": 234.25,
            "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": "Amsterdam",
            "region": "amsterdam",
            "ms": 14.072,
            "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": "Newark",
            "region": "ny",
            "ms": 87.983,
            "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": "Singapore",
            "region": "singapore",
            "ms": 221.655,
            "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": "Sydney",
            "region": "sydney",
            "ms": 270.79,
            "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": "HEL1USMZKAL2odpNBj2oCjffnFGaYwmbGmyewGv1e2TU",
        "gossipNodeId": 678,
        "slotCount": 15656,
        "stakeWeight": 16025294.32908543,
        "ipAddress": "207.241.184.11",
        "gossipPort": 8001,
        "tpuPort": null,
        "tpuQuicPort": 8002,
        "rpcAddress": null,
        "version": "4.1.0-rc.1",
        "featureSet": "3345198602",
        "leaderRegion": "london",
        "leaderCity": "London",
        "leaderCountry": "GB",
        "leaderLat": 51.50853,
        "leaderLon": -0.12574,
        "leaderOrg": "AS399460 Helius",
        "leaderTimezone": "Europe/London",
        "pingToLeaders": [
          {
            "city": "Frankfurt am Main",
            "region": "frankfurt",
            "ms": 11.246,
            "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": "JUPiTERrZqgf1jUyR7dSkhMx4Kn2qJyekWsg3LT1h4b",
        "gossipNodeId": 273524,
        "slotCount": 12920,
        "stakeWeight": 12539698.447203109,
        "ipAddress": "88.216.36.133",
        "gossipPort": 8000,
        "tpuPort": null,
        "tpuQuicPort": 9007,
        "rpcAddress": null,
        "version": "4.2.0-rc.0",
        "featureSet": "4119855713",
        "leaderRegion": "frankfurt",
        "leaderCity": "Frankfurt am Main",
        "leaderCountry": "DE",
        "leaderLat": 50.139,
        "leaderLon": 8.6725,
        "leaderOrg": "AS213896 UAB \"Cherry Servers\"",
        "leaderTimezone": "Europe/Berlin",
        "pingToLeaders": [
          {
            "city": "Frankfurt am Main",
            "region": "frankfurt",
            "ms": 0.061,
            "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"
          }
        ]
      }
    ]
  }
}

حقول الاستجابة

الحقلالمعنى
result.successما إذا كان الطلب قد نجح.
result.messageرسالة حالة مقروءة للبشر.
result.epochالحقبة التي تنتمي إليها مجموعة القادة المُعادة. هذه هي أحدث حقبة موجودة في جدول القادة.
result.totalعدد المدققين في data. هذه هي الكمية التي تُحتسب عليها فاتورة الاستدعاء.
result.totalValidatorsعدد المدققين القادة في تلك الحقبة قبل تطبيق country أو region أو limit. قارنه مع result.total لترى مدى تضييق المرشح للمجموعة.
result.data[]إدخال واحد لكل مدقق، مرتّبة تنازليًا حسب slotCount ثم حسب identity، بحيث تُعيد limit المدققين الذين يقودون أكبر عدد من الخانات.
identityالمفتاح العام لهوية المدقق.
gossipNodeIdمعرّف سجل عقدة gossip المرتبط بهذا المدقق. تكون قيمته null عندما لا تكون هناك عقدة gossip مرتبطة، وفي تلك الحالة تكون حقول الموقع والمنفذ وping فارغة أيضًا. يُعاد المدققون الذين بلا عقدة gossip مرتبطة في الطلب غير المُصفّى، لكن لا يمكنهم مطابقة مرشح country أو region.
slotCountعدد الخانات التي يقودها هذا المدقق في الحقبة المُبلغ عنها. يغطي كل إدخال مدققًا واحدًا، لا خانة واحدة.
stakeWeightالحصة المفعَّلة لهوية المدقق، بعملة SOL. يُبلغ المدققون الذين بلا عقدة gossip مرتبطة عن 0.
ipAddress وgossipPort وtpuPort وtpuQuicPort وrpcAddressبيانات نقطة نهاية شبكة gossip الوصفية للمدقق.
version وfeatureSetإصدار عميل Solana ومجموعة الميزات المُبلغ عنها من المدقق.
leaderRegionتسمية منطقة تشغيلية مُطبَّعة تُستخدم للتوجيه والتحليل. وقد تجمع مدنًا متقاربة أو مواقع مزودين، وهي القيمة التي يطابقها معامل الطلب region.
leaderCity وleaderCountry وleaderLat وleaderLon وleaderOrg وleaderTimezoneالموقع الجغرافي التقديري والمنظمة الشبكية للمدقق.
pingToLeaders[]زمن استجابة مرجعي إلى هذا المدقق من كل منطقة مراقبة من مناطق ERPC (frankfurt وamsterdam وny وlondon وtokyo وsingapore وsydney)، متضمنًا region وcity وms وicmpReplied وfromIp وcountry والإحداثيات ومنظمة ASN والرمز البريدي وtimezone وmeasuredAt.
pingToLeaders[].icmpRepliedما إذا كان المدقق قد ردّ على القياس. عندما تكون false، يحمل ms قيمة حارسة مخزّنة وليس زمن استجابة، ويجب ألا يُقرأ على أنه كذلك؛ تعامل مع false على أنها «غير معروف»، لا على أنها بعيد أو غير قابل للاستخدام، إذ إن بعض المدققين الذين لا يجيبون على ICMP ما زالوا يخدمون TPU وQUIC بشكل طبيعي، وقد يؤدي استبعادهم بالتصفية إلى إسقاط قائد سليم من مسار الإرسال لديك. تحقق من icmpReplied قبل الوثوق بـ ms كزمن استجابة — فهو يقرر ما إذا كان الرقم قابلًا للاستخدام، لا أيّ مدقق ترسل إليه.
pingToLeaders[].measuredAtوقت آخر قياس لزمن الاستجابة، بتنسيق ISO-8601 UTC. استخدمه للحكم على حداثة القراءة. تقيس كل منطقة مراقبة بشكل مستقل، لذا يمكن أن تحمل الإدخالات في مصفوفة pingToLeaders نفسها قيم measuredAt مختلفة. القيمة الأقدم في measuredAt ليست قراءة معطوبة: عندما يفشل تشغيل قياس في الاكتمال، تُترك القيمة المخزّنة كما هي بدلًا من الكتابة فوقها بقيمة مُختلَقة، لذا فهي ما تزال تعكس قياسًا سابقًا حقيقيًا.

عرض تغطية المدققين مرئيًا

يمكن قراءة الاستجابة نفسها كخريطة تغطية على مستوى الحقبة بدلًا من بحث خانةً بخانة. يستخدم هذا المثال Frankfurt كنقطة مراقبة.
منطقة المدققالموقعالخانات في الحقبةوزن الحصةPing من Frankfurtالقراءة التشغيلية
frankfurtFrankfurt am Main, DE16,91216,803,592.921.374 msأكبر قائد في الحقبة من حيث عدد الخانات، في المنطقة الحضرية نفسها. تخدم سعة Frankfurt هذا المدقق طوال الحقبة، لا خلال نافذة خانة واحدة فقط.
londonLondon, GB15,65616,025,294.3311.246 msثاني أكبر قائد. تخدمه Frankfurt بشكل كافٍ، لكن سعة London كانت ستخفض زمن استجابة هذا المسار إلى ما يقارب معدل المنطقة الحضرية.
frankfurtFrankfurt am Main, DE12,92012,539,698.450.061 msقائد آخر في المنطقة الحضرية نفسها بنحو ثلاثة أرباع خانات الإدخال الأول. تغطيه سعة المنطقة نفسها بالكفاءة ذاتها.
يجيب getLeaderSlots عن أيّ المدققين يقودون الخانات التالية، لذا يناسب توجيه معاملة الآن؛ بينما تجيب هذه الطريقة عن أيّ المدققين يقودون الحقبة أصلًا وبأيّ وتيرة، لذا تناسب تقرير أين يجب أن تكون السعة خلال الحقبة.

موقع بيانات شبكة Solana

Validators Solutions - Solana network data
استخدم Validators Solutions للاطلاع العام على توزيع الشبكة، ثم استخدم getValidatorsInformation للحصول على أعداد الخانات لكل مدقق والحصة والموقع وزمن الاستجابة المقيس.

استهلاك الرموز

تُحتسب فاتورة هذه الطريقة على عدد المدققين الذين تُعيدهم، بوحدات من 10: كل 10 مدققين يكلفون 100 رمز، وتُحتسب الوحدة الجزئية وحدة كاملة. لذا تُحاسَب استجابة من 95 مدققًا بوصفها 10 وحدات، أي 1,000 رمز.
ولأن الرسم يتبع ما يُعاد لا ما يُطلب، فإن تضييق المجموعة بـ country أو region يكلف أقل بنسبة متناسبة، والطلب الذي لا يطابق أي مدقق لا يكلف شيئًا. وتُثبَّت limit الأعلى من عدد المدققين في الحقبة عند العدد الحقيقي، لذا لا يدفع الطلب أبدًا ثمن مدققين غير موجودين.
يتغير حجم مجموعة القادة من حقبة إلى أخرى. في الحقبة الموضحة أعلاه كان 673 مدققًا، ما يجعل القراءة الكاملة تكلف نحو 6,800 رمز.

أهمية معلومات المدققين

  • صف واحد لكل مدقق يجيب عن من يقود هذه الحقبة وبأيّ قدر، دون تجميع مئات آلاف صفوف الخانات على جهة العميل.
  • يوضح slotCount مدى تكرار كون المدقق قائدًا في هذه الحقبة، لذا فإن المسار القصير إلى مدقق ذي slotCount مرتفع يعود بالنفع بشكل متكرر.
  • يوضح country وregion أين تقع فعليًا سعة القادة في الحقبة.
  • يميّز ping المقترن بـ measuredAt بين المسار البطيء والقراءة القديمة.

الخلفية

تتكون حقبة Solana من حوالي 432,000 خانة. وبمجرد تجميع تعيينات القادة لتلك الخانات حسب هوية المدقق، تتكثف إلى نحو 670 صفًا للمدققين. تحتفظ ERPC بجدول القادة وبيانات المدققين الوصفية والموقع الجغرافي وجمع قياسات زمن الاستجابة، وتتيح النتيجة عبر واجهة RPC.

حالات الاستخدام الاستراتيجية

  • تخطيط السعة على مستوى الحقبة: حدّد حجم البنية التحتية مقابل المجموعة الكاملة للمدققين الذين يقودون الحقبة الحالية، لا مقابل نافذة خانات متداولة.
  • قوائم مختصرة إقليمية: استخدم country وregion لاستخراج المدققين الذين يقودون الخانات في موقع مستهدف.
  • تحديد أولويات واعٍ بعدد الخانات والحصة: اجمع slotCount وstakeWeight لترتيب المدققين ضمن قائمة مختصرة.
  • المراقبة عبر الحقبات: قارن توزيع leaderRegion بين الحقبات لترى كيف تتحول جغرافية القادة.

التوفر

getValidatorsInformation متاحة لجميع مستخدمي ERPC. ويمكن إصدار رموز API وأرصدة الاستخدام أو التحقق منها في ERPC Web Dashboard.

معدل نجاح المعاملات ونقطة نهاية SWQoS

لتحسين معدل نجاح المعاملات وسرعة التنفيذ بشكل أكبر، نوصي باستخدام نقطة نهاية SWQoS. تعطي SWQoS (Stake-weighted Quality of Service) الأولوية للمدققين أصحاب اتصالات الحصة. يخصص القادة حوالي 80% من النطاق الترددي لحركة الأولوية و20% لحركة غير الأولوية، مع توفير المسار ذي الأولوية إنتاجية تقارب 5 أضعاف. تجري هذه الجدولة قبل تقييم Priority fee، ما يعني أن الدخول إلى مسار أولوية SWQoS هو الشرط المسبق لأداء منخفض زمن الاستجابة حقًا.