Tokens στο Solana

Τα tokens είναι ψηφιακά περιουσιακά στοιχεία που αντιπροσωπεύουν την ιδιοκτησία διαφόρων κατηγοριών περιουσιακών στοιχείων. Η τοκενοποίηση επιτρέπει την ψηφιοποίηση των δικαιωμάτων ιδιοκτησίας. Τα tokens στο Solana αναφέρονται ως SPL (Solana Program Library) Tokens.

Αυτή η ενότητα καλύπτει τις βασικές έννοιες του πώς αναπαρίστανται τα tokens στο Solana. Ανατρέξτε στην ενότητα Βασικά SPL Token για παραδείγματα κώδικα.

Βασικά Σημεία

  • Τα Token Programs περιέχουν όλη τη λογική εντολών για αλληλεπίδραση με tokens στο δίκτυο (τόσο ανταλλάξιμα όσο και μη ανταλλάξιμα).

  • Ένα Mint Account αντιπροσωπεύει ένα συγκεκριμένο token και αποθηκεύει παγκόσμια μεταδεδομένα σχετικά με το token όπως η συνολική προσφορά και η αρχή έκδοσης (διεύθυνση εξουσιοδοτημένη να δημιουργεί νέες μονάδες ενός token).

  • Ένα Token Account παρακολουθεί την ατομική ιδιοκτησία των tokens για ένα συγκεκριμένο mint account για έναν συγκεκριμένο ιδιοκτήτη.

  • Ένα Associated Token Account είναι ένα Token Account που δημιουργείται με μια διεύθυνση που προέρχεται από τις διευθύνσεις του ιδιοκτήτη και του mint account.

Token Programs

Το οικοσύστημα του Solana έχει δύο κύρια Token Programs. Ο πηγαίος κώδικας και για τα δύο προγράμματα παρακάτω.

Τα Token Programs περιέχουν όλη τη λογική εντολών για αλληλεπίδραση με tokens στο δίκτυο (τόσο ανταλλάξιμα όσο και μη ανταλλάξιμα). Όλα τα tokens στο Solana είναι ουσιαστικά λογαριασμοί δεδομένων που ανήκουν σε ένα Token Program.

Token ProgramToken Program

Mint Account

Τα tokens στο Solana αναγνωρίζονται μοναδικά από τη διεύθυνση ενός Mint Account που ανήκει στο Token Program. Αυτός ο λογαριασμός λειτουργεί ως ένας παγκόσμιος μετρητής για ένα συγκεκριμένο token και αποθηκεύει δεδομένα όπως:

  • Προσφορά: Συνολική προσφορά του token
  • Δεκαδικά: Δεκαδική ακρίβεια του token
  • Αρχή έκδοσης: Ο λογαριασμός που είναι εξουσιοδοτημένος να δημιουργεί νέες μονάδες του token, αυξάνοντας την προσφορά
  • Αρχή δέσμευσης: Ο λογαριασμός που είναι εξουσιοδοτημένος να δεσμεύει tokens σε ένα Token Account, εμποδίζοντας τη μεταφορά ή την καταστροφή τους

Mint AccountMint Account

Οι πλήρεις λεπτομέρειες που αποθηκεύονται σε κάθε Mint Account περιλαμβάνουν τα εξής:

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>,
}

Για αναφορά, εδώ είναι ένας σύνδεσμος Solana Explorer στο USDC Mint Account.

Token Account

Το Token Program δημιουργεί Token Accounts για να παρακολουθεί την ατομική ιδιοκτησία κάθε μονάδας token. Ένα Token Account αποθηκεύει δεδομένα όπως:

  • Mint: Το token που κατέχει μονάδες το Token Account
  • Ιδιοκτήτης: Ο λογαριασμός που είναι εξουσιοδοτημένος να μεταφέρει tokens από το Token Account
  • Ποσό: Αριθμός των tokens που κατέχει αυτή τη στιγμή το Token Account

Token AccountToken Account

Οι πλήρεις λεπτομέρειες που αποθηκεύονται σε κάθε Token Account περιλαμβάνουν τα εξής:

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>,
}

Ένα πορτοφόλι χρειάζεται ένα token account για κάθε token (mint) που θέλει να κατέχει, με τη διεύθυνση του πορτοφολιού να ορίζεται ως ιδιοκτήτης του token account. Κάθε πορτοφόλι μπορεί να κατέχει πολλαπλά token accounts για το ίδιο token (mint), αλλά ένα token account μπορεί να έχει μόνο έναν ιδιοκτήτη και να κατέχει μονάδες ενός token (mint).

Account RelationshipAccount Relationship

Σημειώστε ότι τα δεδομένα κάθε Token Account περιλαμβάνουν ένα πεδίο owner που προσδιορίζει ποιος έχει εξουσία πάνω στο Token Account. Αυτό διαφέρει από τον ιδιοκτήτη προγράμματος που καθορίζεται στον βασικό τύπο Account, ο οποίος είναι το Token Program για όλα τα Token Accounts.

Associated Token Account

Τα Associated Token Accounts απλοποιούν τη διαδικασία εύρεσης της διεύθυνσης ενός token account για ένα συγκεκριμένο mint και ιδιοκτήτη. Σκεφτείτε το Associated Token Account ως το "προεπιλεγμένο" token account για ένα συγκεκριμένο mint και ιδιοκτήτη.

Ένας Συσχετισμένος Λογαριασμός Token (Associated Token Account) δημιουργείται με μια διεύθυνση που προέρχεται από τη διεύθυνση του ιδιοκτήτη και τη διεύθυνση του mint account. Είναι σημαντικό να κατανοήσουμε ότι ένας Associated Token Account είναι απλώς ένας token account με συγκεκριμένη διεύθυνση.

Αυτό εισάγει μια βασική έννοια στην ανάπτυξη Solana: Program Derived Address (PDA). Ένα PDA παράγει μια διεύθυνση ντετερμινιστικά χρησιμοποιώντας προκαθορισμένες εισόδους, διευκολύνοντας την εύρεση της διεύθυνσης ενός λογαριασμού.

Associated Token AccountAssociated Token Account

Σημειώστε ότι κάθε πορτοφόλι χρειάζεται το δικό του token account για να διατηρεί tokens από το ίδιο mint.

Σχέση Λογαριασμών ΕπεκταμένηΣχέση Λογαριασμών Επεκταμένη

Παραδείγματα Token CLI

Το CLI spl-token σας βοηθά να πειραματιστείτε με τα SPL tokens. Τα παραδείγματα παρακάτω χρησιμοποιούν το τερματικό του Solana Playground για να εκτελέσουν εντολές CLI απευθείας στο πρόγραμμα περιήγησης χωρίς τοπική εγκατάσταση.

Η δημιουργία tokens και λογαριασμών απαιτεί SOL για καταθέσεις rent λογαριασμών και χρεώσεις συναλλαγών. Για χρήστες που χρησιμοποιούν το Solana Playground για πρώτη φορά, δημιουργήστε ένα πορτοφόλι Playground και εκτελέστε την εντολή solana airdrop στο τερματικό του Playground. Μπορείτε επίσης να λάβετε devnet SOL από το δημόσιο web faucet.

Terminal
$
solana airdrop 2

Εκτελέστε spl-token --help για να δείτε όλες τις διαθέσιμες εντολές.

Terminal
$
spl-token --help

Για να εγκαταστήσετε τοπικά το CLI spl-token, εκτελέστε:

Terminal
$
cargo install spl-token-cli

Βρείτε περισσότερα παραδείγματα στην spl-token τεκμηρίωση.

Οι διευθύνσεις λογαριασμών που εμφανίζονται στην έξοδο του τερματικού σας διαφέρουν από τα παραδείγματα παρακάτω. Χρησιμοποιήστε τις διευθύνσεις από το τερματικό του Playground σας όταν ακολουθείτε τα βήματα. Για παράδειγμα, η εντολή create-token εξάγει μια διεύθυνση mint account με το πορτοφόλι Playground σας ως mint authority.

Δημιουργία νέου Token

Για να δημιουργήσετε ένα νέο token (mint account), εκτελέστε:

Terminal
$
spl-token create-token

Η έξοδος μοιάζει με:

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

Ένας νέος mint account ξεκινά με μηδενικό απόθεμα. Ελέγξτε το τρέχον απόθεμα με:

Terminal
$
spl-token supply <TOKEN_ADDRESS>

Η εντολή supply για ένα νέο token επιστρέφει 0:

Example
spl-token supply 99zqUzQGohamfYxyo8ykTEbi91iom3CLmwCA75FK5zTg

Η δημιουργία ενός νέου Mint Account απαιτεί μια συναλλαγή με δύο οδηγίες. Εδώ είναι ένα παράδειγμα σε Javascript στο Solana Playground.

  1. Το System Program δημιουργεί έναν νέο λογαριασμό με χώρο για τα δεδομένα του Mint Account και μεταφέρει την ιδιοκτησία στο Token Program.

  2. Το Token Program αρχικοποιεί τα δεδομένα του νέου λογαριασμού ως Mint Account

Δημιουργία Token Account

Για να διατηρήσετε tokens ενός συγκεκριμένου mint, δημιουργήστε ένα token account:

Terminal
$
spl-token create-account <TOKEN_ADDRESS>

Παράδειγμα εντολής:

Example
spl-token create-account 99zqUzQGohamfYxyo8ykTEbi91iom3CLmwCA75FK5zTg

Έξοδος:

Terminal Output
Creating account AfB7uwBEsGtrrBqPTVqEgzWed5XdYfM1psPNLmf7EeX9
Signature: 2BtrynuCLX9CNofFiaw6Yzbx6hit66pup9Sk7aFjwU2NEbFz7NCHD9w9sWhrCfEd73XveAGK1DxFpJoQZPXU9tS1

Η εντολή create-account δημιουργεί ένα associated token account με τη διεύθυνση του πορτοφολιού σας ως ιδιοκτήτη.

Για να δημιουργήσετε ένα token account με διαφορετικό ιδιοκτήτη:

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

Σημείωση: Το <TOKEN_ADDRESS> καθορίζει το mint account για το token account.

Παράδειγμα εντολής:

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

Έξοδος:

Terminal Output
Creating account Hmyk3FSw4cfsuAes7sanp2oxSkE9ivaH6pMzDzbacqmt
Signature: 44vqKdfzspT592REDPY4goaRJH3uJ3Ce13G4BCuUHg35dVUbHuGTHvqn4ZjYF9BGe9QrjMfe9GmuLkQhSZCBQuEt

Η δημιουργία ενός Associated Token Account απαιτεί μία οδηγία που επικαλείται το Associated Token Program. Εδώ είναι ένα παράδειγμα σε Javascript στο Solana Playground.

Το Associated Token Program χρησιμοποιεί Cross Program Invocations για να:

Για να δημιουργήσετε έναν νέο Token Account με ένα νέο keypair αντί για μια διεύθυνση Associated Token Account, στείλτε μια συναλλαγή με δύο οδηγίες. Εδώ είναι ένα παράδειγμα σε Javascript στο Solana Playground.

  1. Το System Program δημιουργεί έναν νέο λογαριασμό με χώρο για τα δεδομένα του Token Account και μεταφέρει την ιδιοκτησία στο Token Program.

  2. Το Token Program αρχικοποιεί τα δεδομένα ως Token Account

Έκδοση Tokens

Για να δημιουργήσετε νέες μονάδες ενός token, εκδώστε tokens σε ένα Token Account:

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

Παράδειγμα εντολής:

Example
spl-token mint 99zqUzQGohamfYxyo8ykTEbi91iom3CLmwCA75FK5zTg 100

Έξοδος:

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

Για να εκδώσετε tokens σε διαφορετικό token account:

Example
spl-token mint 99zqUzQGohamfYxyo8ykTEbi91iom3CLmwCA75FK5zTg 100 -- Hmyk3FSw4cfsuAes7sanp2oxSkE9ivaH6pMzDzbacqmt

Έξοδος:

Terminal Output
Minting 100 tokens
Token: 99zqUzQGohamfYxyo8ykTEbi91iom3CLmwCA75FK5zTg
Recipient: Hmyk3FSw4cfsuAes7sanp2oxSkE9ivaH6pMzDzbacqmt
Signature: 3SQvNM3o9DsTiLwcEkSPT1Edr14RgE2wC54TEjonEP2swyVCp2jPWYWdD6RwXUGpvDNUkKWzVBZVFShn5yntxVd7

Η οδηγία MintTo στο Token Program δημιουργεί νέα tokens. Η αρχή έκδοσης πρέπει να υπογράψει τη συναλλαγή. Η οδηγία εκδίδει tokens σε ένα Token Account και αυξάνει τη συνολική προσφορά στο Mint Account. Εδώ είναι ένα παράδειγμα σε Javascript στο Solana Playground.

Μεταφορά Tokens

Για να μεταφέρετε tokens μεταξύ token accounts:

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

Παράδειγμα εντολής:

Example
spl-token transfer 99zqUzQGohamfYxyo8ykTEbi91iom3CLmwCA75FK5zTg 100 Hmyk3FSw4cfsuAes7sanp2oxSkE9ivaH6pMzDzbacqmt

Έξοδος:

Terminal Output
Transfer 100 tokens
Sender: AfB7uwBEsGtrrBqPTVqEgzWed5XdYfM1psPNLmf7EeX9
Recipient: Hmyk3FSw4cfsuAes7sanp2oxSkE9ivaH6pMzDzbacqmt
Signature: 5y6HVwV8V2hHGLTVmTmdySRiEUCZnWmkasAvJ7J6m7JR46obbGKCBqUFgLpZu5zQGwM4Xy6GZ4M5LKd1h6Padx3o

Η οδηγία Transfer στο Token Program διαχειρίζεται τις μεταφορές tokens. Ο ιδιοκτήτης του Token Account του αποστολέα πρέπει να υπογράψει τη συναλλαγή. Η οδηγία μετακινεί tokens μεταξύ Token Accounts. Εδώ είναι ένα παράδειγμα σε Javascript στο Solana Playground.

Τόσο ο αποστολέας όσο και ο παραλήπτης χρειάζονται token accounts για το συγκεκριμένο token (mint). Ο αποστολέας μπορεί να συμπεριλάβει οδηγίες για τη δημιουργία του token account του παραλήπτη στην ίδια συναλλαγή.

Δημιουργία Μεταδεδομένων Token

Το Token Extensions Program σας επιτρέπει να αποθηκεύετε μεταδεδομένα (όνομα, σύμβολο, σύνδεσμο εικόνας) απευθείας στο Mint Account.

Για να δημιουργήσετε ένα token με επέκταση μεταδεδομένων:

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

Έξοδος:

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

Για να αρχικοποιήσετε τα μεταδεδομένα:

Terminal
spl-token initialize-metadata <TOKEN_MINT_ADDRESS> <YOUR_TOKEN_NAME> <YOUR_TOKEN_SYMBOL> <YOUR_TOKEN_URI>

Το URI του token συνδέεται με μεταδεδομένα εκτός αλυσίδας. Δείτε ένα παράδειγμα μορφής JSON εδώ.

Παράδειγμα εντολής:

Example
spl-token initialize-metadata BdhzpzhTD1MFqBiwNdrRy4jFo2FHFufw3n9e8sVjJczP "TokenName" "TokenSymbol" "https://raw.githubusercontent.com/solana-developers/opos-asset/main/assets/DeveloperPortal/metadata.json"

Δείτε τα μεταδεδομένα στον Solana Explorer.

Μάθετε περισσότερα στον Οδηγό Επέκτασης Μεταδεδομένων. Για λεπτομέρειες σχετικά με τα Token Extensions, δείτε τον οδηγό Ξεκινώντας με τα Token Extensions και την τεκμηρίωση SPL.

Is this page helpful?

Πίνακας Περιεχομένων

Επεξεργασία Σελίδας