Asas Pembangunan Web3 & DApp · Pelajaran

Menghantar Transaksi

Tulis ke rantaian

Pelajaran 3 daripada 413 langkah

Menghantar Transaksi ialah pelajaran Asas Pembangunan Web3 & DApp percuma di CoddyKit. Ini ialah pelajaran 3 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Asas Pembangunan Web3 & DApp, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Asas Pembangunan Web3 & DApp merangkumi sejumlah 4 pelajaran.

Menulis pada Rantaian

Mengubah keadaan Contract — memindahkan token, mencetak token atau mengundi — memerlukan transaksi. Transaksi mesti ditandatangani dan menggunakan gas.

Untuk tujuan ini, anda memerlukan penandatangan, bukan sekadar provider.

Contract dengan Penandatangan

Untuk menghantar transaksi, cipta Contract dengan penandatangan atau sambungkan contoh sedia ada kepadanya:

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

Kini fungsi yang mengubah keadaan tersedia.

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

Menghantar Transaksi

Memanggil fungsi tulis menghantar transaksi dan mengembalikan respons transaksi serta-merta — sebelum transaksi itu dilombong:

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

Cincangan tersebut mengenal pasti transaksi yang masih menunggu.

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

Menunggu Pengesahan

Transaksi belum muktamad sehingga ia dilombong. Tunggu resitnya:

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

status bernilai 1 bermaksud berjaya; 0 bermaksud transaksi dibatalkan.

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

Menunggu Lebih Banyak Blok

Untuk keyakinan yang lebih tinggi terhadap penyusunan semula, tunggu beberapa pengesahan:

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

Lebih banyak pengesahan bermaksud kemungkinan transaksi diterbalikkan menjadi semakin kecil.

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

Menghantar ETH dengan Panggilan

Fungsi boleh bayar menerima ETH. Lewatkan penggantian nilai sebagai argumen terakhir:

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

value adalah dalam wei; parseEther menukarkannya daripada jumlah yang boleh dibaca manusia.

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

Menganggarkan Gas

Sebelum menghantar, anda boleh menganggarkan jumlah gas yang akan digunakan oleh sesuatu panggilan:

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

Jika fungsi itu akan dibatalkan, anggaran akan menghasilkan ralat — amaran awal yang berguna.

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

Menetapkan Penggantian Gas

Anda boleh menggantikan parameter gas apabila perlu, contohnya pada rantaian EIP-1559:

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

Biasanya wallet memilih lalai yang sesuai, jadi lakukan penggantian hanya apabila perlu.

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

Mengendalikan Kegagalan

Transaksi boleh gagal kerana dibatalkan, harga terlalu rendah atau ditolak oleh pengguna dalam wallet. Balut penghantaran dalam 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 dan Susunan

Setiap akaun mempunyai nonce — pembilang yang memastikan transaksi dilaksanakan mengikut susunan. ethers menguruskannya secara automatik, tetapi jika anda menghantar banyak transaksi dengan cepat, anda mungkin perlu menetapkannya secara manual untuk mengelakkan pertembungan:

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

Nonce yang tidak sepadan menyebabkan transaksi tersekat atau digantikan.

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

Membaca Peristiwa daripada Resit

Selepas perlombongan, anda boleh memeriksa peristiwa yang dikeluarkan oleh transaksi anda daripada log resit:

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

Ini mengesahkan bahawa Contract melakukan perkara yang anda jangkakan.

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

Semakan Pantas

Uji pemahaman anda tentang menghantar transaksi.

Ulang Kaji

Anda telah mempelajari cara menghantar transaksi yang mengubah keadaan.

  • Operasi tulis memerlukan penandatangan; lampirkan penandatangan dengan connect atau semasa pembinaan.
  • Panggilan tulis mengembalikan tx yang masih menunggu; tx.wait() memberikan resit yang telah dilombong.
  • Semak receipt.status; tunggu lebih banyak pengesahan untuk menghadapi penyusunan semula.
  • Hantar ETH melalui penggantian value; anggarkan kos dengan estimateGas.
  • Kendalikan kegagalan dengan try/catch dan beri perhatian kepada nonce akaun.
Percuma untuk bermula

Pelajari Asas Pembangunan Web3 & DApp dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
29
Pelajaran
105

Soalan Lazim

Adakah pelajaran “Menghantar Transaksi” percuma?

Ya — sebanyak 3 pelajaran dalam laluan pembelajaran Asas Pembangunan Web3 & DApp, termasuk “Menghantar Transaksi”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus Asas Pembangunan Web3 & DApp merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Menghantar Transaksi”?

Tulis ke rantaian Anda berlatih Asas Pembangunan Web3 & DApp menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan Asas Pembangunan Web3 & DApp?

Tiada pengalaman terdahulu diperlukan. Pembelajaran Asas Pembangunan Web3 & DApp di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 3 daripada 4.

Berapa lamakah pelajaran “Menghantar Transaksi” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran Asas Pembangunan Web3 & DApp ini?

Ya. Setiap pelajaran Asas Pembangunan Web3 & DApp menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Menyambung kepada Provider
  2. Membaca Data Kontrak
  3. Menghantar Transaksi
  4. Mendengar Peristiwa
← Kembali ke Asas Pembangunan Web3 & DApp