Program Derived Address'ler (PDA'lar), bir program ID'si ve bir dizi seed'den
deterministik olarak türetilen 32 baytlık hesap adresleridir. Ed25519 eğrisi
üzerinde olmadıkları garanti edilir, bu da onlar için özel bir anahtarın mevcut
olmadığı anlamına gelir. Yalnızca türetmede ID'si kullanılan program bir PDA
için "imza atabilir" ve bunu programlar arası çağrılar (CPI'lar) sırasında
invoke_signed aracılığıyla yapar.
Program Derived Address
PDA türetme
Türetme algoritması, kanonik bump, farklı seed türleriyle findProgramAddress örnekleri.
PDA hesapları
PDA adreslerinde hesap oluşturma, invoke_signed imzalama, Anchor kalıpları.
Temel gerçekler
- Deterministik: Aynı seed'ler ve program ID her zaman aynı adresi üretir.
- Eğri-dışı: Türetilen adresin geçerli bir Ed25519 genel anahtarı olmadığı doğrulanır. Hash eğri üzerine düşerse, türetme başarısız olur ve farklı bir bump seed denenir.
- Özel anahtar yok: Adres eğri-dışı olduğundan, kimse bunun için
kriptografik bir imza üretemez. Program bunun yerine çalışma zamanının
invoke_signedmekanizması aracılığıyla "imza atar".
PDA'lar ne zaman kullanılır
- Deterministik adresleme: Her seferinde aynı seed'lerden aynı hesabı türetin.
- Program imzalama: Yalnızca sahip olan program
invoke_signedaracılığıyla imzalayabilir, bu da programların otonom otoriteler olarak hareket etmesini sağlar. - Kullanıcı kapsamlı durum: Kullanıcı pubkey seed'lerinden kullanıcı başına
hesaplar türetin (örn.,
["user", user_pubkey]). - Keypair yönetimi yok: Saklanacak veya kaybedilecek özel anahtar yoktur. Adres tamamen seed'lerden türetilir.
Limitler
| Limit | Değer | Kaynak |
|---|---|---|
| Maksimum seed sayısı | 16 | MAX_SEEDS |
| Maksimum seed uzunluğu | Seed başına maksimum 32 bayt | MAX_SEED_LEN |
| Bump aralığı | 0-255 (1 bayt) | Son seed öğesi olarak eklenir |
create_program_address maliyeti | 1.500 CU | create_program_address_units |
find_program_address en kötü durum maliyeti | 1.500 giriş + 1.500 x iterasyon | 1.500 girişte + başarısız bump başına 1.500 |
| CPI başına maksimum PDA imzalayıcı | 16 | MAX_SIGNERS |
Is this page helpful?