Lompat ke konten utama

Mengirim Transaksi Menggunakan Web3

transaksi
web3.js
Alchemy
Pemula
Elan Halpern
4 November 2020
9 menit baca

Ini adalah panduan ramah pemula untuk mengirim transaksi Ethereum menggunakan Web3. Ada tiga langkah utama untuk mengirim transaksi ke blockchain Ethereum: membuat, menandatangani, dan menyiarkan. Kita akan membahas ketiganya, dan semoga dapat menjawab pertanyaan apa pun yang mungkin Anda miliki! Dalam tutorial ini, kita akan menggunakan Alchemy (opens in a new tab) untuk mengirim transaksi kita ke rantai Ethereum. Anda dapat membuat akun Alchemy gratis di sini (opens in a new tab).

CATATAN: Panduan ini adalah untuk menandatangani transaksi Anda di backend untuk aplikasi Anda. Jika Anda ingin mengintegrasikan penandatanganan transaksi Anda di frontend, lihat integrasi Web3 dengan penyedia peramban (opens in a new tab).

Dasar-dasar

Seperti kebanyakan pengembang blockchain saat pertama kali memulai, Anda mungkin telah melakukan riset tentang cara mengirim transaksi (sesuatu yang seharusnya cukup sederhana) dan menemukan banyak panduan, yang masing-masing mengatakan hal yang berbeda dan membuat Anda sedikit kewalahan dan bingung. Jika Anda berada di posisi itu, jangan khawatir; kita semua pernah mengalaminya! Jadi, sebelum kita mulai, mari kita luruskan beberapa hal:

1. Alchemy tidak menyimpan kunci pribadi Anda

  • Ini berarti Alchemy tidak dapat menandatangani dan mengirim transaksi atas nama Anda. Alasannya adalah untuk tujuan keamanan. Alchemy tidak akan pernah meminta Anda untuk membagikan kunci pribadi Anda, dan Anda tidak boleh membagikan kunci pribadi Anda dengan node yang di-host (atau siapa pun dalam hal ini).
  • Anda dapat membaca dari blockchain menggunakan API inti Alchemy, tetapi untuk menulis ke dalamnya, Anda perlu menggunakan sesuatu yang lain untuk menandatangani transaksi Anda sebelum mengirimkannya melalui Alchemy (ini sama untuk layanan node lainnya).

2. Apa itu "penandatangan" (signer)?

  • Penandatangan akan menandatangani transaksi untuk Anda menggunakan kunci pribadi Anda. Dalam tutorial ini kita akan menggunakan Alchemy web3 (opens in a new tab) untuk menandatangani transaksi kita, tetapi Anda juga dapat menggunakan pustaka web3 lainnya.
  • Di frontend, contoh penandatangan yang baik adalah MetaMask (opens in a new tab), yang akan menandatangani dan mengirim transaksi atas nama Anda.

3. Mengapa saya perlu menandatangani transaksi saya?

  • Setiap pengguna yang ingin mengirim transaksi di jaringan Ethereum harus menandatangani transaksi tersebut (menggunakan kunci pribadi mereka), untuk memvalidasi bahwa asal transaksi adalah benar seperti yang diklaimnya.
  • Sangat penting untuk melindungi kunci pribadi ini, karena memiliki akses ke sana memberikan kendali penuh atas akun Ethereum Anda, memungkinkan Anda (atau siapa pun yang memiliki akses) untuk melakukan transaksi atas nama Anda.

4. Bagaimana cara melindungi kunci pribadi saya?

  • Ada banyak cara untuk melindungi kunci pribadi Anda dan menggunakannya untuk mengirim transaksi. Dalam tutorial ini kita akan menggunakan file .env. Namun, Anda juga dapat menggunakan penyedia terpisah yang menyimpan kunci pribadi, menggunakan file keystore, atau opsi lainnya.

5. Apa perbedaan antara eth_sendTransaction dan eth_sendRawTransaction?

eth_sendTransaction dan eth_sendRawTransaction keduanya adalah fungsi API Ethereum yang menyiarkan transaksi ke jaringan Ethereum sehingga akan ditambahkan ke blok di masa mendatang. Keduanya berbeda dalam cara menangani penandatanganan transaksi.

Saat menggunakan web3, eth_sendRawTransaction diakses dengan memanggil fungsi web3.eth.sendSignedTransaction (opens in a new tab).

Inilah yang akan kita gunakan dalam tutorial ini.

6. Apa itu pustaka web3?

Oke, sekarang setelah kita menyelesaikan beberapa pertanyaan ini, mari kita lanjutkan ke tutorial. Jangan ragu untuk mengajukan pertanyaan kapan saja di discord (opens in a new tab) Alchemy!

7. Bagaimana cara mengirim transaksi yang aman, dioptimalkan gasnya, dan privat?

CATATAN: Panduan ini memerlukan akun Alchemy, alamat Ethereum atau dompet MetaMask, NodeJs, dan npm yang terinstal. Jika belum, ikuti langkah-langkah berikut:

  1. Buat akun Alchemy gratis (opens in a new tab)
  2. Buat akun MetaMask (opens in a new tab) (atau dapatkan alamat Ethereum)
  3. Ikuti langkah-langkah ini untuk menginstal NodeJs dan NPM (opens in a new tab)

Langkah-langkah untuk Mengirim Transaksi Anda

1. Buat aplikasi Alchemy di testnet Sepolia

Navigasikan ke Dasbor Alchemy (opens in a new tab) Anda dan buat aplikasi baru, pilih Sepolia (atau testnet lainnya) untuk jaringan Anda.

2. Minta ETH dari faucet Sepolia

Ikuti instruksi di faucet Sepolia Alchemy (opens in a new tab) untuk menerima ETH. Pastikan untuk menyertakan alamat Ethereum Sepolia Anda (dari MetaMask) dan bukan jaringan lain. Setelah mengikuti instruksi, periksa kembali apakah Anda telah menerima ETH di dompet Anda.

3. Buat direktori proyek baru dan cd ke dalamnya

Buat direktori proyek baru dari baris perintah (terminal untuk mac) dan navigasikan ke dalamnya:

1mkdir sendtx-example
2cd sendtx-example

4. Instal Alchemy Web3 (atau pustaka web3 apa pun)

Jalankan perintah berikut di direktori proyek Anda untuk menginstal Alchemy Web3 (opens in a new tab):

Catatan, jika Anda ingin menggunakan pustaka ethers.js, ikuti instruksinya di sini (opens in a new tab).

1npm install @alch/alchemy-web3

5. Instal dotenv

Kita akan menggunakan file .env untuk menyimpan kunci API dan kunci pribadi kita dengan aman.

1npm install dotenv --save

6. Buat file .env

Buat file .env di direktori proyek Anda dan tambahkan yang berikut ini (ganti "your-api-url" dan "your-private-key")

  • Untuk menemukan URL API Alchemy Anda, navigasikan ke halaman detail aplikasi dari aplikasi yang baru saja Anda buat di dasbor Anda, klik "View Key" di sudut kanan atas, dan ambil URL HTTP-nya.
  • Untuk menemukan kunci pribadi Anda menggunakan MetaMask, lihat panduan (opens in a new tab) ini.
1API_URL = "your-api-url"
2PRIVATE_KEY = "your-private-key"

7. Buat file sendTx.js

Bagus, sekarang setelah data sensitif kita dilindungi dalam file .env, mari kita mulai membuat kode. Untuk contoh pengiriman transaksi kita, kita akan mengirimkan ETH kembali ke faucet Sepolia.

Buat file sendTx.js, yang merupakan tempat kita akan mengonfigurasi dan mengirim contoh transaksi kita, dan tambahkan baris kode berikut ke dalamnya:

1async function main() {
2 require('dotenv').config();
3 const { API_URL, PRIVATE_KEY } = process.env;
4 const { createAlchemyWeb3 } = require("@alch/alchemy-web3");
5 const web3 = createAlchemyWeb3(API_URL);
6 const myAddress = '0x610Ae88399fc1687FA7530Aac28eC2539c7d6d63' //TODO: replace this address with your own public address
7
8 const nonce = await web3.eth.getTransactionCount(myAddress, 'latest'); // nonce starts counting from 0
9
10 const transaction = {
11 'to': '0x31B98D14007bDEe637298086988A0bBd31184523', // faucet address to return eth
12 'value': 1000000000000000000, // 1 ETH
13 'gas': 30000,
14 'nonce': nonce,
15 // optional data field to send message or execute smart contract
16 };
17
18 const signedTx = await web3.eth.accounts.signTransaction(transaction, PRIVATE_KEY);
19
20 web3.eth.sendSignedTransaction(signedTx.rawTransaction, function(error, hash) {
21 if (!error) {
22 console.log("🎉 The hash of your transaction is: ", hash, "\n Check Alchemy's Mempool to view the status of your transaction!");
23 } else {
24 console.log("❗Something went wrong while submitting your transaction:", error)
25 }
26 });
27}
28
29main();
Tampilkan semua

Pastikan untuk mengganti alamat pada baris 6 dengan alamat publik Anda sendiri.

Sekarang, sebelum kita melompat ke menjalankan kode ini, mari kita bicarakan tentang beberapa komponen di sini.

  • nonce : Spesifikasi nonce digunakan untuk melacak jumlah transaksi yang dikirim dari alamat Anda. Kita membutuhkan ini untuk tujuan keamanan dan untuk mencegah serangan replay (opens in a new tab). Untuk mendapatkan jumlah transaksi yang dikirim dari alamat Anda, kita menggunakan getTransactionCount (opens in a new tab).
  • transaction: Objek transaksi memiliki beberapa aspek yang perlu kita tentukan
    • to: Ini adalah alamat tujuan pengiriman ETH. Dalam hal ini, kita mengirimkan ETH kembali ke faucet Sepolia (opens in a new tab) tempat kita meminta sebelumnya.
    • value: Ini adalah jumlah yang ingin kita kirim, ditentukan dalam Wei di mana 10^18 Wei = 1 ETH
    • gas: Ada banyak cara untuk menentukan jumlah gas yang tepat untuk disertakan dengan transaksi Anda. Alchemy bahkan memiliki webhook harga gas (opens in a new tab) untuk memberi tahu Anda saat harga gas turun dalam ambang batas tertentu. Untuk transaksi Mainnet, merupakan praktik yang baik untuk memeriksa pengestimasi gas seperti ETH Gas Station (opens in a new tab) untuk menentukan jumlah gas yang tepat untuk disertakan. 21000 adalah jumlah minimum gas yang akan digunakan oleh operasi di Ethereum, jadi untuk memastikan transaksi kita akan dieksekusi, kita menaruh 30000 di sini.
    • nonce: lihat definisi nonce di atas. Nonce mulai menghitung dari nol.
    • [OPSIONAL] data: Digunakan untuk mengirim informasi tambahan dengan transfer Anda, atau memanggil kontrak pintar, tidak diperlukan untuk transfer saldo, lihat catatan di bawah ini.
  • signedTx: Untuk menandatangani objek transaksi kita, kita akan menggunakan metode signTransaction dengan PRIVATE_KEY kita
  • sendSignedTransaction: Setelah kita memiliki transaksi yang ditandatangani, kita dapat mengirimkannya untuk disertakan dalam blok berikutnya dengan menggunakan sendSignedTransaction

Catatan tentang data Ada dua jenis utama transaksi yang dapat dikirim di Ethereum.

  • Transfer saldo: Mengirim ETH dari satu alamat ke alamat lain. Tidak ada bidang data yang diperlukan, namun, jika Anda ingin mengirim informasi tambahan bersama transaksi Anda, Anda dapat menyertakan informasi tersebut dalam format HEX di bidang ini.
    • Misalnya, katakanlah kita ingin menulis hash dari dokumen IPFS ke rantai Ethereum untuk memberikannya stempel waktu yang tetap. Bidang data kita kemudian akan terlihat seperti data: web3.utils.toHex(‘IPFS hash‘). Dan sekarang siapa pun dapat menanyakan rantai dan melihat kapan dokumen itu ditambahkan.
  • Transaksi kontrak pintar: Mengeksekusi beberapa kode kontrak pintar di rantai. Dalam hal ini, bidang data harus berisi fungsi pintar yang ingin Anda eksekusi, bersama dengan parameter apa pun.

8. Jalankan kode menggunakan node sendTx.js

Navigasikan kembali ke terminal atau baris perintah Anda dan jalankan:

1node sendTx.js

9. Lihat transaksi Anda di Mempool

Buka halaman Mempool (opens in a new tab) di dasbor Alchemy Anda dan filter berdasarkan aplikasi yang Anda buat untuk menemukan transaksi Anda. Di sinilah kita dapat melihat transisi transaksi kita dari status tertunda (pending) ke status ditambang (mined) (jika berhasil) atau status dibatalkan (dropped) jika tidak berhasil. Pastikan untuk tetap pada "All" sehingga Anda menangkap transaksi "mined", "pending", dan "dropped". Anda juga dapat mencari transaksi Anda dengan mencari transaksi yang dikirim ke alamat 0x31b98d14007bdee637298086988a0bbd31184523 .

Untuk melihat detail transaksi Anda setelah Anda menemukannya, pilih hash tx, yang akan membawa Anda ke tampilan yang terlihat seperti ini:

Mempool watcher screenshot

Dari sana Anda dapat melihat transaksi Anda di Etherscan dengan mengklik ikon yang dilingkari merah!

Yippieeee! Anda baru saja mengirim transaksi Ethereum pertama Anda menggunakan Alchemy 🎉

Untuk umpan balik dan saran tentang panduan ini, silakan kirim pesan ke Elan di Discord (opens in a new tab) Alchemy!

Awalnya diterbitkan di https://docs.alchemyapi.io/tutorials/sending-transactions-using-web3-and-alchemy (opens in a new tab)

Pembaruan terakhir halaman: 3 Maret 2026

Apakah tutorial ini membantu?