प्रमुख मजकुराकडे जा

WebSockets वापरणे

Alchemy
websockets
querying
JavaScript
नवशिक्या
Elan Halpern
1 डिसेंबर, 2020
5 मिनिट वाचन

Ethereum ब्लॉकचेनला विनंत्या करण्यासाठी 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)

1wscat -c wss://eth-mainnet.ws.alchemyapi.io/ws/demo
2
3> {"jsonrpc": "2.0", "id": 0, "method": "eth_gasPrice"}
4
5< {"jsonrpc": "2.0", "result": "0xb2d05e00", "id": 0}
6

WebSockets कसे वापरावे

सुरुवात करण्यासाठी, तुमच्या ॲपसाठी WebSocket URL वापरून एक WebSocket उघडा. तुम्ही तुमच्या ॲपचा WebSocket URL तुमच्या डॅशबोर्ड (opens in a new tab) मध्ये ॲपचे पेज उघडून आणि "View Key" वर क्लिक करून शोधू शकता. लक्षात घ्या की तुमच्या ॲपचा WebSockets साठीचा URL हा HTTP विनंत्यांसाठी असलेल्या URL पेक्षा वेगळा आहे, परंतु दोन्ही "View Key" वर क्लिक करून शोधता येतात.

तुमच्या Alchemy डॅशबोर्डमध्ये तुमचा WebSocket URL कुठे शोधायचा

Alchemy API रेफरन्स (opens in a new tab) मध्ये सूचीबद्ध केलेले कोणतेही API WebSocket द्वारे वापरले जाऊ शकतात. असे करण्यासाठी, HTTP POST विनंतीच्या बॉडी म्हणून पाठवला जाणारा तोच पेलोड वापरा, परंतु त्याऐवजी तो पेलोड WebSocket द्वारे पाठवा.

Web3 सह

Web3 सारखी क्लायंट लायब्ररी वापरताना WebSockets वर संक्रमण करणे सोपे आहे. तुमचा Web3 क्लायंट इन्स्टँशिएट करताना फक्त HTTP URL ऐवजी WebSocket URL पास करा. उदाहरणार्थ:

1const web3 = new Web3("wss://eth-mainnet.ws.alchemyapi.io/ws/your-api-key")
2
3web3.eth.getBlockNumber().then(console.log) // -> 7946893

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

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

eth_subscribe

निर्दिष्ट इव्हेंटसाठी नवीन सबस्क्रिप्शन तयार करते. eth_subscribe बद्दल अधिक जाणून घ्या (opens in a new tab).

मापदंड

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

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

रिटर्न्स

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

सबस्क्रिप्शन इव्हेंट्स

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

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

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

  1. alchemy_newFullPendingTransactions

प्रलंबित स्थितीत (pending state) जोडलेल्या सर्व व्यवहारांची माहिती परत करते. हा सबस्क्रिप्शन प्रकार प्रलंबित व्यवहारांसाठी सबस्क्राइब करतो, जो web3.eth.subscribe("pendingTransactions") या मानक Web3 कॉल सारखाच आहे, परंतु तो फक्त व्यवहार हॅशऐवजी संपूर्ण व्यवहार माहिती उत्सर्जित करतो यात वेगळा आहे.

उदाहरण:

1> {"jsonrpc": "2.0", "id": 1, "method": "eth_subscribe", "params": ["alchemy_newFullPendingTransactions"]}
2
3< {"id":1,"result":"0x9a52eeddc2b289f985c0e23a7d8427c8","jsonrpc":"2.0"}
4< {
5 "jsonrpc":"2.0",
6 "method":"eth_subscription",
7 "params":{
8 "result":{
9 "blockHash":null,
10 "blockNumber":null,
11 "from":"0xa36452fc31f6f482ad823cd1cf5515177d57667f",
12 "gas":"0x1adb0",
13 "gasPrice":"0x7735c4d40",
14 "hash":"0x50bff0736c713458c92dd1848d12f3354149be1363123dae35e94e0f2a9d56bf",
15"input":"0xa9059cbb0000000000000000000000000d0707963952f2fba59dd06f2b425ace40b492fe0000000000000000000000000000000000000000000015b1111266cfca100000",
16 "nonce":"0x0",
17 "to":"0xea38eaa3c86c8f9b751533ba2e562deb9acded40",
18 "transactionIndex":null,
19 "value":"0x0",
20 "v":"0x26",
21 "r":"0x195c2c1ed126088e12d290aa93541677d3e3b1d10f137e11f86b1b9227f01e3b",
22 "s":"0x60fc4edbf1527832a2a36dbc1e63ed6193a6eee654472fbebbf88ef1750b5344"},
23 "subscription":"0x9a52eeddc2b289f985c0e23a7d8427c8"
24 }
25 }
26
  1. newHeads

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

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

उदाहरण:

1> {"jsonrpc": "2.0", "id": 1, "method": "eth_subscribe", "params": ["newHeads"]}
2
3< {"jsonrpc":"2.0","id":2,"result":"0x9ce59a13059e417087c02d3236a0b1cc"}
4< {
5 "jsonrpc": "2.0",
6 "method": "eth_subscription",
7 "params": {
8 "result": {
9 "extraData": "0xd983010305844765746887676f312e342e328777696e646f7773",
10 "gasLimit": "0x47e7c4",
11 "gasUsed": "0x38658",
12 "logsBloom":
13"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
14 "nonce": "0x084149998194cc5f",
15 "number": "0x1348c9",
16 "parentHash": "0x7736fab79e05dc611604d22470dadad26f56fe494421b5b333de816ce1f25701",
17 "receiptRoot": "0x2fab35823ad00c7bb388595cb46652fe7886e00660a01e867824d3dceb1c8d36",
18 "sha3Uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
19 "stateRoot": "0xb3346685172db67de536d8765c43c31009d0eb3bd9c501c9be3229203f15f378",
20 "timestamp": "0x56ffeff8",
21 "transactionsRoot": "0x0167ffa60e3ebc0b080cdb95f7c0087dd6c0e61413140e39d94d3468d7c9689f"
22 },
23 "subscription": "0x9ce59a13059e417087c02d3236a0b1cc"
24 }
25}
26
  1. logs

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

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

पॅरामीटर्स

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

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

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

उदाहरण:

1> {"jsonrpc": "2.0", "id": 1, "method": "eth_subscribe", "params": ["logs", {"address": "0x8320fe7702b96808f7bbc0d4a888ed1468216cfd", "topics": ["0xd78a0cb8bb633d06981248b816e7bd33c2a35a6089241d099fa519e361cab902"]}]}
2
3< {"jsonrpc":"2.0","id":2,"result":"0x4a8a4c0517381924f9838102c5a4dcb7"}
4< {
5 "jsonrpc": "2.0",
6 "method": "eth_subscription",
7 "params": {
8 "subscription": "0x4a8a4c0517381924f9838102c5a4dcb7",
9 "result": {
10 "address": "0x8320fe7702b96808f7bbc0d4a888ed1468216cfd",
11 "blockHash": "0x61cdb2a09ab99abf791d474f20c2ea89bf8de2923a2d42bb49944c8c993cbf04",
12 "blockNumber": "0x29e87",
13 "data": "0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000003",
14 "logIndex":"0x0",
15 "topics":["0xd78a0cb8bb633d06981248b816e7bd33c2a35a6089241d099fa519e361cab902"],
16 "transactionHash": "0xe044554a0a55067caafd07f8020ab9f2af60bdfe337e395ecd84b4877a3d1ab4",
17 "transactionIndex": "0x0"
18 }
19 }
20}
21

eth_unsubscribe

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

पॅरामीटर्स

  1. सबस्क्रिप्शन आयडी, eth_subscribe कॉलवरून पूर्वी परत केल्याप्रमाणे.

रिटर्न्स

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

उदाहरण:

विनंती

1curl https://eth-mainnet.alchemyapi.io/v2/your-api-key
2-X POST
3-H "Content-Type: application/json"
4-d '{"id": 1, "method": "eth_unsubscribe", "params": ["0x9cef478923ff08bf67fde6c64013158d"]}'
5
6

परिणाम

1{
2 "jsonrpc": "2.0",
3 "id": 1,
4 "result": true
5}

Alchemy (opens in a new tab) सह विनामूल्य साइन अप करा, आमची माहिती (opens in a new tab) पहा, आणि ताज्या बातम्यांसाठी, आम्हाला Twitter (opens in a new tab) वर फॉलो करा.

पृष्ठ अखेरचे अद्यतन: 3 मार्च, 2026

हे मार्गदर्शन उपयुक्त होते का?