Περίληψη
Οι λογαριασμοί έχουν 5 πεδία: lamports, data, owner, executable και rent_epoch. Κάθε λογαριασμός αναγνωρίζεται από μια μοναδική διεύθυνση 32 bytes. Οι λογαριασμοί πρέπει να διατηρούν ένα ελάχιστο υπόλοιπο lamport ανάλογο με το μέγεθος των δεδομένων τους για να παραμείνουν on-chain.
Διεύθυνση λογαριασμού
Κάθε διεύθυνση λογαριασμού είναι μια τιμή 32 bytes, που εμφανίζεται ως συμβολοσειρά κωδικοποιημένη σε base58. Μια διεύθυνση μπορεί να είναι ένας από δύο τύπους:
- Public key: αντιστοιχεί σε ένα Ed25519 keypair (έχει private key)
- Program Derived Address (PDA): παράγεται ντετερμινιστικά από ένα program ID και seeds (χωρίς private key)
Ένας λογαριασμός με τη διεύθυνση του public key κωδικοποιημένη σε base58
Public key
Ένα Keypair αποτελείται από ένα public key (που χρησιμοποιείται ως
διεύθυνση λογαριασμού) και ένα private key (που χρησιμοποιείται για την υπογραφή
συναλλαγών). Το παρακάτω παράδειγμα δημιουργεί ένα keypair χρησιμοποιώντας το
Solana SDK.
import { generateKeyPairSigner } from "@solana/kit";// Kit does not enable extractable private keysconst keypairSigner = await generateKeyPairSigner();console.log(keypairSigner);
Program Derived Address
Ένα Program Derived Address (PDA) παράγεται ντετερμινιστικά από ένα program ID και ένα ή περισσότερα προαιρετικά seeds. Τα PDAs δεν έχουν αντίστοιχο private key. Το παρακάτω παράδειγμα παράγει ένα PDA χρησιμοποιώντας το Solana SDK.
import { Address, getProgramDerivedAddress } from "@solana/kit";const programAddress = "11111111111111111111111111111111" as Address;const seeds = ["helloWorld"];const [pda, bump] = await getProgramDerivedAddress({programAddress,seeds});console.log(`PDA: ${pda}`);console.log(`Bump: ${bump}`);
Πεδία λογαριασμού
Κάθε
Account
έχει μέγιστο μέγεθος
MAX_ACCOUNT_DATA_LEN
(10 MiB, ισοδύναμο με MAX_PERMITTED_DATA_LENGTH) και περιέχει πέντε πεδία:
| Πεδίο | Τύπος | Περιγραφή |
|---|---|---|
lamports | u64 | Υπόλοιπο σε lamports. Ο κάτοχος μπορεί να χρεώσει· οποιοδήποτε πρόγραμμα μπορεί να πιστώσει. |
data | Vec<u8> | Κατάσταση λογαριασμού ή bytecode προγράμματος. Μέγιστο 10 MiB. Εγγράψιμο μόνο από τον κάτοχο. |
owner | Pubkey | Πρόγραμμα με δικαίωμα εγγραφής. Επαναπροσδιορίζεται μόνο όταν τα δεδομένα είναι μηδενισμένα. |
executable | bool | True = λογαριασμός προγράμματος. |
rent_epoch | Epoch | Καταργημένο. Ορίζεται σε u64::MAX για λογαριασμούς απαλλαγμένους από rent. |
pub struct Account {/// lamports in the accountpub lamports: u64,/// data held in this account#[cfg_attr(feature = "serde", serde(with = "serde_bytes"))]pub data: Vec<u8>,/// the program that owns this account. If executable, the program that loads this account.pub owner: Pubkey,/// if true, this account's data contains a program (and is now read-only)pub executable: bool,/// deprecatedpub rent_epoch: Epoch,}
Lamports
Το πεδίο lamports περιέχει το υπόλοιπο του λογαριασμού σε
lamports (1 SOL = 1.000.000.000
lamports).
Κάθε λογαριασμός πρέπει να διατηρεί ένα ελάχιστο υπόλοιπο lamports, γνωστό ως υπόλοιπο απαλλαγής από rent, για να διατηρούνται τα δεδομένα του on-chain. Αυτό το υπόλοιπο είναι ανάλογο με το μέγεθος των δεδομένων του λογαριασμού.
Αν και συχνά αποκαλείται "rent", το υπόλοιπο απαλλαγής από rent λειτουργεί ως επιστρεπτέα κατάθεση· το πλήρες υπόλοιπο ανακτάται όταν ο λογαριασμός κλείσει.
Δείτε
minimum_balance()
και τις
σταθερές
rent.
Δεδομένα
Το πεδίο data αποθηκεύει έναν αυθαίρετο πίνακα bytes. Τα περιεχόμενά του
εξαρτώνται από τον τύπο λογαριασμού:
- Λογαριασμοί προγράμματος: Περιέχει εκτελέσιμο bytecode ή τη διεύθυνση ενός λογαριασμού δεδομένων προγράμματος που αποθηκεύει το bytecode.
- Λογαριασμοί δεδομένων: Περιέχει δεδομένα κατάστασης που ορίζονται από το πρόγραμμα. Το πρόγραμμα-κάτοχος ορίζει τη μορφή σειριοποίησης.
Η ανάγνωση δεδομένων λογαριασμού απαιτεί δύο βήματα:
- Ανάκτηση του λογαριασμού από τη διεύθυνσή του.
- Αποσειριοποίηση του πεδίου
dataαπό ακατέργαστα bytes στη δομή δεδομένων που ορίζεται από το πρόγραμμα.
Κάτοχος
Το πεδίο owner περιέχει το αναγνωριστικό προγράμματος (δημόσιο κλειδί) του
προγράμματος που κατέχει αυτόν τον λογαριασμό.
Το πρόγραμμα κατόχου είναι το μόνο πρόγραμμα που μπορεί να:
- Τροποποιήσει το πεδίο
dataτου λογαριασμού - Αφαιρέσει lamports από το πεδίο
lamportsτου λογαριασμού
Οποιοδήποτε πρόγραμμα μπορεί να προσθέσει lamports σε άλλον λογαριασμό, αλλά μόνο ο κάτοχος μπορεί να αφαιρέσει lamports από αυτόν.
Για τους λογαριασμούς προγραμμάτων, ο κάτοχος είναι το πρόγραμμα φόρτωσης του λογαριασμού.
Εκτελέσιμο
Το πεδίο executable είναι μια boolean τιμή που καθορίζει αν ο λογαριασμός
είναι
λογαριασμός προγράμματος ή
λογαριασμός δεδομένων:
true= λογαριασμός προγράμματος (περιέχει εκτελέσιμο κώδικα)false= λογαριασμός δεδομένων (αποθηκεύει κατάσταση)
Περίοδος rent
Το πεδίο rent_epoch είναι παρωχημένο.
Προηγουμένως παρακολουθούσε πότε θα αφαιρούνταν αυτόματα lamports από έναν
λογαριασμό για την πληρωμή διατήρησης των δεδομένων του on-chain. Εφόσον η
είσπραξη rent είναι παρωχημένη, το rent_epoch ορίζεται σε u64::MAX για όλους
τους νέους λογαριασμούς που απαλλάσσονται από rent.
Is this page helpful?