Ö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. Yükseltme mekanizmasını, loader-v3 dağıtım ve yükseltme talimatlarını, yapı doğrulamasını ve kullanılabilir yükleyici programları 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 ofsette bayt yazar. Yetkinin imzalaması gerekir. |
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 ayarlanması programı değiştirilemez hale getirir. Buffer yetkisi None olarak ayarlanamaz. |
SetAuthorityChecked | SetAuthority gibidir, ancak yeni yetkinin de işlemi imzalamasını gerektirir. |
Close | Lamport'larını bir alıcıya aktararak bir buffer, başlatılmamış veya ProgramData hesabını kapatır. ProgramData'nın kapatılması aynı zamanda program önbelleğine bir Closed mezar taşı yazar. Mevcut slot'ta dağıtılmış bir program kapatılamaz. |
ExtendProgramChecked | ProgramData hesabının tahsisini ek baytlarla genişletir ve ekstra rent'i ödeyenden finanse eder. |
Programları doğrulama
Solana, kullanıcıların bir programın zincir üstü bayt kodunun halka açık kaynak koduyla eşleştiğini doğrulamalarını sağlayan doğrulanabilir yapıları destekler. Anchor framework'ü, doğrulanabilir yapılar 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 zincir üzerindeki programları bağımsız olarak doğrulamak için Ellipsis Labs Solana Verifiable Build CLI aracını kullanı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 ayarlandıysa | Yeni dağıtılan tüm programlara sahiptir |
Is this page helpful?