Tokens auf Solana
Tokens sind digitale Vermögenswerte, die Eigentumsrechte über verschiedene Kategorien von Vermögenswerten repräsentieren. Die Tokenisierung ermöglicht die Digitalisierung von Eigentumsrechten. Tokens auf Solana werden als SPL (Solana Program Library) Tokens bezeichnet.
Dieser Abschnitt behandelt die grundlegenden Konzepte, wie Tokens auf Solana dargestellt werden. Siehe den Abschnitt SPL Token Grundlagen für Codebeispiele.
Kernpunkte
-
Token Programs enthalten alle Anweisungslogik für die Interaktion mit Tokens im Netzwerk (sowohl fungible als auch nicht-fungible).
-
Ein Mint Account repräsentiert einen spezifischen Token und speichert globale Metadaten über den Token wie die Gesamtversorgung und die Mint-Autorität (Adresse, die berechtigt ist, neue Einheiten eines Tokens zu erstellen).
-
Ein Token Account verfolgt den individuellen Besitz von Tokens für ein spezifisches mint account für einen bestimmten Besitzer.
-
Ein Associated Token Account ist ein Token Account, der mit einer Adresse erstellt wird, die von den Adressen des Besitzers und des mint accounts abgeleitet ist.
Token Programs
Das Solana-Ökosystem hat zwei Haupt-Token-Programme. Quellcode für beide Programme unten.
Token Program (Original)
- Grundlegende Token-Funktionalität (mint, transfer, etc.)
- Unveränderlich und weit verbreitet
Token Extension Program (Token 2022)
- Enthält alle Funktionen des ursprünglichen Token Programs
- Fügt Funktionen durch "Erweiterungen" hinzu
Token Programs enthalten alle Anweisungslogik für die Interaktion mit Tokens im Netzwerk (sowohl fungible als auch nicht-fungible). Alle Tokens auf Solana sind effektiv Datenkonten, die einem Token Program gehören.
Token Program
Mint Account
Tokens auf Solana werden eindeutig durch die Adresse eines Mint Account identifiziert, der dem Token Program gehört. Dieses Konto fungiert als globaler Zähler für einen bestimmten Token und speichert Daten wie:
- Supply: Gesamtangebot des Tokens
- Decimals: Dezimalpräzision des Tokens
- Mint authority: Das Konto, das berechtigt ist, neue Einheiten des Tokens zu erstellen und damit das Angebot zu erhöhen
- Freeze authority: Das Konto, das berechtigt ist, Tokens in einem Token Account einzufrieren und damit deren Übertragung oder Verbrennung zu verhindern
Mint Account
Die vollständigen Details, die in jedem Mint Account gespeichert sind, umfassen Folgendes:
pub struct Mint {/// Optional authority used to mint new tokens. The mint authority may only/// be provided during mint creation. If no mint authority is present/// then the mint has a fixed supply and no further tokens may be/// minted.pub mint_authority: COption<Pubkey>,/// Total supply of tokens.pub supply: u64,/// Number of base 10 digits to the right of the decimal place.pub decimals: u8,/// Is `true` if this structure has been initializedpub is_initialized: bool,/// Optional authority to freeze token accounts.pub freeze_authority: COption<Pubkey>,}
Als Referenz hier ein Solana Explorer-Link zum USDC Mint Account.
Token Account
Das Token Program erstellt Token Accounts, um den individuellen Besitz jeder Token-Einheit zu verfolgen. Ein Token Account speichert Daten wie:
- Mint: Der Token, von dem der Token Account Einheiten hält
- Owner: Das Konto, das berechtigt ist, Tokens vom Token Account zu übertragen
- Amount: Anzahl der Tokens, die der Token Account aktuell hält
Token Account
Die vollständigen Details, die in jedem Token Account gespeichert sind, umfassen Folgendes:
pub struct Account {/// The mint associated with this accountpub mint: Pubkey,/// The owner of this account.pub owner: Pubkey,/// The amount of tokens this account holds.pub amount: u64,/// If `delegate` is `Some` then `delegated_amount` represents/// the amount authorized by the delegatepub delegate: COption<Pubkey>,/// The account's statepub state: AccountState,/// If is_native.is_some, this is a native token, and the value logs the/// rent-exempt reserve. An Account is required to be rent-exempt, so/// the value is used by the Processor to ensure that wrapped SOL/// accounts do not drop below this threshold.pub is_native: COption<u64>,/// The amount delegatedpub delegated_amount: u64,/// Optional authority to close the account.pub close_authority: COption<Pubkey>,}
Eine Wallet benötigt einen token account für jeden Token (mint), den sie halten möchte, wobei die Wallet-Adresse als Besitzer des token account festgelegt wird. Jede Wallet kann mehrere token accounts für denselben Token (mint) besitzen, aber ein token account kann nur einen Besitzer haben und Einheiten von nur einem Token (mint) halten.
Kontobeziehung
Beachte, dass die Daten jedes Token Accounts ein owner
Feld enthalten, das
angibt, wer die Autorität über den Token Account hat. Dies unterscheidet sich
vom Programm-Besitzer, der im
Basis-Account-Typ angegeben ist, welcher das
Token Program für alle Token Accounts ist.
Associated Token Account
Associated Token Accounts vereinfachen den Prozess, die Adresse eines token accounts für einen bestimmten mint und Besitzer zu finden. Betrachte den Associated Token Account als das "Standard"-token account für einen bestimmten mint und Besitzer.
Ein Associated Token Account wird mit einer Adresse erstellt, die aus der Adresse des Besitzers und der Adresse des Mint Accounts abgeleitet ist. Es ist wichtig zu verstehen, dass ein Associated Token Account einfach ein Token Account mit einer spezifischen Adresse ist.
Dies führt ein Schlüsselkonzept in der Solana-Entwicklung ein: Program Derived Address (PDA). Eine PDA leitet eine Adresse deterministisch unter Verwendung vordefinierter Eingaben ab, was es einfach macht, die Adresse eines Kontos zu finden.
Associated Token Account
Beachte, dass jede Wallet ihr eigenes Token-Konto benötigt, um Tokens aus demselben Mint zu halten.
Accounts Relationship Expanded
Token CLI Beispiele
Die spl-token
CLI hilft dir, mit SPL-Tokens zu experimentieren. Die
folgenden Beispiele verwenden das Solana Playground
Terminal, um CLI-Befehle direkt im Browser ohne lokale Installation auszuführen.
Das Erstellen von Tokens und Konten erfordert SOL für Konto-Mieteinlagen und
Transaktionsgebühren. Für Erstnutzer des Solana Playgrounds, erstelle eine
Playground-Wallet und führe den Befehl solana airdrop
im
Playground-Terminal aus. Du kannst auch Devnet-SOL vom öffentlichen
Web-Faucet erhalten.
$solana airdrop 2
Führe spl-token --help
aus, um alle verfügbaren Befehle zu sehen.
$spl-token --help
Um die spl-token
CLI lokal zu installieren, führe aus:
$cargo install spl-token-cli
Weitere Beispiele findest du in der spl-token
Dokumentation.
Die in deiner Terminal-Ausgabe angezeigten Kontoadressen unterscheiden sich von
den unten stehenden Beispielen. Verwende die Adressen aus deinem
Playground-Terminal, wenn du die Anleitung befolgst. Zum Beispiel gibt der
Befehl create-token
eine Mint-Kontoadresse mit deiner Playground-Wallet
als Mint-Autorität aus.
Einen neuen Token erstellen
Um einen neuen Token (Mint-Konto) zu erstellen, führe aus:
$spl-token create-token
Die Ausgabe sieht wie folgt aus:
Creating token 99zqUzQGohamfYxyo8ykTEbi91iom3CLmwCA75FK5zTgAddress: 99zqUzQGohamfYxyo8ykTEbi91iom3CLmwCA75FK5zTgDecimals: 9Signature: 44fvKfT1ezBUwdzrCys3fvCdFxbLMnNvBstds76QZyE6cXag5NupBprSXwxPTzzjrC3cA6nvUZaLFTvmcKyzxrm1
Ein neues mint account beginnt mit einer Versorgung von null. Überprüfen Sie die aktuelle Versorgung mit:
$spl-token supply <TOKEN_ADDRESS>
Der Befehl supply
für einen neuen Token gibt 0
zurück:
spl-token supply 99zqUzQGohamfYxyo8ykTEbi91iom3CLmwCA75FK5zTg
Das Erstellen eines neuen Mint Account erfordert eine Transaktion mit zwei Anweisungen. Hier ist ein Javascript-Beispiel auf Solana Playground.
-
Das System Program erstellt ein neues Konto mit Platz für die Mint Account Daten und überträgt die Eigentümerschaft an das Token Program.
-
Das Token Program initialisiert die Daten des neuen Kontos als Mint Account
Token Account erstellen
Um Tokens eines bestimmten mint zu halten, erstellen Sie ein token account:
$spl-token create-account <TOKEN_ADDRESS>
Beispielbefehl:
spl-token create-account 99zqUzQGohamfYxyo8ykTEbi91iom3CLmwCA75FK5zTg
Ausgabe:
Creating account AfB7uwBEsGtrrBqPTVqEgzWed5XdYfM1psPNLmf7EeX9Signature: 2BtrynuCLX9CNofFiaw6Yzbx6hit66pup9Sk7aFjwU2NEbFz7NCHD9w9sWhrCfEd73XveAGK1DxFpJoQZPXU9tS1
Der Befehl create-account
erstellt ein associated token account mit Ihrer
Wallet-Adresse als Eigentümer.
Um ein token account mit einem anderen Eigentümer zu erstellen:
$spl-token create-account --owner <OWNER_ADDRESS> <TOKEN_ADDRESS>
Hinweis: <TOKEN_ADDRESS>
gibt das mint account für das token account an.
Beispielbefehl:
spl-token create-account --owner 2i3KvjDCZWxBsqcxBHpdEaZYQwQSYE6LXUMx5VjY5XrR 99zqUzQGohamfYxyo8ykTEbi91iom3CLmwCA75FK5zTg
Ausgabe:
Creating account Hmyk3FSw4cfsuAes7sanp2oxSkE9ivaH6pMzDzbacqmtSignature: 44vqKdfzspT592REDPY4goaRJH3uJ3Ce13G4BCuUHg35dVUbHuGTHvqn4ZjYF9BGe9QrjMfe9GmuLkQhSZCBQuEt
Das Erstellen eines Associated Token Account erfordert eine Anweisung, die das Associated Token Program aufruft. Hier ist ein Javascript-Beispiel auf Solana Playground.
Das Associated Token Program verwendet Cross Program Invocations um:
- Das System Program aufzurufen, um ein neues Konto mit der bereitgestellten PDA als Adresse zu erstellen
- Das Token Program aufzurufen, um die Token Account Daten zu initialisieren
Um ein neues token account mit einem neuen keypair anstelle einer associated token account-Adresse zu erstellen, senden Sie eine Transaktion mit zwei Anweisungen. Hier ist ein Javascript- Beispiel auf Solana Playground.
-
Das System Program erstellt ein neues Konto mit Platz für die token account Daten und überträgt die Eigentümerschaft an das Token Program.
-
Das Token Program initialisiert die Daten als token account
Tokens prägen
Um neue Einheiten eines Tokens zu erstellen, prägen Sie Tokens auf ein token account:
$spl-token mint [OPTIONS] <TOKEN_ADDRESS> <TOKEN_AMOUNT> [--] [RECIPIENT_TOKEN_ACCOUNT_ADDRESS]
Beispielbefehl:
spl-token mint 99zqUzQGohamfYxyo8ykTEbi91iom3CLmwCA75FK5zTg 100
Ausgabe:
Minting 100 tokensToken: 99zqUzQGohamfYxyo8ykTEbi91iom3CLmwCA75FK5zTgRecipient: AfB7uwBEsGtrrBqPTVqEgzWed5XdYfM1psPNLmf7EeX9Signature: 2NJ1m7qCraPSBAVxbr2ssmWZmBU9Jc8pDtJAnyZsZJRcaYCYMqq1oRY1gqA4ddQno3g3xcnny5fzr1dvsnFKMEqG
Um Tokens auf ein anderes token account zu prägen:
spl-token mint 99zqUzQGohamfYxyo8ykTEbi91iom3CLmwCA75FK5zTg 100 -- Hmyk3FSw4cfsuAes7sanp2oxSkE9ivaH6pMzDzbacqmt
Ausgabe:
Minting 100 tokensToken: 99zqUzQGohamfYxyo8ykTEbi91iom3CLmwCA75FK5zTgRecipient: Hmyk3FSw4cfsuAes7sanp2oxSkE9ivaH6pMzDzbacqmtSignature: 3SQvNM3o9DsTiLwcEkSPT1Edr14RgE2wC54TEjonEP2swyVCp2jPWYWdD6RwXUGpvDNUkKWzVBZVFShn5yntxVd7
Die MintTo
Anweisung im Token Program erstellt neue Tokens. Die Mint-
Autorität muss die Transaktion signieren. Die Anweisung prägt Tokens auf ein
token account und erhöht die Gesamtversorgung im mint account. Hier ist ein
Javascript- Beispiel auf
Solana Playground.
Tokens übertragen
Um Tokens zwischen token accounts zu übertragen:
spl-token transfer [OPTIONS] <TOKEN_ADDRESS> <TOKEN_AMOUNT> <RECIPIENT_ADDRESS or RECIPIENT_TOKEN_ACCOUNT_ADDRESS>
Beispielbefehl:
spl-token transfer 99zqUzQGohamfYxyo8ykTEbi91iom3CLmwCA75FK5zTg 100 Hmyk3FSw4cfsuAes7sanp2oxSkE9ivaH6pMzDzbacqmt
Ausgabe:
Transfer 100 tokensSender: AfB7uwBEsGtrrBqPTVqEgzWed5XdYfM1psPNLmf7EeX9Recipient: Hmyk3FSw4cfsuAes7sanp2oxSkE9ivaH6pMzDzbacqmtSignature: 5y6HVwV8V2hHGLTVmTmdySRiEUCZnWmkasAvJ7J6m7JR46obbGKCBqUFgLpZu5zQGwM4Xy6GZ4M5LKd1h6Padx3o
Die Transfer
Anweisung im Token Program verarbeitet Token-Übertragungen.
Der Eigentümer des Sender-token accounts muss die Transaktion signieren. Die
Anweisung bewegt Tokens zwischen token accounts. Hier ist ein
Javascript-Beispiel auf
Solana Playground.
Sowohl Sender als auch Empfänger benötigen token accounts für den spezifischen Token (mint). Der Sender kann Anweisungen zum Erstellen des token accounts des Empfängers in derselben Transaktion einschließen.
Token-Metadaten erstellen
Das Token Extensions Program ermöglicht es, Metadaten (Name, Symbol, Bildlink) direkt im Mint Account zu speichern.
Um einen Token mit Metadaten-Erweiterung zu erstellen:
spl-token create-token --program-id TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb --enable-metadata
Ausgabe:
Creating token BdhzpzhTD1MFqBiwNdrRy4jFo2FHFufw3n9e8sVjJczP under program TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEbTo initialize metadata inside the mint, please run `spl-token initialize-metadata BdhzpzhTD1MFqBiwNdrRy4jFo2FHFufw3n9e8sVjJczP <YOUR_TOKEN_NAME> <YOUR_TOKEN_SYMBOL> <YOUR_TOKEN_URI>`, and sign with the mint authority.Address: BdhzpzhTD1MFqBiwNdrRy4jFo2FHFufw3n9e8sVjJczPDecimals: 9Signature: 5iQofFeXdYhMi9uTzZghcq8stAaa6CY6saUwcdnELST13eNSifiuLbvR5DnRt311frkCTUh5oecj8YEvZSB3wfai
Um die Metadaten zu initialisieren:
spl-token initialize-metadata <TOKEN_MINT_ADDRESS> <YOUR_TOKEN_NAME> <YOUR_TOKEN_SYMBOL> <YOUR_TOKEN_URI>
Der Token-URI verlinkt auf Off-Chain-Metadaten. Ein Beispiel für das JSON-Format finden Sie hier.
Beispielbefehl:
spl-token initialize-metadata BdhzpzhTD1MFqBiwNdrRy4jFo2FHFufw3n9e8sVjJczP "TokenName" "TokenSymbol" "https://raw.githubusercontent.com/solana-developers/opos-asset/main/assets/DeveloperPortal/metadata.json"
Sehen Sie sich die Metadaten im Solana Explorer an.
Erfahren Sie mehr im Metadata Extension Guide. Für Details zu Token Extensions, siehe den Token Extensions Getting Started Guide und die SPL-Dokumentation.
Is this page helpful?