Membedah anatomi transaksi Ethereum dari from/to/value/nonce hingga gas, proses signing ECDSA dan perjalanan transaksi di mempool, model fee EIP-1559, perbedaan mainnet dan testnet, serta cara memanfaatkan faucet

Setelah di episode 3 kita memahami wallet sebagai identitas, pada episode ini kita membedah transaksi — satu-satunya cara mengubah state di blockchain. Setiap kali user menekan tombol di DApp kalian, yang terjadi di belakang layar adalah pembuatan, penandatanganan, dan penyiaran transaksi.
Mengapa episode ini penting? Karena 90% "bug" yang terlihat seperti aplikasi rusak sebenarnya adalah masalah transaksi: nonce duplikat, gas terlalu rendah, fee spike, atau salah network. Developer Web3 yang memahami transaksi bisa membedakan "kontrak saya bermasalah" dari "transaksinya belum dikonfirmasi".
Transaksi EVM modern (type 2, EIP-1559) memiliki field sebagai berikut:
{
"from": "0x5aAeb6053F3E94C9b9A09f33669435E7Ef1BeAed",
"to": "0x4B20993Bc481177ec7E8f571ceCaE8A9e22C02db",
"value": "1000000000000000000",
"nonce": 7,
"gas": 21000,
"maxFeePerGas": "50000000000",
"maxPriorityFeePerGas": "1500000000",
"chainId": 1,
"data": "0x"
}| Field | Fungsi |
|---|---|
from | Pengirim — dijamin oleh signature |
to | Penerima (EOA atau kontrak) |
value | Jumlah token native (wei) yang dikirim |
nonce | Penghitung transaksi per akun — mencegah double-spend dan menjamin urutan |
gas | Gas limit: maksimum kerja yang diizinkan |
maxFeePerGas | Harga maksimum per gas yang rela dibayar |
chainId | Mencegah replay lintas chain |
data | Payload call ke kontrak (jika to adalah kontrak) |
Perhatikan value: 1000000000000000000 — itu 1 ETH dalam satuan terkecil wei (1 ETH = 10^18 wei). Konversi satuan adalah sumber bug klasik; viem menyediakan parseEther dan formatEther untuk menanganinya.
Transaksi harus ditandatangani sebelum disiarkan — hanya pemilik private key yang bisa menandatanganinya. Ethereum memakai ECDSA (Elliptic Curve Digital Signature Algorithm) pada kurva secp256k1.
Yang perlu kalian pahami bukan matematikanya, melainkan konsekuensi praktisnya:
Setelah disiarkan, transaksi masuk ke mempool — kolam transaksi yang belum terkonfirmasi. Penambang/pembangun blok memilih transaksi dengan prioritas fee tertinggi:
Konsekuensi praktis: transaksi dengan fee terlalu rendah bisa mengantre sangat lama, atau terjatuh dari mempool. Kalian melihat status ini di Etherscan lewat status "Pending". Hashing transaksi yang sama dengan fee lebih tinggi (mengganti transaksi pending) adalah trik umum untuk mempercepat.
Gas adalah unit kerja komputasi: setiap opcode punya harga gas, dan user membayar total gas * harga. Sejak EIP-1559 (London, 2021), fee terdiri dari dua komponen:
| Komponen | Sifat | Fungsi |
|---|---|---|
| Base fee | Ditentukan protokol, naik/turun per blok | Menyesuaikan permintaan jaringan |
| Priority fee (tip) | Ditentukan user | Insentif agar builder memilih transaksi kalian |
maxFeePerGas adalah batas maksimum total; maxPriorityFeePerGas adalah tip maksimum. Estimasi yang disarankan wallet biasanya sudah memperhitungkan keduanya.
Tip
Pola umum di DApp: biarkan wallet (MetaMask) menangani estimasi gas default, tetapi untuk transaksi besar atau saat network sedang ramai, tampilkan estimasi gas kepada user sebelum konfirmasi. Kita implementasikan ini di episode 11.
| Aspek | Mainnet | Testnet |
|---|---|---|
| Sifat | Uang asli, permanen | Token gratis, bisa dibuang |
| Contoh | Ethereum, Base, Arbitrum, Solana | Sepolia, Holesky, Base Sepolia |
| Tujuan | Produksi | Development & testing |
| Risiko | Kehilangan aset nyata | Tidak ada (hanya token fiktif) |
| Faucet | Tidak ada | Ada — token testnet gratis |
Untuk series ini kita memakai Sepolia (testnet EVM resmi Ethereum) dan Base Sepolia. Holesky adalah testnet staking/konsensus; pilih sesuai kebutuhan.
Untuk membayar gas di testnet, kalian butuh token testnet dari faucet:
cast balance 0x5aAeb6053F3E94C9b9A09f33669435E7Ef1BeAed --rpc-url $RPC_URLFaucet populer: faucets.chain.link, Alchemy Faucet, dan faucet resmi Sepolia. Beberapa faucet meminta ETH mainnet di address kalian (sebagai syarat anti-abuse). Setelah saldo testnet tersedia, kalian bisa menjalankan semua praktik series tanpa risiko finansial.
Inti yang harus dibawa pulang:
from/to/value/nonce/gas + signature + chainId; data untuk call kontrak.maxFeePerGas adalah batas maksimum.Di episode 5 selanjutnya, kita membahas DApp architecture overview — lapisan frontend, contract, dan infra dalam satu aplikasi nyata, plus alur kerja connect wallet → read → write → event listener yang menjadi siklus hidup setiap DApp. Sampai jumpa di episode 5!