Grunderna i Web3- och DApp-utveckling · Lektion

Skicka transaktioner

Skriva till kedjan

Lektion 3 av 413 steg

Skicka transaktioner är en gratis lektion i Grunderna i Web3- och DApp-utveckling på CoddyKit. Detta är lektion 3 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för Grunderna i Web3- och DApp-utveckling, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Grunderna i Web3- och DApp-utveckling innehåller totalt 4 lektioner.

Skriva till kedjan

Att ändra kontraktets tillstånd – överföra tokens, skapa nya tokens eller rösta – kräver en transaktion. Transaktioner måste signeras och kostar gas.

För detta behöver Ni en signer, inte bara en provider.

Ett kontrakt med en signer

För att skicka transaktioner skapar Ni kontraktet med en signer eller ansluter en befintlig instans till en:

const contract = new ethers.Contract( address, abi, signer ); // or const writable = readOnly.connect(signer);

Nu blir funktioner som ändrar tillstånd tillgängliga.

const contract = new ethers.Contract(
  address,
  abi,
  signer
);
// or
const writable = readOnly.connect(signer);

Skicka en transaktion

Att anropa en skrivfunktion skickar en transaktion och returnerar omedelbart ett transaktionssvar – innan den har utvunnits:

const tx = await contract.transfer( recipient, ethers.parseUnits("10", 18) ); console.log("Sent:", tx.hash);

Hashvärdet identifierar den väntande transaktionen.

const tx = await contract.transfer(
  recipient,
  ethers.parseUnits("10", 18)
);
console.log("Sent:", tx.hash);

Vänta på bekräftelse

Transaktionen är inte slutgiltig förrän den har utvunnits. Vänta på kvittot:

const receipt = await tx.wait(); console.log("Mined in block:", receipt.blockNumber); console.log("Status:", receipt.status);

Ett status på 1 betyder att den lyckades; 0 betyder att den återställdes.

const receipt = await tx.wait();
console.log("Mined in block:", receipt.blockNumber);
console.log("Status:", receipt.status);

Vänta på fler block

För större säkerhet mot omorganisationer kan Ni vänta på flera bekräftelser:

// Wait for 3 confirmations const receipt = await tx.wait(3);

Fler bekräftelser innebär att det blir allt osannolikare att transaktionen återförs.

// Wait for 3 confirmations
const receipt = await tx.wait(3);

Skicka ETH med ett anrop

Payable-funktioner accepterar ETH. Skicka ett value-override som sista argument:

const tx = await contract.deposit({ value: ethers.parseEther("0.5"), }); await tx.wait();

value anges i wei; parseEther konverterar från ett belopp för människor.

const tx = await contract.deposit({
  value: ethers.parseEther("0.5"),
});
await tx.wait();

Uppskatta gas

Innan Ni skickar kan Ni uppskatta hur mycket gas ett anrop kommer att använda:

const gas = await contract.transfer .estimateGas(recipient, amount); console.log("Estimated gas:", gas);

Om funktionen skulle återställas kastar uppskattningen ett fel – en användbar tidig varning.

const gas = await contract.transfer
  .estimateGas(recipient, amount);
console.log("Estimated gas:", gas);

Ange gas-overrides

Ni kan åsidosätta gasparametrar vid behov, till exempel på EIP-1559-kedjor:

const tx = await contract.transfer(recipient, amount, { gasLimit: 100000, maxFeePerGas: ethers.parseUnits("30", "gwei"), maxPriorityFeePerGas: ethers.parseUnits("2", "gwei"), });

Vanligtvis väljer plånboken lämpliga standardvärden, så använd overrides endast när det behövs.

const tx = await contract.transfer(recipient, amount, {
  gasLimit: 100000,
  maxFeePerGas: ethers.parseUnits("30", "gwei"),
  maxPriorityFeePerGas: ethers.parseUnits("2", "gwei"),
});

Hantera fel

Transaktioner kan misslyckas genom att återställas, ha för lågt pris eller avvisas av användaren i en plånbok. Omslut skickandet med try/catch:

try { const tx = await contract.transfer(to, amount); await tx.wait(); } catch (err) { console.error("Transaction failed:", err.shortMessage); }
try {
  const tx = await contract.transfer(to, amount);
  await tx.wait();
} catch (err) {
  console.error("Transaction failed:", err.shortMessage);
}

Nonce och ordning

Varje konto har en nonce – en räknare som säkerställer att transaktioner körs i rätt ordning. ethers hanterar den automatiskt, men om Ni skickar många transaktioner snabbt kan Ni ange den manuellt för att undvika kollisioner:

const tx = await contract.mint({ nonce: 42 });

Felaktiga nonce-värden gör att transaktioner fastnar eller ersätts.

const tx = await contract.mint({ nonce: 42 });

Läs events från ett kvitto

Efter utvinningen kan Ni granska de events som transaktionen genererade i kvittots loggar:

const receipt = await tx.wait(); for (const log of receipt.logs) { const parsed = contract.interface.parseLog(log); if (parsed) console.log(parsed.name, parsed.args); }

Detta bekräftar att kontraktet gjorde det Ni förväntade Er.

const receipt = await tx.wait();
for (const log of receipt.logs) {
  const parsed = contract.interface.parseLog(log);
  if (parsed) console.log(parsed.name, parsed.args);
}

Snabbtest

Testa Er förståelse av hur man skickar transaktioner.

Sammanfattning

Ni har lärt Er att skicka transaktioner som ändrar tillstånd.

  • Skrivningar kräver en signer; anslut en med connect eller vid skapandet.
  • Ett skrivningsanrop returnerar en väntande tx; tx.wait() ger det utvunna kvittot.
  • Kontrollera receipt.status och vänta på fler bekräftelser för att skydda mot omorganisationer.
  • Skicka ETH via en value-override och uppskatta kostnaden med estimateGas.
  • Hantera fel med try/catch och håll koll på kontots nonce.
Gratis att börja

Lär dig Grunderna i Web3- och DApp-utveckling med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
29
Lektioner
105

Vanliga frågor

Är lektionen ”Skicka transaktioner” gratis?

Ja – du kan läsa vilka 3 lektioner som helst i lärvägen Grunderna i Web3- och DApp-utveckling, inklusive ”Skicka transaktioner”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i Grunderna i Web3- och DApp-utveckling innehåller totalt 4 lektioner.

Vad lär jag mig i ”Skicka transaktioner”?

Skriva till kedjan Ni övar på Grunderna i Web3- och DApp-utveckling med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig Grunderna i Web3- och DApp-utveckling?

Du behöver inga förkunskaper. Utbildningen i Grunderna i Web3- och DApp-utveckling på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 3 av 4.

Hur lång tid tar lektionen ”Skicka transaktioner”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här Grunderna i Web3- och DApp-utveckling-lektionen?

Ja. Varje Grunderna i Web3- och DApp-utveckling-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Ansluta till en provider
  2. Läsa kontraktsdata
  3. Skicka transaktioner
  4. Lyssna på events
← Tillbaka till Grunderna i Web3- och DApp-utveckling