Tại sao “phê duyệt token” lại là ý tưởng tệ nhất trong DeFi.
ERC-20 đã làm đúng phần token nhưng lại làm sai phần khó. Nó chuẩn hóa số dư và các giao dịch chuyển, nhưng không bao giờ cung cấp một cách sạch sẽ để hợp đồng thực sự sử dụng token của bạn. Một giao dịch chuyển đơn thuần đến một hợp đồng thậm chí còn không thông báo cho nó rằng đã có gì đó đến. Vì vậy, họ đã thêm một giải pháp tạm thời: approve + transferFrom.
Hãy xem giải pháp tạm thời này buộc bạn phải làm gì. Để cho phép một hợp đồng chi tiêu token của bạn, bạn hoặc là:
- phê duyệt nó một lần với số lượng lớn hoặc vô hạn, và giờ đây nó có thể truy cập vào ví của bạn bất cứ khi nào nó muốn, mãi mãi, cho đến khi bạn nhớ ra để hủy. Bạn đang tin tưởng một hợp đồng mà có lẽ bạn chưa bao giờ đọc.
- HOẶC phê duyệt đúng số lượng ngay trước mỗi hành động, điều này có nghĩa là một giao dịch thứ hai và một lần phí gas nữa cho mỗi thao tác.
Tin tưởng một người lạ, hoặc trả một loại thuế cho mỗi hành động. Đó là hai lựa chọn duy nhất, và tiêu chuẩn không cung cấp gì tốt hơn. Vì vậy, mọi người đều chọn cửa một và nhấp vào “vô hạn”, khiến chuỗi đầy rẫy các ví đang chĩa súng vào chính mình.
Đây không phải là lý thuyết. Bot MEV jaredfromsubway vừa mất hàng triệu theo cách này. Không có gì bị hack. Nó đã cấp phép để theo đuổi các giao dịch giả, và ai đó đã dùng transferFrom để rút tiền ra.
Phần tệ nhất: một thiết kế tốt hơn đã tồn tại suốt thời gian đó. Transfer-and-call (ERC-223, ERC-1363) chuyển đúng số tiền và thông báo cho người nhận trong một giao dịch duy nhất. Không cần phê duyệt tồn tại, không cần giao dịch phụ, không ai giữ chìa khóa tài khoản của bạn. Nhưng nó đã thua vì ERC-20 có lợi thế đi trước, và giờ đây các phê duyệt vô hạn đang trở thành nền tảng chịu lực cho toàn bộ DeFi. Permit, permit2, account abstraction, mọi “giải pháp” đều chỉ là miếng vá trên một thiết kế nguyên thủy vốn không nên được ra mắt.
Chúng ta không có lựa chọn an toàn. Chúng ta có lựa chọn tiện lợi, và từ đó đến nay chúng ta đã phải trả giá cho nó.