Quyền phê duyệt token: Cách kiểm tra và thu hồi
Tìm hiểu ERC-20 approve cho phép hợp đồng làm gì, hạn mức không giới hạn và chữ ký permit hoạt động ra sao, cũng như việc thu hồi thay đổi hoặc không thay đổi điều gì.
Trong hướng dẫn nàyKết nối ví và cấp quyền cho token là hai quyền khác nhau
Tóm tắt ngắn
Lệnh ERC-20 approve thường không gửi token ngay lập tức. Nó ghi trên chuỗi hạn mức mà một spender cụ thể có thể yêu cầu sau này thông qua transferFrom. Ngắt kết nối ví khỏi trang web không nhất thiết xóa hạn mức trên chuỗi; đặt hạn mức về 0 cũng không thể đảo ngược giao dịch đã hoàn tất.
Kết nối ví và cấp quyền cho token là hai quyền khác nhau
Kết nối với một trang web thường cho phép ứng dụng xem địa chỉ công khai và gửi yêu cầu chữ ký đến ví. Chỉ riêng việc kết nối không cho phép ứng dụng chuyển mọi token ERC-20. Hạn mức token được lưu riêng trong hợp đồng token. MetaMask cũng phân biệt ngắt kết nối dapp với thu hồi quyền phê duyệt token.
Allowance ERC-20 gắn với hợp đồng token, mạng, địa chỉ chủ sở hữu và địa chỉ spender. Cấp quyền cho một spender dùng token trên Ethereum không đồng nghĩa với quyền tương tự cho token khác hoặc cùng token trên Polygon. Chỉ nhớ rằng “mình đã cấp quyền cho trang này” có thể khiến bạn bỏ sót hạn mức vẫn còn hiệu lực trên token hoặc mạng khác.
Bài viết này tập trung vào approve, allowance và transferFrom của ERC-20 trên Ethereum và các mạng tương thích. Chuyển ETH gốc, quyền setApprovalForAll của NFT, tiêu chuẩn token khác và kết nối đăng nhập ví dùng mô hình quyền riêng. Sao lưu và khôi phục khóa là chủ đề khác; xem hướng dẫn về cụm từ khôi phục ví.
approve ghi lại hạn mức chi tiêu, không gửi token đi
Chủ sở hữu có thể gọi approve(spender, amount) trên hợp đồng token để cho phép spender được chỉ định sử dụng tối đa amount token. Hàm transferFrom tiêu chuẩn cho phép spender chuyển token thay mặt chủ sở hữu. Vì vậy giao dịch approve thường không tự làm thay đổi số dư, nhưng một lần gọi hợp đồng sau đó có thể dùng allowance. Đây là luồng quyền được quy định trong tiêu chuẩn ERC-20.
Ví dụ, nếu ví có 300 token và cấp allowance 80 cho một router, spender ERC-20 thông thường bị giới hạn bởi giá trị nhỏ hơn giữa allowance còn lại và số dư của chủ sở hữu. Quyền này có thể áp dụng cho nhiều giao dịch vì hợp đồng có thể gọi transferFrom nhiều lần. Nếu hợp đồng được phê duyệt hoặc luồng gọi dự kiến bị lạm dụng, token có thể bị chuyển theo cách người dùng không mong muốn. Hành vi token không chuẩn và các giới hạn bổ sung cũng cần được cân nhắc.
approve thường là giao dịch trên chuỗi gửi tới hợp đồng token và có thể cần trả phí mạng. Một số ứng dụng tách bước phê duyệt và hoán đổi thành hai giao dịch; số khác kết hợp quyền bằng chữ ký với giao dịch sau đó. Đừng chỉ dựa vào nút có nhãn “Approve”; hãy xem chính xác ví yêu cầu bạn ký nội dung gì và trên mạng nào.
Allowance không giới hạn không có nghĩa là bị rút ngay
Nhãn “Unlimited” trong ví thường biểu thị allowance gần với giá trị số nguyên tối đa của token. Nó không tạo thêm token hoặc chuyển số dư hiện tại ngay lúc phê duyệt. Tuy nhiên, spender có thể dùng allowance của token đó trên cùng mạng sau này, kể cả với token cùng loại được chuyển vào ví trong tương lai. Một số cách triển khai giữ nguyên giá trị tối đa thay vì giảm dần; hãy kiểm tra token xử lý giá trị này như thế nào.
Ứng dụng có thể yêu cầu hạn mức lớn để giảm số lần xác nhận, nhưng hãy cân nhắc đồng thời sự tiện lợi và mức độ phơi nhiễm. Nếu hợp đồng spender có lỗ hổng hoặc quyền kiểm soát bị lạm dụng, quyền cũ có thể được sử dụng về sau. Hướng dẫn thu hồi của Ethereum.org giải thích vì sao allowance rộng vẫn có thể gây rủi ro ngay cả khi người dùng đã chuyển tài sản về ví.
Allowance nhỏ hơn không loại bỏ mọi rủi ro. Phê duyệt token giả hoặc sai spender vẫn có thể gây thiệt hại; phê duyệt lặp lại cũng làm tăng phí và cơ hội nhầm lẫn. Hãy cân nhắc số lượng dự định sử dụng, tần suất dùng ứng dụng, mức độ tin cậy của spender và khả năng kiểm tra lại allowance sau này.

Kiểm tra mạng, token, spender và số lượng trước khi ký
Trước khi ký, hãy kiểm tra bốn thông tin. Thứ nhất, mạng đang chọn có khớp với mạng ứng dụng nêu hay không. Thứ hai, xác minh địa chỉ hợp đồng token thay vì chỉ dựa vào mã hoặc biểu tượng. Thứ ba, đối chiếu địa chỉ spender với tài liệu chính thức của dự án hoặc thông tin hợp đồng đã xác minh. Thứ tư, quyết định hạn mức có phù hợp với thao tác dự kiến hay để lại quyền quá rộng.
Đừng kết nối ví từ liên kết trong tin nhắn riêng, mã QR, cuộc trò chuyện hỗ trợ hoặc quảng cáo chưa xác minh. Trang lừa đảo có thể giả mạo ứng dụng thật. Hãy truy cập từ địa chỉ chính thức đã lưu hoặc tài liệu của dự án; đừng tin địa chỉ hợp đồng chỉ vì tên hiển thị trông quen thuộc. Nhãn xác minh trên trình khám phá khối không chứng minh hợp đồng an toàn.
Thiết bị ký phần cứng có thể giúp giữ khóa riêng tư khỏi trình duyệt thông thường, nhưng không thể thay bạn đánh giá spender hoặc số tiền cấp quyền có an toàn hay không. Nếu thiết bị không hiển thị yêu cầu theo cách bạn hiểu được, hãy dừng lại và xem giải thích chính thức của nhà cung cấp ví. Thông tin giao dịch hiển thị càng ít thì bạn càng ít có thể kiểm tra.
Chữ ký permit đổi cách cấp quyền, không đổi quyền được cấp
Một số token ERC-20 hỗ trợ ERC-2612 permit. Thay vì gửi giao dịch approve thông thường, chủ sở hữu ký dữ liệu có kiểu; một bên khác có thể gửi chữ ký đó để thiết lập allowance token. Thông điệp chuẩn gồm chủ sở hữu, spender, giá trị, nonce và deadline; domain giúp gắn chữ ký với mạng và hợp đồng.
deadline của ERC-2612 là thời điểm cuối cùng chữ ký permit có thể được gửi. Điều này không có nghĩa allowance đã thiết lập thành công sẽ tự động hết hạn vào thời điểm đó. Allowance có thể tồn tại cho đến khi được sử dụng, thay đổi hoặc thu hồi. Một số token dùng thiết kế permit khác hoặc quy tắc hết hạn bổ sung; đừng cho rằng mọi yêu cầu trong ví có tên “permit” đều là ERC-2612.
Chữ ký có thể cho phép tài khoản khác trả phí giao dịch, nhưng điều đó không khiến mọi chữ ký trở thành bước đăng nhập vô hại. Nếu ví không hiển thị rõ token, spender, giá trị và thời hạn liên quan, hoặc thông tin không khớp lời giải thích của ứng dụng, hãy từ chối và kiểm tra tài liệu chính thức của dự án. Chữ ký chưa được gửi vẫn có thể bị người khác gửi trước deadline.
Ngắt kết nối trang web không thu hồi allowance trên chuỗi
Đăng xuất hoặc ngắt kết nối ví sẽ thay đổi phiên trình duyệt hoặc quyền kết nối. Allowance ERC-20 đã lưu trong hợp đồng token có thể vẫn còn. Ngược lại, thu hồi allowance không xóa địa chỉ công khai mà trang web đã biết hoặc lịch sử trên chuỗi. Hướng dẫn ngắt kết nối dapp của MetaMask giải thích sự khác biệt này.
Thu hồi thường có nghĩa là gửi giao dịch trên chuỗi để đặt allowance của token và spender đó về 0. Giao dịch tốn phí mạng, và quyền cũ có thể vẫn hoạt động cho đến khi giao dịch được xác nhận. Sau đó, hãy làm mới danh sách phê duyệt hoặc truy vấn lại hợp đồng token để xác nhận giá trị bằng 0 cho đúng ví, mạng, token và spender. Hướng dẫn phê duyệt của MetaMask và Ethereum.org giới thiệu công cụ kiểm tra theo từng mạng; dù dùng công cụ nào, hãy xác minh tên miền chính thức và mạng đã chọn.
Mỗi mạng lưu trạng thái riêng. Đặt allowance trên Ethereum về 0 không tự động thay đổi quyền của cùng token trên mạng khác. Hãy kiểm tra từng tài khoản, hợp đồng token, spender và mạng liên quan, rồi xác minh kết quả cuối cùng của giao dịch. Công cụ thu hồi không bao giờ cần cụm từ khôi phục hoặc khóa riêng tư.
Thu hồi chặn lần sử dụng sau, không đảo ngược giao dịch đã hoàn tất
Sau khi allowance bằng 0 được xác nhận, spender không thể dùng allowance đó cho một lần transferFrom mới. Thu hồi không đảo ngược giao dịch đã hoàn tất, không lấy token từ người nhận và không xóa quyền ở hợp đồng khác. Nếu token đã bị chuyển qua một quyền đáng ngờ, đặt allowance về 0 không phải cách khôi phục tài sản.
Nếu khóa riêng tư của ví bị lộ, kẻ tấn công vẫn có thể ký giao dịch bằng cách khác. Các quyền riêng cho spender hoặc token khác, quyền operator NFT, chữ ký permit và quyền đặc thù của hợp đồng cũng có thể còn hiệu lực. Chỉ diễn giải kết quả trong phạm vi ví và mạng cụ thể mà bạn đã kiểm tra.
Spender đã bị thu hồi có thể yêu cầu cấp quyền mới khi bạn hoán đổi, nạp hoặc đổi tài sản lần tiếp theo. Trước khi thu hồi, hãy kiểm tra quyền đó có đang được dùng trong giao dịch chưa hoàn tất hoặc vị thế giao thức đang mở hay không; khi cần, xem trợ giúp chính thức của giao thức. Điều cần biết là quy trình nào sẽ thay đổi sau khi quyền được thay đổi.
Thay đổi allowance có thể gặp điều kiện tranh chấp ERC-20
Tiêu chuẩn ERC-20 khuyến nghị giao diện đặt allowance khác 0 về 0 trước khi thay bằng một giá trị khác 0. Nếu giao dịch của spender được xếp giữa lần cấp quyền cũ và mới, spender có thể sử dụng nhiều hơn dự kiến. Ví dụ, khi đổi allowance từ 100 xuống 25, spender có thể dùng 100 cũ trước rồi dùng tiếp 25 mới.
Chờ allowance bằng 0 được xác nhận rồi mới đặt số mới giúp giảm khả năng giá trị cũ và mới bị dùng nối tiếp, nhưng không thể đảo ngược việc dùng allowance cũ trước khi giao dịch đặt 0 được xác nhận. Cả hai bước đều có thể tốn phí và hành vi token có thể khác nhau. Hãy làm theo quy trình cập nhật an toàn được ví hoặc token hướng dẫn và đợi xác nhận trước bước tiếp theo.
Nếu không rõ allowance hiện tại, hãy truy vấn hợp đồng token trên mạng đang chọn trước khi thay đổi. Nếu ví không hiển thị allowance hoặc hiển thị token bất ngờ, hãy xác nhận bạn không xem nhầm mạng hoặc địa chỉ. Cả địa chỉ chủ sở hữu lẫn địa chỉ hợp đồng token phải khớp với quyền bạn định kiểm tra.
Dùng quy trình ngắn để rà soát quyền của ví và token
- Xác nhận tên miền chính thức của dự án và mạng đang chọn.
- Xác minh hợp đồng token cùng địa chỉ spender, rồi so sánh allowance với số lượng thao tác dự kiến cần.
- Đọc giao dịch thực tế hoặc yêu cầu dữ liệu có kiểu trong ví. Đừng ký yêu cầu bạn không hiểu.
- Sau khi dùng spender mà bạn không còn tin tưởng, kiểm tra allowance trên mạng liên quan; đặt quyền không dùng về 0 khi phù hợp và xác nhận kết quả.
- Khi so sánh ví, hãy xem mạng được hỗ trợ, mức độ rõ ràng khi hiển thị quyền phê duyệt và hướng dẫn cập nhật, khôi phục.
Ví phần cứng là một lựa chọn để lưu khóa và xem xét giao dịch, không đảm bảo hợp đồng an toàn hoặc người dùng sẽ không cấp hạn mức rộng. Đừng trông chờ màn hình ký quyết định thay bạn. Hãy tự kiểm tra spender, token, mạng và số lượng. Hiểu rằng allowance token có thể tồn tại riêng với kết nối ứng dụng cũng giúp bạn đánh giá tính năng bảo mật của ví và giới hạn thực tế của chúng.
Câu hỏi thường gặp
Q1Ngắt kết nối ví có xóa quyền phê duyệt token hiện có không?
Không. Kết nối trang web là phiên ví; allowance ERC-20 là trạng thái trên chuỗi trong hợp đồng token. Hãy kiểm tra mạng và token liên quan, rồi thu hồi riêng allowance của spender nếu cần.
Q2Đặt allowance về 0 có lấy lại token đã bị chuyển đi không?
Không. Sau khi thay đổi được xác nhận, allowance bằng 0 chặn lần sử dụng tiếp theo nhưng không đảo giao dịch đã hoàn tất. Hãy kiểm tra riêng các quyền khác và nguy cơ lộ khóa.
Q3Mọi token tiền mã hóa và NFT đều dùng allowance ERC-20 không?
Không. Bài viết này nói về approve và transferFrom của ERC-20. Quyền operator NFT, tài sản gốc, tiêu chuẩn token khác và quyền theo mạng tuân theo quy tắc riêng.
Nguồn và tài liệu đọc thêm
Báo lỗi
Chúng tôi sẽ soạn email kèm liên kết bài viết này. Mark chỉ nhận được báo cáo sau khi bạn gửi email
Kiểm tra nhanh
Đọc xong hướng dẫn? Hãy kiểm tra với 3 câu hỏi
Câu hỏi 01
ERC-20 approve(spender, amount) chủ yếu làm gì?
Chọn một đáp án để xem giải thích
Bảng thuật ngữ quyền chọn
The process that requires an option writer to fulfill the contract after an exercise notice is allocated; it can create or remove an underlying position.
Đọc hướng dẫn chuyên sâuBid-ask spreadThe gap between the best displayed bid and ask, which is a practical trading cost and a signal of how uncertain an immediate fill may be.
Đọc hướng dẫn chuyên sâu