ప్రధాన కంటెంట్‌కి స్కిప్ చేయండి

హార్డ్‌హ్యాట్ మరియు ఇథర్స్‌తో వాఫిల్ హలో వరల్డ్ ట్యుటోరియల్

waffle
స్మార్ట్ కాంట్రాక్టులు
దృఢత్వం
పరీక్షించడం
hardhat
ethers.js
ప్రారంభ
MiZiet
16 అక్టోబర్, 2020
3 నిమిషం పఠనం

వాఫిల్opens in a new tab ట్యుటోరియల్‌లో, మనం హార్డ్‌హ్యాట్opens 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
👷 హార్డ్‌హ్యాట్ v2.0.3కి స్వాగతం 👷‍
? మీరు ఏమి చేయాలనుకుంటున్నారు? …
❯ ఒక నమూనా ప్రాజెక్ట్‌ను సృష్టించండి
ఖాళీ hardhat.config.jsని సృష్టించండి
నిష్క్రమించండి
అన్నీ చూపించు

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("గ్రీటింగ్‌తో గ్రీటర్‌ను డిప్లాయ్ చేస్తోంది:", _greeting);
6greeting = _greeting;
7}
8
9function greet() public view returns (string memory) {
10return greeting;
11}
12
13function setGreeting(string memory _greeting) public {
14console.log("గ్రీటింగ్‌ను '%s' నుండి '%s'కి మారుస్తోంది", greeting, _greeting);
15greeting = _greeting;
16}
17}
అన్నీ చూపించు

మన స్మార్ట్ కాంట్రాక్ట్‌ను మూడు భాగాలుగా విభజించవచ్చు:

  1. కన్స్ట్రక్టర్ - ఇక్కడ మనం greeting అనే స్ట్రింగ్ రకం వేరియబుల్‌ను ప్రకటిస్తాము,
  2. ఫంక్షన్ గ్రీట్ - పిలిచినప్పుడు greetingను తిరిగి ఇచ్చే ఫంక్షన్,
  3. ఫంక్షన్ సెట్‌గ్రీటింగ్ - greeting విలువను మార్చడానికి మనకు అనుమతించే ఫంక్షన్.
  • sample-test.js - మన పరీక్షల ఫైల్
1describe("గ్రీటర్", function () {
2 it("ఒకసారి మార్చిన తర్వాత కొత్త గ్రీటింగ్‌ను తిరిగి ఇవ్వాలి", async function () {
3 const Greeter = await ethers.getContractFactory("Greeter")
4 const greeter = await Greeter.deploy("హలో, వరల్డ్!")
5
6 await greeter.deployed()
7 expect(await greeter.greet()).to.equal("హలో, వరల్డ్!")
8
9 await greeter.setGreeting("Hola, mundo!")
10 expect(await greeter.greet()).to.equal("Hola, mundo!")
11 })
12})
అన్నీ చూపించు

తదుపరి దశలో మన కాంట్రాక్ట్‌ను కంపైల్ చేయడం మరియు పరీక్షలను అమలు చేయడం ఉంటాయి:

వాఫిల్ పరీక్షలు మోచా (ఒక టెస్ట్ ఫ్రేమ్‌వర్క్)ను చాయ్ (ఒక అస్సర్షన్ లైబ్రరీ)తో కలిపి ఉపయోగిస్తాయి. మీరు చేయాల్సిందల్లా npx hardhat testను అమలు చేసి, కింది సందేశం కనిపించే వరకు వేచి ఉండటమే.

✓ ఒకసారి మార్చిన తర్వాత కొత్త గ్రీటింగ్‌ను తిరిగి ఇవ్వాలి

ఇప్పటివరకు అంతా బాగానే ఉంది, మన ప్రాజెక్ట్‌కు మరికొంత సంక్లిష్టతను జోడిద్దాం

ఎవరైనా గ్రీటింగ్‌గా ఖాళీ స్ట్రింగ్‌ను జోడించే పరిస్థితిని ఊహించుకోండి. అది ఆత్మీయమైన పలకరింపు కాదు, కదా?
అలా జరగకుండా చూసుకుందాం:

ఎవరైనా ఖాళీ స్ట్రింగ్‌ను పంపినప్పుడు సాలిడిటీ యొక్క revertని ఉపయోగించాలనుకుంటున్నాము. మంచి విషయం ఏమిటంటే, వాఫిల్ యొక్క చాయ్ మ్యాచర్ to.be.revertedWith()తో మనం ఈ కార్యాచరణను సులభంగా పరీక్షించవచ్చు.

1it("ఖాళీ స్ట్రింగ్‌ను పంపినప్పుడు తిరిగి పంపాలి", async () => {
2 const Greeter = await ethers.getContractFactory("Greeter")
3 const greeter = await Greeter.deploy("హలో, వరల్డ్!")
4
5 await greeter.deployed()
6 await expect(greeter.setGreeting("")).to.be.revertedWith(
7 "గ్రీటింగ్ ఖాళీగా ఉండకూడదు"
8 )
9})
అన్నీ చూపించు

మన కొత్త పరీక్ష పాస్ కాలేదని తెలుస్తోంది:

గ్రీటింగ్‌తో గ్రీటర్‌ను డిప్లాయ్ చేస్తోంది: హలో, వరల్డ్!
'హలో, వరల్డ్!' నుండి 'Hola, mundo!'కి గ్రీటింగ్‌ను మారుస్తోంది
✓ ఒకసారి మార్చిన తర్వాత కొత్త గ్రీటింగ్‌ను తిరిగి ఇవ్వాలి (1514ms)
గ్రీటింగ్‌తో గ్రీటర్‌ను డిప్లాయ్ చేస్తోంది: హలో, వరల్డ్!
'హలో, వరల్డ్!' నుండి ''కి గ్రీటింగ్‌ను మారుస్తోంది
1) ఖాళీ స్ట్రింగ్‌ను పంపినప్పుడు తిరిగి పంపాలి
1 ఉత్తీర్ణం (2s)
1 విఫలం
అన్నీ చూపించు

ఈ కార్యాచరణను మన స్మార్ట్ కాంట్రాక్ట్‌లో అమలు చేద్దాం:

1require(bytes(_greeting).length > 0, "గ్రీటింగ్ ఖాళీగా ఉండకూడదు");

ఇప్పుడు, మన సెట్ గ్రీటింగ్ ఫంక్షన్ ఈ విధంగా కనిపిస్తుంది:

1function setGreeting(string memory _greeting) public {
2require(bytes(_greeting).length > 0, "గ్రీటింగ్ ఖాళీగా ఉండకూడదు");
3console.log("గ్రీటింగ్‌ను '%s' నుండి '%s'కి మారుస్తోంది", greeting, _greeting);
4greeting = _greeting;
5}

పరీక్షలను మళ్ళీ అమలు చేద్దాం:

✓ ఒకసారి మార్చిన తర్వాత కొత్త గ్రీటింగ్‌ను తిరిగి ఇవ్వాలి (1467ms)
✓ ఖాళీ స్ట్రింగ్‌ను పంపినప్పుడు తిరిగి పంపాలి (276ms)
2 ఉత్తీర్ణం (2s)

అభినందనలు! మీరు సాధించారు :)

ముగింపు

మేము వాఫిల్, హార్డ్‌హ్యాట్ మరియు ఇథర్స్.jsలతో ఒక సాధారణ ప్రాజెక్ట్‌ను రూపొందించాము. ప్రాజెక్ట్‌ను ఎలా సెటప్ చేయాలో, పరీక్షను జోడించడం మరియు కొత్త కార్యాచరణను ఎలా అమలు చేయాలో మనం నేర్చుకున్నాము.

మీ స్మార్ట్ కాంట్రాక్ట్‌లను పరీక్షించడానికి మరిన్ని గొప్ప చాయ్ మ్యాచర్‌ల కోసం, అధికారిక వాఫిల్ డాక్స్opens in a new tabను చూడండి.

పేజీ చివరి అప్‌డేట్: 8 డిసెంబర్, 2023

ఈ ట్యుటోరియల్ ఉపయోగపడిందా?