Özet
Loader-v3 aracılığıyla dağıtılan programlar, bir yükseltme yetkisi ayarlandığında yükseltilebilir. Yetkinin iptal edilmesi programı değiştirilemez hale getirir. 9 adımlı yükseltme mekanizması, tüm 9 loader-v3 talimatı, derleme doğrulaması ve 5 yükleyici türünü kapsar.
Programları dağıtma
Native Rust
Solana CLI kullanarak solana program deploy ile dağıtın.
Anchor
Anchor framework kullanarak anchor deploy ile dağıtın.
Programları yükseltme
Bir programı yükseltmek için, bir hesabın yükseltme yetkisine sahip olması
gerekir (genellikle programı ilk dağıtan hesap).
Dağıtım veya yükseltme sırasında, yeni bytecode geçici bir buffer hesabına
yüklenir, ardından program data hesabına yazılır. Yükseltme yetkisinin
None olarak ayarlanması programı değiştirilemez hale getirir ve kalıcı
olarak daha fazla güncellemeyi engeller.
Yükseltme mekanizması
UpgradeableLoaderInstruction::Upgrade
işlendiğinde, runtime:
- Program hesabının yazılabilir olduğunu ve loader-v3'e ait olduğunu doğrular.
- Buffer hesabının doğru yetki ile bir
Bufferdurumu içerdiğini doğrular. - ProgramData hesabının
upgrade_authority_addressdeğerinin eşleştiğini veNoneolmadığını doğrular. - Programın mevcut slot'ta zaten dağıtılmadığını doğrular
(
clock.slot != slot). - Buffer'dan yeni ELF byte'larını yükler ve doğrular.
- Yeni bytecode'u buffer'dan ProgramData hesabına kopyalar ve kalan byte'ları sıfırlar.
- ProgramData hesabını kira muafiyetine fon sağlar.
- Buffer hesabını boşaltır (lamports'u 0'a ayarlar) ve verisini keser.
- Yeni sürüm bir sonraki slot'ta yürürlüğe girer (
deployment_slot + 1).
Program hesabının kendisi (durumu ve programdata_address işaretçisi) bir
yükseltme sırasında değişmez. Yalnızca ProgramData hesabının bayt kodu ve
slot meta verileri güncellenir.
Loader-v3 talimat referansı
Loader-v3 (BPF Loader Upgradeable), Solana üzerinde program dağıtımı için mevcut varsayılan yükleyicidir.
| Talimat | Açıklama |
|---|---|
InitializeBuffer | Bir buffer hesabının durumunu belirtilen yetkiyle Buffer olarak ayarlar. Zaten başlatılmışsa başarısız olur. |
Write | Bir buffer hesabında belirtilen konuma bayt yazar. Yetki imzalamalıdır. |
DeployWithMaxDataLen | Yeni bir program oluşturur: ProgramData adresini türetir, System Program'a CPI aracılığıyla ProgramData hesabını oluşturur, buffer'dan ELF'yi doğrular ve dağıtır, Program hesabının durumunu ayarlar ve çalıştırılabilir olarak işaretler. |
Upgrade | Mevcut bir programın ProgramData hesabındaki bayt kodunu bir buffer'dan değiştirir. |
SetAuthority | Bir Buffer veya ProgramData hesabının yetkisini değiştirir. ProgramData üzerinde None olarak ayarlamak programı değiştirilemez yapar. Buffer yetkisi None olarak ayarlanamaz. |
SetAuthorityChecked | SetAuthority gibidir, ancak yeni yetkinin de işlemi imzalamasını gerektirir. |
Close | Bir buffer, başlatılmamış veya ProgramData hesabını lamport'larını bir alıcıya aktararak kapatır. ProgramData'yı kapatmak ayrıca program önbelleğine bir Closed mezar taşı yazar. Mevcut slotta dağıtılmış bir program kapatılamaz. |
ExtendProgramChecked | ProgramData hesabının tahsisini ek baytlarla genişletir, ekstra rent'i ödeyenden finanse eder. |
Migrate | Bir loader-v3 programını, program hesabının sahipliğini aktararak ve bayt kodunu kopyalayarak loader-v4'e taşır. Geçiş yetkisinin veya programın yükseltme yetkisinin imzalamasını gerektirir. Loader-v4 henüz mainnet'te yayınlanmamıştır. |
Programları doğrulama
Solana, kullanıcıların bir programın zincir üzerindeki bayt kodunun genel kaynak koduyla eşleştiğini doğrulamasına olanak tanıyan doğrulanabilir derlemeleri destekler. Anchor çerçevesi, doğrulanabilir derlemeler için yerleşik destek sağlar.
Dağıtılmış bir programın doğrulama durumunu kontrol etmek için program kimliğini Solana Explorer'da arayın veya Ellipsis Labs Solana Verifiable Build CLI'yi kullanarak zincir üzerindeki programları bağımsız olarak doğrulayın.
Yükleyici programlar
| Yükleyici | Adres | Yükseltilebilir | Açıklama |
|---|---|---|---|
| Native Loader | NativeLoader1111111111111111111111111111111 | Yalnızca validator yazılım yükseltmesi ile | Yerleşik programlara (System, Vote, Stake) ve diğer yükleyicilere sahiptir |
| BPF Loader (v1) | BPFLoader1111111111111111111111111111111111 | Hayır (yükleyici yönetimi devre dışı) | Eski programlar |
| BPF Loader (v2) | BPFLoader2111111111111111111111111111111111 | Hayır (yükleyici yönetimi devre dışı) | Eski programlar |
| BPF Loader Upgradeable | BPFLoaderUpgradeab1e11111111111111111111111 | Evet, yükseltme yetkisi ayarlanmışsa | Yeni dağıtılan tüm programlara sahiptir |
| Loader-v4 | LoaderV411111111111111111111111111111111111 | Evet, yetki ayarlanmışsa | Henüz mainnet'te yayınlanmadı |
Is this page helpful?