Ajută la actualizarea acestei pagini

🌏

Există o nouă versiune a acestei pagini, dar acum este doar în engleză. Ajută-ne să traducem cea mai recentă versiune.

Waffle spune „Salut, lume”; tutorial cu Hardhat și eteri

În acest tutorial Waffle, vei învăța cum să configurezi un proiect simplu de contract inteligent „Salut, lume”, utilizând hardhat și ethers.js. Apoi vei învăța cum să adaugi o nouă funcționalitate la contractul tău inteligent și cum să-l testezi cu Waffle.

Să începem cu crearea unui nou proiect:

yarn init

sau

npm init

și instalează pachetele necesare:

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

sau

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

Următorul pas este crearea unui exemplu de proiect hardhat executând 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
👷 Bun venit la Hardhat v2.0.3 👷‍
? What do you want to do ? (Ce vrei să faci?)
Create a sample project (Să creez un exemplu de proiect)
Create an empty hardhat.config.js
Quit
Afișează tot

Selectează Creează un exemplu de proiect

Structura proiectelor noastre ar trebui să arate astfel:

1MyWaffleProject
2├── contracts
3│ └── Greeter.sol
4├── node_modules
5├── scripts
6│ └── sample-script.js
7├── test
8│ └── sample-test.js
9├── .gitattributs
10├── .gitignore
11├── hardhat.config.js
12└── package.json
13
Afișează tot

Acum să vorbim despre unele dintre aceste fișiere:

  • Greeter.sol - contractul nostru inteligent scris în solidity;
1contract Greeter {
2string greeting;
3
4constructor(string memory _greeting) public {
5console.log("Implementare program Greeter cu salutări:", _greeting);
6greeting = _greeting;
7}
8
9function greet() public view returns (string memory) {
10return greeting;
11}
12
13function setGreeting(string memory _greeting) public {
14console.log("Schimbare salut din '%s' în '%s'", greeting, _greeting);
15greeting = _greeting;
16}
17}
18
Afișează tot
📋 Copiere

Contractul nostru inteligent poate fi împărțit în trei părți:

  1. „constructor” - unde declarăm o variabilă de tip string numită greeting,
  2. funcția „greet” -o funcție care va returna greeting atunci când este apelată,
  3. funcția „setGreeting” - o funcție care ne permite să schimbăm valoarea greeting.
  • sample-test.js - fișierul nostru de teste
1describe("Greeter", function () {
2 it("Trebuie să returneze noul mesaj de salut odată ce a fost schimbat", 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("Salut, lume!")
10 expect(await greeter.greet()).to.equal("Salut, lume!")
11 })
12})
13
Afișează tot
📋 Copiere

Pasul următor constă în compilarea contractelor și a testelor de execuție:

Testele Waffle folosesc Mocha (un cadru de testare) cu Chai (o bibliotecă de afirmații). Tot ce trebuie să faci este să rulezi npx hardhat test și să aștepți să apară următorul mesaj.

✓ Trebuie să returneze noul mesaj de salut odată ce a fost schimbat

Totul arată bine până acum, hai să adăugăm ceva mai multă complexitate proiectului nostru

Imaginează-ți o situație când cineva adaugă un string gol ca salut. Nu ar fi un salut călduros, nu?
Să ne asigurăm că acest lucru nu se întâmplă:

Vrem să folosim funcția solidity revert atunci când cineva transmite un string gol. Un lucru bun este că putem testa cu ușurință această funcționalitate cu validatorul matcher chai to.bo.revertedWith() a lui Waffle..

1it("Trebuie să se schimbe când se transmite un string gol", 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 "Salutul nu trebuie să rămână gol"
8 )
9})
10
Afișează tot
📋 Copiere

Se pare că noul nostru test nu a trecut:

Implementarea unui Greeter cu salut: Hello, world!
Schimbarea salutului din „Hello, world!” în „Salut, lume!
✓ Trebuie să returneze noul mesaj de salut odată ce a fost schimbat (1514 ms)
Implementarea unui Greeter cu salut: Salut, lume!
Schimbarea salutului din „Salut, lume!” în „
1) Trebuie să se schimbe când se transmite un string gol
1 transmitere (2 s)
1 nereușită
Afișează tot

Să implementăm această funcționalitate în contractul nostru inteligent:

1require(bytes(_greeting).length > 0, "Mesajul de salut este gol");
2
📋 Copiere

Acum, funcția noastră „setGreeting” arată astfel:

1function setGreeting(string memory _greeting) public {
2require(bytes(_greeting).length > 0, "Salutul nu trebuie să fie gol");
3console.log("Changing greeting from '%s' to '%s'", greeting, _greeting);
4greeting = _greeting;
5}
6
📋 Copiere

Să rulăm din nou testele:

✓ Trebuie să returneze noul mesaj de salut odată ce a fost schimbat (1467 ms)
✓ Trebuie să se schimbe când se transmite un string gol (276 ms)
2 transmiteri (2 secunde)

Felicitări! Ai reușit :)

Concluzie

Am făcut un proiect simplu cu Waffle, Hardhat și ethers.js. Am învățat cum să configurăm un proiect, să adăugăm un test și să implementăm noi funcționalități.

Pentru mai mulți validatori matcher chai de mare valoare pentru testarea contractelor inteligente consultă documentele oficiale Waffle.

Ultima editare: , Invalid DateTime
Edit page