मुख्य सामग्रीवर जा

WebSockets वापरणे

Alchemy
websockets
क्वेरी करणे
JavaScript
नवशिक्या
एलन हॅल्पर्न
1 डिसेंबर, 2020
6 मिनिटांचे वाचन

इथेरियम ब्लॉकचेनला विनंत्या करण्यासाठी WebSockets वापरण्याविषयी हे एक प्राथमिक स्तरावरील मार्गदर्शक आहे. उदाहरणांमध्ये प्रमाणित जेसॉन-आरपीसी पद्धती वापरल्या आहेत, त्यामुळे ते Alchemy सह WebSocket एंडपॉइंट ऑफर करणाऱ्या कोणत्याही नोड किंवा नोड प्रोव्हायडरसोबत काम करतात.

 (नवीन टॅबमध्ये उघडते)WebSockets विरुद्ध HTTP

HTTP च्या विपरीत, WebSockets सह, जेव्हा तुम्हाला विशिष्ट माहिती हवी असते तेव्हा तुम्हाला सतत विनंत्या करण्याची आवश्यकता नसते. WebSockets तुमच्यासाठी नेटवर्क कनेक्शन राखतात (जर योग्यरित्या केले असेल) आणि बदलांसाठी ऐकतात.

कोणत्याही नेटवर्क कनेक्शनप्रमाणे, तुम्ही असे गृहीत धरू नये की WebSocket कोणत्याही व्यत्ययाशिवाय कायमचे उघडे राहील, परंतु ड्रॉप झालेले कनेक्शन आणि मॅन्युअली पुन्हा कनेक्ट करणे योग्यरित्या हाताळणे आव्हानात्मक असू शकते. WebSockets चा आणखी एक तोटा असा आहे की तुम्हाला प्रतिसादात HTTP स्टेटस कोड मिळत नाहीत, तर फक्त त्रुटी संदेश मिळतो.

क्लायंट लायब्ररी तुमच्यासाठी हे हाताळू शकतात. उदाहरणार्थ, viem चे WebSocket ट्रान्सपोर्ट (नवीन टॅबमध्ये उघडते) सॉकेट निकामी झाल्यावर पुन्हा कनेक्ट होते आणि डीफॉल्टनुसार कीप-अलाइव्ह पिंग पाठवते.

हे वापरून पहा

तुम्हाला इथेरियम नोडसाठी WebSocket URL ची आवश्यकता आहे. जेव्हा तुम्ही ॲप्लिकेशन प्रोग्रामिंग इंटरफेस (API) की तयार करता तेव्हा नोड प्रोव्हायडर तुम्हाला एक देतात, जे सहसा wss://<provider-host>/<your-api-key> या स्वरूपात असते. उदाहरणार्थ, Alchemy इथरियम मेननेट URL wss://eth-mainnet.g.alchemy.com/v2/<your-api-key> सारखी दिसते (मोफत Alchemy खात्यासाठी साइन अप करा (नवीन टॅबमध्ये उघडते)). इतर प्रोव्हायडर्ससाठी सेवा म्हणून नोड्स पहा, किंवा तुमच्या स्वतःच्या नोडचा WebSocket एंडपॉइंट वापरा. wss://ethereum-rpc.publicnode.com सारखे सार्वजनिक एंडपॉइंट्स देखील जलद प्रयोगांसाठी काम करतात, परंतु ते रेट-लिमिटेड आहेत आणि प्रत्येक सबस्क्रिप्शन प्रकाराला सपोर्ट करू शकत नाहीत.

WebSockets ची चाचणी करण्याचा सर्वात सोपा मार्ग म्हणजे WebSocket विनंत्या करण्यासाठी कमांड लाइन टूल इन्स्टॉल करणे जसे की wscat (नवीन टॅबमध्ये उघडते). wscat वापरून, तुम्ही खालीलप्रमाणे विनंत्या पाठवू शकता:

npx wscat -c wss://<provider-host>/<your-api-key>

> {"jsonrpc": "2.0", "id": 0, "method": "eth_gasPrice"}

< {"jsonrpc": "2.0", "result": "0x41f9de2", "id": 0}

> ने सुरू होणाऱ्या ओळी तुम्ही टाईप केलेल्या असतात आणि < ने सुरू होणाऱ्या ओळी नोड परत पाठवतो.

WebSockets कसे वापरावे

सुरुवात करण्यासाठी, तुमच्या प्रोव्हायडरचा WebSocket URL वापरून WebSocket उघडा. Alchemy सह, तुम्ही तुमचे ॲप डॅशबोर्डमध्ये (नवीन टॅबमध्ये उघडते) उघडून आणि त्याची ॲप्लिकेशन प्रोग्रामिंग इंटरफेस (API) की पाहून ते शोधू शकता. लक्षात घ्या की WebSockets साठी URL (wss://) HTTP विनंत्यांसाठी असलेल्या URL (https://) पेक्षा वेगळी आहे, जरी बहुतांश प्रोव्हायडर्स दोन्हीसाठी समान API की वापरतात.

तुमचा प्रोव्हायडर सपोर्ट करत असलेल्या कोणत्याही जेसॉन-आरपीसी पद्धती WebSocket द्वारे वापरल्या जाऊ शकतात. असे करण्यासाठी, HTTP POST विनंतीच्या मुख्य भागाच्या रूपात पाठवला जाणारा पेलोड वापरा, परंतु त्याऐवजी तो पेलोड WebSocket द्वारे पाठवा.

Web3 सह

Viem (नवीन टॅबमध्ये उघडते) सारखी क्लायंट लायब्ररी वापरताना WebSockets वर जाणे सोपे आहे. http ट्रान्सपोर्ट ऐवजी तुमच्या WebSocket URL सह webSocket ट्रान्सपोर्ट वापरा. उदाहरणार्थ, npm install viem नंतर, हे index.mjs म्हणून सेव्ह करा आणि node index.mjs रन करा:

सबस्क्रिप्शन API

WebSocket द्वारे कनेक्ट केलेले असताना, तुम्ही दोन अतिरिक्त पद्धती वापरू शकता: eth_subscribe आणि eth_unsubscribe. या पद्धती तुम्हाला विशिष्ट घटना ऐकण्याची आणि त्वरित सूचित करण्याची अनुमती देतील.

eth_subscribe

निर्दिष्ट केलेल्या घटनांसाठी नवीन सबस्क्रिप्शन तयार करते. eth_subscribe बद्दल अधिक जाणून घ्या (नवीन टॅबमध्ये उघडते).

पॅरामीटर्स

  1. सबस्क्रिप्शनचे प्रकार
  2. पर्यायी पॅरामीटर्स

पहिला आर्ग्युमेंट कोणत्या प्रकारच्या घटनेसाठी ऐकायचे ते निर्दिष्ट करतो. दुसऱ्या आर्ग्युमेंटमध्ये अतिरिक्त पर्याय असतात जे पहिल्या आर्ग्युमेंटवर अवलंबून असतात. विविध वर्णन प्रकार, त्यांचे पर्याय आणि त्यांचे घटना पेलोड खाली वर्णन केले आहेत.

रिटर्न्स

सबस्क्रिप्शन ID: हा ID प्राप्त झालेल्या कोणत्याही घटनांना जोडला जाईल, आणि eth_unsubscribe वापरून सबस्क्रिप्शन रद्द करण्यासाठी देखील वापरला जाऊ शकतो.

सबस्क्रिप्शन घटना

सबस्क्रिप्शन सक्रिय असताना, तुम्हाला घटना प्राप्त होतील जे खालील फील्ड्स असलेले ऑब्जेक्ट्स आहेत:

  • jsonrpc: नेहमी "2.0"
  • method: नेहमी "eth_subscription"
  • params: खालील फील्ड्स असलेला एक ऑब्जेक्ट:
    • subscription: हे सबस्क्रिप्शन तयार करणाऱ्या eth_subscribe कॉलद्वारे परत केलेला सबस्क्रिप्शन ID.
    • result: एक ऑब्जेक्ट ज्याची सामग्री सबस्क्रिप्शनच्या प्रकारानुसार बदलते.

सबस्क्रिप्शनचे प्रकार

  1. newHeads

चेन पुनर्रचना दरम्यानसह, जेव्हाही चेनमध्ये नवीन हेडर जोडले जाते तेव्हा एक घटना उत्सर्जित करते.

जेव्हा चेन पुनर्रचना होते, तेव्हा हे सबस्क्रिप्शन नवीन चेनसाठी सर्व नवीन हेडर्स असलेली एक घटना उत्सर्जित करेल. विशेषतः, याचा अर्थ असा की तुम्हाला समान उंचीसह उत्सर्जित झालेले अनेक हेडर्स दिसू शकतात, आणि जेव्हा असे घडते तेव्हा पुनर्रचना झाल्यानंतर नंतरचे हेडर योग्य मानले जावे.

उदाहरण:

  1. logs

निर्दिष्ट फिल्टर निकषांशी जुळणाऱ्या नव्याने जोडलेल्या ब्लॉक्सचा भाग असलेले लॉग्स उत्सर्जित करते.

जेव्हा चेन पुनर्रचना होते, तेव्हा जुन्या चेनवरील ब्लॉक्सचा भाग असलेले लॉग्स removed प्रॉपर्टी true वर सेट करून पुन्हा उत्सर्जित केले जातील. पुढे, नवीन चेनवरील ब्लॉक्सचा भाग असलेले लॉग्स उत्सर्जित केले जातात, याचा अर्थ पुनर्रचना झाल्यास एकाच व्यवहारासाठी अनेक वेळा लॉग्स पाहणे शक्य आहे.

पॅरामीटर्स

  1. खालील फील्ड्स असलेला एक ऑब्जेक्ट:
    • address (पर्यायी): एकतर पत्ता दर्शवणारी स्ट्रिंग किंवा अशा स्ट्रिंग्सचा ॲरे.
      • फक्त यापैकी एका पत्त्यावरून तयार केलेले लॉग्स उत्सर्जित केले जातील.
    • topics: टॉपिक स्पेसिफायर्सचा ॲरे.
      • प्रत्येक टॉपिक स्पेसिफायर एकतर null, टॉपिक दर्शवणारी स्ट्रिंग किंवा स्ट्रिंग्सचा ॲरे असतो.
      • ॲरेमधील प्रत्येक स्थान जे null नाही ते उत्सर्जित लॉग्सना फक्त त्या स्थानावर दिलेल्या टॉपिक्सपैकी एक असलेल्यांपुरते मर्यादित करते.

टॉपिक स्पेसिफिकेशन्सची काही उदाहरणे:

  • []: कोणतेही टॉपिक्स अनुमत आहेत.
  • [A]: पहिल्या स्थानावर A (आणि त्यानंतर काहीही).
  • [null, B]: पहिल्या स्थानावर काहीही आणि दुसऱ्या स्थानावर B (आणि त्यानंतर काहीही).
  • [A, B]: पहिल्या स्थानावर A आणि दुसऱ्या स्थानावर B (आणि त्यानंतर काहीही).
  • [[A, B], [A, B]]: पहिल्या स्थानावर (A किंवा B) आणि दुसऱ्या स्थानावर (A किंवा B) (आणि त्यानंतर काहीही).

उदाहरण:

हे उदाहरण इथरियम मेननेटवरील रॅप्ड इथर (WETH) कॉन्ट्रॅक्ट (नवीन टॅबमध्ये उघडते) मधून Deposit घटना ऐकते:

  1. newPendingTransactions

नोडच्या प्रलंबित स्थितीमध्ये (त्याच्या मेमपूलमध्ये) जोडल्या गेलेल्या प्रत्येक व्यवहाराचा हॅश उत्सर्जित करते.

उदाहरण:

> {"jsonrpc": "2.0", "id": 1, "method": "eth_subscribe", "params": ["newPendingTransactions"]}

< {"jsonrpc":"2.0","result":"0x1c2365b029179adf1e84b9e327315249","id":1}
< {"jsonrpc":"2.0","method":"eth_subscription","params":{"result":"0x4a62d0ad7c8868fbbfa10604e68638e637c6fc6f64fd1fb4ca042dcd0158c992","subscription":"0x1c2365b029179adf1e84b9e327315249"}}

काही प्रोव्हायडर्स त्यांचे स्वतःचे सबस्क्रिप्शन प्रकार देखील देतात. उदाहरणार्थ, Alchemy चे alchemy_pendingTransactions (नवीन टॅबमध्ये उघडते) फक्त हॅश ऐवजी पूर्ण व्यवहार ऑब्जेक्ट्स उत्सर्जित करते, आणि पर्यायी fromAddress, toAddress आणि hashesOnly फिल्टर्स स्वीकारते. हे प्रमाणित जेसॉन-आरपीसी ॲप्लिकेशन प्रोग्रामिंग इंटरफेस (API) चा भाग नाहीत, त्यामुळे ते फक्त त्या प्रोव्हायडरसोबत काम करतात.

eth_unsubscribe

विद्यमान सबस्क्रिप्शन रद्द करते जेणेकरून पुढील कोणत्याही घटना पाठवल्या जाणार नाहीत.

पॅरामीटर्स

  1. सबस्क्रिप्शन ID, जसा पूर्वी eth_subscribe कॉलवरून परत केला होता.

रिटर्न्स

जर सबस्क्रिप्शन यशस्वीरित्या रद्द केले गेले असेल तर true, किंवा दिलेल्या ID सह कोणतेही सबस्क्रिप्शन अस्तित्वात नसेल तर false.

सबस्क्रिप्शन फक्त ते तयार केलेल्या WebSocket कनेक्शनवर अस्तित्वात असते, त्यामुळे eth_unsubscribe त्याच कनेक्शनवरून पाठवले जाणे आवश्यक आहे. ते स्वतंत्र HTTP विनंती म्हणून पाठवले जाऊ शकत नाही. कनेक्शन बंद केल्याने त्याचे सर्व सबस्क्रिप्शन्स देखील रद्द होतात.

उदाहरण:

> {"jsonrpc": "2.0", "id": 2, "method": "eth_unsubscribe", "params": ["0xe0d4abf5caf333fbf94c5f02182e6469"]}

< {"jsonrpc":"2.0","result":true,"id":2}

मोफत Alchemy सह साइन अप करा (नवीन टॅबमध्ये उघडते), Alchemy चे दस्तऐवजीकरण (नवीन टॅबमध्ये उघडते) तपासा, आणि ताज्या बातम्यांसाठी, ट्विटर् (नवीन टॅबमध्ये उघडते) वर Alchemy ला फॉलो करा.