0Pricing
Web3 & DApp Development Fundamentals · Leçon

Envoyer des transactions

Écrire sur la chaîne

Envoyer des transactions est une leçon Web3 & DApp Development Fundamentals gratuite sur CoddyKit. Ceci est la leçon 3 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Web3 & DApp Development Fundamentals, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Web3 & DApp Development Fundamentals comprend 4 leçons au total.

Certaines parties de cette leçon n'ont pas encore été traduites et s'affichent en anglais.

Writing to the Chain

Changing contract state — transferring tokens, minting, voting — requires a transaction. Transactions must be signed and cost gas.

For this you need a signer, not just a provider.

A Contract with a Signer

To send transactions, create the contract with a signer or connect an existing instance to one:

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

Now state-changing functions become available.

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

Sending a Transaction

Calling a write function sends a transaction and returns a transaction response immediately — before it is mined:

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

The hash identifies the pending transaction.

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

Waiting for Confirmation

The transaction is not final until it is mined. Wait for the receipt:

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

A status of 1 means success; 0 means it reverted.

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

Waiting for More Blocks

For higher confidence against reorgs, wait for several confirmations:

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

More confirmations mean it is increasingly unlikely the transaction will be reversed.

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

Sending ETH with a Call

Payable functions accept ETH. Pass a value override as the last argument:

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

The value is in wei; parseEther converts from a human amount.

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

Estimating Gas

Before sending, you can estimate how much gas a call will use:

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

If the function would revert, estimation throws — a useful early warning.

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

Setting Gas Overrides

You can override gas parameters when needed, for example on EIP-1559 chains:

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

Usually the wallet picks sensible defaults, so override only when you must.

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

Handling Failures

Transactions can fail by reverting, being underpriced, or by user rejection in a wallet. Wrap sends in 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);
}

Nonces and Ordering

Each account has a nonce — a counter ensuring transactions execute in order. ethers manages it automatically, but if you send many transactions quickly you may set it manually to avoid collisions:

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

Mismatched nonces cause transactions to get stuck or replaced.

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

Reading Events from a Receipt

After mining, you can inspect the events emitted by your transaction from the receipt logs:

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); }

This confirms the contract did what you expected.

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);
}

Quick Check

Test your understanding of sending transactions.

Recap

You learned to send state-changing transactions.

  • Writes require a signer; attach one with connect or at construction.
  • A write call returns a pending tx; tx.wait() gives the mined receipt.
  • Check receipt.status; wait for more confirmations against reorgs.
  • Send ETH via a value override; estimate cost with estimateGas.
  • Handle failures with try/catch and mind the account nonce.

Questions Fréquemment Posées

La leçon « Envoyer des transactions » est-elle gratuite ?

Oui — le texte complet de « Envoyer des transactions » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Web3 & DApp Development Fundamentals, passe à CoddyKit PRO. Le cours Web3 & DApp Development Fundamentals comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Envoyer des transactions » ?

Écrire sur la chaîne Tu pratiques Web3 & DApp Development Fundamentals avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer Web3 & DApp Development Fundamentals ?

Aucune expérience préalable n'est requise. Web3 & DApp Development Fundamentals sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 3 sur 4.

Combien de temps prend la leçon « Envoyer des transactions » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon Web3 & DApp Development Fundamentals ?

Oui. Chaque leçon Web3 & DApp Development Fundamentals inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Se connecter à un fournisseur
  2. Lire les données d’un contrat
  3. Envoyer des transactions
  4. Écouter les événements
← Retour à Web3 & DApp Development Fundamentals