Page cover

👨‍🏫Approval token (phê duyệt token) là gì?

Mô tả phương thức Approve (phê duyệt) tiêu chuẩn

Phê duyệt token (token approvals) được sử dụng để cấp cho hợp đồng thông minh quyền chi tiêu token của bạn thay cho bạn. Đây là cơ chế phổ biến được các sàn DEX, giao thức cho vay và các ứng dụng DApp khác sử dụng. Ví dụ, nếu bạn muốn giao dịch token của mình trên sàn phi tập trung (DEX), bạn sẽ phải cấp cho sàn quyền đổi các token đó thay cho bạn.

Phê duyệt token cũng được sử dụng với NFT. Ví dụ, nếu bạn muốn bán NFT của mình trên thị trường, bạn sẽ phải cấp cho thị trường quyền chuyển NFT thay cho bạn. Hoặc nếu bạn muốn dùng NFT làm tài sản thế chấp để vay (loan), bạn phải cấp cho giao thức cho vay (lending protocol) quyền chuyển NFT thay cho bạn.

Phê duyệt token (Token Approvals) hoạt động như thế nào?

Trong hầu hết các hợp đồng thông minh của [token có thể thay thế] (/learn/basics/what-are-tokens) và [NFT] (/learn/basics/what-are-nfts) có một cấu trúc mapping, dùng để theo dõi tất cả các quyền mà người dùng đã cấp, cũng như cấp cho ai và với giới hạn bao nhiêu. Mỗi lần bạn cấp hoặc rút một trong các quyền này, mapping được cập nhật.

Khi một hợp đồng cố chi tiêu token của bạn thay cho bạn, hợp đồng token sẽ kiểm tra mapping, để biết liệu bên chi tiêu có được phép chi tiêu token hay không. Nếu có, token sẽ được chi tiêu. Nếu không, giao dịch sẽ bị từ chối.

Phê duyệt cho token có thể thay thế (fungible)

Trong token có thể thay thế (fungible), các hợp đồng thông minh có hàm approve(), cho phép cấp quyền cho một địa chỉ khác chi tiêu token của bạn thay cho bạn. Hàm này nhận hai tham số: địa chỉ người chi tiêu và số lượng token. Việc hủy quyền được thực hiện bằng cách gọi lại hàm approve() với cùng các tham số, nhưng với số lượng bằng 0.

Ví dụ, nếu bạn muốn cấp cho sàn phi tập trung (DEX) quyền chi tiêu 1000 USDC thay cho bạn, bạn sẽ phải gọi approve() như sau:

Phê duyệt USDC

Phê duyệt NFT (Approvals)

Đối với NFT có hai loại phê duyệt khác nhau: có giới hạn và không giới hạn. Quyền hạn chế (Limited approvals) được dùng để cấp cho hợp đồng thông minh quyền chuyển một NFT cụ thể (với id xác định). Quyền không giới hạn (Unlimited approvals) được dùng để cấp cho hợp đồng thông minh quyền chuyển bất kỳ NFT nào của bạn. Quyền hạn chế chỉ có thể được cấp cho một địa chỉ tại một thời điểm, vì vậy hầu hết các thị trường NFT sử dụng quyền không giới hạn.

Phê duyệt NFT có giới hạn (Limited Approvals)

Đối với phê duyệt NFT có giới hạn, các hợp đồng chứa hàm approve(), cho phép cấp quyền cho một địa chỉ khác chuyển một NFT cụ thể thay cho bạn. Hàm này nhận hai tham số: địa chỉ người gửi và id của NFT cần chuyển. Việc thu hồi phê duyệt được thực hiện bằng cách gọi lại hàm approve() với cùng các tham số, nhưng chỉ định địa chỉ người gửi 0x000.... Loại phê duyệt này cũng tự động bị hủy khi NFT được chuyển.

Ví dụ, nếu bạn muốn cấp cho OpenSea quyền chuyển Pudgy Penguin của bạn có ID 4420 thay cho bạn, bạn sẽ phải gọi approve() như sau:

Phê duyệt Pudgy Penguins 4420

Phê duyệt NFT không giới hạn (Unlimited Approvals)

Đối với phê duyệt không giới hạn, các hợp đồng NFT có hàm setApprovalForAll(), cho phép cấp quyền cho một địa chỉ khác chuyển bất kỳ NFT nào trong ví của bạn thay cho bạn. Hàm này nhận hai tham số: địa chỉ người gửi và giá trị true/false. Việc phê duyệt được thực hiện bằng cách gọi hàm setApprovalForAll() với tham số true, và việc thu hồi - với tham số false.

Ví dụ, nếu bạn muốn cấp cho OpenSea quyền chuyển bất kỳ NFT nào của bạn thay cho bạn, bạn sẽ phải gọi setApprovalForAll() như sau:

Phê duyệt tất cả Pudgy Penguins

Phê duyệt cho token bán phần (Semi-Fungible)

Token bán phần (Semi-Fungible) là loại NFT đặc biệt có thể dùng để đại diện cho nhiều bản sao của cùng một tài sản. Như bạn có thể hiểu, những token này có nhiều điểm tương đồng với NFT, nên hệ thống phê duyệt của chúng cũng rất giống. Sự khác biệt lớn nhất là token semi-fungible có hàm setApprovalForAll(), nhưng không có hàm approve().

Rủi ro khi phê duyệt token (Token Approvals)

Phê duyệt token là phần then chốt của hệ sinh thái hợp đồng thông minh. Không có chúng, nhiều ứng dụng DeFi sẽ không thể hoạt động. Nhưng cũng có rủi ro liên quan đến phê duyệt token. Nếu bạn cấp cho hợp đồng thông minh quyền chi tiêu token của mình, nó có thể chi tiêu chúng bất cứ lúc nào. Vì vậy nếu hợp đồng thông minh bị hack hoặc bị tấn công, token của bạn có thể bị đánh cắp.

Khai thác lỗ hổng hợp đồng thông minh (exploits)

Một trong những rủi ro khi phê duyệt token là hợp đồng thông minh mà bạn cấp quyền có thể bị hack. Ngay cả những dự án khá phổ biến cũng có thể trở thành nạn nhân của hack, như chúng ta đã thấy trong trường hợp lỗ hổng SushiSwaparrow-up-right vào tháng 4 năm 2023. Trong những trường hợp như vậy, hacker có thể đánh cắp token từ ví của bạn nếu bạn đã cấp bất kỳ quyền nào cho hợp đồng thông minh bị hack.

Để cảnh báo những tình huống như vậy, chúng tôi đã tạo trình duyệt exploitarrow-up-right, chứa danh sách các exploit hợp đồng thông minh đã biết. Bạn có thể sử dụng công cụ này để kiểm tra xem bạn có các phê duyệt đang hoạt động trong các hợp đồng thông minh bị hack hay không.

Lừa đảo và tấn công phishing

Bên cạnh việc hack các dự án thật, trong tiền mã hóa còn có nhiều hoạt động lừa đảo và tấn công phishing. Kẻ gian thường lợi dụng phê duyệt để đánh cắp tiền của bạn. Những chiêu thức phishing phổ biến sử dụng phê duyệt bao gồm:

  1. Phê duyệt trực tiếp cho kẻ lừa đảo: Kẻ lừa đảo lừa bạn phê duyệt một hợp đồng thông minh mà họ kiểm soát, cho phép họ lấy tiền trực tiếp từ ví của bạn.

  2. Đặt danh sách bán trên thị trường NFT: Kẻ lừa đảo lừa bạn phê duyệt một chữ ký trong đó tài sản của bạn bị niêm yết để bán trên thị trường NFT với giá 0 ETH, cho phép họ “mua” NFT của bạn với giá 0 ETH.

Last updated