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

⁦Web3⁩ کا استعمال کرتے ہوئے ٹرانزیکشنز بھیجنا

ٹرانزیکشنز
web3.js
Alchemy
ابتدائی
ایلان ہیلپرن
۴ نومبر، ۲۰۲۰
13 منٹ کا مطالعہ

یہ Web3 کا استعمال کرتے ہوئے ایتھیریم ٹرانزیکشنز بھیجنے کے لیے ایک ابتدائی رہنما ہے۔ ایتھیریم بلاک چین پر ٹرانزیکشن بھیجنے کے لیے تین اہم اقدامات ہیں: بنانا، دستخط کرنا، اور نشر کرنا۔ ہم ان تینوں کا جائزہ لیں گے، اور امید ہے کہ آپ کے ذہن میں موجود کسی بھی سوال کا جواب دیں گے! اس ٹیوٹوریل میں، ہم اپنی ٹرانزیکشنز کو ایتھیریم چین پر بھیجنے کے لیے Alchemy (opens in a new tab) کا استعمال کریں گے۔ آپ یہاں ایک مفت Alchemy اکاؤنٹ بنا سکتے ہیں (opens in a new tab)۔

نوٹ: یہ گائیڈ آپ کی ایپ کے بیک اینڈ پر آپ کی ٹرانزیکشنز پر دستخط کرنے کے لیے ہے۔ اگر آپ فرنٹ اینڈ پر اپنی ٹرانزیکشنز پر دستخط کرنے کو مربوط کرنا چاہتے ہیں، تو براؤزر فراہم کنندہ کے ساتھ Web3 (opens in a new tab) کو مربوط کرنے کا طریقہ دیکھیں۔

بنیادی باتیں

زیادہ تر بلاک چین ڈیولپرز کی طرح جب وہ پہلی بار شروعات کرتے ہیں، تو آپ نے بھی ٹرانزیکشن بھیجنے کے طریقے پر کچھ تحقیق کی ہوگی (جو کہ کافی آسان ہونا چاہیے) اور آپ کو بہت سی گائیڈز ملی ہوں گی، جن میں سے ہر ایک مختلف باتیں کہہ رہی ہوگی اور آپ کو تھوڑا سا پریشان اور الجھن میں ڈال دیا ہوگا۔ اگر آپ بھی اسی صورتحال سے دوچار ہیں، تو فکر نہ کریں؛ ہم سب کسی نہ کسی وقت اسی مقام پر تھے! لہذا، شروع کرنے سے پہلے، آئیے کچھ چیزیں واضح کر لیں:

1. Alchemy آپ کی نجی کلیدیں محفوظ نہیں کرتا ہے

  • اس کا مطلب ہے کہ Alchemy آپ کی جانب سے ٹرانزیکشنز پر دستخط اور انہیں بھیج نہیں سکتا۔ اس کی وجہ سیکیورٹی مقاصد ہیں۔ Alchemy آپ سے کبھی بھی اپنی نجی کلید شیئر کرنے کا نہیں کہے گا، اور آپ کو کبھی بھی اپنی نجی کلید کسی ہوسٹڈ نوڈ (یا کسی اور کے ساتھ) شیئر نہیں کرنی چاہیے۔
  • آپ Alchemy کی بنیادی API کا استعمال کرتے ہوئے بلاک چین سے پڑھ سکتے ہیں، لیکن اس پر لکھنے کے لیے آپ کو Alchemy کے ذریعے بھیجنے سے پہلے اپنی ٹرانزیکشنز پر دستخط کرنے کے لیے کسی اور چیز کا استعمال کرنا ہوگا (یہ کسی بھی دوسری نوڈ سروس کے لیے بھی یکساں ہے)۔

2. "سائنر" (signer) کیا ہے؟

  • سائنرز آپ کی نجی کلید کا استعمال کرتے ہوئے آپ کے لیے ٹرانزیکشنز پر دستخط کریں گے۔ اس ٹیوٹوریل میں ہم اپنی ٹرانزیکشن پر دستخط کرنے کے لیے Alchemy Web3 (opens in a new tab) کا استعمال کریں گے، لیکن آپ کوئی دوسری Web3 لائبریری بھی استعمال کر سکتے ہیں۔
  • فرنٹ اینڈ پر، سائنر کی ایک اچھی مثال میٹاماسک (opens in a new tab) ہوگی، جو آپ کی جانب سے ٹرانزیکشنز پر دستخط کرے گا اور انہیں بھیجے گا۔

3. مجھے اپنی ٹرانزیکشنز پر دستخط کرنے کی ضرورت کیوں ہے؟

  • ہر صارف جو ایتھیریم نیٹ ورک پر ٹرانزیکشن بھیجنا چاہتا ہے اسے ٹرانزیکشن پر دستخط کرنا ہوں گے (اپنی نجی کلید کا استعمال کرتے ہوئے)، تاکہ یہ تصدیق کی جا سکے کہ ٹرانزیکشن کا ماخذ وہی ہے جو وہ دعویٰ کرتا ہے۔
  • اس نجی کلید کی حفاظت کرنا انتہائی اہم ہے، کیونکہ اس تک رسائی حاصل کرنے سے آپ کے ایتھیریم اکاؤنٹ پر مکمل کنٹرول مل جاتا ہے، جس سے آپ (یا رسائی رکھنے والا کوئی بھی شخص) آپ کی جانب سے ٹرانزیکشنز انجام دے سکتا ہے۔

4. میں اپنی نجی کلید کی حفاظت کیسے کروں؟

  • آپ کی نجی کلید کی حفاظت کرنے اور اسے ٹرانزیکشنز بھیجنے کے لیے استعمال کرنے کے بہت سے طریقے ہیں۔ اس ٹیوٹوریل میں ہم ایک .env فائل کا استعمال کریں گے۔ تاہم، آپ ایک الگ فراہم کنندہ بھی استعمال کر سکتے ہیں جو نجی کلیدیں محفوظ کرتا ہے، کی اسٹور فائل استعمال کر سکتے ہیں، یا دیگر اختیارات استعمال کر سکتے ہیں۔

5. eth_sendTransaction اور eth_sendRawTransaction کے درمیان کیا فرق ہے؟

eth_sendTransaction اور eth_sendRawTransaction دونوں ایتھیریم API فنکشنز ہیں جو ایتھیریم نیٹ ورک پر ٹرانزیکشن نشر کرتے ہیں تاکہ اسے مستقبل کے بلاک میں شامل کیا جا سکے۔ وہ ٹرانزیکشنز پر دستخط کرنے کے طریقے میں مختلف ہیں۔

  • eth_sendTransaction (opens in a new tab) کا استعمال بغیر دستخط شدہ ٹرانزیکشنز بھیجنے کے لیے کیا جاتا ہے، جس کا مطلب ہے کہ جس نوڈ کو آپ بھیج رہے ہیں اسے آپ کی نجی کلید کا انتظام کرنا ہوگا تاکہ وہ چین پر نشر کرنے سے پہلے ٹرانزیکشن پر دستخط کر سکے۔ چونکہ Alchemy صارفین کی نجی کلیدیں نہیں رکھتا، اس لیے وہ اس طریقہ کار کی حمایت نہیں کرتے۔
  • eth_sendRawTransaction (opens in a new tab) کا استعمال ان ٹرانزیکشنز کو نشر کرنے کے لیے کیا جاتا ہے جن پر پہلے ہی دستخط ہو چکے ہیں۔ اس کا مطلب ہے کہ آپ کو پہلے signTransaction(tx, private_key) (opens in a new tab) استعمال کرنا ہوگا، پھر نتیجہ کو eth_sendRawTransaction میں پاس کرنا ہوگا۔

Web3 کا استعمال کرتے وقت، eth_sendRawTransaction تک رسائی web3.eth.sendSignedTransaction (opens in a new tab) فنکشن کو کال کر کے حاصل کی جاتی ہے۔

اس ٹیوٹوریل میں ہم یہی استعمال کریں گے۔

6. Web3 لائبریری کیا ہے؟

  • Web3.js معیاری جے سن آر پی سی کالز کے گرد ایک ریپر لائبریری ہے جو ایتھیریم ڈیولپمنٹ میں استعمال کے لیے کافی عام ہے۔
  • مختلف زبانوں کے لیے بہت سی Web3 لائبریریاں موجود ہیں۔ اس ٹیوٹوریل میں ہم Alchemy Web3 (opens in a new tab) استعمال کریں گے جو JavaScript میں لکھی گئی ہے۔ آپ یہاں (opens in a new tab) دیگر اختیارات جیسے Ethers.js (opens in a new tab) دیکھ سکتے ہیں۔

ٹھیک ہے، اب جب کہ ہم نے ان میں سے کچھ سوالات کو حل کر لیا ہے، آئیے ٹیوٹوریل کی طرف بڑھتے ہیں۔ Alchemy کے ڈسکارڈ (opens in a new tab) میں کسی بھی وقت سوالات پوچھنے میں ہچکچاہٹ محسوس نہ کریں!

7. محفوظ، گیس کے لحاظ سے بہتر، اور نجی ٹرانزیکشنز کیسے بھیجیں؟

  • Alchemy کے پاس Transact APIs کا ایک مجموعہ ہے (opens in a new tab)۔ آپ ان کا استعمال مضبوط ٹرانزیکشنز بھیجنے، ٹرانزیکشنز کے ہونے سے پہلے ان کی نقل کرنے، نجی ٹرانزیکشنز بھیجنے، اور گیس کے لحاظ سے بہتر ٹرانزیکشنز بھیجنے کے لیے کر سکتے ہیں۔
  • آپ Notify API (opens in a new tab) کا استعمال بھی کر سکتے ہیں تاکہ جب آپ کی ٹرانزیکشن میم پول سے نکالی جائے اور چین میں شامل کی جائے تو آپ کو الرٹ کیا جا سکے۔

نوٹ: اس گائیڈ کے لیے ایک Alchemy اکاؤنٹ، ایک ایتھیریم پتہ یا میٹاماسک والیٹ، NodeJs، اور npm کا انسٹال ہونا ضروری ہے۔ اگر نہیں، تو ان اقدامات پر عمل کریں:

  1. ایک مفت Alchemy اکاؤنٹ بنائیں (opens in a new tab)
  2. میٹاماسک اکاؤنٹ بنائیں (opens in a new tab) (یا ایک ایتھیریم پتہ حاصل کریں)
  3. NodeJs اور NPM انسٹال کرنے کے لیے ان اقدامات پر عمل کریں (opens in a new tab)

آپ کی ٹرانزیکشن بھیجنے کے اقدامات

1. Sepolia آزمائشی نیٹ ورک پر ایک Alchemy ایپ بنائیں

اپنے Alchemy ڈیش بورڈ (opens in a new tab) پر جائیں اور اپنے نیٹ ورک کے لیے Sepolia (یا کوئی اور آزمائشی نیٹ ورک) کا انتخاب کرتے ہوئے ایک نئی ایپ بنائیں۔

2. Sepolia فوسٹ سے ETH کی درخواست کریں

ETH حاصل کرنے کے لیے Alchemy Sepolia فوسٹ (opens in a new tab) پر دی گئی ہدایات پر عمل کریں۔ یقینی بنائیں کہ آپ اپنا Sepolia ایتھیریم پتہ (میٹاماسک سے) شامل کریں نہ کہ کسی اور نیٹ ورک کا۔ ہدایات پر عمل کرنے کے بعد، دوبارہ چیک کریں کہ آپ کو اپنے والیٹ میں ETH موصول ہو گیا ہے۔

3. ایک نئی پروجیکٹ ڈائرکٹری بنائیں اور اس میں cd کریں

کمانڈ لائن (میک کے لیے ٹرمینل) سے ایک نئی پروجیکٹ ڈائرکٹری بنائیں اور اس میں جائیں:

mkdir sendtx-example
cd sendtx-example

4. Alchemy Web3 (یا کوئی بھی Web3 لائبریری) انسٹال کریں

Alchemy Web3 (opens in a new tab) انسٹال کرنے کے لیے اپنی پروجیکٹ ڈائرکٹری میں درج ذیل کمانڈ چلائیں:

نوٹ، اگر آپ Ethers.js لائبریری استعمال کرنا چاہتے ہیں، تو یہاں دی گئی ہدایات پر عمل کریں (opens in a new tab)۔

npm install @alch/alchemy-web3

5. dotenv انسٹال کریں

ہم اپنی API کلید اور نجی کلید کو محفوظ طریقے سے اسٹور کرنے کے لیے ایک .env فائل کا استعمال کریں گے۔

npm install dotenv --save

6. .env فائل بنائیں

اپنی پروجیکٹ ڈائرکٹری میں ایک .env فائل بنائیں اور درج ذیل شامل کریں ("your-api-url" اور "your-private-key" کو تبدیل کرتے ہوئے)

  • اپنا Alchemy API URL تلاش کرنے کے لیے، اپنے ڈیش بورڈ پر ابھی بنائی گئی ایپ کے ایپ کی تفصیلات کے صفحے پر جائیں، اوپری دائیں کونے میں "View Key" پر کلک کریں، اور HTTP URL حاصل کریں۔
  • میٹاماسک کا استعمال کرتے ہوئے اپنی نجی کلید تلاش کرنے کے لیے، اس گائیڈ (opens in a new tab) کو دیکھیں۔
API_URL = "your-api-url"
PRIVATE_KEY = "your-private-key"
.env کو کمٹ نہ کریں! براہ کرم یقینی بنائیں کہ اپنی .env فائل کو کبھی بھی کسی کے ساتھ شیئر یا ظاہر نہ کریں، کیونکہ ایسا کرنے سے آپ اپنے رازوں کو خطرے میں ڈال رہے ہیں۔ اگر آپ ورژن کنٹرول استعمال کر رہے ہیں، تو اپنی .env کو ایک gitignore فائل میں شامل کریں۔

7. sendTx.js فائل بنائیں

بہت خوب، اب جب کہ ہم نے اپنا حساس ڈیٹا ایک .env فائل میں محفوظ کر لیا ہے، آئیے کوڈنگ شروع کرتے ہیں۔ ہماری ٹرانزیکشن بھیجنے کی مثال کے لیے، ہم ETH واپس Sepolia فوسٹ کو بھیجیں گے۔

ایک sendTx.js فائل بنائیں، جہاں ہم اپنی مثالی ٹرانزیکشن کو کنفیگر کریں گے اور بھیجیں گے، اور اس میں کوڈ کی درج ذیل لائنیں شامل کریں:

یقینی بنائیں کہ لائن 6 پر موجود پتے کو اپنے عوامی پتے سے تبدیل کریں۔

اب، اس کوڈ کو چلانے سے پہلے، آئیے یہاں موجود کچھ اجزاء کے بارے میں بات کرتے ہیں۔

  • nonce : نانس کی تخصیص کا استعمال آپ کے پتے سے بھیجی گئی ٹرانزیکشنز کی تعداد کا ٹریک رکھنے کے لیے کیا جاتا ہے۔ ہمیں سیکیورٹی مقاصد اور ری پلے حملوں (opens in a new tab) کو روکنے کے لیے اس کی ضرورت ہے۔ آپ کے پتے سے بھیجی گئی ٹرانزیکشنز کی تعداد حاصل کرنے کے لیے ہم getTransactionCount (opens in a new tab) کا استعمال کرتے ہیں۔
  • transaction: ٹرانزیکشن آبجیکٹ کے کچھ پہلو ہیں جن کی ہمیں وضاحت کرنے کی ضرورت ہے
    • to: یہ وہ پتہ ہے جس پر ہم ETH بھیجنا چاہتے ہیں۔ اس صورت میں، ہم ETH واپس اسی Sepolia فوسٹ (opens in a new tab) کو بھیج رہے ہیں جس سے ہم نے ابتدائی طور پر درخواست کی تھی۔
    • value: یہ وہ رقم ہے جو ہم بھیجنا چاہتے ہیں، جسے Wei میں بیان کیا گیا ہے جہاں 10^18 Wei = 1 ETH
    • gas: آپ کی ٹرانزیکشن کے ساتھ شامل کرنے کے لیے گیس کی صحیح مقدار کا تعین کرنے کے بہت سے طریقے ہیں۔ Alchemy کے پاس ایک گیس کی قیمت کا ویب ہک (opens in a new tab) بھی ہے جو آپ کو مطلع کرتا ہے جب گیس کی قیمت ایک خاص حد کے اندر گر جاتی ہے۔ مین نیٹ ٹرانزیکشنز کے لیے، شامل کرنے کے لیے گیس کی صحیح مقدار کا تعین کرنے کے لیے ETH Gas Station (opens in a new tab) جیسے گیس تخمینہ کار کو چیک کرنا ایک اچھی پریکٹس ہے۔ 21000 گیس کی وہ کم از کم مقدار ہے جو ایتھیریم پر کوئی آپریشن استعمال کرے گا، لہذا یہ یقینی بنانے کے لیے کہ ہماری ٹرانزیکشن پر عمل درآمد ہو جائے گا، ہم یہاں 30000 ڈالتے ہیں۔
    • nonce: اوپر نانس کی تعریف دیکھیں۔ نانس کی گنتی صفر سے شروع ہوتی ہے۔
    • [اختیاری] ڈیٹا: آپ کی منتقلی کے ساتھ اضافی معلومات بھیجنے، یا سمارٹ کنٹریکٹ کو کال کرنے کے لیے استعمال کیا جاتا ہے، بیلنس کی منتقلی کے لیے اس کی ضرورت نہیں ہے، نیچے دیا گیا نوٹ دیکھیں۔
  • signedTx: اپنے ٹرانزیکشن آبجیکٹ پر دستخط کرنے کے لیے ہم اپنی PRIVATE_KEY کے ساتھ signTransaction طریقہ استعمال کریں گے
  • sendSignedTransaction: ایک بار جب ہمارے پاس دستخط شدہ ٹرانزیکشن ہو جائے، تو ہم اسے sendSignedTransaction کا استعمال کرتے ہوئے بعد کے بلاک میں شامل کرنے کے لیے بھیج سکتے ہیں

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

  • بیلنس کی منتقلی: ایک پتے سے دوسرے پتے پر ETH بھیجیں۔ کسی ڈیٹا فیلڈ کی ضرورت نہیں ہے، تاہم، اگر آپ اپنی ٹرانزیکشن کے ساتھ اضافی معلومات بھیجنا چاہتے ہیں، تو آپ اس فیلڈ میں HEX فارمیٹ میں وہ معلومات شامل کر سکتے ہیں۔
    • مثال کے طور پر، فرض کریں کہ ہم ایک IPFS دستاویز کا ہیش ایتھیریم چین پر لکھنا چاہتے ہیں تاکہ اسے ایک ناقابلِ تبدیلی ٹائم اسٹیمپ دیا جا سکے۔ تب ہمارا ڈیٹا فیلڈ کچھ اس طرح نظر آنا چاہیے: web3.utils.toHex(‘IPFS hash‘)۔ اور اب کوئی بھی چین سے استفسار کر سکتا ہے اور دیکھ سکتا ہے کہ وہ دستاویز کب شامل کی گئی تھی۔
  • سمارٹ کنٹریکٹ ٹرانزیکشن: چین پر کچھ سمارٹ کنٹریکٹ کوڈ چلائیں۔ اس صورت میں، ڈیٹا فیلڈ میں وہ سمارٹ فنکشن ہونا چاہیے جسے آپ چلانا چاہتے ہیں، ساتھ ہی کوئی بھی پیرامیٹرز۔

8. node sendTx.js کا استعمال کرتے ہوئے کوڈ چلائیں

اپنے ٹرمینل یا کمانڈ لائن پر واپس جائیں اور چلائیں:

node sendTx.js

9. میم پول میں اپنی ٹرانزیکشن دیکھیں

اپنے Alchemy ڈیش بورڈ میں میم پول کا صفحہ (opens in a new tab) کھولیں اور اپنی ٹرانزیکشن تلاش کرنے کے لیے اپنی بنائی ہوئی ایپ کے ذریعے فلٹر کریں۔ یہ وہ جگہ ہے جہاں ہم اپنی ٹرانزیکشن کو زیر التواء حالت سے مائنڈ (mined) حالت (اگر کامیاب ہو) یا ڈراپڈ (dropped) حالت (اگر ناکام ہو) میں منتقل ہوتے دیکھ سکتے ہیں۔ یقینی بنائیں کہ اسے "All" پر رکھیں تاکہ آپ "mined"، "pending"، اور "dropped" ٹرانزیکشنز کو کیپچر کر سکیں۔ آپ 0x31b98d14007bdee637298086988a0bbd31184523 پتے پر بھیجی گئی ٹرانزیکشنز کو تلاش کر کے بھی اپنی ٹرانزیکشن تلاش کر سکتے ہیں۔

ایک بار جب آپ کو اپنی ٹرانزیکشن مل جائے تو اس کی تفصیلات دیکھنے کے لیے، tx ہیش کو منتخب کریں، جو آپ کو ایک ایسے منظر پر لے جائے گا جو کچھ اس طرح نظر آتا ہے:

Mempool watcher screenshot

وہاں سے آپ سرخ دائرے والے آئیکن پر کلک کر کے Etherscan پر اپنی ٹرانزیکشن دیکھ سکتے ہیں!

زبردست! آپ نے ابھی Alchemy کا استعمال کرتے ہوئے اپنی پہلی ایتھیریم ٹرانزیکشن بھیجی ہے 🎉

اس گائیڈ کے بارے میں تاثرات اور تجاویز کے لیے، براہ کرم Alchemy کے ڈسکارڈ (opens in a new tab) پر ایلان کو پیغام بھیجیں!

اصل میں https://docs.alchemyapi.io/tutorials/sending-transactions-using-web3-and-alchemy (opens in a new tab) پر شائع ہوا