مرکزی مواد پر جائیں

⁦Using WebSockets⁩

Alchemy
websockets
کوئری کرنا
JavaScript
ابتدائی
ایلان ہیلپرن
۱ دسمبر، ۲۰۲۰
7 منٹ کا مطالعہ

یہ 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" پر کلک کر کے تلاش کیے جا سکتے ہیں۔

Where to find your WebSocket URL in your Alchemy dashboard

Alchemy API Reference (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)۔

پیرامیٹرز

  1. سبسکرپشن کی اقسام
  2. اختیاری پیرامیٹرز

پہلا آرگومنٹ اس ایونٹ کی قسم کی وضاحت کرتا ہے جسے سننا ہے۔ دوسرے آرگومنٹ میں اضافی آپشنز ہوتے ہیں جو پہلے آرگومنٹ پر منحصر ہوتے ہیں۔ مختلف تفصیل کی اقسام، ان کے آپشنز، اور ان کے ایونٹ پے لوڈز ذیل میں بیان کیے گئے ہیں۔

ریٹرنز

سبسکرپشن ID: یہ ID کسی بھی موصول ہونے والے ایونٹس کے ساتھ منسلک ہو گی، اور اسے eth_unsubscribe کا استعمال کرتے ہوئے سبسکرپشن منسوخ کرنے کے لیے بھی استعمال کیا جا سکتا ہے۔

سبسکرپشن ایونٹس

جب تک سبسکرپشن فعال ہے، آپ کو ایونٹس موصول ہوں گے جو درج ذیل فیلڈز کے ساتھ آبجیکٹس ہیں:

  • jsonrpc: ہمیشہ "2.0"
  • method: ہمیشہ "eth_subscription"
  • params: درج ذیل فیلڈز کے ساتھ ایک آبجیکٹ:
    • subscription: eth_subscribe کال کے ذریعے واپس کی گئی سبسکرپشن ID جس نے یہ سبسکرپشن بنائی تھی۔
    • result: ایک آبجیکٹ جس کا مواد سبسکرپشن کی قسم کے لحاظ سے مختلف ہوتا ہے۔

سبسکرپشن کی اقسام

  1. alchemy_newFullPendingTransactions

ان تمام ٹرانزیکشنز کے لیے ٹرانزیکشن کی معلومات واپس کرتا ہے جو زیر التواء حالت میں شامل کی جاتی ہیں۔ یہ سبسکرپشن کی قسم زیر التواء ٹرانزیکشنز کو سبسکرائب کرتی ہے، جو معیاری Web3 کال web3.eth.subscribe("pendingTransactions") کی طرح ہے، لیکن اس میں مختلف ہے کہ یہ صرف ٹرانزیکشن ہیشز کے بجائے مکمل ٹرانزیکشن کی معلومات خارج کرتی ہے۔

مثال:

  1. newHeads

جب بھی چین میں نیا ہیڈر شامل کیا جاتا ہے تو ایک ایونٹ خارج کرتا ہے، بشمول چین کی تنظیمِ نو کے دوران۔

جب چین کی تنظیمِ نو ہوتی ہے، تو یہ سبسکرپشن ایک ایونٹ خارج کرے گی جس میں نئی چین کے تمام نئے ہیڈرز شامل ہوں گے۔ خاص طور پر، اس کا مطلب یہ ہے کہ آپ ایک ہی اونچائی کے ساتھ متعدد ہیڈرز کو خارج ہوتے دیکھ سکتے ہیں، اور جب ایسا ہوتا ہے تو بعد والے ہیڈر کو تنظیمِ نو کے بعد درست سمجھا جانا چاہیے۔

مثال:

  1. logs

ایسے لاگز خارج کرتا ہے جو نئے شامل کیے گئے بلاکس کا حصہ ہیں جو مخصوص فلٹر کے معیار سے مماثل ہیں۔

جب چین کی تنظیمِ نو ہوتی ہے، تو پرانی چین پر بلاکس کا حصہ بننے والے لاگز کو دوبارہ خارج کیا جائے گا جس میں پراپرٹی removed کو true پر سیٹ کیا جائے گا۔ مزید برآں، نئی چین پر بلاکس کا حصہ بننے والے لاگز خارج کیے جاتے ہیں، جس کا مطلب ہے کہ تنظیمِ نو کی صورت میں ایک ہی ٹرانزیکشن کے لیے متعدد بار لاگز دیکھنا ممکن ہے۔

پیرامیٹرز

  1. درج ذیل فیلڈز کے ساتھ ایک آبجیکٹ:
    • address (اختیاری): یا تو ایک پتہ کی نمائندگی کرنے والی سٹرنگ یا ایسی سٹرنگز کی ایک ارے (array)۔
      • صرف ان پتوں میں سے کسی ایک سے بنائے گئے لاگز خارج کیے جائیں گے۔
    • topics: ٹاپک کی وضاحت کرنے والوں کی ایک ارے۔
      • ہر ٹاپک کی وضاحت کرنے والا یا تو null ہے، ایک ٹاپک کی نمائندگی کرنے والی سٹرنگ ہے، یا سٹرنگز کی ایک ارے ہے۔
      • ارے میں ہر وہ پوزیشن جو null نہیں ہے، خارج ہونے والے لاگز کو صرف ان تک محدود کرتی ہے جن کے پاس اس پوزیشن میں دیے گئے ٹاپکس میں سے کوئی ایک ہو۔

ٹاپک کی وضاحتوں کی کچھ مثالیں:

  • []: کسی بھی ٹاپک کی اجازت ہے۔
  • [A]: پہلی پوزیشن میں A (اور اس کے بعد کچھ بھی)۔
  • [null, B]: پہلی پوزیشن میں کچھ بھی اور دوسری پوزیشن میں B (اور اس کے بعد کچھ بھی)۔
  • [A, B]: پہلی پوزیشن میں A اور دوسری پوزیشن میں B (اور اس کے بعد کچھ بھی)۔
  • [[A, B], [A, B]]: پہلی پوزیشن میں (A یا B) اور دوسری پوزیشن میں (A یا B) (اور اس کے بعد کچھ بھی)۔

مثال:

eth_unsubscribe

موجودہ سبسکرپشن کو منسوخ کرتا ہے تاکہ مزید کوئی ایونٹس نہ بھیجے جائیں۔

پیرامیٹرز

  1. سبسکرپشن 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) پر فالو کریں۔