Podsumowanie
Programy wdrożone za pomocą loader-v3 mogą być aktualizowane, jeśli ustawiony jest uprawniony do aktualizacji. Cofnięcie uprawnień sprawia, że program staje się niezmienny. Obejmuje mechanizm aktualizacji, instrukcje wdrażania i aktualizacji loader-v3, weryfikację budowy oraz dostępne programy ładujące.
Wdrażanie programów
Native Rust
Wdrażanie przy użyciu Solana CLI z solana program deploy.
Anchor
Wdrażanie przy użyciu frameworka Anchor z anchor deploy.
Aktualizacja programów
Aby zaktualizować program, konto musi posiadać uprawnienia do aktualizacji
(zwykle jest to konto, które pierwotnie
wdrożyło program). Podczas wdrażania lub
aktualizacji nowy bajtkod jest przesyłany do tymczasowego konta bufora, a
następnie zapisywany na koncie programdata. Ustawienie autorytetu aktualizacji
na None sprawia, że program staje się niezmienny i trwale uniemożliwia
dalsze aktualizacje.
Mechanizm aktualizacji
Gdy
UpgradeableLoaderInstruction::Upgrade
zostanie przetworzony, środowisko uruchomieniowe:
- Weryfikuje, czy konto Program jest zapisywalne i należy do loader-v3.
- Weryfikuje, czy konto Buffer zawiera stan
Bufferz poprawnym autorytetem. - Weryfikuje, czy konto ProgramData ma zgodny
upgrade_authority_addressi nie jestNone. - Weryfikuje, czy program nie został już wdrożony w bieżącym slocie
(
clock.slot != slot). - Ładuje i weryfikuje nowe bajty ELF z bufora.
- Kopiuje nowy bajtkod z bufora do konta ProgramData i zeruje pozostałe bajty.
- Zasila konto ProgramData do poziomu zwolnienia z opłat za wynajem.
- Opróżnia konto bufora (ustawia lamports na 0) i przycina jego dane.
- Nowa wersja staje się aktywna w następnym slocie (
deployment_slot + 1).
Samo konto Program (jego stan oraz wskaźnik programdata_address) nie zmienia
się podczas aktualizacji. Aktualizowane są jedynie bajtkod konta
ProgramData oraz metadane slot.
Referencja instrukcji Loader-v3
Loader-v3 (BPF Loader Upgradeable) to obecnie domyślny loader do wdrażania programów na Solanie.
| Instrukcja | Opis |
|---|---|
InitializeBuffer | Ustawia stan konta bufora na Buffer z określonym uprawnieniem. Kończy się niepowodzeniem, jeśli już zainicjowane. |
Write | Zapisuje bajty pod określonym przesunięciem w koncie bufora. Uprawniony musi podpisać. |
DeployWithMaxDataLen | Tworzy nowy program: wyprowadza adres ProgramData, tworzy konto ProgramData poprzez CPI do System Program, weryfikuje i wdraża ELF z bufora, ustawia stan konta Program i oznacza je jako wykonywalne. |
Upgrade | Zastępuje kod bajtowy w koncie ProgramData istniejącego programu z bufora. |
SetAuthority | Zmienia uprawnionego konta Buffer lub ProgramData. Ustawienie na None w ProgramData sprawia, że program staje się niezmienny. Uprawniony bufora nie może być ustawiony na None. |
SetAuthorityChecked | Podobnie jak SetAuthority, ale wymaga również podpisu nowego uprawnionego w transakcji. |
Close | Zamyka konto bufora, niezainicjowane lub ProgramData, przenosząc jego lamporty do odbiorcy. Zamknięcie ProgramData zapisuje również nagrobek Closed do pamięci podręcznej programu. Nie można zamknąć programu, który został wdrożony w bieżącym slocie. |
ExtendProgramChecked | Rozszerza alokację konta ProgramData o dodatkowe bajty, finansując dodatkowy czynsz z konta płatnika. |
Weryfikacja programów
Solana obsługuje weryfikowalne budowy, które pozwalają użytkownikom potwierdzić, że kod bajtowy programu w sieci odpowiada jego publicznemu kodowi źródłowemu. Framework Anchor zapewnia wbudowane wsparcie dla weryfikowalnych budów.
Aby sprawdzić status weryfikacji wdrożonego programu, wyszukaj jego identyfikator programu w Solana Explorer, lub użyj Solana Verifiable Build CLI od Ellipsis Labs, aby niezależnie zweryfikować programy onchain.
Programy loaderów
| Loader | Adres | Możliwość aktualizacji | Opis |
|---|---|---|---|
| Native Loader | NativeLoader1111111111111111111111111111111 | Tylko poprzez aktualizację walidatora | Zarządza wbudowanymi programami (System, Vote, Stake) i innymi loaderami |
| BPF Loader (v1) | BPFLoader1111111111111111111111111111111111 | Nie (zarządzanie loaderem wyłączone) | Programy legacy |
| BPF Loader (v2) | BPFLoader2111111111111111111111111111111111 | Nie (zarządzanie loaderem wyłączone) | Programy legacy |
| BPF Loader Upgradeable | BPFLoaderUpgradeab1e11111111111111111111111 | Tak, jeśli ustawiono uprawnienie do aktualizacji | Zarządza wszystkimi nowo wdrożonymi programami |
Is this page helpful?