Menerapkan Program
Panduan ini mengasumsikan pengetahuan tentang topik-topik berikut:
Loader-v3 dan Loader-v4
Saat ini sedang berlangsung transisi dari loader-v3 (subperintah program) ke loader-v4 (subperintah program -v4) karena loader-v3 sedang dalam proses penghentian.
Untuk penerapan baru, silakan gunakan solana program-v4 deploy
alih-alih
solana program deploy
.
Untuk memigrasikan program yang sudah ada (yang pada dasarnya adalah menerapkannya kembali):
solana program migrate ./target/deploy/your_program-keypair.json
Persiapan
Pertama, program perlu dibangun (dikompilasi, ditautkan, distrip).
cargo +solana build --target sbpf-solana-solana --release
Langkah ini harus dilakukan sebelum setiap penerapan ulang/penerapan.
Periksa bahwa dana yang cukup tersedia di akun pembayar default sebanding dengan ukuran executable:
du -h ./target/deploy/your_program.sosolana balance
Selain itu, setiap program memiliki akun program dan ID program, yang merupakan alamat dari akun program tersebut. Berikut ini menghasilkan keypair untuk akun program:
solana-keygen new -o ./target/deploy/your_program-keypair.json
Ini hanya perlu dilakukan sekali per program dan akan digunakan kembali untuk penerapan ulang program yang sama di kemudian hari.
Toolchain memiliki jalan pintas, namun sedang dihapus/ dihentikan:
cargo-build-sbf
Penerapan Awal
Sekarang executable dapat diunggah ke akun program:
Loader-v3
Parameternya disebut program-id
meskipun sebenarnya mengharapkan jalur file
dari keypair:
solana program deploy ./target/deploy/your_program.so --program-id ./target/deploy/your_program-keypair.json
Loader-v4
solana program-v4 deploy ./target/deploy/your_program.so --program-keypair ./target/deploy/your_program-keypair.json
Penerapan ulang
Mengunggah executable yang berbeda ke program account yang sama akan menimpa/menggantinya. Namun, untuk penerapan ulang, hanya program ID (pubkey dari program keypair) yang diperlukan, bukan seluruh keypair, karena penandatangan adalah upgrade authority keypair.
Loader-v3
Ini persis sama dengan penerapan awal:
solana program deploy ./target/deploy/your_program.so --program-id ./target/deploy/your_program-keypair.json
Jika executable lama lebih pendek dari yang baru, mungkin perlu untuk memperbesar programdata account terlebih dahulu:
solana program extend ./target/deploy/your_program.so <ADDITIONAL_BYTES>
Loader-v4
Perhatikan bahwa penerapan awal menggunakan program-keypair
, sementara
penerapan ulang menggunakan program-id
:
solana program-v4 deploy ./target/deploy/your_program.so --program-id ./target/deploy/your_program-keypair.json
Memprioritaskan unggahan
Selama waktu kemacetan, ada beberapa flag tambahan yang dapat Anda gunakan untuk membantu penerapan program:
--with-compute-unit-price
: Tetapkan harga unit komputasi untuk transaksi, dalam kelipatan 0,000001 lamport (micro-lamports) per unit komputasi. Gunakan Priority Fee API oleh Helius untuk mendapatkan perkiraan biaya prioritas yang akan ditetapkan.--use-rpc
: Kirim transaksi tulis ke RPC yang dikonfigurasi alih-alih validator TPU. Flag ini memerlukan koneksi RPC stake-weighted seperti Helius atau Triton. Flag ini juga dapat dikonfigurasi menjadi default menggunakan:solana config set --url <RPC_URL>
.--max-sign-attempts
: Jumlah maksimum upaya untuk menandatangani atau menandatangani ulang transaksi setelah kedaluwarsa blockhash. Jika ada transaksi yang dikirim selama penerapan program masih belum dikonfirmasi setelah blockhash terbaru yang dipilih kedaluwarsa, transaksi tersebut akan ditandatangani ulang dengan blockhash terbaru dan dikirim ulang. Gunakan pengaturan ini untuk menyesuaikan jumlah maksimum iterasi penandatanganan transaksi. Setiap blockhash berlaku sekitar 60 detik, yang berarti menggunakan nilai default 5 akan mengarah pada pengiriman transaksi setidaknya selama 5 menit atau sampai semua transaksi dikonfirmasi, mana yang lebih dulu terjadi.
Melanjutkan Upload
Ada kemungkinan upload terhenti atau dibatalkan.
Loader-v3
Jika deployment program gagal, akan ada akun buffer perantara yang menggantung
yang berisi saldo tidak nol. Untuk mendapatkan kembali saldo tersebut, Anda
dapat melanjutkan deployment yang gagal dengan menyediakan buffer perantara yang
sama ke panggilan baru untuk deploy
.
Kegagalan deployment akan mencetak pesan kesalahan yang menentukan seed phrase yang diperlukan untuk memulihkan keypair buffer perantara yang dihasilkan:
==================================================================================Recover the intermediate account's ephemeral keypair file with`solana-keygen recover` and the following 12-word seed phrase:==================================================================================valley flat great hockey share token excess clever benefit traffic avocado athlete==================================================================================To resume a deploy, pass the recovered keypair asthe [BUFFER_SIGNER] to `solana program deploy` or `solana program write-buffer'.Or to recover the account's lamports, pass it as the[BUFFER_ACCOUNT_ADDRESS] argument to `solana program drain`.==================================================================================
Untuk memulihkan keypair:
solana-keygen recover -o ./target/deploy/buffer-keypair.json
Saat diminta, masukkan seed phrase 12 kata.
Kemudian keluarkan perintah deploy
baru dan tentukan buffer:
solana program deploy ./target/deploy/your_program.so --program-id ./target/deploy/your_program-keypair.json --buffer ./target/deploy/buffer-keypair.json
Loader-v4
Dimungkinkan untuk melanjutkan upload pada offset byte tertentu:
solana program deploy ./target/deploy/your_program.so --program-id ./target/deploy/your_program-keypair.json --start-offset <BYTES_UPLOADED_SO_FAR>
Finalisasi
Ini adalah tindakan yang tidak dapat dibalik.
Program dapat dibuat tidak dapat diubah dengan menghapus otoritas upgrade-nya.
Loader-v3
solana program set-upgrade-authority ./target/deploy/your_program-keypair.json --final
Loader-v4
solana program finalize --program-id ./target/deploy/your_program-keypair.json
Alih-alih menimpa program, juga dimungkinkan untuk memberikan pengguna pilihan versi program mana yang ingin mereka gunakan dengan membangun linked list program yang telah difinalisasi:
solana program finalize --program-id ./target/deploy/your_program-keypair.json --next-version ../your_newer_program/target/deploy/your_newer_program-keypair.json
Penutupan
Untuk program yang di-deploy di bawah loader-v3, hanya akun programdata, akun buffer dan dana yang terkunci di dalamnya yang dapat diklaim kembali. Akun program bersama dengan ID program dan dana yang terkunci khusus di akun program tidak dapat diambil kembali.
Program yang di-deploy dengan loader-v4 dapat ditutup beserta akun programnya, program ID dan dana yang terkunci semuanya akan tersedia kembali untuk penggunaan lain.
Loader-v3
Ini adalah tindakan yang tidak dapat dibalik untuk program yang di-deploy menggunakan loader-v3.
Perhatikan bahwa setelah program ditutup, program ID-nya tidak dapat digunakan kembali. Upaya untuk men-deploy program dengan program ID yang sebelumnya telah ditutup akan menghasilkan error. Jika Anda perlu men-deploy ulang program setelah menutupnya, Anda harus membuat file program keypair baru.
Untuk menutup satu akun programdata:
solana program close ./target/deploy/your_program-keypair.json
Untuk menutup semua akun buffer yang terkait dengan authority saat ini:
solana program close --buffers
Loader-v4
solana program-v4 close --program-id ./target/deploy/your_program-keypair.json
Memeriksa Metadata
Subperintah show
menampilkan metadata dari sebuah program.
Contoh outputnya seperti:
Program Id: 3KS2k14CmtnuVv2fvYcvdrNgC94Y11WETBpMUGgXyWZLOwner: BPFLoaderUpgradeab1e11111111111111111111111ProgramData Address: EHsACWBhgmw8iq5dmUZzTA1esRqcTognhKNHUkPi4q4gAuthority: FwoGJNUaJN2zfVEex9BB11Dqb3NJKy3e9oY3KTh9XzCULast Deployed In Slot: 63890568Data Length: 5216 (0x1460) bytes
Program Id
adalah alamat yang dapat direferensikan di fieldprogram_id
sebuah instruksi ketika memanggil program.Owner
: Loader yang digunakan untuk men-deploy program ini.ProgramData Address
adalah akun programdata yang terkait dengan akun program yang menyimpan executable program (hanya untuk loader-v3).Status
:retracted
,deployed
ataufinalized
(hanya untuk loader-v4).Authority
adalah authority upgrade program.Last Deployed In Slot
adalah slot di mana program terakhir kali di-deploy.Data Length
adalah ukuran ruang yang dicadangkan untuk deployment. Ruang yang sebenarnya digunakan oleh program yang saat ini di-deploy mungkin lebih kecil.
Loader-v3
Untuk melihat program tertentu:
solana program show ./target/deploy/your_program-keypair.json
Untuk melihat daftar program yang di-deploy dengan authority default:
solana program show --programs
Untuk menampilkan semua akun buffer tanpa memperhatikan authority:
solana program show --buffers --all
Untuk menentukan authority yang berbeda:
solana program show --programs --buffer-authority ~/.config/solana/authority-keypair.jsonsolana program show --buffers --buffer-authority ~/.config/solana/authority-keypair.json
Loader-v4
Untuk melihat program tertentu:
solana program-v4 show --program-id ./target/deploy/your_program-keypair.json
Untuk melihat daftar program yang di-deploy dengan authority default:
solana program-v4 show --all
Untuk melihat daftar program yang di-deploy dengan authority tertentu:
solana program-v4 show --authority ~/.config/solana/authority-keypair.json
Mengunduh Executable
Terkadang sangat berguna untuk mengunduh dan membandingkan program untuk memastikan program tersebut berisi executable yang dikenal. File yang diunduh dapat dipotong, di-hash, dan dibandingkan dengan hash dari file program asli.
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
Lanjutan: Transfer Authority
Hak untuk mengubah program tertentu berada pada authority-nya. Authority ini dapat ditransfer ke keypair lain tanpa mengubah keypair program, sehingga ID program tetap sama. Selain itu, satu authority dapat mengontrol beberapa program account.
Jika tidak ditentukan secara eksplisit selama deployment awal, maka keypair default akan digunakan sebagai authority. Inilah mengapa men-deploy ulang program dalam langkah-langkah di atas tidak memerlukan authority yang ditentukan secara eksplisit.
Authority eksplisit berguna untuk penandatanganan offline dan program yang diatur oleh multi-entitas.
Pertama, keypair untuk authority harus dibuat:
solana-keygen new -o ~/.config/solana/authority-keypair.json
Loader-v3
Authority dapat ditentukan selama deployment:
solana program deploy ./target/deploy/your_program.so --upgrade-authority ~/.config/solana/authority-keypair.json
Atau setelah deployment dan menggunakan keypair default sebagai authority saat ini:
solana program set-upgrade-authority ./target/deploy/your_program-keypair.json --new-upgrade-authority ~/.config/solana/authority-keypair.json
Atau setelah deployment dan menentukan authority saat ini:
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
Authority dapat ditentukan selama deployment:
solana program-v4 deploy ./target/deploy/your_program.so --program-keypair ./target/deploy/your_program-keypair.json --authority ~/.config/solana/authority-keypair.json
Atau setelah deployment dan menggunakan keypair default sebagai authority saat ini:
solana program-v4 transfer-authority --program-id ./target/deploy/your_program-keypair.json --new-authority ~/.config/solana/authority-keypair.json
Atau setelah deployment dan menentukan authority saat ini:
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
Lanjutan: Redeployment dua langkah menggunakan buffer
Alih-alih mengunggah langsung ke program account, executable dapat diunggah ke akun buffer staging terlebih dahulu dan kemudian ditransfer ke program account pada langkah kedua (re-/deployment yang sebenarnya). Ini berguna untuk penandatanganan offline dan program yang diatur oleh multi-entitas seperti voting DAO untuk memilih atau menolak executable yang diunggah sebelum redeployment yang sebenarnya.
Perlu diingat bahwa menggunakan akun buffer kurang lebih menggandakan dana yang diperlukan selama proses unggahan karena dua akun masing-masing menyimpan satu executable secara bersamaan.
Pertama, keypair untuk akun buffer harus dibuat:
solana-keygen new -o ~/.config/solana/buffer-keypair.json
Akun buffer dapat digunakan kembali untuk unggahan yang berbeda dan tidak terikat pada program account tertentu.
Loader-v3
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
Loader-v4
solana program-v4 deploy ./target/deploy/your_program.so --buffer ~/.config/solana/buffer-keypair.jsonsolana program-v4 deploy --program-id ./target/deploy/your_program-keypair.json --buffer ~/.config/solana/buffer-keypair.json
Lanjutan: Penandatanganan offline
Beberapa model keamanan memerlukan pemisahan proses penandatanganan dari penyiaran transaksi, sehingga kunci penandatanganan dapat sepenuhnya terputus dari jaringan apa pun, juga dikenal sebagai penandatanganan offline.
Perhatikan bahwa hanya redeployment yang dapat dilakukan dalam mode offline. Deployment program awal harus dilakukan dari mesin online, dan hanya redeployment program berikutnya yang dapat memanfaatkan penandatanganan offline.
Pengaturan tipikal akan terdiri dari dua penandatangan berbeda:
- penandatangan online (pembayar biaya dan authority akun buffer)
- penandatangan offline (authority program account)
Proses umum adalah penerapan ulang dua langkah dengan beberapa tambahan:
- (online) buat program baru
- (online) transfer otoritas ke penandatangan offline
- (online) buat buffer dan unggah executable ke dalamnya
- (opsional) verifikasi konten on-chain buffer
- (offline) tandatangani transaksi untuk menerapkan ulang program menggunakan
buffer
--blockhash <VALUE> --sign-only
- (online) gunakan tanda tangan ini untuk menyiarkan transaksi penerapan ulang
--blockhash <VALUE> --signer <OFFLINE_SIGNER_PUBKEY>:<OFFLINE_SIGNER_SIGNATURE>
Cari blockhash
terbaru dan tempelkan untuk menghasilkan tanda tangan transaksi
offline. blockhash
kedaluwarsa setelah ~60 detik. Jika Anda tidak berhasil
tepat waktu - dapatkan hash baru dan ulangi sampai berhasil, atau pertimbangkan
untuk menggunakan nonce transaksi yang tahan lama.
Is this page helpful?