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 Program (Αρχικό)
- Βασική λειτουργικότητα token (έκδοση, μεταφορά, κλπ.)
- Αμετάβλητο και ευρέως χρησιμοποιούμενο
Token Extension Program (Token 2022)
- Περιλαμβάνει όλες τις λειτουργίες του αρχικού Token Program
- Προσθέτει λειτουργίες μέσω "επεκτάσεων"
Τα Token Programs περιέχουν όλη τη λογική εντολών για αλληλεπίδραση με tokens στο δίκτυο (τόσο ανταλλάξιμα όσο και μη ανταλλάξιμα). Όλα τα tokens στο Solana είναι ουσιαστικά λογαριασμοί δεδομένων που ανήκουν σε ένα Token Program.
Token Program
Mint Account
Τα tokens στο Solana αναγνωρίζονται μοναδικά από τη διεύθυνση ενός Mint Account που ανήκει στο Token Program. Αυτός ο λογαριασμός λειτουργεί ως ένας παγκόσμιος μετρητής για ένα συγκεκριμένο token και αποθηκεύει δεδομένα όπως:
- Προσφορά: Συνολική προσφορά του token
- Δεκαδικά: Δεκαδική ακρίβεια του token
- Αρχή έκδοσης: Ο λογαριασμός που είναι εξουσιοδοτημένος να δημιουργεί νέες μονάδες του token, αυξάνοντας την προσφορά
- Αρχή δέσμευσης: Ο λογαριασμός που είναι εξουσιοδοτημένος να δεσμεύει tokens σε ένα Token Account, εμποδίζοντας τη μεταφορά ή την καταστροφή τους
Mint Account
Οι πλήρεις λεπτομέρειες που αποθηκεύονται σε κάθε Mint Account περιλαμβάνουν τα εξής:
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>,}
Για αναφορά, εδώ είναι ένας σύνδεσμος 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 Account
Οι πλήρεις λεπτομέρειες που αποθηκεύονται σε κάθε Token Account περιλαμβάνουν τα εξής:
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>,}
Ένα πορτοφόλι χρειάζεται ένα token account για κάθε token (mint) που θέλει να κατέχει, με τη διεύθυνση του πορτοφολιού να ορίζεται ως ιδιοκτήτης του token account. Κάθε πορτοφόλι μπορεί να κατέχει πολλαπλά token accounts για το ίδιο token (mint), αλλά ένα token account μπορεί να έχει μόνο έναν ιδιοκτήτη και να κατέχει μονάδες ενός token (mint).
Account 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 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.
$solana airdrop 2
Εκτελέστε spl-token --help
για να δείτε όλες τις διαθέσιμες εντολές.
$spl-token --help
Για να εγκαταστήσετε τοπικά το CLI spl-token
, εκτελέστε:
$cargo install spl-token-cli
Βρείτε περισσότερα παραδείγματα στην spl-token
τεκμηρίωση.
Οι διευθύνσεις λογαριασμών που εμφανίζονται στην έξοδο του τερματικού σας
διαφέρουν από τα παραδείγματα παρακάτω. Χρησιμοποιήστε τις διευθύνσεις από το
τερματικό του Playground σας όταν ακολουθείτε τα βήματα. Για παράδειγμα, η
εντολή create-token
εξάγει μια διεύθυνση mint account με το πορτοφόλι
Playground σας ως mint authority.
Δημιουργία νέου Token
Για να δημιουργήσετε ένα νέο token (mint account), εκτελέστε:
$spl-token create-token
Η έξοδος μοιάζει με:
Creating token 99zqUzQGohamfYxyo8ykTEbi91iom3CLmwCA75FK5zTgAddress: 99zqUzQGohamfYxyo8ykTEbi91iom3CLmwCA75FK5zTgDecimals: 9Signature: 44fvKfT1ezBUwdzrCys3fvCdFxbLMnNvBstds76QZyE6cXag5NupBprSXwxPTzzjrC3cA6nvUZaLFTvmcKyzxrm1
Ένας νέος mint account ξεκινά με μηδενικό απόθεμα. Ελέγξτε το τρέχον απόθεμα με:
$spl-token supply <TOKEN_ADDRESS>
Η εντολή supply
για ένα νέο token επιστρέφει 0
:
spl-token supply 99zqUzQGohamfYxyo8ykTEbi91iom3CLmwCA75FK5zTg
Η δημιουργία ενός νέου Mint Account απαιτεί μια συναλλαγή με δύο οδηγίες. Εδώ είναι ένα παράδειγμα σε Javascript στο Solana Playground.
-
Το System Program δημιουργεί έναν νέο λογαριασμό με χώρο για τα δεδομένα του Mint Account και μεταφέρει την ιδιοκτησία στο Token Program.
-
Το Token Program αρχικοποιεί τα δεδομένα του νέου λογαριασμού ως Mint Account
Δημιουργία Token Account
Για να διατηρήσετε tokens ενός συγκεκριμένου mint, δημιουργήστε ένα token account:
$spl-token create-account <TOKEN_ADDRESS>
Παράδειγμα εντολής:
spl-token create-account 99zqUzQGohamfYxyo8ykTEbi91iom3CLmwCA75FK5zTg
Έξοδος:
Creating account AfB7uwBEsGtrrBqPTVqEgzWed5XdYfM1psPNLmf7EeX9Signature: 2BtrynuCLX9CNofFiaw6Yzbx6hit66pup9Sk7aFjwU2NEbFz7NCHD9w9sWhrCfEd73XveAGK1DxFpJoQZPXU9tS1
Η εντολή create-account
δημιουργεί ένα associated token account με τη
διεύθυνση του πορτοφολιού σας ως ιδιοκτήτη.
Για να δημιουργήσετε ένα token account με διαφορετικό ιδιοκτήτη:
$spl-token create-account --owner <OWNER_ADDRESS> <TOKEN_ADDRESS>
Σημείωση: Το <TOKEN_ADDRESS>
καθορίζει το mint account για το token account.
Παράδειγμα εντολής:
spl-token create-account --owner 2i3KvjDCZWxBsqcxBHpdEaZYQwQSYE6LXUMx5VjY5XrR 99zqUzQGohamfYxyo8ykTEbi91iom3CLmwCA75FK5zTg
Έξοδος:
Creating account Hmyk3FSw4cfsuAes7sanp2oxSkE9ivaH6pMzDzbacqmtSignature: 44vqKdfzspT592REDPY4goaRJH3uJ3Ce13G4BCuUHg35dVUbHuGTHvqn4ZjYF9BGe9QrjMfe9GmuLkQhSZCBQuEt
Η δημιουργία ενός Associated Token Account απαιτεί μία οδηγία που επικαλείται το Associated Token Program. Εδώ είναι ένα παράδειγμα σε Javascript στο Solana Playground.
Το Associated Token Program χρησιμοποιεί Cross Program Invocations για να:
- Επικαλεστεί το System Program για να δημιουργήσει έναν νέο λογαριασμό χρησιμοποιώντας το παρεχόμενο PDA ως διεύθυνση
- Επικαλεστεί το Token Program για να αρχικοποιήσει τα δεδομένα του Token Account
Για να δημιουργήσετε έναν νέο Token Account με ένα νέο keypair αντί για μια διεύθυνση Associated Token Account, στείλτε μια συναλλαγή με δύο οδηγίες. Εδώ είναι ένα παράδειγμα σε Javascript στο Solana Playground.
-
Το System Program δημιουργεί έναν νέο λογαριασμό με χώρο για τα δεδομένα του Token Account και μεταφέρει την ιδιοκτησία στο Token Program.
-
Το Token Program αρχικοποιεί τα δεδομένα ως Token Account
Έκδοση Tokens
Για να δημιουργήσετε νέες μονάδες ενός token, εκδώστε tokens σε ένα Token Account:
$spl-token mint [OPTIONS] <TOKEN_ADDRESS> <TOKEN_AMOUNT> [--] [RECIPIENT_TOKEN_ACCOUNT_ADDRESS]
Παράδειγμα εντολής:
spl-token mint 99zqUzQGohamfYxyo8ykTEbi91iom3CLmwCA75FK5zTg 100
Έξοδος:
Minting 100 tokensToken: 99zqUzQGohamfYxyo8ykTEbi91iom3CLmwCA75FK5zTgRecipient: AfB7uwBEsGtrrBqPTVqEgzWed5XdYfM1psPNLmf7EeX9Signature: 2NJ1m7qCraPSBAVxbr2ssmWZmBU9Jc8pDtJAnyZsZJRcaYCYMqq1oRY1gqA4ddQno3g3xcnny5fzr1dvsnFKMEqG
Για να εκδώσετε tokens σε διαφορετικό token account:
spl-token mint 99zqUzQGohamfYxyo8ykTEbi91iom3CLmwCA75FK5zTg 100 -- Hmyk3FSw4cfsuAes7sanp2oxSkE9ivaH6pMzDzbacqmt
Έξοδος:
Minting 100 tokensToken: 99zqUzQGohamfYxyo8ykTEbi91iom3CLmwCA75FK5zTgRecipient: Hmyk3FSw4cfsuAes7sanp2oxSkE9ivaH6pMzDzbacqmtSignature: 3SQvNM3o9DsTiLwcEkSPT1Edr14RgE2wC54TEjonEP2swyVCp2jPWYWdD6RwXUGpvDNUkKWzVBZVFShn5yntxVd7
Η οδηγία MintTo
στο Token Program δημιουργεί νέα tokens. Η αρχή έκδοσης
πρέπει να υπογράψει τη συναλλαγή. Η οδηγία εκδίδει tokens σε ένα Token Account
και αυξάνει τη συνολική προσφορά στο Mint Account. Εδώ είναι ένα παράδειγμα σε
Javascript στο
Solana Playground.
Μεταφορά Tokens
Για να μεταφέρετε tokens μεταξύ token accounts:
spl-token transfer [OPTIONS] <TOKEN_ADDRESS> <TOKEN_AMOUNT> <RECIPIENT_ADDRESS or RECIPIENT_TOKEN_ACCOUNT_ADDRESS>
Παράδειγμα εντολής:
spl-token transfer 99zqUzQGohamfYxyo8ykTEbi91iom3CLmwCA75FK5zTg 100 Hmyk3FSw4cfsuAes7sanp2oxSkE9ivaH6pMzDzbacqmt
Έξοδος:
Transfer 100 tokensSender: AfB7uwBEsGtrrBqPTVqEgzWed5XdYfM1psPNLmf7EeX9Recipient: Hmyk3FSw4cfsuAes7sanp2oxSkE9ivaH6pMzDzbacqmtSignature: 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 με επέκταση μεταδεδομένων:
spl-token create-token --program-id TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb --enable-metadata
Έξοδος:
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
Για να αρχικοποιήσετε τα μεταδεδομένα:
spl-token initialize-metadata <TOKEN_MINT_ADDRESS> <YOUR_TOKEN_NAME> <YOUR_TOKEN_SYMBOL> <YOUR_TOKEN_URI>
Το URI του token συνδέεται με μεταδεδομένα εκτός αλυσίδας. Δείτε ένα παράδειγμα μορφής JSON εδώ.
Παράδειγμα εντολής:
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?