اہم مواد پر جائیں

ہارڈ ہیٹ اور ایتھرس کے ساتھ وافل کا ہیلو ورلڈ ٹیوٹوریل

waffle
اسمارٹ معاہدات
solidity
testing
hardhat
ethers.js
ابتدائی
MiZiet
16 اکتوبر، 2020
4 منٹ کی پڑھائی

اس Waffleopens in a new tab ٹیوٹوریل میں، ہم hardhatopens in a new tab اور ethers.jsopens in a new tab کا استعمال کرتے ہوئے ایک سادہ "ہیلو ورلڈ" اسمارٹ کنٹریکٹ پروجیکٹ سیٹ اپ کرنے کا طریقہ سیکھیں گے۔ پھر ہم سیکھیں گے کہ اپنے اسمارٹ کنٹریکٹ میں ایک نئی فنکشنلٹی کیسے شامل کی جائے اور وافل کے ساتھ اس کی جانچ کیسے کی جائے۔

آئیے ایک نیا پروجیکٹ بنا کر شروعات کریں:

yarn init

یا

npm init

اور مطلوبہ پیکیجز انسٹال کریں:

yarn add -D hardhat @nomiclabs/hardhat-ethers ethers @nomiclabs/hardhat-waffle ethereum-waffle chai

یا

npm install -D hardhat @nomiclabs/hardhat-ethers ethers @nomiclabs/hardhat-waffle ethereum-waffle chai

اگلا مرحلہ npx hardhat چلا کر ایک نمونہ ہارڈ ہیٹ پروجیکٹ بنانا ہے۔

888 888 888 888 888
888 888 888 888 888
888 888 888 888 888
8888888888 8888b. 888d888 .d88888 88888b. 8888b. 888888
888 888 "88b 888P" d88" 888 888 "88b "88b 888
888 888 .d888888 888 888 888 888 888 .d888888 888
888 888 888 888 888 Y88b 888 888 888 888 888 Y88b.
888 888 "Y888888 888 "Y88888 888 888 "Y888888 "Y888
👷 Welcome to Hardhat v2.0.3 👷‍
? What do you want to do? …
❯ Create a sample project
Create an empty hardhat.config.js
Quit
سب دکھائیں

Create a sample project کو منتخب کریں

ہمارے پروجیکٹ کی ساخت کچھ اس طرح نظر آنی چاہیے:

1MyWaffleProject
2├── contracts
3│ └── Greeter.sol
4├── node_modules
5├── scripts
6│ └── sample-script.js
7├── test
8│ └── sample-test.js
9├── .gitattributes
10├── .gitignore
11├── hardhat.config.js
12└── package.json
سب دکھائیں

اب ان میں سے کچھ فائلوں کے بارے میں بات کرتے ہیں:

  • Greeter.sol - ہمارا اسمارٹ کنٹریکٹ جو سولڈیٹی میں لکھا گیا ہے؛
1contract Greeter {
2string greeting;
3
4constructor(string memory _greeting) public {
5console.log("Deploying a Greeter with greeting:", _greeting);
6greeting = _greeting;
7}
8
9function greet() public view returns (string memory) {
10return greeting;
11}
12
13function setGreeting(string memory _greeting) public {
14console.log("Changing greeting from '%s' to '%s'", greeting, _greeting);
15greeting = _greeting;
16}
17}
سب دکھائیں

ہمارے اسمارٹ کنٹریکٹ کو تین حصوں میں تقسیم کیا جا سکتا ہے:

  1. کنسٹرکٹر - جہاں ہم greeting نامی ایک سٹرنگ ٹائپ متغیر کا اعلان کرتے ہیں،
  2. فنکشن greet - ایک فنکشن جو کال کیے جانے پر greeting واپس کرے گا،
  3. فنکشن setGreeting - ایک فنکشن جو ہمیں greeting کی قدر کو تبدیل کرنے کی اجازت دیتا ہے۔
  • sample-test.js - ہماری ٹیسٹ فائل
1describe("Greeter", function () {
2 it("Should return the new greeting once it's changed", async function () {
3 const Greeter = await ethers.getContractFactory("Greeter")
4 const greeter = await Greeter.deploy("Hello, world!")
5
6 await greeter.deployed()
7 expect(await greeter.greet()).to.equal("Hello, world!")
8
9 await greeter.setGreeting("Hola, mundo!")
10 expect(await greeter.greet()).to.equal("Hola, mundo!")
11 })
12})
سب دکھائیں

اگلا مرحلہ ہمارے کنٹریکٹ کو کمپائل کرنے اور ٹیسٹ چلانے پر مشتمل ہے:

وافل ٹیسٹ موچا (ایک ٹیسٹ فریم ورک) کے ساتھ چائی (ایک دعویٰ لائبریری) کا استعمال کرتے ہیں۔ آپ کو بس npx hardhat test چلانا ہے اور درج ذیل پیغام کے ظاہر ہونے کا انتظار کرنا ہے۔

✓ Should return the new greeting once it's changed

اب تک سب کچھ بہت اچھا لگ رہا ہے، آئیے اپنے پروجیکٹ میں کچھ اور پیچیدگی شامل کریں

ایسی صورتحال کا تصور کریں جہاں کوئی شخص بطور گریٹنگ ایک خالی سٹرنگ شامل کرتا ہے۔ یہ ایک پرجوش گریٹنگ نہیں ہوگی، ہے نا؟
آئیے اس بات کو یقینی بنائیں کہ ایسا نہ ہو:

جب کوئی خالی سٹرنگ پاس کرتا ہے تو ہم سولڈیٹی کے revert کا استعمال کرنا چاہتے ہیں۔ اچھی بات یہ ہے کہ ہم اس فنکشنلٹی کو وافل کے چائی میچر to.be.revertedWith() کے ساتھ آسانی سے ٹیسٹ کر سکتے ہیں۔

1it("Should revert when passing an empty string", async () => {
2 const Greeter = await ethers.getContractFactory("Greeter")
3 const greeter = await Greeter.deploy("Hello, world!")
4
5 await greeter.deployed()
6 await expect(greeter.setGreeting("")).to.be.revertedWith(
7 "Greeting should not be empty"
8 )
9})
سب دکھائیں

ایسا لگتا ہے کہ ہمارا نیا ٹیسٹ پاس نہیں ہوا:

Deploying a Greeter with greeting: Hello, world!
Changing greeting from 'Hello, world!' to 'Hola, mundo!'
✓ Should return the new greeting once it's changed (1514ms)
Deploying a Greeter with greeting: Hello, world!
Changing greeting from 'Hello, world!' to ''
1) Should revert when passing an empty string
1 passing (2s)
1 failing
سب دکھائیں

آئیے اس فنکشنلٹی کو اپنے اسمارٹ کنٹریکٹ میں نافذ کریں:

1require(bytes(_greeting).length > 0, "Greeting should not be empty");

اب، ہمارا setGreeting فنکشن اس طرح لگتا ہے:

1function setGreeting(string memory _greeting) public {
2require(bytes(_greeting).length > 0, "Greeting should not be empty");
3console.log("Changing greeting from '%s' to '%s'", greeting, _greeting);
4greeting = _greeting;
5}

آئیے دوبارہ ٹیسٹ چلائیں:

✓ Should return the new greeting once it's changed (1467ms)
✓ Should revert when passing an empty string (276ms)
2 passing (2s)

مبارک ہو! آپ نے کر دکھایا :)

نتیجہ

ہم نے وافل، ہارڈ ہیٹ اور ethers.js کے ساتھ ایک سادہ پروجیکٹ بنایا۔ ہم نے ایک پروجیکٹ سیٹ اپ کرنے، ایک ٹیسٹ شامل کرنے اور نئی فنکشنلٹی کو نافذ کرنے کا طریقہ سیکھا۔

اپنے اسمارٹ کنٹریکٹس کی جانچ کے لیے مزید بہترین چائی میچرز کے لیے، آفیشل وافل کے دستاویزاتopens in a new tab دیکھیں۔

صفحہ کی آخری تازہ کاری: 8 دسمبر، 2023

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