Zusammenfassung
Konten haben 5 Felder: lamports, data, owner, executable und rent_epoch. Jedes Konto wird durch eine eindeutige 32-Byte-Adresse identifiziert. Konten müssen ein Mindestguthaben an lamports proportional zu ihrer Datengröße halten, um on-chain zu bleiben.
Konten-Adresse
Jede Konten-Adresse ist ein 32-Byte-Wert, der als base58-kodierter String angezeigt wird. Eine Adresse kann einer von zwei Typen sein:
- Public key: entspricht einem Ed25519 keypair (hat einen private key)
- Program Derived Address (PDA): deterministisch abgeleitet von einer Programm-ID und Seeds (kein private key)
Ein Konto mit seiner base58-kodierten Public-Key-Adresse
Public key
Ein Keypair besteht aus einem public key (verwendet als Konten-Adresse)
und einem private key (verwendet zum Signieren von Transaktionen). Das folgende
Beispiel generiert ein keypair mit dem Solana SDK.
import { generateKeyPairSigner } from "@solana/kit";// Kit does not enable extractable private keysconst keypairSigner = await generateKeyPairSigner();console.log(keypairSigner);
Program Derived Address
Eine Program Derived Address (PDA) wird deterministisch von einer Programm-ID und einem oder mehreren optionalen Seeds abgeleitet. PDAs haben keinen entsprechenden private key. Das folgende Beispiel leitet eine PDA mit dem Solana SDK ab.
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}`);
Konten-Felder
Jedes
Account
hat eine maximale Größe von
MAX_ACCOUNT_DATA_LEN
(10 MiB, entspricht MAX_PERMITTED_DATA_LENGTH) und enthält fünf Felder:
| Feld | Typ | Beschreibung |
|---|---|---|
lamports | u64 | Guthaben in lamport. Owner kann belasten; jedes Programm kann gutschreiben. |
data | Vec<u8> | Konto-Status oder Programm-Bytecode. Max. 10 MiB. Nur vom Owner beschreibbar. |
owner | Pubkey | Programm mit Schreibzugriff. Nur neu zuweisbar, wenn Daten auf null gesetzt. |
executable | bool | True = program account. |
rent_epoch | Epoch | Veraltet. Auf u64::MAX für rent-exempt Konten gesetzt. |
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,}
Lamport
Das Feld lamports enthält das Guthaben des Kontos in
lamport (1 SOL = 1.000.000.000 lamport).
Jedes Konto muss ein Mindestguthaben in lamport aufrechterhalten, das als rent-exempt Guthaben bekannt ist, um seine Daten on-chain zu speichern. Dieses Guthaben ist proportional zur Datengröße des Kontos.
Obwohl oft als "rent" bezeichnet, funktioniert das rent-exempt Guthaben als erstattungsfähige Kaution, das vollständige Guthaben wird zurückerstattet, wenn das Konto geschlossen wird.
Siehe
minimum_balance()
und die rent
Konstanten.
Daten
Das Feld data speichert ein beliebiges Byte-Array. Sein Inhalt hängt vom
Konto-Typ ab:
- Program accounts: Enthält ausführbaren Bytecode oder die Adresse eines program data account, das den Bytecode speichert.
- Data accounts: Enthält programmdefinierte Statusdaten. Das besitzende Programm definiert das Serialisierungsformat.
Das Lesen von Kontodaten erfordert zwei Schritte:
- Abrufen des Kontos über seine Adresse.
- Deserialisieren des Feldes
datavon rohen Bytes in die programmdefinierte Datenstruktur.
Eigentümer
Das Feld owner enthält die Programm-ID (öffentlicher Schlüssel) des Programms,
das dieses Konto besitzt.
Das Eigentümerprogramm ist das einzige Programm, das:
- Das Feld
datades Kontos ändern kann - Lamports vom Feld
lamportsdes Kontos abziehen kann
Jedes Programm kann Lamports zu einem anderen Konto hinzufügen, aber nur der Eigentümer kann Lamports davon abziehen.
Bei Programmkonten ist der Eigentümer das Loader-Programm des Kontos.
Ausführbar
Das Feld executable ist ein boolescher Wert, der bestimmt, ob das Konto ein
Programmkonto oder ein
Datenkonto ist:
true= Programmkonto (enthält ausführbaren Code)false= Datenkonto (speichert Zustand)
Rent-Epoche
Das Feld rent_epoch ist veraltet.
Früher wurde verfolgt, wann von einem Konto automatisch Lamports abgezogen
wurden, um die Speicherung seiner Daten on-chain zu bezahlen. Da die
Rent-Erhebung veraltet ist, wird rent_epoch für alle neuen rent-befreiten
Konten auf u64::MAX gesetzt.
Is this page helpful?