Transaksi kripto dibatalkan ketika operasi yang dimaksud gagal, meskipun sudah disiarkan dan mungkin termasuk dalam sebuah blok. Ini berarti eksekusi dihentikan dan perubahan status yang diusulkan dibatalkan. Penyebabnya sering kali termasuk biaya gas yang tidak cukup, saldo token yang tidak memadai, keterbatasan kontrak pintar, atau parameter transaksi yang salah. Pengirim biasanya tetap menanggung biaya gas untuk percobaan yang gagal tersebut.
Membedah Reversi Transaksi: Sebuah Tinjauan Umum
Dalam dunia blockchain dan mata uang kripto yang dinamis, melakukan transaksi adalah aktivitas fundamental, mulai dari mengirim token hingga berinteraksi dengan aplikasi terdesentralisasi (dApps) yang kompleks. Saat sebuah transaksi dikirimkan, pengguna berharap transaksi tersebut berhasil dieksekusi, memperbarui status (state) blockchain sebagaimana mestinya. Namun, pengalaman umum yang sering kali membuat frustrasi adalah menemui pesan "transaction reverted" (transaksi direversi/dibatalkan). Ini menandakan bahwa meskipun transaksi Anda telah disiarkan ke jaringan, diproses, dan bahkan dimasukkan ke dalam blok, operasi yang dimaksudkan pada akhirnya gagal diselesaikan, dan semua perubahan status yang diusulkan dibatalkan.
Pada intinya, transaksi yang direversi berarti lingkungan eksekusi blockchain menemui kesalahan yang tidak dapat diselesaikan atau kondisi yang mencegah transaksi untuk dilanjutkan dengan sukses. Prinsip dasar yang mengatur transaksi blockchain adalah atomisitas – yaitu operasi "semua atau tidak sama sekali". Jika ada bagian dari eksekusi transaksi yang gagal, seluruh transaksi akan dikembalikan (rolled back), guna memastikan integritas status blockchain. Mekanisme ini mencegah pembaruan parsial atau tidak konsisten, menjaga lingkungan yang andal dan dapat diprediksi bagi semua peserta. Memahami mengapa reversi ini terjadi sangat penting bagi setiap pengguna kripto, karena hal ini tidak hanya menjelaskan mengapa dana mungkin tidak berpindah, tetapi juga mengapa biaya gas tetap terkonsumsi meskipun terjadi kegagalan. Artikel ini membahas berbagai alasan di balik reversi transaksi, membekali Anda dengan strategi pencegahan, dan memandu Anda melalui langkah-langkah penyelesaian masalah.
Faktor Utama: Penyebab Umum Transaksi yang Direversi
Reversi transaksi berasal dari berbagai masalah, masing-masing menunjukkan gangguan spesifik dalam siklus hidup transaksi atau interaksi dengan kontrak pintar (smart contract). Mengidentifikasi penyebab pasti adalah langkah pertama menuju resolusi.
Gas Tidak Mencukupi atau Melampaui Batas Gas (Gas Limit)
Gas adalah biaya operasional yang diperlukan untuk mengeksekusi transaksi atau fungsi kontrak pintar pada jaringan blockchain, mirip dengan bahan bakar untuk mobil. Setiap operasi, dari transfer token sederhana hingga interaksi kontrak pintar yang kompleks, mengonsumsi sejumlah gas tertentu.
- Gas Limit: Ini adalah jumlah gas maksimum yang bersedia Anda belanjakan untuk transaksi tertentu. Batas ini ditetapkan oleh pengirim dan berfungsi sebagai plafon untuk mencegah transaksi mengonsumsi sumber daya secara berlebihan atau berjalan tanpa henti karena adanya bug. Jika pekerjaan komputasi aktual yang diperlukan untuk sebuah transaksi melebihi batas gas yang Anda tentukan, transaksi tersebut akan kehabisan gas di tengah eksekusi dan direversi.
- Gas Price: Ini adalah biaya per unit gas, biasanya dinyatakan dalam mata uang kripto asli jaringan (misalnya, Gwei untuk Ethereum, lamports untuk Solana). Meskipun harga gas memengaruhi total biaya, hal itu tidak secara langsung menyebabkan reversi karena gas yang tidak mencukupi untuk eksekusi, kecuali jika total saldo yang tersedia dari koin native tidak cukup untuk menutupi
(gas limit * gas price).
- Dana Tidak Cukup untuk Gas: Skenario umum di mana pengguna mengirimkan transaksi namun tidak memiliki cukup koin native jaringan (misalnya, Ether di Ethereum, SOL di Solana) untuk menutupi total biaya transaksi (gas limit * gas price). Transaksi sering kali akan langsung gagal atau direversi karena jaringan tidak dapat memotong biaya yang diperlukan.
Mengapa Gas Tetap Terpakai: Bahkan jika transaksi direversi karena kehabisan gas atau kesalahan eksekusi lainnya, gas yang dikonsumsi hingga titik kegagalan tetap harus dibayar. Ini mungkin tampak kontra-intuitif karena transaksi tidak berpengaruh pada status blockchain. Namun, validator (atau penambang) telah mengerahkan sumber daya komputasi untuk memproses dan mencoba mengeksekusi transaksi Anda. Konsumsi ini memberikan kompensasi atas pekerjaan mereka, mencegah aktor jahat mengirimkan transaksi intensif sumber daya yang tak terbatas tanpa konsekuensi. Hal ini juga memastikan insentif ekonomi bagi peserta jaringan untuk mengamankan rantai tetap utuh, terlepas dari keberhasilan atau kegagalan akhir suatu transaksi.
Saldo Token Tidak Mencukupi atau Kekurangan Koin Native
Ini adalah salah satu alasan paling sederhana untuk reversi transaksi, namun secara mengejutkan sering terjadi.
- Saldo Token Pengirim: Saat mencoba mengirim sejumlah token tertentu (misalnya, USDC, DAI, atau NFT), jika dompet Anda tidak memegang jumlah penuh yang ditentukan dalam transaksi, kontrak pintar atau jaringan akan menolak transfer tersebut. Misalnya, jika Anda mencoba mengirim 100 USDC tetapi hanya memiliki 90 USDC, transaksi akan direversi karena kontrak tidak dapat memenuhi operasi yang diminta. Ini termasuk mencoba mentransfer NFT yang tidak lagi Anda miliki atau tidak pernah Anda miliki.
- Koin Native untuk Biaya: Berbeda dari token yang Anda transfer, setiap transaksi di jaringan blockchain memerlukan biaya yang dibayarkan dalam mata uang kripto asli jaringan (misalnya, ETH di Ethereum, BNB di Binance Smart Chain, SOL di Solana). Bahkan jika Anda memiliki lebih dari cukup token yang ingin dikirim (misalnya, 1.000.000 SHIB), tetapi kekurangan koin native (misalnya, 0 ETH) untuk menutupi biaya gas, transaksi Anda akan direversi. Dompet Anda biasanya akan memperingatkan Anda tentang hal ini, tetapi ini adalah kelalaian yang umum, terutama bagi pengguna baru yang mengelola berbagai jenis token. Sangat penting untuk selalu menyimpan sedikit saldo mata uang asli di dompet Anda untuk menutupi biaya transaksi.
Kesalahan Logika dan Keterbatasan Kontrak Pintar
Banyak transaksi kripto melibatkan interaksi dengan kontrak pintar, yaitu program yang mengeksekusi diri sendiri yang disimpan di blockchain. Kontrak-kontrak ini memiliki aturan dan kondisi spesifik yang tertanam dalam kodenya, dan penyimpangan dari aturan ini dapat menyebabkan transaksi direversi.
- Pernyataan
require() dan assert(): Solidity, bahasa yang paling umum untuk kontrak pintar Ethereum, menggunakan fungsi require() dan assert() untuk memaksakan kondisi.
- Pernyataan
require() memeriksa kondisi valid yang harus dipenuhi sebelum eksekusi dilanjutkan (misalnya, "Apakah pengirim diotorisasi?", "Apakah jumlahnya lebih besar dari nol?", "Apakah pengguna memiliki cukup token?"). Jika kondisi require() bernilai salah, transaksi segera direversi, dan sebagian besar gas yang tersisa dikembalikan kepada pengirim. Ini adalah cara paling umum kontrak pintar secara sengaja mereversi transaksi karena faktor eksternal atau kesalahan pengguna.
- Pernyataan
assert() digunakan untuk memeriksa kesalahan internal atau invarian di dalam kode kontrak, biasanya menunjukkan bug pada kontrak itu sendiri (misalnya, "Variabel ini tidak boleh nol pada titik ini"). Jika assert() gagal, transaksi direversi, tetapi seluruh gas dikonsumsi, menandakan kesalahan internal yang lebih parah dan tidak terduga.
- Mencapai Batas Eksekusi: Meski jarang terjadi untuk interaksi pengguna tipikal, operasi kontrak pintar yang kompleks dapat mencapai batas eksekusi blockchain tertentu. Misalnya, beberapa rantai yang kompatibel dengan EVM memiliki batas kedalaman stack, dan panggilan fungsi rekursif mungkin melampaui ini. Transaksi yang sangat intensif secara komputasi juga mungkin melebihi batas gas keseluruhan blok, mencegah penyertaan mereka atau menyebabkannya direversi jika dicoba.
- Kontrol Akses/Izin: Banyak fungsi kontrak pintar dibatasi untuk peran atau alamat tertentu (misalnya, hanya pemilik kontrak yang dapat memperbaruinya, atau hanya peserta dalam daftar putih yang dapat mencetak NFT). Jika alamat Anda tidak memiliki izin yang diperlukan untuk memanggil fungsi tertentu, kontrak akan mereversi transaksi menggunakan pernyataan
require().
- Kontrak yang Dapat Ditangguhkan (Pausable): Beberapa kontrak pintar dirancang dengan fungsi "jeda" (pause), yang memungkinkan pemilik atau badan tata kelola mereka untuk menghentikan sementara operasi tertentu (seperti transfer atau pencetakan) jika terjadi keadaan darurat, kerentanan keamanan, atau pembaruan. Mencoba berinteraksi dengan fungsi yang sedang dijeda akan menghasilkan reversi.
- Timelock dan Kondisi Kedaluwarsa: Kontrak mungkin menerapkan timelock, yang berarti tindakan tertentu hanya dapat dilakukan setelah waktu tertentu berlalu. Sebaliknya, beberapa operasi mungkin memiliki tanggal kedaluwarsa, dan akan direversi jika dicoba setelah batas waktu tersebut. Misalnya, kontrak vesting token mungkin direversi jika Anda mencoba mengklaim token sebelum sepenuhnya vested (terbuka).
Parameter Transaksi dan Data Input yang Salah
Mengirimkan transaksi dengan data yang keliru atau salah format adalah penyebab umum lainnya dari reversi, terutama saat berinteraksi langsung dengan kontrak pintar atau melakukan operasi tingkat lanjut.
- Argumen Fungsi Tidak Valid: Saat memanggil fungsi kontrak pintar, Anda harus memberikan argumen spesifik dalam tipe data dan format yang benar.
- Tipe Data Salah: Misalnya, mengirim string padahal kontrak mengharapkan integer, atau sebaliknya.
- Nilai di Luar Jangkauan: Memberikan nilai yang berada di luar jangkauan yang dapat diterima yang ditentukan oleh kontrak (misalnya, mencoba menetapkan persentase lebih dari 100).
- Memanggil Fungsi yang Tidak Ada: Mencoba berinteraksi dengan fungsi yang tidak ada dalam kode kontrak pintar akan menyebabkan reversi. Antarmuka dompet dan dApp biasanya mencegah hal ini, tetapi interaksi langsung melalui block explorer dapat menyebabkan kesalahan tersebut.
- Token Tidak Ada atau ID Token Tidak Valid: Saat berinteraksi dengan kontrak token (terutama NFT), menentukan alamat token yang tidak sesuai dengan token yang valid atau memberikan ID token NFT yang tidak ada atau tidak dimiliki oleh alamat Anda akan menyebabkan reversi. Misalnya, mencoba melakukan
transferFrom NFT dengan ID 123 yang tidak ada di dompet Anda biasanya akan memicu reversi.
- Toleransi Slippage: Dalam protokol keuangan terdesentralisasi (DeFi), terutama pembuat pasar otomatis (AMM) seperti Uniswap, pengguna sering kali menetapkan "toleransi slippage" saat menukar token. Ini adalah perbedaan persentase maksimum yang bersedia mereka terima antara harga yang dikutip dan harga eksekusi. Jika harga pasar token berubah secara tidak menguntungkan lebih dari toleransi slippage yang ditetapkan antara waktu Anda mengirimkan transaksi dan saat dieksekusi on-chain, transaksi akan direversi. Ini melindungi pengguna dari pergerakan harga yang tidak menguntungkan tetapi bisa menjadi penyebab seringnya kegagalan swap selama kondisi pasar yang volatil atau kemacetan jaringan yang tinggi.
Faktor Eksternal dan Kondisi Jaringan
Meskipun tidak selalu menjadi penyebab langsung, kondisi jaringan eksternal secara tidak langsung dapat berkontribusi pada reversi transaksi dengan mengubah status yang menjadi sandaran transaksi Anda.
- Front-running dan Serangan Sandwich: Dalam jaringan yang padat, aktor canggih (sering kali menggunakan bot) dapat mendeteksi transaksi yang tertunda dan mengirimkan transaksi mereka sendiri dengan biaya gas yang lebih tinggi untuk dieksekusi sebelum atau di sekitar transaksi Anda. Jika transaksi front-running mengubah status blockchain sedemikian rupa sehingga kondisi transaksi Anda berikutnya tidak lagi terpenuhi (misalnya, menguras likuiditas, mengubah harga secara drastis), transaksi Anda mungkin akan direversi (terutama jika batas slippage ketat). "Serangan sandwich" biasanya melibatkan bot yang membeli sebelum transaksi Anda dan menjual segera setelahnya, mengambil untung dari dampak harga transaksi Anda. Jika transaksi Anda gagal karena melebihi slippage, itu sering kali merupakan efek samping dari manipulasi pasar tersebut.
- Kemacetan Jaringan dan Volatilitas Harga: Selama periode kemacetan jaringan yang ekstrem, pemrosesan transaksi dapat tertunda. Penundaan ini memperburuk masalah seperti slippage, karena harga memiliki lebih banyak waktu untuk berfluktuasi sebelum transaksi Anda dikonfirmasi. Jika biaya gas Anda terlalu rendah, transaksi Anda mungkin berada di mempool terlalu lama, dan baru diproses ketika kondisi telah berubah yang menyebabkan reversi.
Dampaknya: Apa yang Terjadi Saat Transaksi Direversi?
Ketika sebuah transaksi direversi, dampaknya terhadap status blockchain secara efektif dibatalkan, tetapi tetap meninggalkan jejak.
- Perubahan Status Dibatalkan: Konsekuensi paling krusial dari transaksi yang direversi adalah semua perubahan status yang diusulkan sepenuhnya dibatalkan. Seolah-olah transaksi tersebut tidak pernah terjadi dalam hal transfer aset, modifikasi status kontrak, atau pembaruan data. Misalnya, jika Anda mencoba mengirim 10 token dan transaksi direversi, 10 token tersebut tetap berada di dompet Anda. Jika Anda mencoba memperbarui variabel kontrak pintar, variabel tersebut tetap mempertahankan nilai aslinya. Prinsip atomis "semua atau tidak sama sekali" ini memastikan integritas blockchain.
- Konsumsi Biaya Gas: Seperti yang ditekankan sebelumnya, meskipun transaksi gagal mencapai hasil yang diinginkan, gas yang dikonsumsi hingga titik reversi tetap dibayar dan tidak dapat dikembalikan. Validator telah mengerahkan sumber daya komputasi untuk memproses dan mencoba mengeksekusi transaksi, dan mereka dikompensasi untuk pekerjaan tersebut. Struktur biaya ini merupakan desain ekonomi fundamental dari sebagian besar blockchain proof-of-work dan proof-of-stake.
- Status Transaksi: Transaksi yang direversi tidak dibuang begitu saja. Transaksi tersebut tetap dimasukkan dalam blok di blockchain tetapi secara eksplisit ditandai sebagai "failed" (gagal), "reverted" (direversi), atau "error". Penjelajah blok (block explorer) akan dengan jelas menunjukkan status ini, membedakannya dari transaksi yang berhasil. Catatan ini berfungsi sebagai log upaya yang tidak dapat diubah, meskipun tidak berhasil.
- Dampak pada Dompet: Dompet mata uang kripto (seperti Backpack Wallet) dirancang untuk menginterpretasikan sinyal blockchain ini. Saat transaksi direversi, dompet Anda biasanya akan menampilkan pesan "Failed" atau "Reverted" yang jelas, sering kali dengan tautan ke block explorer untuk melihat detail lebih lanjut tentang kesalahan tersebut. Meski membuat frustrasi, umpan balik segera ini membantu pengguna memahami apa yang terjadi.
Mencegah Reversi: Praktik Terbaik bagi Pengguna
Langkah-langkah proaktif dapat secara signifikan mengurangi kemungkinan menghadapi transaksi yang direversi, menghemat waktu, rasa frustrasi, dan biaya gas yang tidak perlu.
- 1. Verifikasi Pengaturan Gas dengan Teliti:
- Pahami Estimasi Gas: Dompet atau dApp Anda biasanya memberikan estimasi biaya gas. Perhatikan estimasi ini. Jika tampak sangat tinggi untuk transaksi sederhana, selidiki alasannya.
- Pertimbangkan Kemacetan Jaringan: Selama penggunaan jaringan puncak, harga gas dan kemacetan bisa tinggi. Mengirimkan transaksi dengan gas yang tidak mencukupi selama waktu-waktu ini meningkatkan risiko reversi. Dompet sering menawarkan opsi harga gas "cepat", "rata-rata", dan "lambat"; pilihlah dengan bijak berdasarkan urgensi dan kondisi jaringan.
- Tetapkan Batas Gas yang Wajar: Meskipun dompet biasanya menetapkan batas gas secara otomatis untuk transaksi standar, berhati-hatilah jika Anda menyesuaikannya secara manual. Menetapkannya terlalu rendah menjamin terjadinya reversi. Menetapkannya terlalu tinggi tidak selalu memakan biaya lebih banyak (karena hanya gas yang dikonsumsi yang dibayar), tetapi batas yang sangat tinggi mungkin membuat dompet Anda memperingatkan Anda atau memicu kecurigaan.
- 2. Periksa Saldo secara Menyeluruh (Token dan Koin Native):
- Selalu periksa kembali apakah Anda memiliki cukup token spesifik yang ingin dikirim dan saldo mata uang kripto asli jaringan (misalnya, ETH, SOL) yang cukup untuk menutupi biaya transaksi. Ini adalah kelalaian umum, terutama saat berurusan dengan berbagai standar token.
- Simpan sedikit cadangan koin native di dompet Anda setiap saat untuk biaya transaksi.
- 3. Berhati-hatilah dalam Interaksi Kontrak Pintar:
- Baca Detail Transaksi: Sebelum mengonfirmasi transaksi di dompet Anda, tinjau dengan cermat semua detail yang disajikan. Fungsi apa yang dipanggil? Berapa jumlah yang dikirim? Izin apa yang diberikan?
- Pahami Slippage: Saat menggunakan protokol DeFi, pahami konsep toleransi slippage. Menetapkannya terlalu rendah membuat transaksi rentan terhadap reversi selama volatilitas harga. Menetapkannya terlalu tinggi membuat Anda terpapar pada potensi front-running atau eksekusi harga yang tidak menguntungkan. Sesuaikan berdasarkan kondisi pasar.
- Hanya Berinteraksi dengan Kontrak yang Teruji: Prioritaskan interaksi dengan kontrak pintar dari proyek yang bereputasi baik, telah diaudit, dan mapan. Kontrak yang belum teruji atau berbahaya dapat menyebabkan perilaku tak terduga, termasuk reversi yang tidak beralasan atau bahkan kehilangan dana.
- 4. Periksa Kembali Semua Parameter Transaksi:
- Alamat Penerima: Selalu verifikasi alamat penerima karakter demi karakter, atau gunakan fungsi salin-tempel yang tepercaya. Alamat yang salah dapat menyebabkan hilangnya dana, meskipun tidak selalu berupa reversi jika itu adalah alamat valid yang bukan milik penerima yang dituju.
- Jumlah: Konfirmasikan jumlah token yang Anda kirim.
- Input Spesifik: Untuk interaksi dApp yang kompleks, pastikan semua input yang diminta (misalnya, ID NFT, pilihan voting) sudah benar.
- 5. Tetap Terinformasi tentang Status Jaringan dan Proyek:
- Pantau status jaringan blockchain untuk peringatan kemacetan atau masalah yang diketahui.
- Ikuti saluran media sosial atau pengumuman dari proyek yang Anda ajak berinteraksi. Kontrak mungkin sedang dijeda, diperbarui, atau memiliki batasan sementara.
- 6. Mulai dari Kecil (Menguji Interaksi Kompleks):
- Jika Anda melakukan interaksi kontrak pintar yang kompleks atau baru, terutama dengan dana besar, pertimbangkan untuk menguji prosesnya dengan jumlah minimal terlebih dahulu, jika memungkinkan. "Uji coba" ini dapat membantu mengidentifikasi masalah sebelum memberikan jumlah yang lebih besar.
Penyelesaian Masalah (Troubleshooting) Transaksi yang Direversi
Saat transaksi direversi, jangan panik. Dana yang ingin Anda kirim tetap berada di dompet Anda (minus biaya gas). Berikut adalah pendekatan sistematis untuk memahami dan mengatasi masalah tersebut:
- 1. Konsultasikan Pesan Kesalahan Dompet Anda:
- Banyak dompet memberikan penjelasan dasar untuk transaksi yang direversi langsung di antarmuka mereka (misalnya, "Insufficient funds," "Gas limit exceeded"). Ini adalah petunjuk pertama Anda.
- 2. Gunakan Penjelajah Blok (Block Explorer):
- Ini adalah alat paling ampuh untuk penyelesaian masalah.
- Temukan Hash Transaksi Anda: Cari hash transaksi (TxID) di dompet Anda.
- Cari Hash Tersebut: Tempelkan hash ke penjelajah blok bereputasi baik untuk rantai spesifik Anda (misalnya, Etherscan untuk Ethereum, Solscan untuk Solana, BscScan untuk Binance Smart Chain).
- Periksa Statusnya: Lihat status transaksi. Biasanya akan tertulis "Failed," "Reverted," atau memiliki ikon kesalahan.
- Periksa Detail Gas: Bandingkan "Gas Used" dengan "Gas Limit." Jika "Gas Used" sama dengan "Gas Limit," kemungkinan besar transaksi tersebut kehabisan gas.
- Cari "Revert Reason" / "Error Message": Banyak block explorer, terutama Etherscan dan turunannya, mencoba mendecode alasan reversi yang diberikan oleh kontrak pintar (misalnya, "ERC20: transfer amount exceeds balance," "Ownable: caller is not the owner"). Pesan ini sering kali merupakan
string persis yang dimasukkan ke dalam pernyataan require() atau revert() di dalam kontrak, memberikan penjelasan langsung.
- 3. Tinjau Input dan Parameter Anda:
- Berdasarkan pesan kesalahan dari explorer, evaluasi kembali apa yang Anda coba lakukan. Apakah Anda:
- Memasukkan jumlah yang benar?
- Memilih token yang benar?
- Memberikan alamat penerima yang tepat?
- Menetapkan toleransi slippage yang sesuai di DeFi?
- Memanggil fungsi yang benar di dApp?
- 4. Periksa Status Kontrak Pintar (jika berlaku):
- Jika alasan reversi merujuk pada logika spesifik kontrak (misalnya, "Contract paused," "Timelock not met"), kunjungi situs web resmi proyek, media sosial, atau dokumentasi. Apakah kontrak telah dijeda untuk pemeliharaan atau peningkatan? Apakah ada kondisi khusus untuk tindakan yang Anda coba lakukan?
- 5. Pertimbangkan Kondisi Jaringan:
- Apakah jaringan sangat padat saat Anda mengirim transaksi? Volatilitas tinggi dalam harga gas atau harga aset secara tidak langsung dapat menyebabkan reversi jika parameter transaksi Anda (seperti slippage) menjadi usang.
- 6. Cari Dukungan Komunitas:
- Jika Anda masih tidak dapat menentukan penyebabnya, hubungi komunitas proyek terkait (misalnya, Discord, Telegram, Reddit) dengan hash transaksi Anda. Banyak komunitas yang sangat membantu dalam men-debug masalah umum. Waspadalah terhadap penipu yang berpura-pura sebagai staf pendukung.
Sudut Pandang Pengembang: Merancang Kontrak Pintar yang Tangguh
Dari sudut pandang pengembang, secara sengaja menyebabkan transaksi direversi adalah aspek kritis dari desain kontrak pintar yang aman dan dapat diprediksi. Pengembang menggunakan konstruksi Solidity spesifik seperti require(), revert(), dan assert() untuk memaksakan kondisi dan menangani kesalahan dengan anggun.
require(condition, "Error Message"): Ini adalah alat utama untuk memvalidasi input dan memeriksa prakondisi. Jika condition salah, transaksi direversi, dan string "Error Message" dikembalikan, yang sering kali dapat didecode oleh block explorer. Hal ini memungkinkan pengembang memberikan alasan kegagalan yang jelas dan ramah pengguna (misalnya, "Not enough tokens," "Invalid recipient").
revert("Error Message"): Mirip dengan require(), revert() memungkinkan pengembang untuk secara eksplisit memicu pembatalan transaksi dengan pesan kesalahan khusus pada titik mana pun dalam logika kontrak. Ini berguna untuk skenario penanganan kesalahan yang lebih kompleks di mana require() sederhana mungkin tidak cukup.
assert(condition): Seperti disebutkan sebelumnya, assert() digunakan untuk pemeriksaan konsistensi internal. Kegagalannya menandakan bug serius dalam logika kontrak, yang menyebabkan seluruh gas dikonsumsi.
Dengan merancang kontrak mereka secara teliti menggunakan mekanisme reversi ini, pengembang bertujuan untuk mencegah perubahan status yang tidak diinginkan, menjaga invarian kontrak, dan memberikan umpan balik yang jelas kepada pengguna ketika suatu operasi tidak dapat diselesaikan dengan sukses. Penanganan kesalahan yang terstruktur ini merupakan dasar bagi keamanan dan keandalan aplikasi terdesentralisasi.