Hesap yapısı

Özet

Hesaplar 5 alana sahiptir: lamports, data, owner, executable 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 tutması 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 hesapBase58 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 hesap, verilerini zincir üzerinde saklamak için rent-exempt bakiye olarak bilinen minimum bir lamport bakiyesi tutmalıdır. Bu bakiye, hesabın veri boyutuyla orantılıdır.

Genellikle "rent" olarak adlandırılsa da, rent-exempt bakiye iade edilebilir bir depozito işlevi görür; hesap kapatıldığında tam bakiye geri alınır.

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.

Önceden bir hesaptan, verilerini zincir üzerinde tutmak için ödeme yapmak amacıyla lamportların ne zaman otomatik olarak düşüleceğini takip ederdi. Rent tahsilatı kullanımdan kaldırıldığından, rent_epoch tüm yeni rent-muaf hesaplar için u64::MAX olarak ayarlanır.

Lamport'lar

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

Her hesap, verilerini zincir üzerinde saklamak için rent-exempt bakiye olarak bilinen minimum bir lamport bakiyesi tutmalıdır. Bu bakiye, hesabın veri boyutuyla orantılıdır.

Genellikle "rent" olarak adlandırılsa da, rent-exempt bakiye iade edilebilir bir depozito işlevi görür; hesap kapatıldığında tam bakiye geri alınır.

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.

Önceden bir hesaptan, verilerini zincir üzerinde tutmak için ödeme yapmak amacıyla lamportların ne zaman otomatik olarak düşüleceğini takip ederdi. Rent tahsilatı kullanımdan kaldırıldığından, rent_epoch tüm yeni rent-muaf hesaplar için u64::MAX olarak ayarlanı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

Yönetici

© 2026 Solana Vakfı.
Tüm hakları saklıdır.
Bağlanın