Ö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:
- Public key: bir Ed25519 keypair'e karşılık gelir (özel anahtara sahiptir)
- Program Derived Address (PDA): bir program ID'si ve seed'lerden deterministik olarak türetilir (özel anahtara sahip değildir)
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 keysconst keypairSigner = await generateKeyPairSigner();console.log(keypairSigner);
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}`);
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:
| Alan | Tür | Açıklama |
|---|---|---|
lamports | u64 | Lamport cinsinden bakiye. Sahip borçlandırabilir; herhangi bir program alacaklandırabilir. |
data | Vec<u8> | Hesap durumu veya program bytecode'u. Maks. 10 MiB. Yalnızca sahip yazabilir. |
owner | Pubkey | Yazma erişimine sahip program. Yalnızca data sıfırlandığında yeniden atanabilir. |
executable | bool | True = program hesabı. |
rent_epoch | Epoch | Kullanımdan kaldırıldı. Rent-exempt hesaplar için u64::MAX olarak ayarlanır. |
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'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:
- Hesabı adresi ile getirin.
dataalanı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
dataalanını değiştirmek - Hesabın
lamportsalanı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.
Is this page helpful?