Dokumentacja SolanaTworzenie programów

Wdrażanie programów

Ten przewodnik zakłada znajomość następujących tematów:

ZadaniePolecenie
Zbuduj programcargo build-sbf
Wdróż nowy programsolana program deploy <path_to_program.so>
Zaktualizuj istniejący programsolana program deploy <path_to_program.so> (takie samo jak wdrożenie)
Pokaż informacje o programiesolana program show <program-id>
Przenieś uprawnienia programusolana program set-upgrade-authority <program-id> --new-upgrade-authority <path_to_keypair>
Uczyń program niezmiennymsolana program set-upgrade-authority <program-id> --final
Zamknij programsolana program close <program-id> --bypass-warning
Sprawdź saldo portfelasolana balance
Poproś o airdrop (devnet/localhost)solana airdrop 2

Obecnie trwa przejście z loader-v3 (podpolecenie program) na loader-v4 (podpolecenie program -v4), ponieważ loader-v3 jest wycofywany.

Do nowych wdrożeń proszę używać solana program-v4 deploy zamiast solana program deploy.

Aby zmigrować istniejący program (co w zasadzie oznacza jego ponowne wdrożenie):

solana program migrate ./target/deploy/your_program-keypair.json

Przygotowanie

Najpierw program musi zostać zbudowany (skomplikowany, połączony, zoptymalizowany).

cargo +solana build --target sbpf-solana-solana --release

Ten krok musi być wykonany przed każdym (ponownym) wdrożeniem.

Sprawdź, czy na domyślnym koncie płatnika dostępne są wystarczające środki proporcjonalne do rozmiaru pliku wykonywalnego:

du -h ./target/deploy/your_program.so
solana balance

Dodatkowo każdy program ma konto programu i identyfikator programu, który jest adresem tego konta programu. Poniższe generuje keypair dla konta programu:

solana-keygen new -o ./target/deploy/your_program-keypair.json
Terminal
$
solana-keygen new

Domyślnie tworzy to keypair w ~/.config/solana/id.json.

cargo-build-sbf

Pierwsze wdrożenie

Teraz plik wykonywalny może zostać przesłany na konto programu:

Wybierz, do którego klastra Solana chcesz wdrożyć. Użyj polecenia solana config get, aby sprawdzić swoją bieżącą konfigurację:

Terminal
$
solana config get
solana program deploy ./target/deploy/your_program.so --program-id ./target/deploy/your_program-keypair.json
Terminal
$
solana config set --url mainnet-beta
$
solana config set --url devnet
$
solana config set --url localhost
$
solana config set --url testnet
$
solana config set --url "https://your-rpc-url.com"
solana program-v4 deploy ./target/deploy/your_program.so --program-keypair ./target/deploy/your_program-keypair.json

Ponowne wdrożenie

Przesłanie innego pliku wykonywalnego do tego samego program account ponownie nadpisze / zastąpi go. Jednakże, do ponownego wdrożenia potrzebny jest tylko program ID (pubkey program keypair), a nie cały keypair, ponieważ podpisującym jest upgrade authority keypair.

Loader-v3

Dla devnetu lub localhost doładuj portfel za pomocą polecenia solana airdrop:

Terminal
$
solana airdrop 2

Jeśli stary plik wykonywalny był krótszy niż nowy, może być konieczne najpierw zwiększenie rozmiaru programdata account:

Terminal
$
solana balance

Loader-v4

Zauważ, że początkowe wdrożenie używało program-keypair, podczas gdy ponowne wdrożenie używa program-id:

solana program-v4 deploy ./target/deploy/your_program.so --program-id ./target/deploy/your_program-keypair.json

Priorytetyzacja przesyłania

Aby zbudować program, użyj polecenia cargo build-sbf:

Terminal
$
cargo build-sbf

Wznawianie przesyłania

Możliwe jest, że przesyłanie zostanie zatrzymane lub przerwane.

Loader-v3

Jeśli wdrożenie programu zakończy się niepowodzeniem, pozostanie wiszące pośrednie konto bufora zawierające saldo różne od zera. Aby odzyskać to saldo, możesz wznowić nieudane wdrożenie, podając ten sam pośredni bufor w nowym wywołaniu deploy.

Aby odzyskać keypair:

Zbuduj swój program za pomocą polecenia cargo build-sbf:

Terminal
$
cargo build-sbf

To tworzy dwa ważne pliki w target/deploy/:

  1. hello_world-keypair.json: Plik keypair, którego publiczny klucz będzie używany jako Twój Program ID
  2. hello_world.so: Skompilowany plik wykonywalny programu
solana program deploy ./target/deploy/your_program.so --program-id ./target/deploy/your_program-keypair.json --start-offset <BYTES_UPLOADED_SO_FAR>

Finalizacja

To jest działanie nieodwracalne.

Program może zostać uczyniony niezmiennym poprzez usunięcie jego uprawnień do aktualizacji.

Terminal
$
wc -c < ./target/deploy/hello_world.so
solana program set-upgrade-authority ./target/deploy/your_program-keypair.json --final
Terminal
$
solana rent 18504
solana program finalize --program-id ./target/deploy/your_program-keypair.json

Zamiast nadpisywać programy, możliwe jest również zapewnienie użytkownikom wyboru wersji programu, której chcą używać, poprzez skonstruowanie listy połączonej sfinalizowanych programów:

Użyj polecenia solana program deploy, aby wdrożyć swój program:

Terminal
$
solana program deploy ./target/deploy/hello_world.so

Dla programów wdrożonych za pomocą loader-v3 można odzyskać tylko ich konto programdata, konta buforów i środki zablokowane w tych kontach. Konto programu wraz z identyfikatorem programu i środkami zablokowanymi na koncie programu pozostają zablokowane.

Programy wdrożone za pomocą loader-v4 mogą zostać zamknięte wraz z ich kontem programowym, identyfikatorem programu i zablokowanymi funduszami, które ponownie stają się dostępne do innych zastosowań.

Loader-v3

Terminal
$
solana program deploy ./target/deploy/hello_world.so --program-id ./custom-keypair.json

Możesz wygenerować nowe keypairy za pomocą polecenia solana-keygen:

Terminal
$
solana-keygen new -o ./custom-keypair.json
solana program close ./target/deploy/your_program-keypair.json

Aby zamknąć wszystkie konta buforowe powiązane z bieżącym autorytetem:

Zaktualizuj swój program, używając tej samej komendy solana program deploy:

  1. Wprowadź zmiany w kodzie programu
  2. Przebuduj program: cargo build-sbf
  3. Wdróż aktualizację:
Terminal
$
solana program deploy ./target/deploy/hello_world.so

Inspekcja metadanych

Podkomenda show wyświetla metadane programu.

Przykładowy wynik wygląda następująco:

Terminal
$
solana program extend 7NxQjW8H8hVcqBKgXbVDWqGQCovHbqDW9p1SJJwUyTpE 1000
  • Program Id to adres, który można odwołać w polu program_id instrukcji podczas wywoływania programu.
  • Owner: Loader, za pomocą którego wdrożono ten program.
  • ProgramData Address to konto programdata powiązane z kontem programu, które przechowuje plik wykonywalny programu (tylko loader-v3).
  • Status: retracted, deployed lub finalized (tylko loader-v4).
  • Authority to autorytet aktualizacji programu.
  • Last Deployed In Slot to slot, w którym program został ostatnio wdrożony.
  • Data Length to rozmiar przestrzeni zarezerwowanej na wdrożenia. Rzeczywista przestrzeń używana przez obecnie wdrożony program może być mniejsza.

Loader-v3

Aby wyświetlić konkretny program:

solana program show ./target/deploy/your_program-keypair.json

Aby sprawdzić metadane programu, użyj komendy solana program show:

Terminal
$
solana program show 7NxQjW8H8hVcqBKgXbVDWqGQCovHbqDW9p1SJJwUyTpE

Aby wyświetlić wszystkie konta buforowe niezależnie od autorytetu:

solana program show --buffers --all
$ solana program show 7283x8k8fyBcfaFLyPsxbd2VV1AMmZFP7FNoyTXVKJw7
Program Id: 7283x8k8fyBcfaFLyPsxbd2VV1AMmZFP7FNoyTXVKJw7
Owner: BPFLoaderUpgradeab1e11111111111111111111111
ProgramData Address: Gqn7YQVCP8NtYV1qkEqR4Udhj8EJ3fkikvS7HskCNQ7c
Authority: 5kh6HxYZiAebF8HWLsUWod2EaQQ6iWHpHYCz8UcmFbM1
Last Deployed In Slot: 6573
Data Length: 18504 (0x4848) bytes
Balance: 0.12999192 SOL
solana program show --programs --buffer-authority ~/.config/solana/authority-keypair.json
solana program show --buffers --buffer-authority ~/.config/solana/authority-keypair.json

Loader-v4

Aby wyświetlić konkretny program:

solana program-v4 show --program-id ./target/deploy/your_program-keypair.json

Aby wyświetlić listę programów wdrożonych z domyślnym autorytetem:

solana program-v4 show --all

Aby wyświetlić listę programów wdrożonych z określonym autorytetem:

solana program-v4 show --authority ~/.config/solana/authority-keypair.json

Pobieranie pliku wykonywalnego

Czasami przydatne jest pobranie i porównanie programu, aby upewnić się, że zawiera znany plik wykonywalny. Pobierany plik można skrócić, zahaszować i porównać z hashem oryginalnego pliku programu.

Loader-v3

solana program dump ./target/deploy/your_program-keypair.json ./target/deploy/your_program.so

Loader-v4

solana program download ./target/deploy/your_program.so --program-id ./target/deploy/your_program-keypair.json

Zaawansowane: Przeniesienie autorytetu

Prawo do zmiany danego programu należy do jego autorytetu. Ten autorytet może zostać przeniesiony na inny keypair bez zmiany keypair programu, dzięki czemu ID programu pozostaje takie samo. Co więcej, jeden autorytet może kontrolować wiele kont programów.

Aby przenieść uprawnienia programu na inne konto, użyj komendy solana program set-upgrade-authority:

Terminal
$
solana program set-upgrade-authority 7NxQjW8H8hVcqBKgXbVDWqGQCovHbqDW9p1SJJwUyTpE --new-upgrade-authority ./new-authority-keypair.json

Najpierw należy wygenerować keypair dla autorytetu:

solana-keygen new -o ~/.config/solana/authority-keypair.json

Aby uczynić program niezmiennym, użyj komendy solana program set-upgrade-authority z flagą --final, aby usunąć uprawnienia programu:

Terminal
$
solana program set-upgrade-authority 7NxQjW8H8hVcqBKgXbVDWqGQCovHbqDW9p1SJJwUyTpE --final
solana program deploy ./target/deploy/your_program.so --upgrade-authority ~/.config/solana/authority-keypair.json

Lub po wdrożeniu, używając domyślnego keypair jako obecnego autorytetu:

Aby zamknąć program i odzyskać SOL przypisane do program account, użyj komendy solana program close:

Terminal
$
solana program close 7NxQjW8H8hVcqBKgXbVDWqGQCovHbqDW9p1SJJwUyTpE --bypass-warning
solana program set-upgrade-authority ./target/deploy/your_program-keypair.json --upgrade-authority ~/.config/solana/authority-keypair.json --new-upgrade-authority ~/.config/solana/new_authority-keypair.json

Loader-v4

Autorytet można określić podczas wdrożenia:

solana program-v4 deploy ./target/deploy/your_program.so --program-keypair ./target/deploy/your_program-keypair.json --authority ~/.config/solana/authority-keypair.json
Terminal
$
solana program show --programs
solana program-v4 transfer-authority --program-id ./target/deploy/your_program-keypair.json --new-authority ~/.config/solana/authority-keypair.json
Program Id | Slot | Authority | Balance
-------------------------------------------------|------------|------------------------------------------------|-------------
7NxQjW8H8hVcqBKgXbVDWqGQCovHbqDW9p1SJJwUyTpE | 249885434 | 5kh6HxYZiAebF8HWLsUWod2EaQQ6iWHpHYCz8UcmFbM1 | 0.12999192
3KSGCk4m5hqJkTjPHBXUCPcqMwJnK3VmkqEsFUKKGJPK | 249883212 | 5kh6HxYZiAebF8HWLsUWod2EaQQ6iWHpHYCz8UcmFbM1 | 0.28654328
solana program-v4 transfer-authority --program-id ./target/deploy/your_program-keypair.json --authority ~/.config/solana/authority-keypair.json --new-authority ~/.config/solana/new_authority-keypair.json

Aby pobrać wdrożony program, użyj komendy solana program dump:

Terminal
$
solana program dump 7NxQjW8H8hVcqBKgXbVDWqGQCovHbqDW9p1SJJwUyTpE ./downloaded_program.so

Pamiętaj, że użycie kont buforowych mniej więcej podwaja środki wymagane podczas procesu przesyłania, ponieważ dwa konta jednocześnie przechowują jeden plik wykonywalny.

Najpierw należy utworzyć keypair dla konta buforowego:

solana-keygen new -o ~/.config/solana/buffer-keypair.json

Konto buforowe może być ponownie używane do różnych przesyłek i nie jest powiązane z żadnym konkretnym kontem programu.

Terminal
$
solana program deploy ./target/deploy/hello_world.so \
--with-compute-unit-price 10000 \
--max-sign-attempts 10 \
--use-rpc
solana program write-buffer ./target/deploy/your_program.so --buffer ~/.config/solana/buffer-keypair.json
solana program deploy --program-id ./target/deploy/your_program-keypair.json --buffer ~/.config/solana/buffer-keypair.json
  • --with-compute-unit-price: Ustaw opłatę priorytetową w mikro-lamportach (0,000001 SOL) za jednostkę obliczeniową. Sprawdź Helius Priority Fee API, aby poznać aktualne stawki. Opłata priorytetowa to dodatkowa opłata płacona obecnemu liderowi za priorytetowe potraktowanie twojej transakcji.
  • --max-sign-attempts: Liczba prób ponowienia z nowym blockhashem, jeśli transakcje wygasną. (Domyślnie: 5)
  • --use-rpc: Wysyłaj transakcje do skonfigurowanego RPC. Ta flaga wymaga połączenia RPC ważonego stakami od dostawców takich jak Triton lub Helius.

Is this page helpful?

Zarządzane przez

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