
Simulasi transaksi: apa yang akan dilakukan sebuah transaksi sebelum Anda menandatanganinya
Alamatnya benar. Nominalnya benar. Anda memeriksa keduanya. Dan transaksi itu tetap bukan yang Anda kira.
Ini bukan pengandaian. Ini bentuk lazim dari sebagian besar kerugian kripto yang melibatkan orang yang teliti. Tak seorang pun membujuknya mengirim uang ke orang asing. Ia menyetujui sesuatu yang seluruh bagian terlihatnya benar dan konsekuensinya berada sepenuhnya di tempat lain — dalam sebuah izin belanja token, dalam sebuah panggilan kontrak, dalam satu karakter dari alamat yang sudah ia lihat seratus kali.
Simulasi adalah upaya menutup jurang itu: memperlihatkan dampak sebuah transaksi alih-alih isinya, sebelum tanda tangan Anda menjadikannya nyata.
Jurang antara yang Anda maksud dan yang Anda tanda tangani
Sebuah transaksi bukan kalimat. Ia adalah byte.
Ketika byte itu berupa transfer biasa, jurang antara apa yang dikatakannya dan apa yang dilakukannya sempit: sebuah alamat, sebuah nominal, sebuah biaya. Ketika ia berupa panggilan kontrak, jurangnya bisa sangat lebar. approve tampak seperti sebuah izin. Ia adalah hak permanen bagi alamat lain untuk memindahkan token Anda, dan menurut standar ERC-20 tak ada bagian dari panggilan itu yang mewajibkan pembatasan jumlah maupun jangka waktu. Satu persetujuan, ditandatangani sekali, bisa dikuras berbulan-bulan kemudian.
Antarmuka yang Anda lihat saat menandatangani harus menerjemahkan byte itu menjadi kalimat. Terjemahan itulah permukaan serangan. Kalau ia dihasilkan oleh pihak yang menginginkan tanda tangan Anda, ia bisa berkata apa saja.
Sebuah gladi, bukan sebuah janji
Simulasi berarti menjalankan transaksi terhadap keadaan rantai saat ini tanpa menyiarkannya, lalu mencatat apa yang berubah.
Di SSP Enterprise itu terjadi ketika sebuah proposal dibuat, sebelum siapa pun menandatangani. Simulasi dibangun dari apa yang dihasilkan pembangun proposal — penerima, nominal, kontrak token, dan data panggilan yang dirakit SSP sendiri — tak pernah dari hex bertanda tangan mentah yang disodorkan sebuah klien. Ia berjalan hanya-baca. Tiga mesin melayani keluarga rantai yang berbeda:
- Rantai EVM menjalankan panggilan hanya-baca ke sebuah node dan membaca kembali perubahan saldo yang timbul serta panggilan yang telah didekode.
- Rantai UTXO sama sekali tak perlu node. Masukan dan keluaran sudah diketahui, jadi sebelum-dan-sesudah adalah aritmetika atas koin yang terpilih, dan penerima digolongkan sebagai kembalian yang balik ke Anda atau benar-benar pihak luar.
- Solana mendeserialisasi transaksi tak bertanda tangan yang dihasilkan pembangun lalu menjalankan
simulateTransactionmilik jaringan itu sendiri, dengan verifikasi tanda tangan dimatikan, kemudian membaca saldo token vault sebelum dan sesudah dari hasilnya.
Yang kembali adalah pratinjau: berapa saldo tiap aset sebelumnya, berapa nanti sesudahnya, dan — di EVM — panggilan itu sebenarnya apa, terdekode menjadi sebuah metode beserta argumennya.
Dua hal yang bukan dirinya. Ia bukan jaminan: keadaan rantai bergerak, dan simulasi yang dijalankan saat proposal dibuat adalah potret rantai sebagaimana ia saat itu. Dan ia bukan gerbang. Itulah separuh rancangan yang lebih menarik, dan kita akan kembali ke sana.
Empat belas hal yang layak diberitahukan
Pratinjau yang cuma menampilkan angka tetap meminta Anda sendiri yang menemukan masalahnya. Maka pratinjau itu ditemani peringatan, dan ada empat belas peringatan, dalam empat tingkat keparahan.
Persetujuan — kategori yang paling banyak menguras dompet. Izin tak terbatas atau tanpa batas atas bersifat kritis. Setiap persetujuan belanja bukan-nol kepada alamat yang tak ada di daftar izin Anda bersifat tinggi. Dan menyetujui akun milik perorangan alih-alih sebuah kontrak juga tinggi, sebab praktis tak ada alasan sah untuk melakukannya: kontraklah yang membelanjakan izin, bukan manusia.
Penerima — penerima yang tak ada di kontak organisasi Anda maupun daftar putih vault akan ditandai. Begitu pula penerima yang belum pernah dikirimi vault Anda. Keduanya, sendirian, tidaklah salah. Keduanya layak dibaca sekali lagi.
Risiko kontrak — kontrak tujuan yang sumbernya belum diverifikasi, yang baru di-deploy dalam tujuh hari terakhir, nilai native yang dikirim ke sebuah kontrak sama sekali, dan alamat mana pun yang ditandai penyedia sebagai jelas berbahaya.
Eksekusi — transaksi yang gagal-balik di simulasi, artinya ia akan gagal di rantai dan membuang biaya. Atau arus keluar tersimulasi yang tak cocok dengan nominal yang dinyatakan proposal: vault kehilangan lebih banyak, atau lebih sedikit, daripada yang tertulis di layar.
Degradasi — dan, dengan label yang gamblang, keadaan ketika simulasi tak bisa berjalan. Node yang tak terjangkau menghasilkan "tidak tersedia", bukan kebisuan dan bukan surat sehat karangan.
Pembedaan antar tingkat keparahan itu lebih berarti daripada jumlahnya. Kritis dan tinggi berbicara tentang transaksi yang kemungkinan besar bukan seperti tampaknya. Sedang dan info berbicara tentang transaksi yang tak biasa, dan transaksi yang sah sesekali memang tak biasa.
Peracunan alamat: serangan yang mengalahkan orang teliti
Satu peringatan pantas mendapat bagiannya sendiri, sebab ia membidik persis kebiasaan yang dianjurkan hampir semua nasihat keamanan.
Peracunan alamat bekerja begini. Penyerang mengirim ke vault Anda sebuah transaksi mungil atau bernilai nol dari alamat yang direkayasa agar berbagi enam karakter pertama dan empat karakter terakhir dengan alamat yang memang sudah Anda pakai berurusan. Tak ada yang dicuri. Bahkan sebetulnya tak ada yang dikerjakan. Transaksi itu ada supaya alamat kembarannya muncul di riwayat Anda.
Belakangan — beberapa hari kemudian, saat Anda membayar mitra yang sama lagi — Anda menyalin alamat dari riwayat transaksi Anda sendiri, sebagaimana orang teliti melakukannya alih-alih mengetik ulang. Anda memeriksanya seperti orang teliti memeriksa: beberapa karakter pertama, beberapa karakter terakhir. Keduanya cocok. Bagian tengahnya tidak, dan bagian tengah itulah tujuan uangnya.
SSP mencocokkan setiap penerima dalam proposal dengan alamat yang sudah dikenal vault Anda, memakai persis perbandingan awalan-dan-akhiran yang dilakukan mata manusia, lalu memunculkan peringatan kritis yang menyebut alamat yang sedang ditiru. Pemeriksaan yang sama berjalan ke arah sebaliknya pada riwayat masuk, sehingga alamat teracun ditandai ketika ia tiba, bukan cuma ketika Anda hendak memakainya.
Alasan mengetahui serangan ini sekalipun Anda tak pernah memakai SSP: kebiasaan verifikasi yang menghentikan semua serangan alamat lainnya justru kebiasaan yang hendak dikalahkan serangan ini. Bandingkan alamat secara utuh, atau jangan bandingkan sama sekali.
Mengapa peringatan dihitung di server — dan tetap tak memblokir apa pun
Himpunan peringatan diputuskan di sisi server, dengan kontak organisasi Anda dan daftar putih vault sebagai sumber kebenaran. Ini disengaja: kalau klien boleh memutuskan apa yang terhitung diizinkan, klien yang dibobol bisa diam-diam memutuskan bahwa semuanya diizinkan.
Namun tak satu pun darinya bisa menghentikan sebuah transaksi. Simulasi tak pernah mensyaratkan penandatanganan atau penyiaran. Penyedia yang galat, kehabisan waktu, atau tak menjangkau node akan mengembalikan "tidak tersedia", dan proposal tetap sepenuhnya bisa ditandatangani. Seluruh subsistem diisolasi dari kegagalan supaya kerusakan pada pratinjau tak pernah bisa mengandaskan sebuah proposal.
Itu akan terdengar sebagai pilihan aneh, jadi penalarannya perlu dinyatakan terang-terangan. Pratinjau yang bisa memblokir adalah pratinjau yang bisa dibuat memblokir — dengan menumbangkan sebuah node, dengan menghasilkan kritis palsu, lewat salah satu dari seribu cara perangkat lunak jadi salah. Dana yang tak bisa bergerak karena sebuah layanan penasihat sedang sakit adalah dana yang sebagiannya sudah hilang bagi Anda. Ambang di multisig-lah yang melindungi uangnya; simulasi ada untuk memberi tahu manusia yang memegang kuncinya. Apa yang sebenarnya menghentikan transaksi adalah versi panjang argumen itu.
Ketika server dan perangkat Anda berselisih
Semua di atas adalah pembacaan server. Perangkat Anda punya pembacaannya sendiri.

Ketika SSP Wallet menampilkan sebuah proposal untuk ditandatangani, ia mendekode byte-nya sendiri dan menampilkan apa yang ia temukan — bukan ringkasan server. Lalu ia membandingkan keduanya. Kalau panggilan terdekode dari server menyiratkan himpunan penerima yang berbeda dari yang diturunkan perangkat, perangkat memunculkan peringatan kritis ketaksesuaiannya sendiri dan menurunkan peringkat pratinjau server secara visual.
Dekode perangkat itulah yang berwenang. Pemeriksaannya sengaja dibuat konservatif: simulasi server yang hilang atau masih tertunda adalah degradasi, bukan pertentangan, dan tak ditandai sebagai pertentangan. Ia juga hanya berlaku untuk rantai EVM, tempat server memang menghasilkan panggilan terdekode; di rantai UTXO tak ada yang bisa dibandingkan, dan dekode perangkat sendiri berdiri sendirian.
Inilah sifat yang layak dibawa pulang, apa pun dompet yang Anda pakai. Pendapat kedua hanya berharga kalau ia datang dari tempat yang tak mungkin dibobol oleh perbuatan yang sama dengan yang membobol yang pertama. Dua ringkasan dari server yang sama adalah satu ringkasan.
Membaca bilah risiko tanpa belajar mengabaikannya
Peringatan berguna sampai ia berubah jadi wallpaper. Beberapa kebiasaan menjaganya tetap bermanfaat.
Baca tingkat keparahan dulu, rinciannya kemudian. Kritis dan tinggi layak membuat Anda berhenti. Peringatan sedang atau info pada pembayaran pertama ke pemasok baru adalah sistem yang bekerja benar, bukan alasan untuk cemas.
Perlakukan peringatan persetujuan apa pun sebagai berhenti total. Transfer memindahkan apa yang dikatakannya. Persetujuan memberikan hak yang hidup lebih lama daripada transaksinya. Kalau Anda tak berniat memberi izin permanen, jawabannya tidak.
Percayai perangkat ketimbang layar. Kalau keduanya berselisih, ponsel di tangan Anda adalah yang berjalan di atas perangkat keras yang harus dibobol penyerang secara terpisah.
Jangan baca "tidak tersedia" sebagai "aman-aman saja". Artinya tak ada yang memeriksa. Itu alasan bagi Anda untuk melihat lebih teliti sendiri, terutama pada pembayaran besar atau tak biasa.
Semua di sini tentang saat sebelum sebuah tanda tangan. Untuk yang terjadi sesudahnya — siapa yang boleh menandatangani, berapa yang dibutuhkan, dan operasi mana yang menuntut kedua perangkat lagi — mulailah dari menyiapkan vault perusahaan pertama Anda dan tindakan kritis serta penandatanganan ulang. Dan untuk pola serangan yang menjadi cetakan peringatan-peringatan ini, serangan phishing yang menargetkan pengguna kripto membahas separuh manusiawi dari masalahnya.


