Wdrażanie programów

Podsumowanie

Programy wdrożone za pomocą loader-v3 mogą być aktualizowane, jeśli ustawiono autorytet do aktualizacji. Cofnięcie tego uprawnienia sprawia, że program staje się niezmienny. Omówiono mechanizm 9 kroków aktualizacji, wszystkie 9 instrukcji loader-v3, weryfikację kompilacji oraz 5 typów loaderów.

Wdrażanie programów

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:

  1. Weryfikuje, czy konto Program jest zapisywalne i należy do loader-v3.
  2. Weryfikuje, czy konto Buffer zawiera stan Buffer z poprawnym autorytetem.
  3. Weryfikuje, czy konto ProgramData ma zgodny upgrade_authority_address i nie jest None.
  4. Weryfikuje, czy program nie został już wdrożony w bieżącym slocie (clock.slot != slot).
  5. Ładuje i weryfikuje nowe bajty ELF z bufora.
  6. Kopiuje nowy bajtkod z bufora do konta ProgramData i zeruje pozostałe bajty.
  7. Zasila konto ProgramData do poziomu zwolnienia z opłat za wynajem.
  8. Opróżnia konto bufora (ustawia lamports na 0) i przycina jego dane.
  9. 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.

InstrukcjaOpis
InitializeBufferUstawia stan konta bufora na Buffer z określonym autorytetem. Zwraca błąd, jeśli już zostało zainicjalizowane.
WriteZapisuje bajty pod wskazanym offsetem w koncie bufora. Wymagany podpis autorytetu.
DeployWithMaxDataLenTworzy nowy program: wyprowadza adres ProgramData, tworzy konto ProgramData przez CPI do System Program, weryfikuje i wdraża ELF z bufora, ustawia stan konta Program i oznacza je jako wykonywalne.
UpgradeZastępuje bajtkod w istniejącym koncie ProgramData programu z bufora.
SetAuthorityZmienia autorytet konta Buffer lub ProgramData. Ustawienie na None dla ProgramData sprawia, że program staje się niezmienny. Autorytetu Buffer nie można ustawić na None.
SetAuthorityCheckedJak SetAuthority, ale wymaga, aby nowy autorytet również podpisał transakcję.
CloseZamyka konto bufora, niezainicjalizowane lub ProgramData, przenosząc jego lamporty do odbiorcy. Zamknięcie ProgramData zapisuje również nagrobek Closed w cache programu. Nie można zamknąć programu wdrożonego w bieżącym slocie.
ExtendProgramCheckedRozszerza alokację konta ProgramData o dodatkowe bajty, finansując dodatkowy rent od płatnika.
MigrateMigruje program loader-v3 do loader-v4 poprzez przeniesienie własności konta programu i skopiowanie bajtkodu. Wymaga podpisu autorytetu migracji lub autorytetu aktualizacji programu. Loader-v4 nie jest jeszcze dostępny na mainnecie.

Weryfikacja programów

Solana obsługuje weryfikowalne buildy, które pozwalają użytkownikom potwierdzić, że bajtkod programu znajdujący się w łańcuchu jest zgodny z jego publicznym kodem źródłowym. Framework Anchor zapewnia wbudowane wsparcie dla weryfikowalnych buildów.

Aby sprawdzić status weryfikacji wdrożonego programu, wyszukaj jego ID programu w Solana Explorer lub użyj narzędzia Ellipsis Labs Solana Verifiable Build CLI, aby niezależnie zweryfikować programy znajdujące się w łańcuchu.

Programy loaderów

LoaderAdresMożliwość aktualizacjiOpis
Native LoaderNativeLoader1111111111111111111111111111111Tylko przez aktualizację oprogramowania validatoraZarządza wbudowanymi (System, Vote, Stake) i innymi loaderami
BPF Loader (v1)BPFLoader1111111111111111111111111111111111Nie (zarządzanie loaderem wyłączone)Programy legacy
BPF Loader (v2)BPFLoader2111111111111111111111111111111111Nie (zarządzanie loaderem wyłączone)Programy legacy
BPF Loader UpgradeableBPFLoaderUpgradeab1e11111111111111111111111Tak, jeśli ustawiono autorytet do aktualizacjiZarządza wszystkimi nowo wdrożonymi programami
Loader-v4LoaderV411111111111111111111111111111111111Tak, jeśli ustawiono autorytetJeszcze nie wydany na mainnecie

Is this page helpful?

Spis treści

Edytuj stronę

Zarządzane przez

© 2026 Solana Foundation.
Wszelkie prawa zastrzeżone.
Bądź na bieżąco