Mengapa "token approval" adalah ide terburuk di DeFi.
ERC-20 berhasil mengatasi token, tetapi gagal pada bagian yang sulit. Ia memstandarisasi saldo dan transfer, tetapi tidak pernah menyediakan cara bersih agar kontrak benar-benar dapat menggunakan token Anda. Transfer biasa ke kontrak bahkan tidak memberi tahu kontrak bahwa ada sesuatu yang datang. Maka mereka menambahkan solusi darurat: approve + transferFrom.
Lihat apa yang dipaksakan solusi darurat ini pada Anda. Untuk membiarkan kontrak menghabiskan token Anda, Anda harus:
- menyetujui sekali untuk jumlah besar atau tak terbatas, dan sekarang kontrak itu bisa mengakses dompet Anda kapan pun ia inginkan, selamanya, hingga Anda ingat untuk mencabutnya. Anda mempercayai kontrak yang mungkin tidak pernah Anda baca.
- ATAU menyetujui jumlah tepat sebelum setiap tindakan, yang berarti transaksi kedua dan biaya gas kedua untuk setiap operasi.
Percayai orang asing, atau bayar pajak setiap langkah. Itulah dua pilihan yang ditawarkan standar ini, dan tidak ada opsi lebih baik. Jadi semua orang memilih pintu satu dan mengklik "tak terbatas," sehingga rantai dipenuhi dompet yang menunjukkan senjata siap tembak ke arah diri mereka sendiri.
Bukan teori. Bot MEV jaredfromsubway baru saja kehilangan jutaan dolar dengan cara ini. Tidak ada yang diretas. Ia memberikan persetujuan untuk mengejar perdagangan palsu, dan seseorang menggunakan transferFrom untuk menarik dana tersebut.
Bagian terburuk: desain yang lebih baik sudah ada sejak awal. Transfer-and-call (ERC-223, ERC-1363) memindahkan jumlah tepat dan memberi tahu penerima dalam satu transaksi. Tidak ada persetujuan tetap, tidak ada transaksi tambahan, tidak ada orang asing yang memegang kunci ke akun Anda. Ia kalah karena ERC-20 memiliki keunggulan awal, dan sekarang persetujuan tak terbatas menjadi tulang punggung seluruh DeFi. Permit, permit2, account abstraction, setiap "perbaikan" hanyalah plester pada primitif yang seharusnya tidak pernah dirilis.
Kita tidak mendapatkan opsi yang aman. Kita mendapatkan opsi yang nyaman, dan sejak itu kita terus membayarnya.