Ö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:
- 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)
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 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 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:
- 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.
Ö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.
Is this page helpful?