Δομή λογαριασμού

Περίληψη

Οι λογαριασμοί έχουν 5 πεδία: lamports, data, owner, executable και rent_epoch. Κάθε λογαριασμός αναγνωρίζεται από μια μοναδική διεύθυνση 32 bytes. Οι λογαριασμοί πρέπει να διατηρούν ένα ελάχιστο υπόλοιπο lamport ανάλογο με το μέγεθος των δεδομένων τους για να παραμείνουν on-chain.

Διεύθυνση λογαριασμού

Κάθε διεύθυνση λογαριασμού είναι μια τιμή 32 bytes, που εμφανίζεται ως συμβολοσειρά κωδικοποιημένη σε base58. Μια διεύθυνση μπορεί να είναι ένας από δύο τύπους:

  1. Public key: αντιστοιχεί σε ένα Ed25519 keypair (έχει private key)
  2. Program Derived Address (PDA): παράγεται ντετερμινιστικά από ένα program ID και seeds (χωρίς private key)

Ένας λογαριασμός με τη διεύθυνση του public key κωδικοποιημένη σε base58Ένας λογαριασμός με τη διεύθυνση του public key κωδικοποιημένη σε base58

Public key

Ένα Keypair αποτελείται από ένα public key (που χρησιμοποιείται ως διεύθυνση λογαριασμού) και ένα private key (που χρησιμοποιείται για την υπογραφή συναλλαγών). Το παρακάτω παράδειγμα δημιουργεί ένα keypair χρησιμοποιώντας το Solana SDK.

import { generateKeyPairSigner } from "@solana/kit";
// Kit does not enable extractable private keys
const keypairSigner = await generateKeyPairSigner();
console.log(keypairSigner);
Console
Click to execute the code.

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}`);
Console
Click to execute the code.

Πεδία λογαριασμού

Κάθε Account έχει μέγιστο μέγεθος MAX_ACCOUNT_DATA_LEN (10 MiB, ισοδύναμο με MAX_PERMITTED_DATA_LENGTH) και περιέχει πέντε πεδία:

ΠεδίοΤύποςΠεριγραφή
lamportsu64Υπόλοιπο σε lamports. Ο κάτοχος μπορεί να χρεώσει· οποιοδήποτε πρόγραμμα μπορεί να πιστώσει.
dataVec<u8>Κατάσταση λογαριασμού ή bytecode προγράμματος. Μέγιστο 10 MiB. Εγγράψιμο μόνο από τον κάτοχο.
ownerPubkeyΠρόγραμμα με δικαίωμα εγγραφής. Επαναπροσδιορίζεται μόνο όταν τα δεδομένα είναι μηδενισμένα.
executableboolTrue = λογαριασμός προγράμματος.
rent_epochEpochΚαταργημένο. Ορίζεται σε u64::MAX για λογαριασμούς απαλλαγμένους από rent.
Account
pub struct Account {
/// lamports in the account
pub 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,
/// deprecated
pub 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.
  • Λογαριασμοί δεδομένων: Περιέχει δεδομένα κατάστασης που ορίζονται από το πρόγραμμα. Το πρόγραμμα-κάτοχος ορίζει τη μορφή σειριοποίησης.

Η ανάγνωση δεδομένων λογαριασμού απαιτεί δύο βήματα:

  1. Ανάκτηση του λογαριασμού από τη διεύθυνσή του.
  2. Αποσειριοποίηση του πεδίου data από ακατέργαστα bytes στη δομή δεδομένων που ορίζεται από το πρόγραμμα.

Κάτοχος

Το πεδίο owner περιέχει το αναγνωριστικό προγράμματος (δημόσιο κλειδί) του προγράμματος που κατέχει αυτόν τον λογαριασμό.

Το πρόγραμμα κατόχου είναι το μόνο πρόγραμμα που μπορεί να:

  • Τροποποιήσει το πεδίο data του λογαριασμού
  • Αφαιρέσει lamports από το πεδίο lamports του λογαριασμού

Οποιοδήποτε πρόγραμμα μπορεί να προσθέσει lamports σε άλλον λογαριασμό, αλλά μόνο ο κάτοχος μπορεί να αφαιρέσει lamports από αυτόν.

Για τους λογαριασμούς προγραμμάτων, ο κάτοχος είναι το πρόγραμμα φόρτωσης του λογαριασμού.

Εκτελέσιμο

Το πεδίο executable είναι μια boolean τιμή που καθορίζει αν ο λογαριασμός είναι λογαριασμός προγράμματος ή λογαριασμός δεδομένων:

  • true = λογαριασμός προγράμματος (περιέχει εκτελέσιμο κώδικα)
  • false = λογαριασμός δεδομένων (αποθηκεύει κατάσταση)

Περίοδος rent

Το πεδίο rent_epoch είναι παρωχημένο.

Προηγουμένως παρακολουθούσε πότε θα αφαιρούνταν αυτόματα lamports από έναν λογαριασμό για την πληρωμή διατήρησης των δεδομένων του on-chain. Εφόσον η είσπραξη rent είναι παρωχημένη, το rent_epoch ορίζεται σε u64::MAX για όλους τους νέους λογαριασμούς που απαλλάσσονται από rent.

Lamports

Το πεδίο lamports περιέχει το υπόλοιπο του λογαριασμού σε lamports (1 SOL = 1.000.000.000 lamports).

Κάθε λογαριασμός πρέπει να διατηρεί ένα ελάχιστο υπόλοιπο lamports, γνωστό ως υπόλοιπο απαλλαγής από rent, για να διατηρούνται τα δεδομένα του on-chain. Αυτό το υπόλοιπο είναι ανάλογο με το μέγεθος των δεδομένων του λογαριασμού.

Αν και συχνά αποκαλείται "rent", το υπόλοιπο απαλλαγής από rent λειτουργεί ως επιστρεπτέα κατάθεση· το πλήρες υπόλοιπο ανακτάται όταν ο λογαριασμός κλείσει.

Δείτε minimum_balance() και τις σταθερές rent.

Δεδομένα

Το πεδίο data αποθηκεύει έναν αυθαίρετο πίνακα bytes. Τα περιεχόμενά του εξαρτώνται από τον τύπο λογαριασμού:

  • Λογαριασμοί προγράμματος: Περιέχει εκτελέσιμο bytecode ή τη διεύθυνση ενός λογαριασμού δεδομένων προγράμματος που αποθηκεύει το bytecode.
  • Λογαριασμοί δεδομένων: Περιέχει δεδομένα κατάστασης που ορίζονται από το πρόγραμμα. Το πρόγραμμα-κάτοχος ορίζει τη μορφή σειριοποίησης.

Η ανάγνωση δεδομένων λογαριασμού απαιτεί δύο βήματα:

  1. Ανάκτηση του λογαριασμού από τη διεύθυνσή του.
  2. Αποσειριοποίηση του πεδίου data από ακατέργαστα bytes στη δομή δεδομένων που ορίζεται από το πρόγραμμα.

Κάτοχος

Το πεδίο owner περιέχει το αναγνωριστικό προγράμματος (δημόσιο κλειδί) του προγράμματος που κατέχει αυτόν τον λογαριασμό.

Το πρόγραμμα κατόχου είναι το μόνο πρόγραμμα που μπορεί να:

  • Τροποποιήσει το πεδίο data του λογαριασμού
  • Αφαιρέσει lamports από το πεδίο lamports του λογαριασμού

Οποιοδήποτε πρόγραμμα μπορεί να προσθέσει lamports σε άλλον λογαριασμό, αλλά μόνο ο κάτοχος μπορεί να αφαιρέσει lamports από αυτόν.

Για τους λογαριασμούς προγραμμάτων, ο κάτοχος είναι το πρόγραμμα φόρτωσης του λογαριασμού.

Εκτελέσιμο

Το πεδίο executable είναι μια boolean τιμή που καθορίζει αν ο λογαριασμός είναι λογαριασμός προγράμματος ή λογαριασμός δεδομένων:

  • true = λογαριασμός προγράμματος (περιέχει εκτελέσιμο κώδικα)
  • false = λογαριασμός δεδομένων (αποθηκεύει κατάσταση)

Περίοδος rent

Το πεδίο rent_epoch είναι παρωχημένο.

Προηγουμένως παρακολουθούσε πότε θα αφαιρούνταν αυτόματα lamports από έναν λογαριασμό για την πληρωμή διατήρησης των δεδομένων του on-chain. Εφόσον η είσπραξη rent είναι παρωχημένη, το rent_epoch ορίζεται σε u64::MAX για όλους τους νέους λογαριασμούς που απαλλάσσονται από rent.

Account Examples
// Example Token Mint Account
Account {
lamports: 1461600,
data.len: 82,
owner: TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb,
executable: false,
rent_epoch: 0,
data: 010000001e213c90625a7e643d9555bb01b6c3fe6416d7afd523ce8c7ddd9b923ceafb9d00000000000000000901010000001e213c90625a7e643d9555bb01b6,
}
// Example Token Program Account
Account {
lamports: 4513200894,
data.len: 134080,
owner: BPFLoader2111111111111111111111111111111111,
executable: true,
rent_epoch: 18446744073709551615,
data: 7f454c460201010000000000000000000300f70001000000d8f90000000000004000000000000000800902000000000000000000400038000400400009000800,
}

Is this page helpful?

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

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

Διαχειρίζεται από

© 2026 Ίδρυμα Solana.
Με επιφύλαξη παντός δικαιώματος.
Συνδεθείτε