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 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 ProgramToken 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 AccountMint Account

Die vollständigen Details, die in jedem Mint Account gespeichert sind, umfassen Folgendes:

Mint Account State
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 initialized
pub 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 AccountToken Account

Die vollständigen Details, die in jedem Token Account gespeichert sind, umfassen Folgendes:

Token Account State
pub struct Account {
/// The mint associated with this account
pub 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 delegate
pub delegate: COption<Pubkey>,
/// The account's state
pub 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 delegated
pub 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.

KontobeziehungKontobeziehung

Beachte, dass die Daten jedes Token Accounts ein ownerFeld 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 AccountAssociated Token Account

Beachte, dass jede Wallet ihr eigenes Token-Konto benötigt, um Tokens aus demselben Mint zu halten.

Accounts Relationship ExpandedAccounts 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.

Terminal
$
solana airdrop 2

Führe spl-token --help aus, um alle verfügbaren Befehle zu sehen.

Terminal
$
spl-token --help

Um die spl-token CLI lokal zu installieren, führe aus:

Terminal
$
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:

Terminal
$
spl-token create-token

Die Ausgabe sieht wie folgt aus:

Terminal Output
Creating token 99zqUzQGohamfYxyo8ykTEbi91iom3CLmwCA75FK5zTg
Address: 99zqUzQGohamfYxyo8ykTEbi91iom3CLmwCA75FK5zTg
Decimals: 9
Signature: 44fvKfT1ezBUwdzrCys3fvCdFxbLMnNvBstds76QZyE6cXag5NupBprSXwxPTzzjrC3cA6nvUZaLFTvmcKyzxrm1

Ein neues mint account beginnt mit einer Versorgung von null. Überprüfen Sie die aktuelle Versorgung mit:

Terminal
$
spl-token supply <TOKEN_ADDRESS>

Der Befehl supply für einen neuen Token gibt 0 zurück:

Example
spl-token supply 99zqUzQGohamfYxyo8ykTEbi91iom3CLmwCA75FK5zTg

Das Erstellen eines neuen Mint Account erfordert eine Transaktion mit zwei Anweisungen. Hier ist ein Javascript-Beispiel auf Solana Playground.

  1. 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.

  2. 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:

Terminal
$
spl-token create-account <TOKEN_ADDRESS>

Beispielbefehl:

Example
spl-token create-account 99zqUzQGohamfYxyo8ykTEbi91iom3CLmwCA75FK5zTg

Ausgabe:

Terminal Output
Creating account AfB7uwBEsGtrrBqPTVqEgzWed5XdYfM1psPNLmf7EeX9
Signature: 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:

Terminal
$
spl-token create-account --owner <OWNER_ADDRESS> <TOKEN_ADDRESS>

Hinweis: <TOKEN_ADDRESS> gibt das mint account für das token account an.

Beispielbefehl:

Example
spl-token create-account --owner 2i3KvjDCZWxBsqcxBHpdEaZYQwQSYE6LXUMx5VjY5XrR 99zqUzQGohamfYxyo8ykTEbi91iom3CLmwCA75FK5zTg

Ausgabe:

Terminal Output
Creating account Hmyk3FSw4cfsuAes7sanp2oxSkE9ivaH6pMzDzbacqmt
Signature: 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:

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.

  1. 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.

  2. 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:

Terminal
$
spl-token mint [OPTIONS] <TOKEN_ADDRESS> <TOKEN_AMOUNT> [--] [RECIPIENT_TOKEN_ACCOUNT_ADDRESS]

Beispielbefehl:

Example
spl-token mint 99zqUzQGohamfYxyo8ykTEbi91iom3CLmwCA75FK5zTg 100

Ausgabe:

Terminal Output
Minting 100 tokens
Token: 99zqUzQGohamfYxyo8ykTEbi91iom3CLmwCA75FK5zTg
Recipient: AfB7uwBEsGtrrBqPTVqEgzWed5XdYfM1psPNLmf7EeX9
Signature: 2NJ1m7qCraPSBAVxbr2ssmWZmBU9Jc8pDtJAnyZsZJRcaYCYMqq1oRY1gqA4ddQno3g3xcnny5fzr1dvsnFKMEqG

Um Tokens auf ein anderes token account zu prägen:

Example
spl-token mint 99zqUzQGohamfYxyo8ykTEbi91iom3CLmwCA75FK5zTg 100 -- Hmyk3FSw4cfsuAes7sanp2oxSkE9ivaH6pMzDzbacqmt

Ausgabe:

Terminal Output
Minting 100 tokens
Token: 99zqUzQGohamfYxyo8ykTEbi91iom3CLmwCA75FK5zTg
Recipient: Hmyk3FSw4cfsuAes7sanp2oxSkE9ivaH6pMzDzbacqmt
Signature: 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:

Terminal
spl-token transfer [OPTIONS] <TOKEN_ADDRESS> <TOKEN_AMOUNT> <RECIPIENT_ADDRESS or RECIPIENT_TOKEN_ACCOUNT_ADDRESS>

Beispielbefehl:

Example
spl-token transfer 99zqUzQGohamfYxyo8ykTEbi91iom3CLmwCA75FK5zTg 100 Hmyk3FSw4cfsuAes7sanp2oxSkE9ivaH6pMzDzbacqmt

Ausgabe:

Terminal Output
Transfer 100 tokens
Sender: AfB7uwBEsGtrrBqPTVqEgzWed5XdYfM1psPNLmf7EeX9
Recipient: Hmyk3FSw4cfsuAes7sanp2oxSkE9ivaH6pMzDzbacqmt
Signature: 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:

Example
spl-token create-token --program-id TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb --enable-metadata

Ausgabe:

Terminal Output
Creating token BdhzpzhTD1MFqBiwNdrRy4jFo2FHFufw3n9e8sVjJczP under program TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb
To 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: BdhzpzhTD1MFqBiwNdrRy4jFo2FHFufw3n9e8sVjJczP
Decimals: 9
Signature: 5iQofFeXdYhMi9uTzZghcq8stAaa6CY6saUwcdnELST13eNSifiuLbvR5DnRt311frkCTUh5oecj8YEvZSB3wfai

Um die Metadaten zu initialisieren:

Terminal
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:

Example
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?

Inhaltsverzeichnis

Seite bearbeiten