Thanh toánThanh toán nâng cao

Quyền chi tiêu

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ụngCách ủy quyền hỗ trợ
Bộ xử lý thanh toánNgười bán cấp quyền cho bộ xử lý để thanh toán giao dịch
Bảng lương tự độngKho 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ịchNgườ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 account
mint: usdcMintAddress, // USDC mint
delegate: delegateAddress, // Account receiving permission
owner: ownerKeypair, // You (must sign)
amount: 1_000_000_000n, // 1,000 USDC in base units
decimals: 6
});

Tham số:

  • source: Token account cấp quyền
  • delegate: Tài khoản sẽ có quyền chi tiêu
  • owner: 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ển
  • decimals: 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 account
owner: 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:

Transfer as Delegate
import { getTransferCheckedInstruction } from "@solana-program/token";
const transferInstruction = getTransferCheckedInstruction({
source: ownerTokenAccount, // The account you have permission to spend from
mint: usdcMintAddress,
destination: recipientTokenAccount,
authority: delegateKeypair, // You (the delegate) sign, not the owner
amount: 100_000_000n, // 100 USDC
decimals: 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ềnGiữ hộ toàn phần
Quyền sở hữu tokenNgười dùng giữ lạiNgười dùng chuyển cho bên giữ hộ
Kiểm soát chi tiêuGiới hạn ở số tiền được phê duyệtToàn quyền truy cập vào số tiền đã chuyển
Thu hồiNgay lập tức, bởi chủ sở hữuYêu cầu sự hợp tác của bên giữ hộ
Mức độ rủi roGiới hạn ở số tiền được phê duyệtToàn bộ số dư
Mức độ tin tưởng cần thiếtHạ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

Is this page helpful?

Quản lý bởi

© 2026 Solana Foundation.
Đã đăng ký bản quyền.
Kết nối