মূল কন্টেন্টে যান

ওয়েবসকেটস ব্যবহার

Alchemy
websockets
querying
JavaScript
শিক্ষানবিস
এলান হ্যালপার্ন
1 ডিসেম্বর, 2020
5 মিনিট পড়া

এটি ইথিরিয়াম ব্লকচেইন-এ রিকোয়েস্ট করার জন্য ওয়েবসকেটস এবং অ্যালকেমি ব্যবহারের একটি প্রাথমিক স্তরের গাইড।

 (opens in a new tab)ওয়েবসকেটস বনাম HTTP

HTTP-এর বিপরীতে, ওয়েবসকেটস-এর মাধ্যমে নির্দিষ্ট তথ্যের প্রয়োজন হলে আপনাকে বারবার রিকোয়েস্ট করতে হয় না। ওয়েবসকেটস আপনার জন্য একটি নেটওয়ার্ক কানেকশন বজায় রাখে (যদি সঠিকভাবে করা হয়) এবং পরিবর্তনের জন্য অপেক্ষা করে।

যেকোনো নেটওয়ার্ক কানেকশনের মতো, আপনার ধরে নেওয়া উচিত নয় যে একটি ওয়েবসকেট কোনো বাধা ছাড়াই চিরকাল খোলা থাকবে, তবে ড্রপ হওয়া কানেকশন এবং ম্যানুয়ালি পুনরায় কানেক্ট করা সঠিকভাবে পরিচালনা করা চ্যালেঞ্জিং হতে পারে। ওয়েবসকেটস-এর আরেকটি অসুবিধা হলো আপনি রেসপন্সে HTTP স্ট্যাটাস কোড পান না, শুধুমাত্র এরর মেসেজ পান।

Alchemy Web3 (opens in a new tab) স্বয়ংক্রিয়ভাবে ওয়েবসকেট ফেইলিওর এবং রিট্রাই হ্যান্ডলিং যুক্ত করে, যার জন্য কোনো কনফিগারেশনের প্রয়োজন হয় না।

চেষ্টা করে দেখুন

ওয়েবসকেটস পরীক্ষা করার সবচেয়ে সহজ উপায় হলো ওয়েবসকেট রিকোয়েস্ট করার জন্য একটি কমান্ড লাইন টুল ইনস্টল করা, যেমন wscat (opens in a new tab)। wscat ব্যবহার করে, আপনি নিচের মতো করে রিকোয়েস্ট পাঠাতে পারেন:

নোট: আপনার যদি একটি অ্যালকেমি একাউন্ট থাকে তবে আপনি demo-এর জায়গায় আপনার নিজের API কি (key) বসাতে পারেন। এখানে একটি বিনামূল্যের অ্যালকেমি একাউন্টের জন্য সাইন আপ করুন! (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

ওয়েবসকেটস কীভাবে ব্যবহার করবেন

শুরু করতে, আপনার অ্যাপের ওয়েবসকেট URL ব্যবহার করে একটি ওয়েবসকেট খুলুন। আপনি আপনার ড্যাশবোর্ড (opens in a new tab)-এ অ্যাপের পেজ খুলে এবং "View Key"-তে ক্লিক করে আপনার অ্যাপের ওয়েবসকেট URL খুঁজে পেতে পারেন। মনে রাখবেন যে ওয়েবসকেটস-এর জন্য আপনার অ্যাপের URL, HTTP রিকোয়েস্টের URL থেকে আলাদা, তবে "View Key"-তে ক্লিক করে উভয়ই পাওয়া যেতে পারে।

আপনার অ্যালকেমি ড্যাশবোর্ডে ওয়েবসকেট URL কোথায় পাবেন

Alchemy API Reference (opens in a new tab)-এ তালিকাভুক্ত যেকোনো API ওয়েবসকেট-এর মাধ্যমে ব্যবহার করা যেতে পারে। এটি করতে, HTTP POST রিকোয়েস্টের বডি হিসেবে যে পেলোড পাঠানো হতো, সেটিই ব্যবহার করুন, তবে এর পরিবর্তে সেই পেলোডটি ওয়েবসকেট-এর মাধ্যমে পাঠান।

ওয়েব3 এর সাথে

ওয়েব3-এর মতো একটি ক্লায়েন্ট লাইব্রেরি ব্যবহার করার সময় ওয়েবসকেটস-এ ট্রানজিশন করা সহজ। আপনার ওয়েব3 ক্লায়েন্ট ইনস্ট্যানশিয়েট করার সময় HTTP-এর পরিবর্তে ওয়েবসকেট URL পাস করুন। উদাহরণস্বরূপ:

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

সাবস্ক্রিপশন API

ওয়েবসকেট-এর মাধ্যমে কানেক্টেড থাকলে, আপনি দুটি অতিরিক্ত মেথড ব্যবহার করতে পারেন: eth_subscribe এবং eth_unsubscribe। এই মেথডগুলো আপনাকে নির্দিষ্ট ইভেন্টগুলোর জন্য অপেক্ষা করতে এবং সাথে সাথে নোটিফিকেশন পেতে সাহায্য করবে।

eth_subscribe

নির্দিষ্ট ইভেন্টগুলোর জন্য একটি নতুন সাবস্ক্রিপশন তৈরি করে। eth_subscribe সম্পর্কে আরও জানুন (opens in a new tab)

প্যারামিটার

  1. সাবস্ক্রিপশনের ধরন
  2. ঐচ্ছিক প্যারামিটার

প্রথম আর্গুমেন্টটি নির্দিষ্ট করে যে কোন ধরনের ইভেন্টের জন্য অপেক্ষা করতে হবে। দ্বিতীয় আর্গুমেন্টে অতিরিক্ত অপশন থাকে যা প্রথম আর্গুমেন্টের ওপর নির্ভর করে। বিভিন্ন ডেসক্রিপশনের ধরন, তাদের অপশন এবং তাদের ইভেন্ট পেলোডগুলো নিচে বর্ণনা করা হলো।

রিটার্নস

সাবস্ক্রিপশন ID: এই ID-টি যেকোনো প্রাপ্ত ইভেন্টের সাথে যুক্ত থাকবে এবং eth_unsubscribe ব্যবহার করে সাবস্ক্রিপশন বাতিল করতেও ব্যবহার করা যেতে পারে।

সাবস্ক্রিপশন ইভেন্ট

সাবস্ক্রিপশন সক্রিয় থাকাকালীন, আপনি ইভেন্টগুলো পাবেন যা নিচের ফিল্ডগুলোর সাথে অবজেক্ট হিসেবে থাকে:

  • jsonrpc: সর্বদা "2.0"
  • method: সর্বদা "eth_subscription"
  • params: নিচের ফিল্ডগুলোর সাথে একটি অবজেক্ট:
    • subscription: eth_subscribe কল দ্বারা রিটার্ন করা সাবস্ক্রিপশন ID যা এই সাবস্ক্রিপশনটি তৈরি করেছে।
    • result: একটি অবজেক্ট যার কন্টেন্ট সাবস্ক্রিপশনের ধরনের ওপর নির্ভর করে পরিবর্তিত হয়।

সাবস্ক্রিপশনের ধরন

  1. alchemy_newFullPendingTransactions

পেন্ডিং স্টেটে যুক্ত হওয়া সমস্ত লেনদেনের তথ্য রিটার্ন করে। এই সাবস্ক্রিপশনের ধরনটি পেন্ডিং লেনদেনগুলোতে সাবস্ক্রাইব করে, যা স্ট্যান্ডার্ড ওয়েব3 কল web3.eth.subscribe("pendingTransactions")-এর মতো, তবে এটি শুধুমাত্র লেনদেনের হ্যাশ-এর পরিবর্তে সম্পূর্ণ লেনদেনের তথ্য প্রদান করে।

উদাহরণ:

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 নয়, তা এমিট করা লগগুলোকে শুধুমাত্র তাদের মধ্যে সীমাবদ্ধ করে যাদের সেই পজিশনে প্রদত্ত টপিকগুলোর মধ্যে একটি রয়েছে।

টপিক স্পেসিফিকেশনের কিছু উদাহরণ:

  • []: যেকোনো টপিক অনুমোদিত।
  • [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. সাবস্ক্রিপশন ID, যা পূর্বে একটি eth_subscribe কল থেকে রিটার্ন করা হয়েছিল।

রিটার্নস

true যদি একটি সাবস্ক্রিপশন সফলভাবে বাতিল করা হয়, অথবা false যদি প্রদত্ত ID-এর সাথে কোনো সাবস্ক্রিপশন না থাকে।

উদাহরণ:

রিকোয়েস্ট

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}

বিনামূল্যে অ্যালকেমিতে সাইন আপ করুন (opens in a new tab), আমাদের ডকুমেন্টেশন (opens in a new tab) দেখুন, এবং সর্বশেষ খবরের জন্য Twitter (opens in a new tab)-এ আমাদের ফলো করুন।

পেজ সর্বশেষ আপডেট: 3 মার্চ, 2026

এই টিউটোরিয়ালটি কি সহায়ক ছিল?