Hesap yapısı

Özet

Hesapların 5 alanı vardır: lamport, veri, sahip, çalıştırılabilir ve rent_epoch. Her hesap benzersiz bir 32-baytlık adresle tanımlanır. Hesapların zincir üzerinde kalabilmesi için veri boyutlarıyla orantılı minimum bir lamport bakiyesi bulundurması gerekir.

Hesap adresi

Her hesap adresi, base58 kodlu bir dize olarak görüntülenen 32 baytlık bir değerdir. Bir adres iki türden biri olabilir:

  1. Public key: bir Ed25519 keypair'e karşılık gelir (özel anahtara sahiptir)
  2. Program Derived Address (PDA): bir program ID'si ve seed'lerden deterministik olarak türetilir (özel anahtara sahip değildir)

Base58 kodlu public key adresi olan bir hesap
Base58 kodlu public key adresi olan bir hesap

Public key

Bir Keypair, bir public key (hesap adresi olarak kullanılır) ve bir private key'den (işlemleri imzalamak için kullanılır) oluşur. Aşağıdaki örnek, Solana SDK kullanarak bir keypair oluşturur.

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

Bir Program Derived Address (PDA), bir program ID'si ve bir veya daha fazla isteğe bağlı seed'den deterministik olarak türetilir. PDA'ların karşılık gelen bir private key'i yoktur. Aşağıdaki örnek, Solana SDK kullanarak bir PDA türetir.

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.

Hesap alanları

Her Account maksimum MAX_ACCOUNT_DATA_LEN (10 MiB, MAX_PERMITTED_DATA_LENGTH ile eşdeğer) boyutuna sahiptir ve beş alan içerir:

AlanTürAçıklama
lamportsu64Lamport cinsinden bakiye. Sahip borçlandırabilir; herhangi bir program alacaklandırabilir.
dataVec<u8>Hesap durumu veya program bytecode'u. Maks. 10 MiB. Yalnızca sahip yazabilir.
ownerPubkeyYazma erişimine sahip program. Yalnızca data sıfırlandığında yeniden atanabilir.
executableboolTrue = program hesabı.
rent_epochEpochKullanımdan kaldırıldı. Rent-exempt hesaplar için u64::MAX olarak ayarlanır.
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'lar

lamports alanı, hesabın bakiyesini lamport cinsinden tutar (1 SOL = 1.000.000.000 lamport).

Her hesabın, verilerini zincir üzerinde depolamak için minimum bir lamport bakiyesi tutması gerekir. İade edilebilir bu depolama bakiyesi, hesabın veri boyutuyla orantılıdır.

Çalışma zamanı ve RPC yöntemi adları bunu "kira muafiyeti minimumu" olarak adlandırır; ancak süregelen rent tahsilatı devre dışıdır. Bakiyeyi iade edilebilir bir hesap depolama depozitosu olarak değerlendirin: hesap kapatıldığında bakiyenin tamamı geri alınabilir.

Bkz. minimum_balance() ve rent sabitleri.

Data

data alanı, rastgele bir bayt dizisi saklar. İçeriği hesap türüne bağlıdır:

  • Program hesapları: Çalıştırılabilir bytecode veya bytecode'u saklayan bir program data hesabının adresini içerir.
  • Data hesapları: Program tanımlı durum verilerini içerir. Sahip olan program serileştirme formatını tanımlar.

Hesap verilerini okumak iki adım gerektirir:

  1. Hesabı adresi ile getirin.
  2. data alanını ham baytlardan program tanımlı veri yapısına deserialize edin.

Sahip

owner alanı, bu hesaba sahip olan programın program kimliğini (genel anahtar) içerir.

Sahip program, şunları yapabilen tek programdır:

  • Hesabın data alanını değiştirmek
  • Hesabın lamports alanından lamport düşmek

Herhangi bir program başka bir hesaba lamport ekleyebilir, ancak yalnızca sahip hesaptan lamport düşebilir.

Program hesapları için sahip, hesabın yükleyici programıdır.

Çalıştırılabilir

executable alanı, hesabın bir program hesabı mı yoksa bir veri hesabı mı olduğunu belirleyen bir boolean değeridir:

  • true = program hesabı (çalıştırılabilir kod içerir)
  • false = veri hesabı (durum saklar)

Rent epoch

rent_epoch alanı kullanımdan kaldırılmıştır.

Daha önce, bir hesabın zincir üzerindeki verilerini korumak için lamport bakiyesinden otomatik olarak kesinti yapılacağı takip edilirdi. Süregelen rent tahsilatı devre dışı bırakıldığından, minimum depolama bakiyesini karşılayan tüm yeni hesaplar için rent_epoch değeri u64::MAX olarak ayarlanmaktadır.

Lamport'lar

lamports alanı, hesabın bakiyesini lamport cinsinden tutar (1 SOL = 1.000.000.000 lamport).

Her hesabın, verilerini zincir üzerinde depolamak için minimum bir lamport bakiyesi tutması gerekir. İade edilebilir bu depolama bakiyesi, hesabın veri boyutuyla orantılıdır.

Çalışma zamanı ve RPC yöntemi adları bunu "kira muafiyeti minimumu" olarak adlandırır; ancak süregelen rent tahsilatı devre dışıdır. Bakiyeyi iade edilebilir bir hesap depolama depozitosu olarak değerlendirin: hesap kapatıldığında bakiyenin tamamı geri alınabilir.

Bkz. minimum_balance() ve rent sabitleri.

Data

data alanı, rastgele bir bayt dizisi saklar. İçeriği hesap türüne bağlıdır:

  • Program hesapları: Çalıştırılabilir bytecode veya bytecode'u saklayan bir program data hesabının adresini içerir.
  • Data hesapları: Program tanımlı durum verilerini içerir. Sahip olan program serileştirme formatını tanımlar.

Hesap verilerini okumak iki adım gerektirir:

  1. Hesabı adresi ile getirin.
  2. data alanını ham baytlardan program tanımlı veri yapısına deserialize edin.

Sahip

owner alanı, bu hesaba sahip olan programın program kimliğini (genel anahtar) içerir.

Sahip program, şunları yapabilen tek programdır:

  • Hesabın data alanını değiştirmek
  • Hesabın lamports alanından lamport düşmek

Herhangi bir program başka bir hesaba lamport ekleyebilir, ancak yalnızca sahip hesaptan lamport düşebilir.

Program hesapları için sahip, hesabın yükleyici programıdır.

Çalıştırılabilir

executable alanı, hesabın bir program hesabı mı yoksa bir veri hesabı mı olduğunu belirleyen bir boolean değeridir:

  • true = program hesabı (çalıştırılabilir kod içerir)
  • false = veri hesabı (durum saklar)

Rent epoch

rent_epoch alanı kullanımdan kaldırılmıştır.

Daha önce, bir hesabın zincir üzerindeki verilerini korumak için lamport bakiyesinden otomatik olarak kesinti yapılacağı takip edilirdi. Süregelen rent tahsilatı devre dışı bırakıldığından, minimum depolama bakiyesini karşılayan tüm yeni hesaplar için rent_epoch değeri u64::MAX olarak ayarlanmaktadır.

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?

İçindekiler

Sayfayı Düzenle
© 2026 Solana Vakfı. Tüm hakları saklıdır.