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

جاوا اسکرپٹ سے اسمارٹ کانٹریکٹ کو کال کرنا

ٹرانزیکشنز
فرنٹ اینڈ
JavaScript
web3.js
ابتدائی
jdourlens
19 اپریل، 2020
4 منٹ کی پڑھائی

اس ٹیوٹوریل میں ہم دیکھیں گے کہ JavaScript سے اسمارٹ کانٹریکٹ فنکشن کو کیسے کال کیا جاتا ہے۔ سب سے پہلے اسمارٹ کانٹریکٹ کی اسٹیٹ کو پڑھنا ہے (مثلاً، ERC20 ہولڈر کا بیلنس)، پھر ہم ٹوکن ٹرانسفر کر کے بلاک چین کی اسٹیٹ کو تبدیل کریں گے۔ آپ کو پہلے ہی بلاک چین کے ساتھ تعامل کے لیے JS ماحول ترتیب دینے سے واقف ہونا چاہیے۔

اس مثال کے لیے ہم DAI ٹوکن کے ساتھ کام کریں گے، ٹیسٹنگ کے مقصد کے لیے ہم ganache-cli کا استعمال کرتے ہوئے بلاک چین کو فورک کریں گے اور ایک ایسے ایڈریس کو ان لاک کریں گے جس میں پہلے سے ہی بہت سارے DAI موجود ہیں:

ganache-cli -f https://mainnet.infura.io/v3/[YOUR INFURA KEY] -d -i 66 1 --unlock 0x4d10ae710Bd8D1C31bd7465c8CBC3add6F279E81

کسی اسمارٹ کانٹریکٹ کے ساتھ تعامل کرنے کے لیے ہمیں اس کے ایڈریس اور ABI کی ضرورت ہوگی:

1const ERC20TransferABI = [
2 {
3 constant: false,
4 inputs: [
5 {
6 name: "_to",
7 type: "address",
8 },
9 {
10 name: "_value",
11 type: "uint256",
12 },
13 ],
14 name: "transfer",
15 outputs: [
16 {
17 name: "",
18 type: "bool",
19 },
20 ],
21 payable: false,
22 stateMutability: "nonpayable",
23 type: "function",
24 },
25 {
26 constant: true,
27 inputs: [
28 {
29 name: "_owner",
30 type: "address",
31 },
32 ],
33 name: "balanceOf",
34 outputs: [
35 {
36 name: "balance",
37 type: "uint256",
38 },
39 ],
40 payable: false,
41 stateMutability: "view",
42 type: "function",
43 },
44]
45
46const DAI_ADDRESS = "0x6b175474e89094c44da98b954eedeac495271d0f"
سب دکھائیں

اس پروجیکٹ کے لیے ہم نے مکمل ERC20 ABI کو مختصر کر دیا ہے تاکہ صرف balanceOf اور transfer فنکشن کو رکھا جا سکے لیکن آپ مکمل ERC20 ABI یہاں (opens in a new tab) تلاش کر سکتے ہیں۔

پھر ہمیں اپنے اسمارٹ کانٹریکٹ کو انسٹینشی ایٹ (instantiate) کرنے کی ضرورت ہے:

1const web3 = new Web3("http://localhost:8545")
2
3const daiToken = new web3.eth.Contract(ERC20TransferABI, DAI_ADDRESS)

ہم دو ایڈریسز بھی ترتیب دیں گے:

  • وہ جو ٹرانسفر وصول کرے گا اور
  • وہ جسے ہم نے پہلے ہی ان لاک کر دیا ہے جو اسے بھیجے گا:
1const senderAddress = "0x4d10ae710Bd8D1C31bd7465c8CBC3add6F279E81"
2const receiverAddress = "0x19dE91Af973F404EDF5B4c093983a7c6E3EC8ccE"

اگلے حصے میں ہم دونوں ایڈریسز کے پاس موجود ٹوکنز کی موجودہ مقدار حاصل کرنے کے لیے balanceOf فنکشن کو کال کریں گے۔

کال: اسمارٹ کانٹریکٹ سے ویلیو پڑھنا

پہلی مثال ایک "constant" میتھڈ کو کال کرے گی اور کوئی ٹرانزیکشن بھیجے بغیر EVM میں اس کے اسمارٹ کانٹریکٹ میتھڈ کو ایگزیکیوٹ کرے گی۔ اس کے لیے ہم کسی ایڈریس کا ERC20 بیلنس پڑھیں گے۔ ERC20 ٹوکنز کے بارے میں ہمارا مضمون پڑھیں۔

آپ ایک انسٹینشی ایٹڈ اسمارٹ کانٹریکٹ کے میتھڈز تک رسائی حاصل کر سکتے ہیں جس کے لیے آپ نے ABI فراہم کیا ہے، کچھ اس طرح: yourContract.methods.methodname۔ call فنکشن کا استعمال کر کے آپ کو فنکشن کے ایگزیکیوٹ ہونے کا نتیجہ موصول ہوگا۔

1daiToken.methods.balanceOf(senderAddress).call(function (err, res) {
2 if (err) {
3 console.log("An error occurred", err)
4 return
5 }
6 console.log("The balance is: ", res)
7})

یاد رکھیں کہ DAI ERC20 میں ۱۸ ڈیسیملز ہوتے ہیں جس کا مطلب ہے کہ درست مقدار حاصل کرنے کے لیے آپ کو ۱۸ صفر ہٹانے ہوں گے۔ uint256 اسٹرنگز کے طور پر واپس کیے جاتے ہیں کیونکہ JavaScript بڑی عددی ویلیوز کو ہینڈل نہیں کرتا ہے۔ اگر آپ کو یقین نہیں ہے کہ JS میں بڑے نمبرز سے کیسے نمٹا جائے تو bignumber.js کے بارے میں ہمارا ٹیوٹوریل دیکھیں (opens in a new tab)۔

سینڈ: اسمارٹ کانٹریکٹ فنکشن کو ٹرانزیکشن بھیجنا

دوسری مثال کے لیے ہم اپنے دوسرے ایڈریس پر 10 DAI بھیجنے کے لیے DAI اسمارٹ کانٹریکٹ کے ٹرانسفر فنکشن کو کال کریں گے۔ ٹرانسفر فنکشن دو پیرامیٹرز قبول کرتا ہے: وصول کنندہ کا ایڈریس اور ٹرانسفر کیے جانے والے ٹوکن کی مقدار:

1daiToken.methods
2 .transfer(receiverAddress, "100000000000000000000")
3 .send({ from: senderAddress }, function (err, res) {
4 if (err) {
5 console.log("An error occurred", err)
6 return
7 }
8 console.log("Hash of the transaction: " + res)
9 })
سب دکھائیں

کال فنکشن اس ٹرانزیکشن کا ہیش واپس کرتا ہے جسے بلاک چین میں مائن کیا جائے گا۔ ایتھیریم پر، ٹرانزیکشن ہیشز قابلِ پیشین گوئی ہوتے ہیں - اسی طرح ہم ٹرانزیکشن کے ایگزیکیوٹ ہونے سے پہلے اس کا ہیش حاصل کر سکتے ہیں (یہاں جانیں کہ ہیشز کا حساب کیسے لگایا جاتا ہے (opens in a new tab)

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

صفحہ کی آخری اپ ڈیٹ: 21 اکتوبر، 2025

کیا یہ ٹیوٹوریل مددگار تھا؟