Các Token Program của Solana hỗ trợ ủy quyền—cấp cho một tài khoản khác quyền chuyển token từ token account của bạn trong giới hạn được chỉ định. Điều này cho phép các trường hợp sử dụng như thanh toán tự động, dịch vụ ký quỹ và xử lý thanh toán qua bên thứ ba mà không cần từ bỏ quyền giữ quỹ của bạn.
Cách thức hoạt động của ủy quyền
Khi bạn phê duyệt một đại diện ủy quyền, bạn đang cho phép một tài khoản cụ thể chuyển token thay mặt bạn:
- Chủ sở hữu vẫn giữ quyền kiểm soát: Bạn vẫn sở hữu token và có thể chuyển hoặc thu hồi bất cứ lúc nào
- Giới hạn chi tiêu: Đại diện ủy quyền chỉ có thể chuyển tối đa số lượng đã được phê duyệt
- Một đại diện ủy quyền cho mỗi tài khoản: Mỗi token account chỉ có thể có một đại diện ủy quyền đang hoạt động
- Phê duyệt mới thay thế phê duyệt cũ: Phê duyệt đại diện ủy quyền mới sẽ tự động thu hồi đại diện trước đó
Ủy quyền không phải là hình thức giữ hộ. Đại diện ủy quyền có thể chi tiêu token trong giới hạn, nhưng không thể truy cập hoặc rút cạn tài khoản vượt quá số lượng đã được phê duyệt. Chủ sở hữu có thể thu hồi bất cứ lúc nào.
Các trường hợp sử dụng trong kinh doanh
| Trường hợp sử dụng | Cách ủy quyền hỗ trợ |
|---|---|
| Bộ xử lý thanh toán | Người bán cấp quyền cho bộ xử lý để thanh toán giao dịch |
| Bảng lương tự động | Kho bạc phê duyệt dịch vụ bảng lương để chi trả lương |
| Dịch vụ ký quỹ | Người mua ủy quyền cho đại lý ký quỹ để giải ngân có điều kiện |
| Nền tảng giao dịch | Người dùng phê duyệt sàn giao dịch để thực hiện giao dịch thay mặt họ |
| Phát hành thẻ | Người dùng phê duyệt nhà phát hành thẻ để tính phí mua hàng vào token account của họ |
Phê duyệt đại diện ủy quyền
Cấp quyền cho tài khoản khác để chi tiêu token từ tài khoản của bạn:
import { getApproveCheckedInstruction } from "@solana-program/token";// Approve delegate to spend up to 1,000 USDC (6 decimals)const approveInstruction = getApproveCheckedInstruction({source: tokenAccountAddress, // Your token accountmint: usdcMintAddress, // USDC mintdelegate: delegateAddress, // Account receiving permissionowner: ownerKeypair, // You (must sign)amount: 1_000_000_000n, // 1,000 USDC in base unitsdecimals: 6});
Tham số:
source: Token account cấp quyềndelegate: Tài khoản sẽ có quyền chi tiêuowner: Chủ sở hữu hiện tại của token account (phải ký giao dịch)amount: Số lượng token tối đa mà delegate có thể chuyểndecimals: Số chữ số thập phân của token để xác thực (ngăn ngừa lỗi thập phân)
Thu hồi delegate
Xóa tất cả quyền chi tiêu khỏi delegate hiện tại:
import { getRevokeInstruction } from "@solana-program/token";const revokeInstruction = getRevokeInstruction({source: tokenAccountAddress, // Your token accountowner: ownerKeypair // You (must sign)});
Revoke sẽ xóa tất cả quyền của delegate—không có thu hồi một phần. Nếu bạn cần giảm hạn mức, hãy approve lại delegate đó với số lượng thấp hơn.
Kiểm tra trạng thái ủy quyền
Truy vấn token account để xem delegate hiện tại và hạn mức còn lại:
import { fetchToken } from "@solana-program/token";const tokenAccount = await fetchToken(rpc, tokenAccountAddress);if (tokenAccount.data.delegate) {console.log("Delegate:", tokenAccount.data.delegate);console.log("Remaining allowance:", tokenAccount.data.delegatedAmount);} else {console.log("No delegate set");}
Chuyển token với tư cách delegate
Khi hoạt động với vai trò delegate, sử dụng lệnh transfer tiêu chuẩn nhưng ký bằng keypair của delegate thay vì của chủ sở hữu:
import { getTransferCheckedInstruction } from "@solana-program/token";const transferInstruction = getTransferCheckedInstruction({source: ownerTokenAccount, // The account you have permission to spend frommint: usdcMintAddress,destination: recipientTokenAccount,authority: delegateKeypair, // You (the delegate) sign, not the owneramount: 100_000_000n, // 100 USDCdecimals: 6});
Giao dịch chuyển sẽ thành công nếu:
- Tài khoản nguồn có đủ số dư
- Delegate ký giao dịch
Mỗi lần chuyển sẽ giảm hạn mức còn lại. Khi hạn mức về không, người được ủy quyền không thể chuyển token nữa.
Các vấn đề bảo mật
Đối với chủ tài khoản:
- Chỉ phê duyệt những người được ủy quyền đáng tin cậy
- Đặt giới hạn chi tiêu tối thiểu cần thiết
- Thu hồi ủy quyền khi không còn cần thiết
- Giám sát tài khoản của bạn để phát hiện các giao dịch chuyển bất thường
Đối với nhà cung cấp dịch vụ (người được ủy quyền):
- Thông báo rõ ràng giới hạn chi tiêu được yêu cầu cho người dùng
- Triển khai quản lý khóa phù hợp cho tài khoản được ủy quyền của bạn
- Theo dõi mức tiêu thụ hạn mức để yêu cầu phê duyệt lại trước khi hết hạn mức
Ủy quyền so với giữ hộ
| Khía cạnh | Ủy quyền | Giữ hộ toàn phần |
|---|---|---|
| Quyền sở hữu token | Người dùng giữ lại | Người dùng chuyển cho bên giữ hộ |
| Kiểm soát chi tiêu | Giới hạn ở số tiền được phê duyệt | Toàn quyền truy cập vào số tiền đã chuyển |
| Thu hồi | Ngay lập tức, bởi chủ sở hữu | Yêu cầu sự hợp tác của bên giữ hộ |
| Mức độ rủi ro | Giới hạn ở số tiền được phê duyệt | Toàn bộ số dư |
| Mức độ tin tưởng cần thiết | Hạn chế | Cao |
Ủy quyền cung cấp một giải pháp trung gian—cho phép thanh toán tự động trong khi giới hạn mức độ rủi ro ở số tiền được phê duyệt.
Tài nguyên liên quan
- Phê duyệt người được ủy quyền — Chi tiết kỹ thuật về lệnh phê duyệt
Is this page helpful?