WebSockets کا استعمال
یہ 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/demo23> {"jsonrpc": "2.0", "id": 0, "method": "eth_gasPrice"}45< {"jsonrpc": "2.0", "result": "0xb2d05e00", "id": 0}6WebSockets کا استعمال کیسے کریں
شروع کرنے کے لیے، اپنی ایپ کے لیے WebSocket URL کا استعمال کرتے ہوئے ایک WebSocket کھولیں۔ آپ اپنے ڈیش بورڈ (opens in a new tab) میں ایپ کا صفحہ کھول کر اور "View Key" پر کلک کر کے اپنی ایپ کا WebSocket URL تلاش کر سکتے ہیں۔ نوٹ کریں کہ WebSockets کے لیے آپ کی ایپ کا URL HTTP درخواستوں کے URL سے مختلف ہے، لیکن دونوں "View Key" پر کلک کر کے تلاش کیے جا سکتے ہیں۔
Alchemy API Reference (opens in a new tab) میں درج کسی بھی API کو WebSocket کے ذریعے استعمال کیا جا سکتا ہے۔ ایسا کرنے کے لیے، وہی پے لوڈ استعمال کریں جو HTTP POST درخواست کی باڈی کے طور پر بھیجا جائے گا، لیکن اس کے بجائے اس پے لوڈ کو WebSocket کے ذریعے بھیجیں۔
Web3 کے ساتھ
Web3 جیسی کلائنٹ لائبریری کا استعمال کرتے ہوئے WebSockets پر منتقل ہونا آسان ہے۔ اپنے Web3 کلائنٹ کو شروع کرتے وقت HTTP کے بجائے صرف WebSocket URL پاس کریں۔ مثال کے طور پر:
1const web3 = new Web3("wss://eth-mainnet.ws.alchemyapi.io/ws/your-api-key")23web3.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") کی طرح ہے، لیکن اس میں مختلف ہے کہ یہ صرف ٹرانزیکشن ہیشز کے بجائے مکمل ٹرانزیکشن کی معلومات خارج کرتی ہے۔
مثال:
1> {"jsonrpc": "2.0", "id": 1, "method": "eth_subscribe", "params": ["alchemy_newFullPendingTransactions"]}23< {"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سب دکھائیںnewHeads
جب بھی چین میں نیا ہیڈر شامل کیا جاتا ہے تو ایک ایونٹ خارج کرتا ہے، بشمول چین کی تنظیم نو کے دوران۔
جب چین کی تنظیم نو ہوتی ہے، تو یہ سبسکرپشن ایک ایونٹ خارج کرے گی جس میں نئی چین کے تمام نئے ہیڈرز شامل ہوں گے۔ خاص طور پر، اس کا مطلب یہ ہے کہ آپ ایک ہی اونچائی کے ساتھ متعدد ہیڈرز کو خارج ہوتے دیکھ سکتے ہیں، اور جب ایسا ہوتا ہے تو بعد والے ہیڈر کو تنظیم نو کے بعد درست سمجھا جانا چاہیے۔
مثال:
1> {"jsonrpc": "2.0", "id": 1, "method": "eth_subscribe", "params": ["newHeads"]}23< {"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سب دکھائیںlogs
ایسے لاگز خارج کرتا ہے جو نئے شامل کیے گئے بلاکس کا حصہ ہیں جو مخصوص فلٹر کے معیار سے مماثل ہیں۔
جب چین کی تنظیم نو ہوتی ہے، تو پرانی چین پر بلاکس کا حصہ بننے والے لاگز کو دوبارہ خارج کیا جائے گا جس میں removed پراپرٹی کو true پر سیٹ کیا جائے گا۔ مزید برآں، نئی چین پر بلاکس کا حصہ بننے والے لاگز خارج کیے جاتے ہیں، جس کا مطلب ہے کہ تنظیم نو کی صورت میں ایک ہی ٹرانزیکشن کے لیے متعدد بار لاگز دیکھنا ممکن ہے۔
پیرامیٹرز
- درج ذیل فیلڈز کے ساتھ ایک آبجیکٹ:
address(اختیاری): یا تو ایک سٹرنگ جو کسی ایڈریس کی نمائندگی کرتی ہے یا ایسی سٹرنگز کی ایک سرنی (array)۔- صرف ان ایڈریسز میں سے کسی ایک سے بنائے گئے لاگز ہی خارج کیے جائیں گے۔
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"]}]}23< {"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
موجودہ سبسکرپشن کو منسوخ کرتا ہے تاکہ مزید کوئی ایونٹس نہ بھیجے جائیں۔
پیرامیٹرز
- سبسکرپشن ID، جیسا کہ پہلے
eth_subscribeکال سے واپس کیا گیا تھا۔
ریٹرنز
true اگر سبسکرپشن کامیابی سے منسوخ ہو گئی تھی، یا false اگر دی گئی ID کے ساتھ کوئی سبسکرپشن موجود نہیں تھی۔
مثال:
درخواست
1curl https://eth-mainnet.alchemyapi.io/v2/your-api-key2-X POST3-H "Content-Type: application/json"4-d '{"id": 1, "method": "eth_unsubscribe", "params": ["0x9cef478923ff08bf67fde6c64013158d"]}'56نتیجہ
1{2 "jsonrpc": "2.0",3 "id": 1,4 "result": true5}مفت میں Alchemy کے ساتھ سائن اپ کریں (opens in a new tab)، ہماری دستاویزات (opens in a new tab) دیکھیں، اور تازہ ترین خبروں کے لیے، ہمیں Twitter (opens in a new tab) پر فالو کریں۔
صفحہ کی آخری اپ ڈیٹ: 1 اکتوبر، 2025
