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

⁦JavaScript⁩ سے سمارٹ کنٹریکٹ کو کال کرنا

ٹرانزیکشنز
فرنٹ اینڈ
JavaScript
web3.js
ابتدائی
jdourlens
۱۹ اپریل، ۲۰۲۰
4 منٹ کا مطالعہ
صفحہ میں ترمیم کریں (opens in a new tab)

اس ٹیوٹوریل میں ہم دیکھیں گے کہ 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 درکار ہوگا:

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

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

const web3 = new Web3("http://localhost:8545")

const daiToken = new web3.eth.Contract(ERC20TransferABI, DAI_ADDRESS)

ہم دو پتے بھی ترتیب دیں گے:

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

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

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

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

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

daiToken.methods.balanceOf(senderAddress).call(function (err, res) {
  if (err) {
    console.log("An error occurred", err)
    return
  }
  console.log("The balance is: ", res)
})

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

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

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

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

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

صفحہ کی آخری اپ ڈیٹ: ۳ مارچ، ۲۰۲۶