Ruka kwenda kwenye maudhui makuu

Mafunzo ya Waffle ya kusema hello world kwa kutumia hardhat na ethers

waffle
mikataba erevu
uimara
majaribio
hardhat
ethers.js
Beginner
MiZiet
16 Oktoba 2020
4 minute read

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 init

au

npm init

na kusakinisha vifurushi vinavyohitajika:

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

au

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

Hatua inayofuata ni kuunda mradi wa sampuli wa hardhat kwa kutumia 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
Onyesha yote

Chagua Create a sample project

Muundo wa mradi wetu unapaswa kuonekana kama hivi:

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
Onyesha yote

Sasa hebu tuzungumzie baadhi ya faili hizi:

  • Greeter.sol - mkataba-erevu wetu ulioandikwa kwa solidity;
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}
Onyesha yote

Mkataba-erevu wetu unaweza kugawanywa katika sehemu tatu:

  1. constructor - ambapo tunatangaza kigezo cha aina ya string kinachoitwa greeting,
  2. function greet - kazi ambayo itarudisha greeting inapoitwa,
  3. 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!")
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})
Onyesha yote

Hatua 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 changed

Kila 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!")
4
5 await greeter.deployed()
6 await expect(greeter.setGreeting("")).to.be.revertedWith(
7 "Greeting should not be empty"
8 )
9})
Onyesha yote

Inaonekana 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 failing
Onyesha yote

Wacha 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

Umesaidika na mafunzo haya?