ہارڈ ہیٹ اور ایتھرس کے ساتھ وافل کا ہیلو ورلڈ ٹیوٹوریل
اس 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 888888 888 888 888 888888 888 888 888 8888888888888 8888b. 888d888 .d88888 88888b. 8888b. 888888888 888 "88b 888P" d88" 888 888 "88b "88b 888888 888 .d888888 888 888 888 888 888 .d888888 888888 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 projectCreate an empty hardhat.config.jsQuitسب دکھائیںCreate a sample project کو منتخب کریں
ہمارے پروجیکٹ کی ساخت کچھ اس طرح نظر آنی چاہیے:
1MyWaffleProject2├── contracts3│ └── Greeter.sol4├── node_modules5├── scripts6│ └── sample-script.js7├── test8│ └── sample-test.js9├── .gitattributes10├── .gitignore11├── hardhat.config.js12└── package.jsonسب دکھائیںاب ان میں سے کچھ فائلوں کے بارے میں بات کرتے ہیں:
- Greeter.sol - ہمارا اسمارٹ کنٹریکٹ جو سولڈیٹی میں لکھا گیا ہے؛
1contract Greeter {2string greeting;34constructor(string memory _greeting) public {5console.log("Deploying a Greeter with greeting:", _greeting);6greeting = _greeting;7}89function greet() public view returns (string memory) {10return greeting;11}1213function setGreeting(string memory _greeting) public {14console.log("Changing greeting from '%s' to '%s'", greeting, _greeting);15greeting = _greeting;16}17}سب دکھائیںہمارے اسمارٹ کنٹریکٹ کو تین حصوں میں تقسیم کیا جا سکتا ہے:
- کنسٹرکٹر - جہاں ہم
greetingنامی ایک سٹرنگ ٹائپ متغیر کا اعلان کرتے ہیں، - فنکشن greet - ایک فنکشن جو کال کیے جانے پر
greetingواپس کرے گا، - فنکشن 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!")56 await greeter.deployed()7 expect(await greeter.greet()).to.equal("Hello, world!")89 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!")45 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