Wysyłanie transakcji
Zapisywanie w łańcuchu
Wysyłanie transakcji to bezpłatna lekcja Web3 & DApp Development Fundamentals na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Web3 & DApp Development Fundamentals, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Web3 & DApp Development Fundamentals zawiera 4 lekcji w sumie.
Części tej lekcji nie zostały jeszcze przetłumaczone i są wyświetlane po angielsku.
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
connector 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
valueoverride; estimate cost withestimateGas. - Handle failures with try/catch and mind the account nonce.
Często zadawane pytania
Czy lekcja „Wysyłanie transakcji” jest bezpłatna?
Tak — pełny tekst „Wysyłanie transakcji” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Web3 & DApp Development Fundamentals, przejdź na CoddyKit PRO. Kurs Web3 & DApp Development Fundamentals zawiera 4 lekcji w sumie.
Co nauczysz się w „Wysyłanie transakcji”?
Zapisywanie w łańcuchu Ćwiczysz Web3 & DApp Development Fundamentals z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Web3 & DApp Development Fundamentals?
Nie wymagamy żadnego doświadczenia. Web3 & DApp Development Fundamentals w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.
Ile czasu zajmuje lekcja „Wysyłanie transakcji”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Web3 & DApp Development Fundamentals?
Tak. Każda lekcja Web3 & DApp Development Fundamentals zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Łączenie z providerem
- Odczytywanie danych kontraktu
- Wysyłanie transakcji
- Nasłuchiwanie zdarzeń