Τα Token Programs του Solana υποστηρίζουν εξουσιοδότηση—παραχώρηση άδειας σε άλλο λογαριασμό να μεταφέρει tokens από το token account σας μέχρι ένα καθορισμένο όριο. Αυτό επιτρέπει περιπτώσεις χρήσης όπως αυτοματοποιημένες πληρωμές, υπηρεσίες εγγύησης και επεξεργασία πληρωμών από τρίτους χωρίς να παραδώσετε την κατοχή των κεφαλαίων σας.
Πώς λειτουργεί η εξουσιοδότηση
Όταν εγκρίνετε έναν εξουσιοδοτημένο, εξουσιοδοτείτε έναν συγκεκριμένο λογαριασμό να μεταφέρει tokens εκ μέρους σας:
- Ο κάτοχος διατηρεί την κατοχή: Εξακολουθείτε να κατέχετε τα tokens και μπορείτε να τα μεταφέρετε ή να ανακαλέσετε την εξουσιοδότηση ανά πάσα στιγμή
- Περιορισμένη δαπάνη: Ο εξουσιοδοτημένος μπορεί να μεταφέρει μόνο μέχρι το εγκεκριμένο ποσό
- Ένας εξουσιοδοτημένος ανά λογαριασμό: Κάθε token account μπορεί να έχει μόνο έναν ενεργό εξουσιοδοτημένο
- Η νέα έγκριση αντικαθιστά την παλιά: Η έγκριση νέου εξουσιοδοτημένου ανακαλεί αυτόματα τον προηγούμενο
Η εξουσιοδότηση δεν μεταβιβάζει την κατοχή. Ο εξουσιοδοτημένος μπορεί να δαπανήσει tokens μέχρι το όριο, αλλά δεν μπορεί να αποκτήσει πρόσβαση ή να αδειάσει τον λογαριασμό πέρα από το εγκεκριμένο ποσό. Ο κάτοχος μπορεί να ανακαλέσει ανά πάσα στιγμή.
Επιχειρηματικές περιπτώσεις χρήσης
| Περίπτωση χρήσης | Πώς βοηθά η εξουσιοδότηση |
|---|---|
| Επεξεργαστές πληρωμών | Ο έμπορος παραχωρεί άδεια στον επεξεργαστή να διευθετεί συναλλαγές |
| Αυτοματοποιημένη μισθοδοσία | Το ταμείο εγκρίνει την υπηρεσία μισθοδοσίας να καταβάλει μισθούς |
| Υπηρεσίες εγγύησης | Ο αγοραστής εξουσιοδοτεί τον πράκτορα εγγύησης για υπό όρους απελευθέρωση |
| Πλατφόρμες συναλλαγών | Ο χρήστης εγκρίνει το ανταλλακτήριο να εκτελεί συναλλαγές εκ μέρους του |
| Έκδοση καρτών | Ο χρήστης εγκρίνει τον εκδότη κάρτας να χρεώνει αγορές στο token account του |
Έγκριση εξουσιοδοτημένου
Παραχωρήστε σε έναν άλλο λογαριασμό άδεια να ξοδέψει tokens από τον λογαριασμό σας:
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});
Παράμετροι:
source: Ο λογαριασμός token που παραχωρεί την άδειαdelegate: Ο λογαριασμός που θα έχει άδεια δαπάνηςowner: Τρέχων κάτοχος του λογαριασμού token (πρέπει να υπογράψει τη συναλλαγή)amount: Μέγιστος αριθμός tokens που μπορεί να μεταφέρει ο εκπρόσωποςdecimals: Δεκαδικά ψηφία του token για επικύρωση (αποτρέπει σφάλματα δεκαδικών)
Ανάκληση εκπροσώπου
Αφαιρέστε όλες τις άδειες δαπάνης από τον τρέχοντα εκπρόσωπο:
import { getRevokeInstruction } from "@solana-program/token";const revokeInstruction = getRevokeInstruction({source: tokenAccountAddress, // Your token accountowner: ownerKeypair // You (must sign)});
Η ανάκληση αφαιρεί όλες τις άδειες του εκπροσώπου—δεν υπάρχει μερική ανάκληση. Αν χρειάζεται να μειώσετε το όριο, εγκρίνετε τον ίδιο εκπρόσωπο με χαμηλότερο ποσό.
Έλεγχος κατάστασης εξουσιοδότησης
Ερωτήστε έναν λογαριασμό token για να δείτε τον τρέχοντα εκπρόσωπό του και το υπόλοιπο όριο:
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");}
Μεταφορά ως εκπρόσωπος
Όταν ενεργείτε ως εκπρόσωπος, χρησιμοποιήστε μια τυπική μεταφορά αλλά υπογράψτε με το keypair του εκπροσώπου αντί του κατόχου:
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});
Η μεταφορά θα επιτύχει αν:
- Ο λογαριασμός προέλευσης έχει επαρκές υπόλοιπο
- Ο εκπρόσωπος υπογράψει τη συναλλαγή
Κάθε μεταφορά μειώνει το υπόλοιπο όριο. Όταν το όριο φτάσει στο μηδέν, ο εκπρόσωπος δεν μπορεί πλέον να μεταφέρει tokens.
Ζητήματα ασφάλειας
Για τους κατόχους λογαριασμών:
- Εγκρίνετε μόνο αξιόπιστους εκπροσώπους
- Ορίστε το ελάχιστο απαραίτητο όριο δαπανών
- Ανακαλέστε τις εξουσιοδοτήσεις όταν δεν χρειάζονται πλέον
- Παρακολουθείτε τους λογαριασμούς σας για μη αναμενόμενες μεταφορές
Για τους παρόχους υπηρεσιών (εκπροσώπους):
- Επικοινωνήστε με σαφήνεια το ζητούμενο όριο δαπανών στους χρήστες
- Εφαρμόστε κατάλληλη διαχείριση κλειδιών για τον λογαριασμό εκπροσώπου σας
- Παρακολουθείτε την κατανάλωση του ορίου για να ζητήσετε επανέγκριση πριν εξαντληθούν τα όρια
Εξουσιοδότηση έναντι θεματοφυλακής
| Πτυχή | Εξουσιοδότηση | Πλήρης θεματοφυλακή |
|---|---|---|
| Κυριότητα tokens | Ο χρήστης διατηρεί | Ο χρήστης μεταφέρει στον θεματοφύλακα |
| Έλεγχος δαπανών | Περιορισμένος στο εγκεκριμένο ποσό | Πλήρης πρόσβαση στα μεταφερόμενα κεφάλαια |
| Ανάκληση | Άμεση, από τον κάτοχο | Απαιτεί συνεργασία θεματοφύλακα |
| Έκθεση σε κίνδυνο | Περιορισμένη στο εγκεκριμένο ποσό | Ολόκληρο το υπόλοιπο |
| Απαιτούμενη εμπιστοσύνη | Περιορισμένη | Υψηλή |
Η εξουσιοδότηση παρέχει μια ενδιάμεση λύση—επιτρέποντας αυτοματοποιημένες πληρωμές ενώ περιορίζει την έκθεση σε κίνδυνο στο εγκεκριμένο ποσό.
Σχετικοί πόροι
- Έγκριση εκπροσώπου — Τεχνικές λεπτομέρειες σχετικά με την εντολή έγκρισης
Is this page helpful?