Konten-Struktur

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:

  1. Public key: entspricht einem Ed25519 keypair (hat einen private key)
  2. Program Derived Address (PDA): deterministisch abgeleitet von einer Programm-ID und Seeds (kein private key)

Ein Konto mit seiner base58-kodierten Public-Key-AdresseEin 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 keys
const keypairSigner = await generateKeyPairSigner();
console.log(keypairSigner);
Console
Click to execute the code.

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

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:

FeldTypBeschreibung
lamportsu64Guthaben in lamport. Owner kann belasten; jedes Programm kann gutschreiben.
dataVec<u8>Konto-Status oder Programm-Bytecode. Max. 10 MiB. Nur vom Owner beschreibbar.
ownerPubkeyProgramm mit Schreibzugriff. Nur neu zuweisbar, wenn Daten auf null gesetzt.
executableboolTrue = program account.
rent_epochEpochVeraltet. Auf u64::MAX für rent-exempt Konten gesetzt.
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,
}

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:

  1. Abrufen des Kontos über seine Adresse.
  2. Deserialisieren des Feldes data von 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 data des Kontos ändern kann
  • Lamports vom Feld lamports des 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.

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:

  1. Abrufen des Kontos über seine Adresse.
  2. Deserialisieren des Feldes data von 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 data des Kontos ändern kann
  • Lamports vom Feld lamports des 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.

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?

Inhaltsverzeichnis

Seite bearbeiten

Verwaltet von

© 2026 Solana Foundation.
Alle Rechte vorbehalten.
Verbinden Sie sich