Web3 کا استعمال کرتے ہوئے ٹرانزیکشنز بھیجنا
یہ 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 لائبریری بھی استعمال کر سکتے ہیں۔
- فرنٹ اینڈ پر، سائنر کی ایک اچھی مثال MetaMask (opens in a new tab) ہوگی، جو آپ کی جانب سے ٹرانزیکشنز پر دستخط کرے گا اور انہیں بھیجے گا۔
3. مجھے اپنی ٹرانزیکشنز پر دستخط کرنے کی ضرورت کیوں ہے؟
- ہر وہ صارف جو ایتھریم نیٹ ورک پر ٹرانزیکشن بھیجنا چاہتا ہے، اسے ٹرانزیکشن پر دستخط کرنا لازمی ہے (اپنی پرائیویٹ کی کا استعمال کرتے ہوئے)، تاکہ یہ تصدیق کی جا سکے کہ ٹرانزیکشن کا ماخذ وہی ہے جو وہ دعویٰ کرتا ہے۔
- اس پرائیویٹ کی کی حفاظت کرنا انتہائی اہم ہے، کیونکہ اس تک رسائی حاصل کرنے سے آپ کے ایتھریم اکاؤنٹ پر مکمل کنٹرول مل جاتا ہے، جس سے آپ (یا رسائی رکھنے والا کوئی بھی شخص) آپ کی جانب سے ٹرانزیکشنز انجام دے سکتا ہے۔
4. میں اپنی پرائیویٹ کی کی حفاظت کیسے کروں؟
- آپ کی پرائیویٹ کی کی حفاظت کرنے اور اسے ٹرانزیکشنز بھیجنے کے لیے استعمال کرنے کے کئی طریقے ہیں۔ اس ٹیوٹوریل میں ہم ایک
.envفائل کا استعمال کریں گے۔ تاہم، آپ ایک الگ پرووائیڈر بھی استعمال کر سکتے ہیں جو پرائیویٹ کیز کو اسٹور کرتا ہے، کی اسٹور (keystore) فائل استعمال کر سکتے ہیں، یا دیگر آپشنز بھی موجود ہیں۔
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 معیاری JSON-RPC کالز کے گرد ایک ریپر (wrapper) لائبریری ہے جس کا استعمال ایتھریم ڈیولپمنٹ میں کافی عام ہے۔
- مختلف زبانوں کے لیے بہت سی web3 لائبریریاں موجود ہیں۔ اس ٹیوٹوریل میں ہم Alchemy Web3 (opens in a new tab) کا استعمال کریں گے جو JavaScript میں لکھی گئی ہے۔ آپ یہاں (opens in a new tab) دیگر آپشنز جیسے ethers.js (opens in a new tab) بھی دیکھ سکتے ہیں۔
ٹھیک ہے، اب جب کہ ہم نے ان میں سے کچھ سوالات کو حل کر لیا ہے، تو آئیے ٹیوٹوریل کی طرف بڑھتے ہیں۔ Alchemy کے discord (opens in a new tab) میں کسی بھی وقت سوالات پوچھنے میں ہچکچاہٹ محسوس نہ کریں!
7. محفوظ، گیس کے لحاظ سے بہتر (gas-optimized)، اور پرائیویٹ ٹرانزیکشنز کیسے بھیجیں؟
- Alchemy کے پاس Transact APIs کا ایک مجموعہ ہے (opens in a new tab)۔ آپ ان کا استعمال مضبوط ٹرانزیکشنز بھیجنے، ٹرانزیکشنز کے ہونے سے پہلے ان کی نقل (simulate) کرنے، پرائیویٹ ٹرانزیکشنز بھیجنے، اور گیس کے لحاظ سے بہتر ٹرانزیکشنز بھیجنے کے لیے کر سکتے ہیں۔
- آپ Notify API (opens in a new tab) کا استعمال بھی کر سکتے ہیں تاکہ جب آپ کی ٹرانزیکشن میم پول (mempool) سے نکالی جائے اور چین میں شامل کی جائے تو آپ کو الرٹ کیا جا سکے۔
نوٹ: اس گائیڈ کے لیے ایک Alchemy اکاؤنٹ، ایک ایتھریم ایڈریس یا MetaMask والیٹ، NodeJs، اور npm کا انسٹال ہونا ضروری ہے۔ اگر نہیں، تو ان اقدامات پر عمل کریں:
- ایک مفت Alchemy اکاؤنٹ بنائیں (opens in a new tab)
- MetaMask اکاؤنٹ بنائیں (opens in a new tab) (یا ایک ایتھریم ایڈریس حاصل کریں)
- NodeJs اور NPM انسٹال کرنے کے لیے ان اقدامات پر عمل کریں (opens in a new tab)
اپنی ٹرانزیکشن بھیجنے کے اقدامات
1. Sepolia ٹیسٹ نیٹ پر ایک Alchemy ایپ بنائیں
اپنے Alchemy ڈیش بورڈ (opens in a new tab) پر جائیں اور اپنے نیٹ ورک کے لیے Sepolia (یا کوئی اور ٹیسٹ نیٹ) کا انتخاب کرتے ہوئے ایک نئی ایپ بنائیں۔
2. Sepolia فوسٹ (faucet) سے ETH کی درخواست کریں
ETH حاصل کرنے کے لیے Alchemy Sepolia فوسٹ (opens in a new tab) پر دی گئی ہدایات پر عمل کریں۔ اس بات کو یقینی بنائیں کہ آپ اپنا Sepolia ایتھریم ایڈریس (MetaMask سے) شامل کریں نہ کہ کسی اور نیٹ ورک کا۔ ہدایات پر عمل کرنے کے بعد، دوبارہ چیک کریں کہ آپ کو اپنے والیٹ میں ETH موصول ہو گیا ہے۔
3. ایک نئی پروجیکٹ ڈائرکٹری بنائیں اور اس میں cd کریں
کمانڈ لائن (میک کے لیے ٹرمینل) سے ایک نئی پروجیکٹ ڈائرکٹری بنائیں اور اس میں جائیں:
1mkdir sendtx-example2cd sendtx-example4. Alchemy Web3 (یا کوئی بھی web3 لائبریری) انسٹال کریں
Alchemy Web3 (opens in a new tab) کو انسٹال کرنے کے لیے اپنی پروجیکٹ ڈائرکٹری میں درج ذیل کمانڈ چلائیں:
نوٹ کریں، اگر آپ ethers.js لائبریری استعمال کرنا چاہتے ہیں، تو یہاں دی گئی ہدایات پر عمل کریں (opens in a new tab)۔
1npm install @alch/alchemy-web35. dotenv انسٹال کریں
ہم اپنی API کی اور پرائیویٹ کی کو محفوظ طریقے سے اسٹور کرنے کے لیے ایک .env فائل کا استعمال کریں گے۔
1npm install dotenv --save6. .env فائل بنائیں
اپنی پروجیکٹ ڈائرکٹری میں ایک .env فائل بنائیں اور درج ذیل کو شامل کریں ("your-api-url" اور "your-private-key" کو تبدیل کرتے ہوئے)
- اپنا Alchemy API URL تلاش کرنے کے لیے، اپنے ڈیش بورڈ پر ابھی بنائی گئی ایپ کے ایپ ڈیٹیلز پیج پر جائیں، اوپری دائیں کونے میں "View Key" پر کلک کریں، اور HTTP URL کاپی کریں۔
- MetaMask کا استعمال کرتے ہوئے اپنی پرائیویٹ کی تلاش کرنے کے لیے، اس گائیڈ (opens in a new tab) کو دیکھیں۔
1API_URL = "your-api-url"2PRIVATE_KEY = "your-private-key".env کو کمٹ (commit) نہ کریں! براہ کرم اس بات کو یقینی بنائیں کہ اپنی .env فائل کو کبھی بھی کسی کے ساتھ شیئر یا ظاہر نہ کریں، کیونکہ ایسا کرنے سے آپ اپنے رازوں کو خطرے میں ڈال رہے ہیں۔ اگر آپ ورژن کنٹرول استعمال کر رہے ہیں، تو اپنی .env کو ایک gitignore فائل میں شامل کریں۔7. sendTx.js فائل بنائیں
زبردست، اب جب کہ ہم نے اپنا حساس ڈیٹا ایک .env فائل میں محفوظ کر لیا ہے، تو آئیے کوڈنگ شروع کرتے ہیں۔ ہماری ٹرانزیکشن بھیجنے کی مثال کے لیے، ہم ETH کو واپس Sepolia فوسٹ پر بھیجیں گے۔
ایک sendTx.js فائل بنائیں، جہاں ہم اپنی مثالی ٹرانزیکشن کو کنفیگر کریں گے اور بھیجیں گے، اور اس میں کوڈ کی درج ذیل لائنیں شامل کریں:
1async function main() {2 require('dotenv').config();3 const { API_URL, PRIVATE_KEY } = process.env;4 const { createAlchemyWeb3 } = require("@alch/alchemy-web3");5 const web3 = createAlchemyWeb3(API_URL);6 const myAddress = '0x610Ae88399fc1687FA7530Aac28eC2539c7d6d63' //TODO: replace this address with your own public address7
8 const nonce = await web3.eth.getTransactionCount(myAddress, 'latest'); // nonce starts counting from 09
10 const transaction = {11 'to': '0x31B98D14007bDEe637298086988A0bBd31184523', // faucet address to return eth12 'value': 1000000000000000000, // 1 ETH13 'gas': 30000,14 'nonce': nonce,15 // optional data field to send message or execute smart contract16 };17
18 const signedTx = await web3.eth.accounts.signTransaction(transaction, PRIVATE_KEY);19
20 web3.eth.sendSignedTransaction(signedTx.rawTransaction, function(error, hash) {21 if (!error) {22 console.log("🎉 The hash of your transaction is: ", hash, "\n Check Alchemy's Mempool to view the status of your transaction!");23 } else {24 console.log("❗Something went wrong while submitting your transaction:", error)25 }26 });27}28
29main();لائن 6 پر موجود ایڈریس کو اپنے پبلک ایڈریس سے تبدیل کرنا یقینی بنائیں۔
اب، اس سے پہلے کہ ہم اس کوڈ کو چلانے کی طرف بڑھیں، آئیے یہاں موجود کچھ اجزاء کے بارے میں بات کرتے ہیں۔
nonce: نانس (nonce) کی تخصیص کا استعمال آپ کے ایڈریس سے بھیجی گئی ٹرانزیکشنز کی تعداد کا ٹریک رکھنے کے لیے کیا جاتا ہے۔ ہمیں سیکیورٹی مقاصد اور ری پلے حملوں (replay attacks) (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 ETHgas: آپ کی ٹرانزیکشن کے ساتھ شامل کرنے کے لیے گیس کی صحیح مقدار کا تعین کرنے کے کئی طریقے ہیں۔ Alchemy کے پاس ایک گیس پرائس ویب ہک (gas price webhook) (opens in a new tab) بھی ہے جو آپ کو مطلع کرتا ہے جب گیس کی قیمت ایک خاص حد کے اندر گر جاتی ہے۔ مین نیٹ (Mainnet) ٹرانزیکشنز کے لیے، یہ ایک اچھی پریکٹس ہے کہ شامل کرنے کے لیے گیس کی صحیح مقدار کا تعین کرنے کے لیے ETH Gas Station (opens in a new tab) جیسے گیس ایسٹیمیٹر کو چیک کریں۔ 21000 گیس کی وہ کم از کم مقدار ہے جو ایتھریم پر ایک آپریشن استعمال کرے گا، لہذا یہ یقینی بنانے کے لیے کہ ہماری ٹرانزیکشن پر عمل درآمد ہو جائے گا، ہم یہاں 30000 ڈالتے ہیں۔nonce: اوپر نانس کی تعریف دیکھیں۔ نانس کی گنتی صفر سے شروع ہوتی ہے۔- [اختیاری] data: آپ کے ٹرانسفر کے ساتھ اضافی معلومات بھیجنے، یا اسمارٹ کانٹریکٹ کو کال کرنے کے لیے استعمال کیا جاتا ہے، بیلنس ٹرانسفر کے لیے اس کی ضرورت نہیں ہے، نیچے دیا گیا نوٹ دیکھیں۔
signedTx: اپنے ٹرانزیکشن آبجیکٹ پر دستخط کرنے کے لیے ہم اپنیPRIVATE_KEYکے ساتھsignTransactionطریقہ کار استعمال کریں گےsendSignedTransaction: ایک بار جب ہمارے پاس دستخط شدہ ٹرانزیکشن ہو جائے، تو ہم اسےsendSignedTransactionکا استعمال کرتے ہوئے بعد کے بلاک میں شامل کرنے کے لیے بھیج سکتے ہیں
ڈیٹا پر ایک نوٹ ایتھریم میں دو اہم اقسام کی ٹرانزیکشنز بھیجی جا سکتی ہیں۔
- بیلنس ٹرانسفر: ایک ایڈریس سے دوسرے ایڈریس پر ETH بھیجیں۔ کسی ڈیٹا فیلڈ کی ضرورت نہیں ہے، تاہم، اگر آپ اپنی ٹرانزیکشن کے ساتھ اضافی معلومات بھیجنا چاہتے ہیں، تو آپ اس فیلڈ میں وہ معلومات HEX فارمیٹ میں شامل کر سکتے ہیں۔
- مثال کے طور پر، فرض کریں کہ ہم ایک IPFS دستاویز کا ہیش ایتھریم چین پر لکھنا چاہتے ہیں تاکہ اسے ایک ناقابل تغیر ٹائم اسٹیمپ دیا جا سکے۔ تب ہماری ڈیٹا فیلڈ کچھ اس طرح دکھنی چاہیے:
web3.utils.toHex(‘IPFS hash‘)۔ اور اب کوئی بھی چین سے استفسار (query) کر سکتا ہے اور دیکھ سکتا ہے کہ وہ دستاویز کب شامل کی گئی تھی۔
- مثال کے طور پر، فرض کریں کہ ہم ایک IPFS دستاویز کا ہیش ایتھریم چین پر لکھنا چاہتے ہیں تاکہ اسے ایک ناقابل تغیر ٹائم اسٹیمپ دیا جا سکے۔ تب ہماری ڈیٹا فیلڈ کچھ اس طرح دکھنی چاہیے:
- اسمارٹ کانٹریکٹ ٹرانزیکشن: چین پر کچھ اسمارٹ کانٹریکٹ کوڈ پر عمل درآمد کریں۔ اس صورت میں، ڈیٹا فیلڈ میں وہ اسمارٹ فنکشن ہونا چاہیے جسے آپ چلانا چاہتے ہیں، ساتھ ہی کوئی بھی پیرامیٹرز۔
- ایک عملی مثال کے لیے، اس ہیلو ورلڈ ٹیوٹوریل (Hello World Tutorial) (opens in a new tab) میں مرحلہ 8 دیکھیں۔
8. node sendTx.js کا استعمال کرتے ہوئے کوڈ چلائیں
اپنے ٹرمینل یا کمانڈ لائن پر واپس جائیں اور چلائیں:
1node sendTx.js9. میم پول (Mempool) میں اپنی ٹرانزیکشن دیکھیں
اپنے Alchemy ڈیش بورڈ میں میم پول پیج (Mempool page) (opens in a new tab) کھولیں اور اپنی ٹرانزیکشن تلاش کرنے کے لیے اپنی بنائی گئی ایپ کے ذریعے فلٹر کریں۔ یہ وہ جگہ ہے جہاں ہم اپنی ٹرانزیکشن کو زیر التواء (pending) اسٹیٹ سے مائنڈ (mined) اسٹیٹ (اگر کامیاب ہو) یا ڈراپڈ (dropped) اسٹیٹ (اگر ناکام ہو) میں منتقل ہوتے ہوئے دیکھ سکتے ہیں۔ اسے "All" پر رکھنا یقینی بنائیں تاکہ آپ "mined"، "pending"، اور "dropped" ٹرانزیکشنز کو کیپچر کر سکیں۔ آپ ایڈریس 0x31b98d14007bdee637298086988a0bbd31184523 پر بھیجی گئی ٹرانزیکشنز کو تلاش کر کے بھی اپنی ٹرانزیکشن تلاش کر سکتے ہیں۔
ایک بار جب آپ کو اپنی ٹرانزیکشن مل جائے تو اس کی تفصیلات دیکھنے کے لیے، tx ہیش کو منتخب کریں، جو آپ کو ایک ایسے منظر پر لے جائے گا جو کچھ اس طرح دکھتا ہے:
وہاں سے آپ سرخ دائرے والے آئیکن پر کلک کر کے Etherscan پر اپنی ٹرانزیکشن دیکھ سکتے ہیں!
زبردست! آپ نے ابھی Alchemy کا استعمال کرتے ہوئے اپنی پہلی ایتھریم ٹرانزیکشن بھیجی ہے 🎉
اس گائیڈ کے بارے میں آراء اور تجاویز کے لیے، براہ کرم Alchemy کے Discord (opens in a new tab) پر ایلان کو میسج کریں!
اصل میں https://docs.alchemyapi.io/tutorials/sending-transactions-using-web3-and-alchemy (opens in a new tab) پر شائع ہوا
صفحہ کی آخری اپ ڈیٹ: ۳ مارچ، ۲۰۲۶
