WebSockets वापरणे
इथेरियम ब्लॉकचेनला विनंत्या करण्यासाठी WebSockets आणि Alchemy वापरण्याबाबतचे हे एक प्राथमिक स्तरावरील मार्गदर्शक आहे.
(opens in a new tab)WebSockets विरुद्ध HTTP
HTTP च्या विपरीत, WebSockets सह, जेव्हा तुम्हाला विशिष्ट माहिती हवी असते तेव्हा तुम्हाला सतत विनंत्या करण्याची आवश्यकता नसते. WebSockets तुमच्यासाठी नेटवर्क कनेक्शन राखतात (जर योग्यरित्या केले असेल) आणि बदलांसाठी ऐकतात.
कोणत्याही नेटवर्क कनेक्शनप्रमाणे, तुम्ही असे गृहीत धरू नये की WebSocket कोणत्याही व्यत्ययाशिवाय कायमचे खुले राहील, परंतु ड्रॉप झालेले कनेक्शन आणि मॅन्युअली पुन्हा कनेक्ट करणे योग्यरित्या हाताळणे आव्हानात्मक असू शकते. WebSockets चा आणखी एक तोटा असा आहे की तुम्हाला प्रतिसादात HTTP स्टेटस कोड मिळत नाहीत, तर फक्त त्रुटी संदेश मिळतो.
Alchemy Web3 (opens in a new tab) कोणत्याही कॉन्फिगरेशनची आवश्यकता नसताना WebSocket मधील बिघाड आणि पुनर्प्रयत्नांसाठी स्वयंचलितपणे हाताळणी जोडते.
हे वापरून पहा
WebSockets ची चाचणी करण्याचा सर्वात सोपा मार्ग म्हणजे WebSocket विनंत्या करण्यासाठी wscat (opens in a new tab) सारखे कमांड लाइन टूल इन्स्टॉल करणे. wscat वापरून, तुम्ही खालीलप्रमाणे विनंत्या पाठवू शकता:
टीप: जर तुमच्याकडे Alchemy खाते असेल तर तुम्ही demo च्या जागी तुमची स्वतःची API की वापरू शकता. मोफत Alchemy खात्यासाठी येथे साइन अप करा! (opens in a new tab)
wscat -c wss://eth-mainnet.ws.alchemyapi.io/ws/demo
> {"jsonrpc": "2.0", "id": 0, "method": "eth_gasPrice"}
< {"jsonrpc": "2.0", "result": "0xb2d05e00", "id": 0}
WebSockets कसे वापरावे
सुरुवात करण्यासाठी, तुमच्या ॲपसाठी WebSocket URL वापरून WebSocket उघडा. तुम्ही तुमच्या डॅशबोर्डमध्ये (opens in a new tab) ॲपचे पेज उघडून आणि "View Key" वर क्लिक करून तुमच्या ॲपची WebSocket URL शोधू शकता. लक्षात घ्या की WebSockets साठी तुमच्या ॲपची URL ही HTTP विनंत्यांसाठी असलेल्या URL पेक्षा वेगळी आहे, परंतु दोन्ही "View Key" वर क्लिक करून शोधल्या जाऊ शकतात.
Alchemy API संदर्भामध्ये (opens in a new tab) सूचीबद्ध केलेल्या कोणत्याही API चा वापर WebSocket द्वारे केला जाऊ शकतो. असे करण्यासाठी, HTTP POST विनंतीच्या मुख्य भागामध्ये पाठवला जाणारा पेलोड वापरा, परंतु त्याऐवजी तो पेलोड WebSocket द्वारे पाठवा.
Web3 सह
Web3 सारखी क्लायंट लायब्ररी वापरताना WebSockets वर जाणे सोपे आहे. तुमचा Web3 क्लायंट इन्स्टॅन्शिएट करताना HTTP ऐवजी फक्त WebSocket URL पास करा. उदाहरणार्थ:
const web3 = new Web3("wss://eth-mainnet.ws.alchemyapi.io/ws/your-api-key")
web3.eth.getBlockNumber().then(console.log) // -> 7946893
सबस्क्रिप्शन API
WebSocket द्वारे कनेक्ट केलेले असताना, तुम्ही दोन अतिरिक्त पद्धती वापरू शकता: eth_subscribe आणि eth_unsubscribe. या पद्धती तुम्हाला विशिष्ट घटना ऐकण्याची आणि त्वरित सूचित करण्याची अनुमती देतील.
eth_subscribe
निर्दिष्ट केलेल्या घटनांसाठी नवीन सबस्क्रिप्शन तयार करते. eth_subscribe बद्दल अधिक जाणून घ्या (opens in a new tab).
पॅरामीटर्स
- सबस्क्रिप्शनचे प्रकार
- पर्यायी पॅरामीटर्स
पहिला आर्ग्युमेंट कोणत्या प्रकारच्या घटनेसाठी ऐकायचे ते निर्दिष्ट करतो. दुसऱ्या आर्ग्युमेंटमध्ये अतिरिक्त पर्याय असतात जे पहिल्या आर्ग्युमेंटवर अवलंबून असतात. विविध वर्णन प्रकार, त्यांचे पर्याय आणि त्यांचे घटना पेलोड खाली वर्णन केले आहेत.
रिटर्न्स
सबस्क्रिप्शन ID: हा ID प्राप्त झालेल्या कोणत्याही घटनांना जोडला जाईल, आणि eth_unsubscribe वापरून सबस्क्रिप्शन रद्द करण्यासाठी देखील वापरला जाऊ शकतो.
सबस्क्रिप्शन घटना
सबस्क्रिप्शन सक्रिय असताना, तुम्हाला घटना प्राप्त होतील जे खालील फील्ड्स असलेले ऑब्जेक्ट्स आहेत:
jsonrpc: नेहमी "2.0"method: नेहमी "eth_subscription"params: खालील फील्ड्स असलेला एक ऑब्जेक्ट:subscription: हे सबस्क्रिप्शन तयार करणाऱ्याeth_subscribeकॉलद्वारे परत केलेला सबस्क्रिप्शन ID.result: एक ऑब्जेक्ट ज्याची सामग्री सबस्क्रिप्शनच्या प्रकारानुसार बदलते.
सबस्क्रिप्शनचे प्रकार
alchemy_newFullPendingTransactions
प्रलंबित स्थितीत जोडल्या गेलेल्या सर्व व्यवहारांसाठी व्यवहार माहिती परत करते. हा सबस्क्रिप्शन प्रकार प्रलंबित व्यवहारांना सबस्क्राइब करतो, जो मानक Web3 कॉल web3.eth.subscribe("pendingTransactions") सारखाच आहे, परंतु यात फरक असा आहे की तो केवळ व्यवहार हॅश ऐवजी संपूर्ण व्यवहार माहिती उत्सर्जित करतो.
उदाहरण:
> {"jsonrpc": "2.0", "id": 1, "method": "eth_subscribe", "params": ["alchemy_newFullPendingTransactions"]}
< {"id":1,"result":"0x9a52eeddc2b289f985c0e23a7d8427c8","jsonrpc":"2.0"}
< {
"jsonrpc":"2.0",
"method":"eth_subscription",
"params":{
"result":{
"blockHash":null,
"blockNumber":null,
"from":"0xa36452fc31f6f482ad823cd1cf5515177d57667f",
"gas":"0x1adb0",
"gasPrice":"0x7735c4d40",
"hash":"0x50bff0736c713458c92dd1848d12f3354149be1363123dae35e94e0f2a9d56bf",
"input":"0xa9059cbb0000000000000000000000000d0707963952f2fba59dd06f2b425ace40b492fe0000000000000000000000000000000000000000000015b1111266cfca100000",
"nonce":"0x0",
"to":"0xea38eaa3c86c8f9b751533ba2e562deb9acded40",
"transactionIndex":null,
"value":"0x0",
"v":"0x26",
"r":"0x195c2c1ed126088e12d290aa93541677d3e3b1d10f137e11f86b1b9227f01e3b",
"s":"0x60fc4edbf1527832a2a36dbc1e63ed6193a6eee654472fbebbf88ef1750b5344"},
"subscription":"0x9a52eeddc2b289f985c0e23a7d8427c8"
}
}
newHeads
जेव्हा चेनमध्ये नवीन हेडर जोडले जाते, ज्यामध्ये चेन रि-ऑर्ग दरम्यानचाही समावेश असतो, तेव्हा प्रत्येक वेळी एक घटना उत्सर्जित करते.
जेव्हा चेन रि-ऑर्ग होते, तेव्हा हे सबस्क्रिप्शन नवीन चेनसाठी सर्व नवीन हेडर्स असलेली एक घटना उत्सर्जित करेल. विशेषतः, याचा अर्थ असा की तुम्हाला समान उंचीसह उत्सर्जित झालेले एकाधिक हेडर्स दिसू शकतात, आणि जेव्हा असे घडते तेव्हा रि-ऑर्ग नंतर नंतरचे हेडर योग्य मानले जावे.
उदाहरण:
> {"jsonrpc": "2.0", "id": 1, "method": "eth_subscribe", "params": ["newHeads"]}
< {"jsonrpc":"2.0","id":2,"result":"0x9ce59a13059e417087c02d3236a0b1cc"}
< {
"jsonrpc": "2.0",
"method": "eth_subscription",
"params": {
"result": {
"extraData": "0xd983010305844765746887676f312e342e328777696e646f7773",
"gasLimit": "0x47e7c4",
"gasUsed": "0x38658",
"logsBloom":
"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"nonce": "0x084149998194cc5f",
"number": "0x1348c9",
"parentHash": "0x7736fab79e05dc611604d22470dadad26f56fe494421b5b333de816ce1f25701",
"receiptRoot": "0x2fab35823ad00c7bb388595cb46652fe7886e00660a01e867824d3dceb1c8d36",
"sha3Uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
"stateRoot": "0xb3346685172db67de536d8765c43c31009d0eb3bd9c501c9be3229203f15f378",
"timestamp": "0x56ffeff8",
"transactionsRoot": "0x0167ffa60e3ebc0b080cdb95f7c0087dd6c0e61413140e39d94d3468d7c9689f"
},
"subscription": "0x9ce59a13059e417087c02d3236a0b1cc"
}
}
logs
निर्दिष्ट फिल्टर निकषांशी जुळणाऱ्या नव्याने जोडलेल्या ब्लॉक्सचा भाग असलेले लॉग्स उत्सर्जित करते.
जेव्हा चेन रि-ऑर्ग होते, तेव्हा जुन्या चेनवरील ब्लॉक्सचा भाग असलेले लॉग्स removed प्रॉपर्टी true वर सेट करून पुन्हा उत्सर्जित केले जातील. पुढे, नवीन चेनवरील ब्लॉक्सचा भाग असलेले लॉग्स उत्सर्जित केले जातात, याचा अर्थ असा की रि-ऑर्गच्या बाबतीत एकाच व्यवहारासाठी अनेक वेळा लॉग्स पाहणे शक्य आहे.
पॅरामीटर्स
- खालील फील्ड्स असलेला एक ऑब्जेक्ट:
address(पर्यायी): एकतर पत्ता दर्शवणारी स्ट्रिंग किंवा अशा स्ट्रिंगचा ॲरे.- फक्त यापैकी एका पत्त्यावरून तयार केलेले लॉग्स उत्सर्जित केले जातील.
topics: टॉपिक स्पेसिफायर्सचा ॲरे.- प्रत्येक टॉपिक स्पेसिफायर एकतर
null, टॉपिक दर्शवणारी स्ट्रिंग किंवा स्ट्रिंगचा ॲरे असतो. - ॲरेमधील प्रत्येक स्थान जे
nullनाही ते उत्सर्जित लॉग्सना फक्त त्या स्थानावर दिलेल्या टॉपिक्सपैकी एक असलेल्यांपुरते मर्यादित करते.
- प्रत्येक टॉपिक स्पेसिफायर एकतर
टॉपिक स्पेसिफिकेशन्सची काही उदाहरणे:
[]: कोणत्याही टॉपिक्सना परवानगी आहे.[A]: पहिल्या स्थानावर A (आणि त्यानंतर काहीही).[null, B]: पहिल्या स्थानावर काहीही आणि दुसऱ्या स्थानावर B (आणि त्यानंतर काहीही).[A, B]: पहिल्या स्थानावर A आणि दुसऱ्या स्थानावर B (आणि त्यानंतर काहीही).[[A, B], [A, B]]: पहिल्या स्थानावर (A किंवा B) आणि दुसऱ्या स्थानावर (A किंवा B) (आणि त्यानंतर काहीही).
उदाहरण:
> {"jsonrpc": "2.0", "id": 1, "method": "eth_subscribe", "params": ["logs", {"address": "0x8320fe7702b96808f7bbc0d4a888ed1468216cfd", "topics": ["0xd78a0cb8bb633d06981248b816e7bd33c2a35a6089241d099fa519e361cab902"]}]}
< {"jsonrpc":"2.0","id":2,"result":"0x4a8a4c0517381924f9838102c5a4dcb7"}
< {
"jsonrpc": "2.0",
"method": "eth_subscription",
"params": {
"subscription": "0x4a8a4c0517381924f9838102c5a4dcb7",
"result": {
"address": "0x8320fe7702b96808f7bbc0d4a888ed1468216cfd",
"blockHash": "0x61cdb2a09ab99abf791d474f20c2ea89bf8de2923a2d42bb49944c8c993cbf04",
"blockNumber": "0x29e87",
"data": "0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000003",
"logIndex":"0x0",
"topics":["0xd78a0cb8bb633d06981248b816e7bd33c2a35a6089241d099fa519e361cab902"],
"transactionHash": "0xe044554a0a55067caafd07f8020ab9f2af60bdfe337e395ecd84b4877a3d1ab4",
"transactionIndex": "0x0"
}
}
}
eth_unsubscribe
विद्यमान सबस्क्रिप्शन रद्द करते जेणेकरून पुढील कोणत्याही घटना पाठवल्या जाणार नाहीत.
पॅरामीटर्स
- सबस्क्रिप्शन ID, जसा पूर्वी
eth_subscribeकॉलवरून परत केला होता.
रिटर्न्स
जर सबस्क्रिप्शन यशस्वीरित्या रद्द केले गेले असेल तर true, किंवा दिलेल्या ID सह कोणतेही सबस्क्रिप्शन अस्तित्वात नसल्यास false.
उदाहरण:
विनंती
curl https://eth-mainnet.alchemyapi.io/v2/your-api-key
-X POST
-H "Content-Type: application/json"
-d '{"id": 1, "method": "eth_unsubscribe", "params": ["0x9cef478923ff08bf67fde6c64013158d"]}'
निकाल
{
"jsonrpc": "2.0",
"id": 1,
"result": true
}
मोफत Alchemy सह साइन अप करा (opens in a new tab), आमचे दस्तऐवजीकरण (opens in a new tab) तपासा, आणि ताज्या बातम्यांसाठी, आम्हाला ट्विटर् (opens in a new tab) वर फॉलो करा.
