Solanas Token-Programme unterstützen Delegation – die Gewährung einer Berechtigung an ein anderes Konto, Token von Ihrem Token-Konto bis zu einem festgelegten Limit zu übertragen. Dies ermöglicht Anwendungsfälle wie automatisierte Zahlungen, Treuhanddienste und Zahlungsabwicklung durch Dritte, ohne die Verwahrung Ihrer Mittel aufzugeben.
Wie Delegation funktioniert
Wenn Sie einen Delegierten genehmigen, autorisieren Sie ein bestimmtes Konto, Token in Ihrem Namen zu übertragen:
- Eigentümer behält Verwahrung: Sie besitzen weiterhin die Token und können diese jederzeit übertragen oder widerrufen
- Begrenzte Ausgaben: Der Delegierte kann nur bis zum genehmigten Betrag übertragen
- Ein Delegierter pro Konto: Jedes Token-Konto kann nur einen aktiven Delegierten haben
- Neue Genehmigung ersetzt alte: Die Genehmigung eines neuen Delegierten widerruft automatisch den vorherigen
Delegation ist nicht-verwahrend. Der Delegierte kann Token bis zum Limit ausgeben, kann aber nicht auf das Konto zugreifen oder es über den genehmigten Betrag hinaus leeren. Der Eigentümer kann jederzeit widerrufen.
Geschäftliche Anwendungsfälle
| Anwendungsfall | Wie Delegation hilft |
|---|---|
| Zahlungsabwickler | Händler gewährt Abwickler Berechtigung zur Abwicklung von Transaktionen |
| Automatisierte Gehaltsabrechnung | Treasury genehmigt Gehaltsabrechnungsdienst zur Auszahlung von Gehältern |
| Treuhanddienste | Käufer delegiert an Treuhänder für bedingte Freigabe |
| Handelsplattformen | Benutzer genehmigt Börse zur Ausführung von Trades in seinem Namen |
| Kartenausgabe | Benutzer genehmigt Kartenaussteller zur Belastung von Einkäufen auf seinem Token-Konto |
Genehmigung eines Delegierten
Einem anderen Konten die Berechtigung erteilen, Token von Ihrem Konten auszugeben:
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});
Parameter:
source: Das Token-Konten, das die Berechtigung erteiltdelegate: Das Konten, das die Ausgabeberechtigung erhältowner: Aktueller Eigentümer des Token-Kontens (muss die Transaktion signieren)amount: Maximale Anzahl an Token, die der Delegierte übertragen kanndecimals: Token-Dezimalstellen zur Validierung (verhindert Dezimalfehler)
Widerruf eines Delegierten
Alle Ausgabeberechtigungen vom aktuellen Delegierten entfernen:
import { getRevokeInstruction } from "@solana-program/token";const revokeInstruction = getRevokeInstruction({source: tokenAccountAddress, // Your token accountowner: ownerKeypair // You (must sign)});
Der Widerruf entfernt alle Delegiertenberechtigungen – es gibt keinen teilweisen Widerruf. Wenn Sie das Limit reduzieren möchten, genehmigen Sie denselben Delegierten mit einem niedrigeren Betrag.
Überprüfung des Delegierungsstatus
Ein Token-Konten abfragen, um den aktuellen Delegierten und die verbleibende Zulage zu sehen:
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");}
Übertragung als Delegierter
Wenn Sie als Delegierter handeln, verwenden Sie eine Standardübertragung, signieren jedoch mit dem Keypair des Delegierten anstelle des Eigentümers:
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});
Die Übertragung ist erfolgreich, wenn:
- Das Quellkonten über ausreichendes Guthaben verfügt
- Der Delegierte die Transaktion signiert
Jede Übertragung reduziert die verbleibende Genehmigung. Wenn die Genehmigung null erreicht, kann der Delegierte keine Token mehr übertragen.
Sicherheitsaspekte
Für Kontoinhaber:
- Genehmigen Sie nur vertrauenswürdige Delegierte
- Legen Sie das minimal notwendige Ausgabenlimit fest
- Widerrufen Sie Delegierungen, wenn sie nicht mehr benötigt werden
- Überwachen Sie Ihre Konten auf unerwartete Überweisungen
Für Dienstanbieter (Delegierte):
- Kommunizieren Sie das angeforderte Ausgabenlimit klar an die Nutzer
- Implementieren Sie eine ordnungsgemäße Schlüsselverwaltung für Ihr Delegiertenkonto
- Verfolgen Sie den Verbrauch der Genehmigung, um eine erneute Genehmigung anzufordern, bevor die Limits erschöpft sind
Delegierung vs. Verwahrung
| Aspekt | Delegierung | Vollständige Verwahrung |
|---|---|---|
| Token-Eigentum | Nutzer behält | Nutzer überträgt an Verwahrer |
| Ausgabenkontrolle | Begrenzt auf genehmigten Betrag | Vollständiger Zugriff auf übertragene Mittel |
| Widerruf | Sofort, durch Eigentümer | Erfordert Kooperation des Verwahrers |
| Risikoexposition | Begrenzt auf genehmigten Betrag | Gesamtes Guthaben |
| Erforderliches Vertrauen | Begrenzt | Hoch |
Delegierung bietet einen Mittelweg – sie ermöglicht automatisierte Zahlungen und begrenzt gleichzeitig die Risikoexposition auf den genehmigten Betrag.
Verwandte Ressourcen
- Delegierten genehmigen – Technische Details zur Approve-Anweisung
Is this page helpful?