Transaksi
Pembaruan terakhir halaman: 23 Februari 2026
Transaksi adalah instruksi yang ditandatangani secara kriptografi dari akun. Sebuah akun akan memulai transaksi untuk memperbarui status jaringan Ethereum. Transaksi yang paling sederhana adalah mentransfer ETH dari satu akun ke akun lainnya.
Prasyarat
Untuk membantu Anda memahami halaman ini dengan lebih baik, kami sarankan Anda membaca Akun dan pengantar Ethereum kami terlebih dahulu.
Apa itu transaksi?
Transaksi Ethereum merujuk pada tindakan yang dimulai oleh akun yang dimiliki secara eksternal, dengan kata lain akun yang dikelola oleh manusia, bukan kontrak. Misalnya, jika Bob mengirimkan 1 ETH kepada Alice, akun Bob harus didebit dan akun Alice harus dikredit. Tindakan yang mengubah status ini terjadi di dalam sebuah transaksi.
Diagram diadaptasi dari Ethereum EVM illustrated (opens in a new tab)
Transaksi, yang mengubah status EVM, perlu disiarkan ke seluruh jaringan. Setiap node dapat menyiarkan permintaan agar transaksi dieksekusi di EVM; setelah ini terjadi, seorang validator akan mengeksekusi transaksi tersebut dan menyebarkan perubahan status yang dihasilkan ke seluruh jaringan.
Transaksi memerlukan biaya dan harus disertakan dalam blok yang divalidasi. Untuk membuat gambaran umum ini lebih sederhana, kami akan membahas biaya gas dan validasi di tempat lain.
Transaksi yang dikirimkan mencakup informasi berikut:
from– alamat pengirim, yang akan menandatangani transaksi. Ini akan menjadi akun yang dimiliki secara eksternal karena akun kontrak tidak dapat mengirim transaksito– alamat penerima (jika merupakan akun yang dimiliki secara eksternal, transaksi akan mentransfer nilai. Jika merupakan akun kontrak, transaksi akan mengeksekusi kode kontrak)signature– pengidentifikasi pengirim. Ini dihasilkan ketika kunci pribadi pengirim menandatangani transaksi dan mengonfirmasi bahwa pengirim telah mengotorisasi transaksi ininonce- penghitung yang meningkat secara berurutan yang menunjukkan nomor transaksi dari akun tersebutvalue– jumlah ETH yang akan ditransfer dari pengirim ke penerima (dalam denominasi WEI, di mana 1 ETH sama dengan 1e+18 wei)input data– bidang opsional untuk menyertakan data arbitrergasLimit– jumlah maksimum unit gas yang dapat dikonsumsi oleh transaksi. EVM menentukan unit gas yang diperlukan oleh setiap langkah komputasimaxPriorityFeePerGas- harga maksimum dari gas yang dikonsumsi untuk disertakan sebagai tip kepada validatormaxFeePerGas- biaya maksimum per unit gas yang bersedia dibayarkan untuk transaksi (termasukbaseFeePerGasdanmaxPriorityFeePerGas)
Gas adalah referensi ke komputasi yang diperlukan untuk memproses transaksi oleh validator. Pengguna harus membayar biaya untuk komputasi ini. gasLimit, dan maxPriorityFeePerGas menentukan biaya transaksi maksimum yang dibayarkan kepada validator. Lebih lanjut tentang Gas.
Objek transaksi akan terlihat sedikit seperti ini:
1{2 from: "0xEA674fdDe714fd979de3EdF0F56AA9716B898ec8",3 to: "0xac03bb73b6a9e108530aff4df5077c2b3d481e5a",4 gasLimit: "21000",5 maxFeePerGas: "300",6 maxPriorityFeePerGas: "10",7 nonce: "0",8 value: "10000000000"9}Tampilkan semuaNamun, objek transaksi perlu ditandatangani menggunakan kunci pribadi pengirim. Ini membuktikan bahwa transaksi hanya bisa berasal dari pengirim dan tidak dikirim secara curang.
Klien Ethereum seperti Geth akan menangani proses penandatanganan ini.
Contoh panggilan JSON-RPC:
1{2 "id": 2,3 "jsonrpc": "2.0",4 "method": "account_signTransaction",5 "params": [6 {7 "from": "0x1923f626bb8dc025849e00f99c25fe2b2f7fb0db",8 "gas": "0x55555",9 "maxFeePerGas": "0x1234",10 "maxPriorityFeePerGas": "0x1234",11 "input": "0xabcd",12 "nonce": "0x0",13 "to": "0x07a565b7ed7d7a678680a4c162885bedbb695fe0",14 "value": "0x1234"15 }16 ]17}Tampilkan semuaContoh respons:
1{2 "jsonrpc": "2.0",3 "id": 2,4 "result": {5 "raw": "0xf88380018203339407a565b7ed7d7a678680a4c162885bedbb695fe080a44401a6e4000000000000000000000000000000000000000000000000000000000000001226a0223a7c9bcf5531c99be5ea7082183816eb20cfe0bbc322e97cc5c7f71ab8b20ea02aadee6b34b45bb15bc42d9c09de4a6754e7000908da72d48cc7704971491663",6 "tx": {7 "nonce": "0x0",8 "maxFeePerGas": "0x1234",9 "maxPriorityFeePerGas": "0x1234",10 "gas": "0x55555",11 "to": "0x07a565b7ed7d7a678680a4c162885bedbb695fe0",12 "value": "0x1234",13 "input": "0xabcd",14 "v": "0x26",15 "r": "0x223a7c9bcf5531c99be5ea7082183816eb20cfe0bbc322e97cc5c7f71ab8b20e",16 "s": "0x2aadee6b34b45bb15bc42d9c09de4a6754e7000908da72d48cc7704971491663",17 "hash": "0xeba2df809e7a612a0a0d444ccfa5c839624bdc00dd29e3340d46df3870f8a30e"18 }19 }20}Tampilkan semuarawadalah transaksi yang ditandatangani dalam bentuk yang disandikan Recursive Length Prefix (RLP)txadalah transaksi yang ditandatangani dalam bentuk JSON
Dengan hash tanda tangan, transaksi dapat dibuktikan secara kriptografi bahwa itu berasal dari pengirim dan dikirimkan ke jaringan.
Bidang data
Sebagian besar transaksi mengakses kontrak dari akun yang dimiliki secara eksternal. Sebagian besar kontrak ditulis dalam Solidity dan menafsirkan bidang datanya sesuai dengan .
Empat byte pertama menentukan fungsi mana yang akan dipanggil, menggunakan hash dari nama fungsi dan argumennya. Terkadang Anda dapat mengidentifikasi fungsi dari pemilih menggunakan basis data ini (opens in a new tab).
Sisa dari calldata adalah argumen, disandikan seperti yang ditentukan dalam spesifikasi ABI (opens in a new tab).
Sebagai contoh, mari kita lihat transaksi ini (opens in a new tab). Gunakan Click to see More untuk melihat calldata.
Pemilih fungsi adalah 0xa9059cbb. Ada beberapa fungsi yang diketahui dengan tanda tangan ini (opens in a new tab).
Dalam hal ini kode sumber kontrak (opens in a new tab) telah diunggah ke Etherscan, jadi kita tahu fungsinya adalah transfer(address,uint256).
Sisa datanya adalah:
10000000000000000000000004f6742badb049791cd9a37ea913f2bac38d012792000000000000000000000000000000000000000000000000000000003b0559f4Menurut spesifikasi ABI, nilai bilangan bulat (seperti alamat, yang merupakan bilangan bulat 20-byte) muncul di ABI sebagai kata 32-byte, diisi dengan nol di bagian depan.
Jadi kita tahu bahwa alamat to adalah 4f6742badb049791cd9a37ea913f2bac38d01279 (opens in a new tab).
value adalah 0x3b0559f4 = 990206452.
Jenis-jenis transaksi
Di Ethereum ada beberapa jenis transaksi yang berbeda:
- Transaksi reguler: transaksi dari satu akun ke akun lainnya.
- Transaksi penerapan kontrak: transaksi tanpa alamat 'to', di mana bidang data digunakan untuk kode kontrak.
- Eksekusi kontrak: transaksi yang berinteraksi dengan kontrak pintar yang diterapkan. Dalam hal ini, alamat 'to' adalah alamat kontrak pintar.
Tentang gas
Seperti yang disebutkan, transaksi membutuhkan gas untuk dieksekusi. Transaksi transfer sederhana membutuhkan 21000 unit Gas.
Jadi agar Bob dapat mengirimkan 1 ETH kepada Alice dengan baseFeePerGas sebesar 190 gwei dan maxPriorityFeePerGas sebesar 10 gwei, Bob harus membayar biaya berikut:
1(190 + 10) * 21000 = 4,200,000 gwei2--or--30.0042 ETHAkun Bob akan didebit -1.0042 ETH (1 ETH untuk Alice + 0.0042 ETH dalam biaya gas)
Akun Alice akan dikreditkan +1.0 ETH
Biaya dasar akan dibakar -0.00399 ETH
Validator menyimpan tip +0.000210 ETH
Diagram diadaptasi dari Ethereum EVM illustrated (opens in a new tab)
Setiap gas yang tidak digunakan dalam transaksi akan dikembalikan ke akun pengguna.
Interaksi kontrak pintar
Gas diperlukan untuk setiap transaksi yang melibatkan kontrak pintar.
Kontrak pintar juga dapat berisi fungsi yang dikenal sebagai fungsi view (opens in a new tab) atau pure (opens in a new tab), yang tidak mengubah status kontrak. Oleh karena itu, memanggil fungsi-fungsi ini dari EOA tidak akan memerlukan gas apa pun. Panggilan RPC yang mendasari untuk skenario ini adalah eth_call.
Tidak seperti saat diakses menggunakan eth_call, fungsi view atau pure ini juga umumnya dipanggil secara internal (yaitu, dari kontrak itu sendiri atau dari kontrak lain) yang membutuhkan biaya gas.
Siklus hidup transaksi
Setelah transaksi dikirimkan, hal berikut akan terjadi:
- Hash transaksi dihasilkan secara kriptografi:
0x97d99bc7729211111a21b12c933c949d4f31684f1d6954ff477d0477538ff017 - Transaksi kemudian disiarkan ke jaringan dan ditambahkan ke kumpulan transaksi yang terdiri dari semua transaksi jaringan lain yang tertunda.
- Seorang validator harus memilih transaksi Anda dan menyertakannya dalam sebuah blok untuk memverifikasi transaksi dan menganggapnya "berhasil".
- Seiring berjalannya waktu, blok yang berisi transaksi Anda akan ditingkatkan menjadi "dibenarkan" lalu "difinalisasi". Peningkatan ini membuatnya jauh lebih pasti bahwa transaksi Anda berhasil dan tidak akan pernah diubah. Setelah sebuah blok "difinalisasi", blok tersebut hanya dapat diubah oleh serangan tingkat jaringan yang akan menelan biaya miliaran dolar.
Demo visual
Tonton Austin memandu Anda melalui transaksi, gas, dan penambangan.
Amplop Transaksi Bertipe
Ethereum pada awalnya memiliki satu format untuk transaksi. Setiap transaksi berisi nonce, harga gas, batas gas, alamat tujuan (to), nilai (value), data, v, r, dan s. Bidang-bidang ini disandikan RLP, sehingga terlihat seperti ini:
RLP([nonce, gasPrice, gasLimit, to, value, data, v, r, s])
Ethereum telah berevolusi untuk mendukung berbagai jenis transaksi guna memungkinkan fitur-fitur baru seperti daftar akses dan EIP-1559 (opens in a new tab) diimplementasikan tanpa memengaruhi format transaksi lama.
EIP-2718 (opens in a new tab) adalah apa yang memungkinkan perilaku ini. Transaksi ditafsirkan sebagai:
TransactionType || TransactionPayload
Di mana bidang-bidang tersebut didefinisikan sebagai:
TransactionType- angka antara 0 dan 0x7f, dengan total 128 kemungkinan jenis transaksi.TransactionPayload- array byte arbitrer yang ditentukan oleh jenis transaksi.
Berdasarkan nilai TransactionType, sebuah transaksi dapat diklasifikasikan sebagai:
-
Transaksi Tipe 0 (Lama): Format transaksi asli yang digunakan sejak peluncuran Ethereum. Transaksi ini tidak menyertakan fitur dari EIP-1559 (opens in a new tab) seperti perhitungan biaya gas dinamis atau daftar akses untuk kontrak pintar. Transaksi lama tidak memiliki awalan spesifik yang menunjukkan jenisnya dalam bentuk serialnya, dimulai dengan byte
0xf8saat menggunakan penyandian Recursive Length Prefix (RLP). Nilai TransactionType untuk transaksi ini adalah0x0. -
Transaksi Tipe 1: Diperkenalkan dalam EIP-2930 (opens in a new tab) sebagai bagian dari Pembaruan Berlin Ethereum, transaksi ini menyertakan parameter
accessList. Daftar ini menentukan alamat dan kunci penyimpanan yang diharapkan akan diakses oleh transaksi, membantu berpotensi mengurangi biaya gas untuk transaksi kompleks yang melibatkan kontrak pintar. Perubahan pasar biaya EIP-1559 tidak disertakan dalam transaksi Tipe 1. Transaksi Tipe 1 juga menyertakan parameteryParity, yang dapat berupa0x0atau0x1, yang menunjukkan paritas nilai-y dari tanda tangan secp256k1. Transaksi ini diidentifikasi dengan awalan byte0x01, dan nilai TransactionType-nya adalah0x1. -
Transaksi Tipe 2, umumnya disebut sebagai transaksi EIP-1559, adalah transaksi yang diperkenalkan dalam EIP-1559 (opens in a new tab), pada Pembaruan London Ethereum. Transaksi ini telah menjadi jenis transaksi standar di jaringan Ethereum. Transaksi ini memperkenalkan mekanisme pasar biaya baru yang meningkatkan prediktabilitas dengan memisahkan biaya transaksi menjadi biaya dasar dan biaya prioritas. Transaksi ini dimulai dengan byte
0x02dan menyertakan bidang sepertimaxPriorityFeePerGasdanmaxFeePerGas. Transaksi Tipe 2 sekarang menjadi default karena fleksibilitas dan efisiensinya, terutama disukai selama periode kemacetan jaringan yang tinggi karena kemampuannya untuk membantu pengguna mengelola biaya transaksi dengan lebih dapat diprediksi. Nilai TransactionType untuk transaksi ini adalah0x2. -
Transaksi Tipe 3 (Blob) diperkenalkan dalam EIP-4844 (opens in a new tab) sebagai bagian dari Pembaruan Dencun Ethereum. Transaksi ini dirancang untuk menangani data "blob" (Binary Large Objects) dengan lebih efisien, khususnya menguntungkan rollup Layer 2 dengan menyediakan cara untuk memposting data ke jaringan Ethereum dengan biaya yang lebih rendah. Transaksi blob menyertakan bidang tambahan seperti
blobVersionedHashes,maxFeePerBlobGas, danblobGasPrice. Transaksi ini dimulai dengan byte0x03, dan nilai TransactionType-nya adalah0x3. Transaksi blob mewakili peningkatan yang signifikan dalam ketersediaan data dan kemampuan peningkatan Ethereum. -
Transaksi Tipe 4 diperkenalkan dalam EIP-7702 (opens in a new tab) sebagai bagian dari Pembaruan Pectra Ethereum. Transaksi ini dirancang agar kompatibel ke depan dengan abstraksi akun. Transaksi ini memungkinkan EOA untuk sementara berperilaku seperti akun kontrak pintar tanpa mengorbankan fungsionalitas aslinya. Transaksi ini menyertakan parameter
authorization_list, yang menentukan kontrak pintar tempat EOA mendelegasikan otoritasnya. Setelah transaksi, bidang kode EOA akan memiliki alamat kontrak pintar yang didelegasikan.
Bacaan lebih lanjut
Tahu tentang sumber daya komunitas yang membantu Anda? Edit halaman ini dan tambahkan!