Lompat ke konten

Batas waktu, slippage, dan calldata swap: hal yang perlu diperiksa sebelum menandatangani

Pelajari cara mendekode panggilan swap DEX dan memeriksa router, fungsi, batas jumlah, rute, penerima, serta tenggat sebelum menandatangani.

Diperbarui

Hanya untuk tujuan edukasi; bukan merupakan nasihat atau rekomendasi investasi. Investasi dapat mengakibatkan kerugian.

Jawaban singkat

Sebelum menandatangani swap DEX, periksa jaringan, kontrak tujuan, fungsi yang telah didekode, alamat token, batas input atau output, rute, penerima, dan tenggat apa pun. Persentase “slippage” yang ditampilkan antarmuka bukan instruksi on-chain. Angka tersebut biasanya digunakan untuk menghitung batas seperti amountOutMin atau amountOutMinimum pada swap exact-input, atau amountInMax maupun amountInMaximum pada exact-output.

Tenggat adalah pengaman waktu, bukan jaminan harga. Jika router memeriksa tenggat dan transaksi dijalankan setelahnya, panggilan seharusnya mengalami revert. Sebelum tenggat, transaksi tetap dapat berjalan pada harga apa pun yang diizinkan batas jumlah. Tenggat yang panjang membuat otorisasi dapat digunakan lebih lama; tenggat yang terlalu singkat meningkatkan kemungkinan kedaluwarsa sebelum masuk blok.

Calldata tidak menjelaskan dirinya sendiri. Dekode dengan ABI terverifikasi untuk kontrak yang tepat di jaringan terpilih, termasuk multicall atau perintah Universal Router yang bertingkat. Jika dompet tidak dapat menampilkan bidang hasil dekode yang tepercaya, jangan menyimpulkan maknanya hanya dari posisi byte atau basis data nama fungsi.

Cara kerja

Dekode panggilan yang sebenarnya

Menurut ABI Solidity, 4 bytes pertama calldata adalah pemilih fungsi dan argumen terenkode dimulai dari byte kelima. Pemilih dapat bertabrakan atau diberi label yang salah, jadi cocokkan dengan ABI kontrak tujuan terverifikasi. Proxy, agregator, atau router dapat membungkus swap di dalam multicall, execute, atau fungsi lain; dekode setiap muatan bertingkat yang dapat memindahkan token atau mengubah penerima akhir.

Pada swap exact-input, input bersifat tetap dan bidang perlindungan menetapkan output minimum yang dapat diterima. Pada exact-output, output yang diinginkan bersifat tetap dan bidang perlindungan membatasi input. Batas nol atau terlalu longgar dapat menghilangkan perlindungan harga yang berarti. Desimal token penting: petakan setiap alamat token ke jumlah desimal dan simbol yang benar sebelum membandingkan bilangan bulat mentah.

Periksa rute, penerima, dan value

Pastikan rute dimulai dengan token yang dibelanjakan dan berakhir dengan token yang diharapkan. Tinjau token perantara, biaya pool, serta perintah yang membungkus, membuka bungkus, menyapu, atau mentransfer saldo. Penerima harus merupakan dompet yang dimaksud atau kontrak yang perilakunya dipahami. Periksa juga value native transaksi; nilainya dapat terpisah dari jumlah ERC-20 yang terenkode dalam calldata.

Temukan tenggat

Letak tenggat bergantung pada versi router. Fungsi router bergaya Uniswap V2 menyertakan argumen deadline, demikian pula struktur ISwapRouter Uniswap V3 yang asli. Universal Router menyediakan execute(commands, inputs, deadline) dan overload tanpa tenggat. Karena itu, jangan menganggap setiap swap memiliki tenggat atau selalu menempatkannya dalam parameter swap bertingkat yang sama.

Tenggat biasanya dibandingkan dengan timestamp blok yang digunakan saat eksekusi. Tenggat tidak membatalkan transaksi tertunda, menjamin inklusi cepat, atau melindungi dari harga buruk yang masih berada dalam batas jumlah. Untuk membatalkan, pengirim harus memakai mekanisme penggantian transaksi milik jaringan dan dompet; penggantian tidak dijamin setelah transaksi asli masuk blok.

Contoh lengkap

Sebuah kuotasi memperkirakan 10,000 USDC dari swap exact-input dan pengguna memilih slippage 1%. Dengan mengabaikan biaya yang sudah termasuk dalam kuotasi, output minimum yang diharapkan adalah 9,900 USDC. Karena USDC menggunakan 6 decimals, bilangan bulat mentah untuk batas itu adalah 9900000000.

Namun, panggilan hasil dekode berisi amountOutMinimum = 9000000000, atau 9,000 USDC. Ini mengizinkan hasil hingga 10% lebih sedikit dari kuotasi, bukan 1%. Penerimanya juga alamat yang tidak dikenal dan tenggatnya masih berjam-jam. Salah satu ketidaksesuaian tersebut sudah cukup untuk menolak permintaan dan membuatnya ulang melalui antarmuka tepercaya. Setelah itu, simulasikan transaksi belum bertanda tangan yang persis sama terhadap state terkini dan periksa kembali muatan hasil dekode sebelum menandatangani.

Daftar pemeriksaan dan risiko

  • Cocokkan jaringan terpilih serta alamat router atau proxy dengan catatan deployment resmi protokol.
  • Dekode memakai ABI kontrak terverifikasi; uraikan panggilan bertingkat dan perintah router, bukan hanya meninjau fungsi terluar.
  • Cocokkan alamat token, arah, desimal, jumlah tetap, batas perlindungan, rute, tingkat biaya, penerima, dan value native.
  • Ubah tenggat menjadi waktu absolut dan putuskan apakah sisa waktunya disengaja. Perlakukan ketiadaan tenggat sebagai pilihan desain yang perlu ditinjau terpisah.
  • Simulasikan transaksi yang persis sama dari alamat penanda tangan terhadap state terkini. Simulasi berhasil hanya menjadi bukti untuk state tersebut, bukan jaminan inklusi atau eksekusi akhir.
  • Tinjau persetujuan atau izin Permit2 secara terpisah. Batas swap yang baik tidak membuat otorisasi token tak terbatas atau berbahaya menjadi aman.
  • Batas ketat dapat mengalami revert saat harga bergerak normal; batas longgar meningkatkan risiko harga eksekusi dan serangan sandwich. Transaksi on-chain yang mengalami revert tetap dapat menghabiskan gas.

Kesalahpahaman umum

Mitos: persentase slippage yang ditampilkan ikut ditandatangani

Biasanya muatan yang ditandatangani berisi batas jumlah yang dihitung dari pengaturan tersebut. Periksa bilangan bulat sebenarnya dan desimal token; label antarmuka yang tampak benar tidak membuktikan calldata menggunakan toleransi yang sama.

Mitos: setiap swap memakai amountOutMin dan deadline

Nama serta letaknya berbeda menurut router dan fungsi. Swap exact-output melindungi sisi input, dan beberapa titik masuk menghilangkan tenggat atau menempatkannya pada panggilan luar.

Mitos: tenggat mencegah harga buruk

Tenggat hanya membatasi waktu eksekusi jika kode yang dipanggil menerapkannya. Perlindungan harga berasal dari batas jumlah, yang tetap mengizinkan setiap eksekusi di dalam batas itu.

Mitos: mendekode fungsi terluar sudah cukup

Agregator dan router universal dapat memuat beberapa panggilan, izin token, transfer, dan perintah pembersihan. Penerima atau jumlah yang penting bagi keamanan mungkin berada dalam muatan bertingkat.

Topik terkait

Sumber

Navigasi

Cari di wiki...