בדף הזה מוסבר איך לקרוא ל-API של צומת Ethereum. כדי לגשת לצומת של בלוקצ'יין Ethereum, צריך לדעת את מפתח ה-API ואת כתובת ה-URL של נקודת הקצה של הצומת. אם עדיין לא עשיתם את זה, תוכלו להיעזר במדריך בנושא שימוש בצמתי בלוקצ'יין כדי לקבוע את הפרטים האלה.
JSON-RPC
בקטע הזה מוסבר איך לשלוח שאילתות לצומת של בלוקצ'יין Ethereum באמצעות JSON-RPC API.
דוגמה ל-RPC של לקוח ביצוע
אפשר לשלוח שאילתה ללקוח הביצוע (Geth עבור צמתים מלאים או Erigon עבור צמתים לארכיון) באמצעות JSON-RPC. המפרט הכללי של JSON-RPC זמין במפרט Ethereum API, ומסמכי התיעוד הספציפיים ל-Geth זמינים בתיעוד Geth RPC.
לדוגמה, כדי להפעיל את השיטה eth_getBlockByNumber():
curl -H POST \
-H "X-goog-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"id":1,
"jsonrpc":"2.0",
"method": "eth_getBlockByNumber",
"params": ["0x1", true]
}' \
http://YOUR_NODES_URL
כאשר:
-
idהוא מזהה שהוגדר על ידי הלקוח – הגורם שיצר את הבקשה. לדוגמה,1. -
jsonrpcהיא הגרסה של JSON-RPC. לדוגמה,2.0. -
methodהוא שם ה-method. לדוגמה,eth_getBlockByNumber. -
paramsהם ערכים לשימוש עםmethod. - YOUR_NODES_URL היא הכתובת שמוחזרת בקבלת כתובות ה-URL של צומת הבלוקצ'יין. לדוגמה,
json-rpc.ejp4j0b1rdiq06p8lxksd5z25.blockchainnodeengine.com. - YOUR_API_KEY הוא המפתח שיצרתם במאמר יצירה של מפתח API.
מידע נוסף על הפורמט של אובייקט הבקשה זמין במפרט JSON-RPC2.0.
זוהי דוגמה לתשובה לפקודה שלמעלה:
{
"id" : 1,
"jsonrpc" : "2.0",
"result" : {
"difficulty" : "0x3ff800000",
"extraData" : "0x476574682f76312e302e302f6c696e75782f676f312e342e32",
"gasLimit" : "0x1388",
"gasUsed" : "0x0",
"hash" : "0x88e96d4537bea4d9c05d12549907b32561d3bf31f45aae734cdc119f13406cb6",
"logsBloom": "0x0000000000000000000000000000000000000",
"miner" : "0x05a56e2d52c817161883f50c441c3228cfe54d9f",
"mixHash" : "0x969b900de27b6ac6a67742365dd65f55a0526c41fd18e1b16f1a1215c2e66f59",
"nonce" : "0x539bd4979fef1ec4",
"number" : "0x1",
"parentHash" : "0xd4e56740f876aef8c010b86a40d5f56745a118d0906a34e69aec8c0db1cb8fa3",
"receiptsRoot" : "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
"sha3Uncles" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
"size" : "0x219",
"stateRoot" : "0xd67e4d450343046425ae4271474353857ab860dbc0a1dde64b41b5cd3a532bf3",
"timestamp" : "0x55ba4224",
"totalDifficulty" : "0x7ff800000",
"transactions" : [],
"transactionsRoot" : "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
"uncles" : []
}
}
Beacon node RPC
Blockchain Node Engine חושף גם את נקודת הקצה של לקוח ההסכמה של Ethereum.
לדוגמה, כדי לבקש את הסטטוס של מאמת במשבצת 1:
curl \
-H "X-goog-api-key: YOUR_API_KEY" "Content-Type: application/json" \
'http://beacon.YOUR_NODES_URL/eth/v1/beacon/states/head/validators/1'
אפשר גם לספק את מפתח ה-API ככותרת HTTP במקום כפרמטר של שאילתה. השאילתה הבאה שקולה:
curl \
-H "Content-Type: application/json" \
'http://beacon.YOUR_NODES_URL/eth/v1/beacon/states/head/validators/1?key=YOUR_API_KEY'
הסבר נוסף:
- YOUR_NODES_URL היא הכתובת שמוחזרת בקבלת כתובות ה-URL של צומת הבלוקצ'יין.
- YOUR_API_KEY הוא המפתח שיצרתם במאמר יצירה של מפתח API.
זוהי דוגמה לתשובה לפקודה שלמעלה:
{
"execution_optimistic": false,
"data": {
"index": "1",
"balance": "36835614902",
"status": "active_ongoing",
"validator": {
"pubkey": "0x1234abcd",
"withdrawal_credentials": "0x1234abcd",
"effective_balance": "32000000000",
"slashed": false,
"activation_eligibility_epoch": "0",
"activation_epoch": "0",
"exit_epoch": "18446744073709551615",
"withdrawable_epoch": "18446744073709551615"
}
}
}
WebSocket
כדי להירשם לעדכונים בפידים של נתונים במקום לשלוח שאילתות לגבי נתונים, אפשר להשתמש ב-WebSocket API של לקוח ההפעלה של צומת הבלוקצ'יין.
לדוגמה, כדי להירשם למינוי של ראשי שרשרת חדשים:
wscat -c wss://ws.YOUR_NODES_URL?key=YOUR_API_KEY
Connected (press CTRL+C to quit)
> {"jsonrpc":"2.0", "id": 1, "method": "eth_subscribe", "params": ["newHeads"]}
לקוח הביצוע יגיב עם מזהה של המינוי, למשל:
{"jsonrpc":"2.0","id":1,"result":"0xf47df962ae9ba250ba9e9fb239b6894f"}
לאחר מכן, הלקוח ישלח פרטים של כל בלוק חדש בראש השרשרת כשהוא יתרחש. דוגמה לאירוע מהמינוי שלמעלה:
{
"jsonrpc" : "2.0",
"method" : "eth_subscription",
"params" : {
"result" : {
"baseFeePerGas" : "0x4bdc620b8",
"difficulty" : "0x0",
"extraData" : "0x496c6c756d696e61746520446d6f63726174697a6520447374726962757465",
"gasLimit" : "0x1c9c380",
"gasUsed" : "0xe24dae",
"hash" : "0xbde840749c4d9086d17d66079d5f7d3d568ed4572329691e5b4a70f44a551816",
"logsBloom": "0x0000000000000000000000000000000000000",
"miner" : "0xb4c9e4617a16be36b92689b9e07e9f64757c1792",
"mixHash" : "0xf68eb0b3ec50e1543de1cc7f09c7735ba20fa252124511756857078a3ff9a7cf",
"nonce" : "0x0000000000000000",
"number" : "0x109e280",
"parentHash" : "0x54f78faba9fde0d15d7a9d6b80c4569435c7fdc5f1fef3255110373b66ce14de",
"receiptsRoot" : "0x876bcb5772f8597fee4b063c57b7a51209eb428034efabf4cdf39a46901681b4",
"sha3Uncles" : "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
"stateRoot" : "0xfc5daf9608c8f2b9944bcfe0b9182148d85b1a6ad4dc52d3eb522dd02687c7e0",
"timestamp" : "0x647fd287",
"transactionsRoot" : "0x0acaef87e4609ea6075d88fdd404b3fbd25d796af9044522beefd3c708d37af8",
"withdrawalsRoot" : "0x7adfc670253572678769e7d80db8c4c94b5d14d4e014274f39b679fdb5e72d98"
},
"subscription" : "0xf47df962ae9ba250ba9e9fb239b6894f"
}
}
מדדים
צמתי Ethereum מספקים מספר מדדים לגבי המצב התפעולי של הצומת. בדרך כלל, כלי כמו Prometheus או Grafana צורכים את הנתונים האלה.
כדי לאחזר את המדדים שנחשפים על ידי לקוח beacon, אפשר להשתמש בפקודה כמו:
curl https://bc-mc.YOUR_NODES_URL/metrics/prometheus?key=YOUR_API_KEY
הפלט שמתקבל אמור להיראות כך:
# HELP async_tasks_count Total number of async tasks spawned using spawn
# TYPE async_tasks_count gauge
async_tasks_count{async_task_count="addr_broadcast"} 0
async_tasks_count{async_task_count="beacon_node"} 0
async_tasks_count{async_task_count="beacon_processor_manager"} 1
async_tasks_count{async_task_count="beacon_processor_reprocess_queue"} 1
async_tasks_count{async_task_count="beacon_processor_worker"} 0
async_tasks_count{async_task_count="discv5"} 4
async_tasks_count{async_task_count="el_fork_choice_update"} 0
async_tasks_count{async_task_count="eth1"} 1
...
יש נקודות קצה נפרדות של מדדים ללקוח הביצוע וללקוח ה-beacon.
בדרך כלל, הקידומת של הלקוח לביצוע היא ec-mc ושל לקוח ה-beacon היא bc-mc (כמו בדוגמה שלמעלה).
מידע נוסף על מדדים מכל תוכנת לקוח זמין במאמרים הבאים: