Mafunzo ya Waffle ya kusema hello world kwa kutumia hardhat na ethers
Katika mafunzo haya ya Waffleopens in a new tab, tutajifunza jinsi ya kuweka mradi rahisi wa mkataba-erevu wa "Hello world", kwa kutumia hardhatopens in a new tab na ethers.jsopens in a new tab. Kisha tutajifunza jinsi ya kuongeza utendaji mpya kwenye mkataba-erevu wetu na jinsi ya kuujaribu kwa kutumia Waffle.
Wacha tuanze kwa kuunda mradi mpya:
yarn initau
npm initna kusakinisha vifurushi vinavyohitajika:
yarn add -D hardhat @nomiclabs/hardhat-ethers ethers @nomiclabs/hardhat-waffle ethereum-waffle chaiau
npm install -D hardhat @nomiclabs/hardhat-ethers ethers @nomiclabs/hardhat-waffle ethereum-waffle chaiHatua inayofuata ni kuunda mradi wa sampuli wa hardhat kwa kutumia 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.jsQuitOnyesha yoteChagua Create a sample project
Muundo wa mradi wetu unapaswa kuonekana kama hivi:
1MyWaffleProject2├── contracts3│ └── Greeter.sol4├── node_modules5├── scripts6│ └── sample-script.js7├── test8│ └── sample-test.js9├── .gitattributes10├── .gitignore11├── hardhat.config.js12└── package.jsonOnyesha yoteSasa hebu tuzungumzie baadhi ya faili hizi:
- Greeter.sol - mkataba-erevu wetu ulioandikwa kwa solidity;
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}Onyesha yoteMkataba-erevu wetu unaweza kugawanywa katika sehemu tatu:
- constructor - ambapo tunatangaza kigezo cha aina ya string kinachoitwa
greeting, - function greet - kazi ambayo itarudisha
greetinginapoitwa, - function setGreeting - kazi inayoturuhusu kubadilisha thamani ya
greeting.
- sample-test.js - faili yetu ya majaribio
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})Onyesha yoteHatua inayofuata inajumuisha kuandaa mkataba wetu na kuendesha majaribio:
Majaribio ya Waffle hutumia Mocha (mfumo wa majaribio) na Chai (maktaba ya uhakikisho). Unachotakiwa kufanya ni kuendesha npx hardhat test na kusubiri ujumbe ufuatao uonekane.
✓ Should return the new greeting once it's changedKila kitu kinaonekana vizuri hadi sasa, hebu tuongeze utata zaidi kwenye mradi wetu
Fikiria hali ambapo mtu anaongeza string tupu kama salamu. Hiyo haitakuwa salamu ya ukarimu, sawa?
Wacha tuhakikishe hilo halitokei:
Tunataka kutumia revert ya solidity mtu anapopitisha string tupu. Jambo zuri ni kwamba tunaweza kujaribu utendaji huu kwa urahisi na kilinganishi cha chai cha Waffle 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})Onyesha yoteInaonekana jaribio letu jipya halikufaulu:
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 failingOnyesha yoteWacha tutekeleze utendaji huu katika mkataba-erevu wetu:
1require(bytes(_greeting).length > 0, "Greeting should not be empty");Sasa, kazi yetu ya setGreeting inaonekana hivi:
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}Wacha tuendeshe majaribio tena:
✓ Should return the new greeting once it's changed (1467ms)✓ Should revert when passing an empty string (276ms)2 passing (2s)Hongera! Umefaulu :)
Hitimisho
Tulitengeneza mradi rahisi kwa Waffle, Hardhat na ethers.js. Tulijifunza jinsi ya kuweka mradi, kuongeza jaribio na kutekeleza utendaji mpya.
Kwa vilinganishi bora zaidi vya chai vya kujaribu mikataba-erevu yako, angalia hati rasmi za Waffleopens in a new tab.
Ukurasa ulihaririwa mwisho: 8 Desemba 2023