Hur testar man smarta kontrakt med ethers.js och Truffle?

Jan 22, 2026Lämna ett meddelande

Hej där! Som eterleverantör har jag sett hur viktigt det är att testa smarta kontrakt ordentligt. I det här blogginlägget ska jag gå igenom hur du testar smarta kontrakt med ethers.js och Truffle. Det kanske låter lite tekniskt, men jag delar upp det i lättförståeliga steg.

Varför det är viktigt att testa smarta kontrakt

Innan vi dyker in i testprocessen, låt oss snabbt prata om varför det är så viktigt att testa smarta kontrakt. Smarta kontrakt är självutförande kontrakt med villkoren i avtalet direkt inskrivna i kod. När de väl har installerats på blockkedjan är de oföränderliga, vilket innebär att du inte kan ändra dem lätt. Om det finns buggar eller sårbarheter i ditt smarta kontrakt kan det leda till allvarliga problem, som ekonomiska förluster eller säkerhetsintrång. Så, testning är som ett skyddsnät för att fånga upp dessa problem innan de orsakar någon verklig skada.

EINECS-203-905-0Dibutyl Carbitol

Förutsättningar

För att följa den här guiden behöver du några saker:

  1. Node.js och npm: Dessa används för att hantera dina projektberoenden. Du kan ladda ner dem från den officiella Node.js-webbplatsen.
  2. Tryffel: Det är ett populärt utvecklingsramverk för Ethereum. Du kan installera det globalt med hjälp avnpm installera -g tryffel.
  3. ethers.js: Ett lättviktsbibliotek för interaktion med Ethereum blockchain. Du kan lägga till det i ditt projekt med hjälp avnpm installera etrar.

Skapa ett tryffelprojekt

Först till kvarn, låt oss skapa ett nytt tryffelprojekt. Öppna din terminal och kör följande kommando:

tryffelvärme

Detta kommer att skapa en ny katalog med grundstrukturen för ett tryffelprojekt. Du kommer att se mappar somkontrakt,migrationer, ochtesta. Dekontraktmappen är där du lägger din smarta avtalskod, denmigrationermappen är för skript för att distribuera dina kontrakt, ochtestamappen är där vi kommer att skriva våra testfall.

Att skriva ett enkelt smart kontrakt

Låt oss skriva ett enkelt smart kontrakt att testa. Skapa en ny fil ikontraktmapp som heterSimpleStorage.sol. Här är koden:

// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; kontrakt SimpleStorage { uint256 private storedData; function set(uint256 x) public { storedData = x; } funktion get() public view returnerar (uint256) { return storedData; } }

Detta är ett grundläggande kontrakt som låter dig lagra och hämta ett enda osignerat heltal.

Konfigurera tryffel

Därefter måste vi konfigurera Truffle för att fungera med vår lokala utvecklingsmiljö. Öppnatryffel-config.jsfil i roten av ditt projekt. Du kan ställa in ett utvecklingsnätverk så här:

module.exports = { nätverk: { utveckling: { värd: "127.0.0.1", port: 8545, nätverks-id: "*" } }, kompilatorer: { solc: { version: "0.8.0" } } };

Detta konfigurerar Truffle för att ansluta till en lokal Ethereum-nod som körs pålokal värdi hamn8545.

Skriva tester med ethers.js och Truffle

Nu ska vi skriva några tester för vårSimpleStoragekontrakt med ethers.js. Skapa en ny fil itestamapp som heterSimpleStorage.test.js. Här är koden:

const { etrar } = require('etrar'); const { förvänta } = require('chai'); describe('SimpleStorage', function () { let simpleStorage; let provider; let signer; before(async function () { provider = new ethers.providers.JsonRpcProvider('http://127.0.0.1:8545'); signer = provider.getSigner(); const SimpleStorage ethers.getContractFactory('SimpleStorage', undertecknare = await SimpleStorage.deploy( } it('bör ställa in och få värdet korrekt', async function () { const valueToSet = 42; simpleStorage.get(); expect(retrievedValue.toNumber()).to.equal(valueToSet });

I det här testet konfigurerade vi först en leverantör och en signerare med ethers.js. Sedan sätter vi in ​​vårSimpleStoragekontrakt. Dedetblocket är där vi faktiskt skriver vårt testfall. Vi sätter ett värde i kontraktet och hämtar det sedan och använderchaibiblioteket för att hävda att det hämtade värdet är detsamma som det vi ställer in.

Kör testerna

För att köra testen kör du helt enkelt följande kommando i din terminal:

tryffel test

Truffle kommer att kompilera dina kontrakt, distribuera dem till det lokala nätverket och köra alla testfall itestamapp. Om allt går bra bör du se ett meddelande som säger att alla prov har godkänts.

Avancerade testkoncept

Testar händelser

Smarta kontrakt kan avge händelser, som är användbara för att meddela externa applikationer om vissa åtgärder. Låt oss lägga till en händelse till vårSimpleStoragekontrakt och skriv ett test för det.

Uppdatera förstSimpleStorage.solkontrakt:

// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; kontrakt SimpleStorage { uint256 private storedData; händelse ValueSet(uint256 newValue); function set(uint256 x) public { storedData = x; emit ValueSet(x); } funktion get() public view returnerar (uint256) { return storedData; } }

Uppdatera nuSimpleStorage.test.jsfil för att testa händelsen:

const { etrar } = require('etrar'); const { förvänta } = require('chai'); describe('SimpleStorage', function () { let simpleStorage; let provider; let signer; before(async function () { provider = new ethers.providers.JsonRpcProvider('http://127.0.0.1:8545'); signer = provider.getSigner(); const SimpleStorage ethers.getContractFactory('SimpleStorage', undertecknare = await SimpleStorage.deploy( } it('bör ställa in och få värdet korrekt', async function () { const valueToSet = 42; simpleStorage.get(); expect(retrievedValue.toNumber()).to.equal(valueToSet }); receipt.events.find(event => event.event === 'ValueSet'); expect(event.args.newValue.toNumber()).to.equal(valueToSet });

I detta nya testfall skickar vi en transaktion för att sätta ett värde i kontraktet. Sedan väntar vi på att transaktionen ska mineras och får kvittot. Vi söker efterValueSethändelse i kvittot och hävda att värdet i händelsen är detsamma som det vi anger.

Slutsats

Att testa smarta kontrakt med ethers.js och Truffle är ett kraftfullt sätt att säkerställa tillförlitligheten och säkerheten för dina kontrakt. Genom att följa stegen i den här guiden kan du skriva omfattande testsviter för dina smarta kontrakt och fånga eventuella problem tidigt.

Om du är på marknaden för högkvalitativa etrar för dina blockchain-projekt, har vi dig täckt. Vi erbjuder ett brett utbud av etrar, inklusiveDietylenglykoldibutyleter CAS 112-73-2,METYL PERFLUOROBUTYLETER CAS 163702-08-7, och2-butoxietanol CAS 111-76-2. Om du är intresserad av att lära dig mer eller diskutera ett potentiellt köp, hör gärna av dig och starta ett upphandlingssamtal.

Referenser

  • Tryffeldokumentation
  • ethers.js Dokumentation
  • Soliditetsdokumentation

Skicka förfrågan

Hem

Telefon

E-post

Förfrågning