Τα tokens είναι ψηφιακά περιουσιακά στοιχεία που αντιπροσωπεύουν την κυριότητα σε διάφορες κατηγορίες περιουσιακών στοιχείων. Η tokenization επιτρέπει την ψηφιοποίηση των δικαιωμάτων ιδιοκτησίας. Τα tokens στο Solana αναφέρονται ως SPL (Solana Program Library) Tokens.
Αυτή η ενότητα καλύπτει τις βασικές έννοιες του τρόπου με τον οποίο αντιπροσωπεύονται τα tokens στο Solana. Ανατρέξτε στην ενότητα SPL Token Basics για παραδείγματα κώδικα.
Βασικά σημεία
-
Τα Token Programs περιέχουν όλη τη λογική εντολών για την αλληλεπίδραση με tokens στο δίκτυο (τόσο fungible όσο και non-fungible).
-
Ένα Mint Account αντιπροσωπεύει ένα συγκεκριμένο token και αποθηκεύει καθολικά μεταδεδομένα σχετικά με το token, όπως η συνολική προσφορά και η αρχή έκδοσης (διεύθυνση εξουσιοδοτημένη να δημιουργεί νέες μονάδες ενός token).
-
Ένα Token Account παρακολουθεί την ατομική κυριότητα των tokens για ένα συγκεκριμένο mint account για έναν συγκεκριμένο ιδιοκτήτη.
-
Ένα Associated Token Account είναι ένα Token Account που δημιουργείται με διεύθυνση που προέρχεται από τις διευθύνσεις του ιδιοκτήτη και του mint account.
Token Programs
Το οικοσύστημα του Solana διαθέτει δύο κύρια Token Programs. Ο πηγαίος κώδικας και για τα δύο προγράμματα παρακάτω.
Token Program (Original)
- Βασική λειτουργικότητα token (mint, transfer κ.λπ.)
- Αμετάβλητο και ευρέως χρησιμοποιούμενο
Token Extension Program (Token 2022)
- Περιλαμβάνει όλες τις λειτουργίες του αρχικού Token Program
- Προσθέτει λειτουργίες μέσω "επεκτάσεων"
Το Token Programs περιέχει όλη τη λογική εντολών για την αλληλεπίδραση με tokens στο δίκτυο (τόσο fungible όσο και non-fungible). Όλα τα tokens στο Solana είναι στην ουσία λογαριασμοί δεδομένων που ανήκουν σε ένα Token Program.
Token Program
Mint Account
Τα tokens στο Solana αναγνωρίζονται μοναδικά από τη διεύθυνση ενός Mint Account που ανήκει στο Token Program. Αυτός ο λογαριασμός λειτουργεί ως καθολικός μετρητής για ένα συγκεκριμένο token και αποθηκεύει δεδομένα όπως:
- Supply: Συνολική προσφορά του token
- Decimals: Δεκαδική ακρίβεια του token
- Mint authority: Ο λογαριασμός που έχει εξουσιοδότηση να δημιουργεί νέες μονάδες του token, αυξάνοντας την προσφορά
- Freeze authority: Ο λογαριασμός που έχει εξουσιοδότηση να παγώνει tokens σε ένα Token Account, εμποδίζοντάς τα να μεταφερθούν ή να καούν
Η εξουσιοδότηση mint διαμορφώνεται κατά την αρχικοποίηση του mint. Εξουσιοδοτεί μελλοντικές λειτουργίες minting, αλλά δεν είναι απαραίτητο να είναι ο λογαριασμός που δημιούργησε ή πλήρωσε για το mint 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 κατέχει μονάδες
- Owner: Ο λογαριασμός που έχει εξουσιοδότηση να μεταφέρει tokens από το Token Account
- Amount: Αριθμός των 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 και ιδιοκτήτη.
Ένας Associated Token Account δημιουργείται με μια διεύθυνση που προέρχεται από τη διεύθυνση του ιδιοκτήτη και τη διεύθυνση του mint account. Είναι σημαντικό να κατανοήσετε ότι ένας Associated Token Account είναι απλώς ένας token account με μια συγκεκριμένη διεύθυνση.
Αυτό εισάγει μια βασική έννοια στην ανάπτυξη Solana: το Program Derived Address (PDA). Ένα PDA παράγει μια διεύθυνση ντετερμινιστικά χρησιμοποιώντας προκαθορισμένες εισόδους, διευκολύνοντας την εύρεση της διεύθυνσης ενός λογαριασμού.
Associated Token Account
Σημειώστε ότι κάθε πορτοφόλι χρειάζεται το δικό του token account για να κατέχει tokens από το ίδιο mint.
Επεκταμένη σχέση λογαριασμών
Is this page helpful?