Interaktion med deployede kontrakter
Lær, hvordan du interagerer med dine deployede smart contracts ved hjælp af JavaScript-tests og konsolkommandoer.
Interaktion med deployede kontrakter er en gratis Blockchain-smart contracts med Solidity-lektion på CoddyKit. Dette er lektion 3 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i Blockchain-smart contracts med Solidity, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Blockchain-smart contracts med Solidity-kurset indeholder 4 lektioner i alt.
Hvorfor interagere med contracts?
Efter udrulningen af din smart contract begynder det rigtige sjove: at interagere med den! Det betyder, at du kalder dens funktioner, læser dens data og sender transaktioner.
Interaktion er afgørende for:
- Test: At sikre, at din contract opfører sig som forventet.
- dApp-brugerflader: At lade brugere oprette forbindelse til og bruge din contract.
- Automatisering: At bygge scripts, der udfører handlinger på blockchainen.
Dit værktøjssæt til interaktion
Når du arbejder med Hardhat eller Truffle, har du effektive værktøjer til at interagere med udrullede contracts:
- Hardhat Console / Truffle Console: Et interaktivt kommandolinjemiljø til hurtige tests og fejlfinding.
- JavaScript-tests: Automatiserede scripts, der udruller contracts (eller opretter forbindelse til dem) og kontrollerer deres funktion.
- Tilpassede scripts: Selvstændige JavaScript-filer til mere komplekse interaktioner, der kan gentages.
I dag fokuserer vi på konsollen og JavaScript-tests.
Hardhat Console: Sandkassen
Hardhat Console giver dig en praktisk måde at interagere med dine contracts og blockchainen direkte fra din terminal. Den bruger et Hardhat Runtime Environment (HRE), som allerede har indlæst ethers.js og dine kompilerede contract-artifacts.
Start konsollen ved at åbne din terminal i mappen til dit Hardhat-projekt og køre:
npx hardhat consoleDette starter et interaktivt JavaScript-miljø.
Opret forbindelse til din contract
Før du kan kalde funktioner, skal du "oprette forbindelse" til din udrullede contract. Det indebærer, at du henter dens adresse og opretter et ethers.js Contract-objekt, der repræsenterer den.
Sådan kan du gøre i et Hardhat-script (eller direkte i konsollen):
const { ethers } = require("hardhat");
async function main() {
// First, get the ContractFactory for your contract
const Counter = await ethers.getContractFactory("Counter");
// Replace with the actual address where your contract is deployed
const deployedAddress = "0x5FbDB2315678afecb367f032d93F642f64180aa3";
// Attach to the deployed contract using its address
const counter = await Counter.attach(deployedAddress);
console.log("Connected to Counter at:", counter.address);
}
main()
.then(() => process.exit(0))
.catch((error) => {
console.error(error);
process.exit(1);
});Kald view-funktioner
Funktioner, der er markeret med view eller pure, ændrer ikke blockchainens tilstand. De er gratis at kalde og returnerer blot data. Du kan kalde dem direkte fra din contract-instans.
Lad os læse den aktuelle tæller fra vores Counter-contract. Bemærk, at ethers.js returnerer BigNumber-objekter for store tal, så vi ofte bruger .toString() til at vise dem.
const { ethers } = require("hardhat");
async function main() {
const Counter = await ethers.getContractFactory("Counter");
const deployedAddress = "0x5FbDB2315678afecb367f032d93F642f64180aa3";
const counter = await Counter.attach(deployedAddress);
// Call the getCount view function
const currentCount = await counter.getCount();
console.log("Current count is:", currentCount.toString());
}
main()
.then(() => process.exit(0))
.catch((error) => {
console.error(error);
process.exit(1);
});Send transaktioner
Hvis du vil ændre din contracts tilstand (f.eks. opdatere en variabel eller overføre tokens), skal du sende en transaktion. Disse kald koster gas og kræver en signer (din konto).
Efter du har sendt en transaktion, bør du normalt bruge await på dens bekræftelse for at sikre, at den er udvundet på blockchainen. Lad os forhøje vores tæller:
const { ethers } = require("hardhat");
async function main() {
const Counter = await ethers.getContractFactory("Counter");
const deployedAddress = "0x5FbDB2315678afecb367f032d93F642f64180aa3";
const counter = await Counter.attach(deployedAddress);
console.log("Incrementing count...");
const tx = await counter.increment();
await tx.wait(); // Wait for the transaction to be mined
const newCount = await counter.getCount();
console.log("Count after increment:", newCount.toString());
}
main()
.then(() => process.exit(0))
.catch((error) => {
console.error(error);
process.exit(1);
});Automatiserede interaktionstests
Selvom konsollen er god til hurtige kontroller, er automatiserede JavaScript-tests afgørende for robust udvikling. De giver dig mulighed for at:
- Definere forventet adfærd.
- Køre tests gentagne gange og hurtigt.
- Opdage regressioner, når du foretager ændringer.
Hardhat integreres problemfrit med testrammer som Mocha og Chai og bruger ethers.js til interaktion med contracts.
Skriv en interaktionstest
En typisk Hardhat-testfil bruger describe til testsamlinger og it til individuelle tests. I en it-blok opretter du forbindelse til din contract og kalder derefter dens funktioner, mens du kontrollerer resultaterne.
Husk at erstatte deployedAddress med din contracts faktiske adresse på dit testnetværk.
const { expect } = require("chai");
const { ethers } = require("hardhat");
describe("Counter Contract Interaction", function () {
let counter;
const deployedAddress = "0x5FbDB2315678afecb367f032d93F642f64180aa3"; // Your contract address
before(async function () {
const CounterFactory = await ethers.getContractFactory("Counter");
counter = await CounterFactory.attach(deployedAddress);
});
it("should read the initial count correctly", async function () {
const initialCount = await counter.getCount();
expect(initialCount.toString()).to.equal("0");
});
it("should increment the count via transaction", async function () {
const initialCount = await counter.getCount();
await counter.increment();
const finalCount = await counter.getCount();
expect(finalCount.toString()).to.equal(initialCount.add(1).toString());
});
});Gode råd til smart interaktion
Husk disse råd for at opnå effektiv interaktion med contracts:
- Bekræft altid adresser: Kontrollér den contract-adresse, du interagerer med, en ekstra gang.
- Forstå gas: Transaktioner, der ændrer tilstanden, bruger gas. Estimér omkostningerne ved udrulning til mainnet.
- Håndter fejl: Brug
try-catch-blokke til transaktioner, da de kan blive rullet tilbage. - Brug events: Lyt efter events fra contracten for at få strukturerede data om transaktioner.
- Test grundigt: Skriv omfattende tests for alle kritiske funktioner og kanttilfælde.
Hurtig kontrol: Interaktionstyper
Du har lært om to primære måder at interagere med smart contract-funktioner på: læsning af tilstand (view-/pure-funktioner) og ændring af tilstand (transaktionsfunktioner).
Hvilket af følgende udsagn om disse interaktioner er SANDT?
Opsummering: Interaktion med contracts
Du har nu lært at interagere med dine udrullede smart contracts!
- Vi undersøgte, hvordan Hardhat Console kan bruges til øjeblikkelig, interaktiv test.
- Du så, hvordan du kan oprette forbindelse til en udrullet contract-instans.
- Vi skelnede mellem at kalde `view`-funktioner (gratis, skrivebeskyttet) og at sende transaktioner (koster gas og ændrer tilstanden).
- Til sidst gennemgik vi betydningen af automatiserede JavaScript-tests for pålidelig interaktion med contracts.
Nu er du klar til at udforske tilstandshåndtering og lagringsmønstre i Solidity!
Lær Blockchain-smart contracts med Solidity med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 12
- Lektioner
- 48
Ofte stillede spørgsmål
Er lektionen “Interaktion med deployede kontrakter” gratis?
Ja — hele teksten til “Interaktion med deployede kontrakter” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af Blockchain-smart contracts med Solidity-kurset, skal du opgradere til CoddyKit PRO. Blockchain-smart contracts med Solidity-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Interaktion med deployede kontrakter”?
Lær, hvordan du interagerer med dine deployede smart contracts ved hjælp af JavaScript-tests og konsolkommandoer. Du øver dig i Blockchain-smart contracts med Solidity med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på Blockchain-smart contracts med Solidity?
Der kræves ingen tidligere erfaring. Blockchain-smart contracts med Solidity på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 3 af 4.
Hvor lang tid tager lektionen “Interaktion med deployede kontrakter”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne Blockchain-smart contracts med Solidity-lektion?
Ja. Alle Blockchain-smart contracts med Solidity-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- Opsætning af Hardhat eller Truffle
- Kompilering og deployment af kontrakter
- Interaktion med deployede kontrakter
- Skrivning og kørsel af kontrakttests