Ten przewodnik zakłada znajomość następujących tematów:
| Zadanie | Polecenie |
|---|---|
| Zbuduj program | cargo build-sbf |
| Wdróż nowy program | solana program deploy <path_to_program.so> |
| Zaktualizuj istniejący program | solana program deploy <path_to_program.so> (takie samo jak wdrożenie) |
| Pokaż informacje o programie | solana program show <program-id> |
| Przenieś uprawnienia programu | solana program set-upgrade-authority <program-id> --new-upgrade-authority <path_to_keypair> |
| Uczyń program niezmiennym | solana program set-upgrade-authority <program-id> --final |
| Zamknij program | solana program close <program-id> --bypass-warning |
| Sprawdź saldo portfela | solana 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.sosolana 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
$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ę:
$solana config get
solana program deploy ./target/deploy/your_program.so --program-id ./target/deploy/your_program-keypair.json
$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:
$solana airdrop 2
Jeśli stary plik wykonywalny był krótszy niż nowy, może być konieczne najpierw zwiększenie rozmiaru programdata account:
$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:
$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:
$cargo build-sbf
To tworzy dwa ważne pliki w target/deploy/:
hello_world-keypair.json: Plik keypair, którego publiczny klucz będzie używany jako Twój Program IDhello_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.
$wc -c < ./target/deploy/hello_world.so
solana program set-upgrade-authority ./target/deploy/your_program-keypair.json --final
$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:
$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
$solana program deploy ./target/deploy/hello_world.so --program-id ./custom-keypair.json
Możesz wygenerować nowe keypairy za pomocą polecenia solana-keygen:
$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:
- Wprowadź zmiany w kodzie programu
- Przebuduj program:
cargo build-sbf - Wdróż aktualizację:
$solana program deploy ./target/deploy/hello_world.so
Inspekcja metadanych
Podkomenda show wyświetla metadane programu.
Przykładowy wynik wygląda następująco:
$solana program extend 7NxQjW8H8hVcqBKgXbVDWqGQCovHbqDW9p1SJJwUyTpE 1000
Program Idto adres, który można odwołać w poluprogram_idinstrukcji podczas wywoływania programu.Owner: Loader, za pomocą którego wdrożono ten program.ProgramData Addressto konto programdata powiązane z kontem programu, które przechowuje plik wykonywalny programu (tylko loader-v3).Status:retracted,deployedlubfinalized(tylko loader-v4).Authorityto autorytet aktualizacji programu.Last Deployed In Slotto slot, w którym program został ostatnio wdrożony.Data Lengthto 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:
$solana program show 7NxQjW8H8hVcqBKgXbVDWqGQCovHbqDW9p1SJJwUyTpE
Aby wyświetlić wszystkie konta buforowe niezależnie od autorytetu:
solana program show --buffers --all
$ solana program show 7283x8k8fyBcfaFLyPsxbd2VV1AMmZFP7FNoyTXVKJw7Program Id: 7283x8k8fyBcfaFLyPsxbd2VV1AMmZFP7FNoyTXVKJw7Owner: BPFLoaderUpgradeab1e11111111111111111111111ProgramData Address: Gqn7YQVCP8NtYV1qkEqR4Udhj8EJ3fkikvS7HskCNQ7cAuthority: 5kh6HxYZiAebF8HWLsUWod2EaQQ6iWHpHYCz8UcmFbM1Last Deployed In Slot: 6573Data Length: 18504 (0x4848) bytesBalance: 0.12999192 SOL
solana program show --programs --buffer-authority ~/.config/solana/authority-keypair.jsonsolana 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:
$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:
$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:
$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
$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.129991923KSGCk4m5hqJkTjPHBXUCPcqMwJnK3VmkqEsFUKKGJPK | 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:
$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.
$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.jsonsolana 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?