Transaksi
Terakhir diedit: @Eddii_Kece(opens in a new tab), 16 Juli 2024
Transaksi adalah instruksi yang ditandatangani secara kriptografis dari akun. Akun akan menginisiasi transaksi untuk memperbarui state jaringan Ethereum. Bentuk transaksi paling sederhana adalah mentransfer ETH dari satu akun ke akun yang lain.
Prasyarat
Untukmembantu Anda memahami halaman ini dengan lebih baik, kami menyarankan Anda membaca terlebih dahulu Akun dan pengantar Ethereum kami.
Apa itu transaksi?
Transaksi Ethereum mengacu pada aksi yang dimulai oleh akun dengan kepemilikan eksternal, dengan kata lain, akun yang dikelola oleh manusia, bukan kontrak. Sebagai contoh, jika Bob mengirimkan 1 ETH ke Alice, akun Bob harus didebit dan akun Alice harus dikredit. Aksi yang mengubah state ini terjadi dalam sebuah transaksi.
Diagram diadaptasi dari Ethereum EVM yang diilustrasikan(opens in a new tab)
Transaksi, yang mengubah state dari EVM, perlu disiarkan ke seluruh jaringan. Node apa saja bisa menyiarkan permintaan agar sebuah transaksi dieksekusi pada EVM; setelah ini terjadi, penambang akan mengeksekusi transaksi dan menyebarkan perubahan state yang menjadi hasilnya ke seluruh jaringan.
Transaksi membutuhkan biaya dan harus ditambang untuk menjadi valid. Untuk membuat gambaran umum ini lebih sederhana, kami akan membahas biaya gas dan penambangan di tempat lain.
Sebuah transaksi yang dikirim meliputi informasi berikut:
recipient
– alamat yang menerima (jika akun dengan kepemilikan eksternal, transaksi akan mentransfer nilai. Jika akun kontrak, transaksi akan mengeksekusi kode kontrak)signature
– tanda pengenal dari sang pengirim. Ini dihasilkan ketika kunci privat pengirim menandatangani transaksi dan mengonfirmasi bahwa pengirim telah mengizinkan transaksi inivalue
– jumlah ETH yang ditransfer dari pengirim ke peneriman (dalam WEI, denominasi dari ETH)data
– field tambahan untuk memasukkan data arbitrarigasLimit
– jumlah maksimum unit gas yang bisa dipakai dalam transaksi. Unit gas menunjukkan langkah komputasionalmaxPriorityFeePerGas
- jumlah gas maksimum yang akan dimasukkan sebagai tips bagi penambangmaxFeePerGas
- jumlah gas maksimum yang ingin dibayarkan untuk transaksi (termasukbaseFeePerGas
danmaxPriorityFeePerGas
)
Gas adalah referensi komputasi yang diperlukan untuk memroses transaksi oleh penambang. Pengguna harus membayar biaya untuk komputasi ini. gasLimit
, dan maxPriorityFeePerGas
menentukan biaya transaksi maksimum yang dibayarkan kepada penambang. Selengkapnya tentang Gas.
Objek transaksi kurang lebih akan tampak 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 semuaSalin
Tapi satu objek transaksi harus ditandatangani menggunakan kunci privat pengirim. Ini membuktikan bahwa transaksi hanya bisa berasal dari pengirim dan bukan dikirim secara curang.
Klien Ethereum seperti Geth akan menangani proses penandatanganan ini.
Contoh pemanggilan JSON-RPC(opens in a new tab):
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 semuaSalin
Contoh tanggapan:
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 semuaSalin
mentah
adalah transaksi yang ditandatangani dalam bentuk Prefiks Panjang Rekursif (RLP) yang dikodekantx
adalah transaksi yang ditandatangani dalam bentuk JSON
Dengan hash tanda tangan, transaksi bisa dibuktikan secara kriptografi berasal dari pengirim dan dikirim ke jaringan.
The data field
The vast majority of transactions access a contract from an externally-owned account. Most contracts are written in Solidity and interpret their data field in accordance with the .
The first four bytes specify which function to call, using the hash of the function's name and arguments. You can sometimes identify the function from the selector using this database(opens in a new tab).
The rest of the calldata is the arguments, encoded as specified in the ABI specs(opens in a new tab).
For example, lets look at this transaction(opens in a new tab). Use Click to see More to see the calldata.
The function selector is 0xa9059cbb
. There are several known functions with this signature(opens in a new tab). In this case the contract source code(opens in a new tab) has been uploaded to Etherscan, so we know the function is transfer(address,uint256)
.
The rest of the data is:
10000000000000000000000004f6742badb049791cd9a37ea913f2bac38d012792000000000000000000000000000000000000000000000000000000003b0559f4
According to the ABI specifications, integer values (such as addresses, which are 20-byte integers) appear in the ABI as 32-byte words, padded with zeros in the front. So we know that the to
address is 4f6742badb049791cd9a37ea913f2bac38d01279
(opens in a new tab). The value
is 0x3b0559f4 = 990206452.
Jenis transaksi
Di Ethereum ada beberapa jenis transaksi yang berbeda:
- Transaksi reguler: transaksi dari satu dompet ke dompet lainnya.
- Transaksi penerapan kontrak: transaksi tanpa alamat 'kepada', di mana bidang data digunakan untuk kode kontrak.
- Execution of a contract: a transaction that interacts with a deployed smart contract. In this case, 'to' address is the smart contract address.
Tentang gas
Seperti yang disebutkan, transaksi memerlukan gas untuk dijalankan. Transaksi transfer sederhana membutuhkan 21.000 unit Gas.
Jadi agar Bob dapat mengirimkan kepada Alice 1 ETH 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 ETH
Akun Bob akan didebit -1,0042 ETH
Akun Alice akan dikredit +1,0 ETH
Biaya pokoknya akan terbakar -0,00399 ETH
Penambang menerima tips +0,000210 ETH
Gas juga dibutuhkan untuk interaksi kontrak pintar mana pun.
Diagram diadaptasi dari Ethereum EVM yang diilustrasikan(opens in a new tab)
Gas yang tidak digunakan dalam transaksi dikembalikan dananya ke akun pengguna.
Siklus hidup transaksi
Setelah transaksi dikirimkan, proses berikut terjadi:
- Setelah Anda mengirim transaksi, kriptografi menghasilkan hash transaksi:
0x97d99bc7729211111a21b12c933c949d4f31684f1d6954ff477d0477538ff017
- Transaksi kemudian disiarkan ke jaringan dan dimasukkan ke dalam satu pool berisi banyak transaksi lainnya.
- Penambang harus memilih transaksi Anda dan memasukkannya ke dalam blok untuk memverifikasi transaksi dan menganggapnya "berhasil".
- Anda mungkin akan menunggu di fase ini jika jaringan sibuk dan penambang tidak dapat menyamakan kecepatan pemrosesan dengan permintaan.
- Transaksi Anda akan menerima "konfirmasi". Jumlah konfirmasi adalah jumlah blok yang dibuat sejak blok yang dimasukkan ke dalam transaksi Anda. Semakin tinggi angkanya, semakin besar kepastian transaksinya diproses dan dikenali oleh jaringan.
- Blok baru mungkin diatur ulang, yang memberi kesan bahwa transaksi tidak berhasil; namun, transaksi masih mungkin valid tapi dimasukkan dalam blok yang berbeda.
- Kemungkinan pengaturan ulang berkurang seiring ditambangnya blok berikutnya, yaitu semakin besar jumlah konfirmasinya, semakin tidak dapat diubah transaksinya.
Demo visual
Tonton Austin memandu Anda dalam transaksi, gas, dan penambangan.
Transaksi Bertipe Amplop
Ethereum pada awalnya memiliki satu format transaksi. Setiap transaksi berisi nonce, harga gas, batas gas, alamat kepada, nilai, data, v, r, dan s. Bidang ini dikodekan RLP, agar terlihat seperti ini:
RLP([nonce, gasPrice, gasLimit, to, value, data, v, r, s])
Ethereum telah berkembang untuk mendukung beberapa jenis transaksi agar memungkinkan fitur baru seperti daftar akses dan EIP-1559(opens in a new tab) diimplementasikan tanpa memengaruhi format transaksi warisan.
EIP-2718: Transaksi Berjenis Amplop(opens in a new tab) mendefiniskan jenis transaksi berupa amplop untuk jenis transaksi di masa mendatang.
EIP-2718 adalah amplop umum baru untuk transaksi bertipe. Dalam standar baru, transaksi diartikan sebagai:
TransactionType || TransactionPayload
Di mana bidang ini didefinisikan sebagai:
TransactionType
- angka antara 0 dan 0x7f, untuk total 128 jenis transaksi yang dimungkinkan.TransactionPayload
- array bita arbitrari yang ditentukan oleh jenis transaksi.
Bacaan lebih lanjut
Tahu tentang sumber daya komunitas yang membantu Anda? Edit halaman ini dan tambahkan!