Bagian ini membahas proses dasar men-deploy program Solana menggunakan Solana CLI.
Referensi Perintah CLI
| Tugas | Perintah |
|---|---|
| Build program | cargo build-sbf |
| Deploy program baru | solana program deploy <path_to_program.so> |
| Update program yang ada | solana program deploy <path_to_program.so> (sama dengan deploy) |
| Tampilkan info program | solana program show <program-id> |
| Transfer otoritas program | solana program set-upgrade-authority <program-id> --new-upgrade-authority <path_to_keypair> |
| Jadikan program immutable | solana program set-upgrade-authority <program-id> --final |
| Tutup program | solana program close <program-id> --bypass-warning |
| Cek saldo wallet | solana balance |
| Minta airdrop (devnet/localhost) | solana airdrop 2 |
Konsep Kunci
Sebelum memulai, mari perjelas beberapa terminologi:
- Program ID: Alamat on-chain dari program Anda. Pengguna berinteraksi dengan program Anda dengan mereferensikan Program ID.
- Program Account: Akun on-chain yang menyimpan metadata program Anda. Alamat program account adalah Program ID. Program account juga menyimpan alamat dari ProgramData Account.
- ProgramData Account: Akun on-chain yang menyimpan kode executable program Anda yang telah di-deploy.
- Program Authority: Akun yang memiliki izin untuk memperbarui atau menutup program. Secara default, ini adalah dompet CLI Anda.
Prasyarat
Instal Solana CLI
Pertama, instal Solana CLI.
Siapkan Dompet
Setelah instalasi, buat dompet keypair lokal. Alamat dompet ini diatur sebagai otoritas program default saat men-deploy program:
$solana-keygen new
Ini membuat keypair di ~/.config/solana/id.json secara default.
Konfigurasi Cluster
Pilih cluster Solana mana yang akan digunakan untuk deploy. Gunakan perintah
solana config get untuk memeriksa konfigurasi Anda saat ini:
$solana config get
Beralih antar cluster sesuai kebutuhan:
$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"
Dana Wallet
Anda akan membutuhkan SOL untuk membayar deployment program. Jumlahnya tergantung pada ukuran program Anda.
Untuk devnet atau localhost, isi wallet Anda menggunakan perintah
solana airdrop:
$solana airdrop 2
Periksa saldo wallet Anda:
$solana balance
Operasi Dasar
Build Program
Untuk build program, gunakan perintah cargo build-sbf:
$cargo build-sbf
Contoh Program
Berikut adalah program Solana minimal yang mencetak "Hello, Solana!" ke log program.
use solana_program::{account_info::AccountInfo, entrypoint, entrypoint::ProgramResult, msg, pubkey::Pubkey,};entrypoint!(process_instruction);pub fn process_instruction(_program_id: &Pubkey,_accounts: &[AccountInfo],_instruction_data: &[u8],) -> ProgramResult {msg!("Hello, Solana!");Ok(())}
Output Build
Build program Anda menggunakan perintah cargo build-sbf:
$cargo build-sbf
Ini membuat dua file penting di target/deploy/:
hello_world-keypair.json: File keypair yang kunci publiknya akan digunakan sebagai Program ID Andahello_world.so: Executable program yang telah dikompilasi
Periksa Ukuran dan Biaya Program
Menerapkan program memerlukan SOL yang dialokasikan ke akun program berdasarkan ukuran program. Program yang lebih besar membutuhkan lebih banyak SOL untuk diterapkan.
Periksa ukuran program Anda:
$wc -c < ./target/deploy/hello_world.so
Hitung SOL yang diperlukan untuk ukuran ini (byte):
$solana rent 18504
Anda akan membutuhkan sedikit lebih banyak SOL daripada yang ditampilkan untuk menutupi biaya transaksi penerapan.
Menerapkan Program
Gunakan perintah solana program deploy untuk deploy program Anda:
$solana program deploy ./target/deploy/hello_world.so
Program Id yang ditampilkan adalah alamat permanen program Anda di jaringan.
Untuk menerapkan dengan Program ID tertentu (alih-alih yang dibuat secara otomatis), gunakan:
$solana program deploy ./target/deploy/hello_world.so --program-id ./custom-keypair.json
Anda dapat membuat keypair baru menggunakan perintah solana-keygen:
$solana-keygen new -o ./custom-keypair.json
Perbarui Program
Perbarui program Anda menggunakan perintah solana program deploy yang sama:
- Lakukan perubahan pada kode program Anda
- Bangun ulang program Anda:
cargo build-sbf - Deploy pembaruan:
$solana program deploy ./target/deploy/hello_world.so
Jika program yang diperbarui memerlukan lebih banyak ruang (byte) daripada yang dialokasikan saat ini, deployment akan secara otomatis memperluas program account. Ini terjadi ketika program baru Anda lebih besar dari versi sebelumnya. Program account membutuhkan byte tambahan untuk menyimpan program baru. CLI akan menghitung SOL yang diperlukan dan menguranginya dari dompet Anda secara otomatis.
Anda juga dapat memperluas program secara manual untuk mengalokasikan lebih banyak byte:
$solana program extend 7NxQjW8H8hVcqBKgXbVDWqGQCovHbqDW9p1SJJwUyTpE 1000
Pengelolaan Program
Setelah program Anda di-deploy, ada beberapa perintah umum untuk mengelola program account.
Lihat Metadata Program
Untuk memeriksa metadata program Anda, gunakan perintah solana program show:
$solana program show 7NxQjW8H8hVcqBKgXbVDWqGQCovHbqDW9p1SJJwUyTpE
Contoh output:
$ solana program show 7283x8k8fyBcfaFLyPsxbd2VV1AMmZFP7FNoyTXVKJw7Program Id: 7283x8k8fyBcfaFLyPsxbd2VV1AMmZFP7FNoyTXVKJw7Owner: BPFLoaderUpgradeab1e11111111111111111111111ProgramData Address: Gqn7YQVCP8NtYV1qkEqR4Udhj8EJ3fkikvS7HskCNQ7cAuthority: 5kh6HxYZiAebF8HWLsUWod2EaQQ6iWHpHYCz8UcmFbM1Last Deployed In Slot: 6573Data Length: 18504 (0x4848) bytesBalance: 0.12999192 SOL
Transfer Program Authority
Untuk mentransfer otoritas program ke akun yang berbeda, gunakan perintah
solana program set-upgrade-authority:
$solana program set-upgrade-authority 7NxQjW8H8hVcqBKgXbVDWqGQCovHbqDW9p1SJJwUyTpE --new-upgrade-authority ./new-authority-keypair.json
Setelah mentransfer program authority, Anda tidak dapat lagi memperbarui program kecuali Anda memiliki akses ke keypair authority yang baru.
Membuat Program Anda Tidak Dapat Diubah
Untuk membuat program Anda immutable, gunakan perintah
solana program set-upgrade-authority dengan flag --final untuk menghapus
otoritas program:
$solana program set-upgrade-authority 7NxQjW8H8hVcqBKgXbVDWqGQCovHbqDW9p1SJJwUyTpE --final
Setelah program menjadi tidak dapat diubah, program tersebut tidak akan pernah bisa diperbarui atau ditutup.
Menutup Program Anda
Untuk menutup program Anda dan mengklaim kembali SOL yang dialokasikan ke
program account, gunakan perintah solana program close:
$solana program close 7NxQjW8H8hVcqBKgXbVDWqGQCovHbqDW9p1SJJwUyTpE --bypass-warning
Setelah ditutup, Program ID tidak dapat digunakan kembali. Anda tidak dapat menerapkan program baru ke alamat yang sama.
Perintah Utilitas
Daftar Semua Program
Lihat semua program di mana dompet Anda saat ini adalah authority:
$solana program show --programs
Contoh output:
Program Id | Slot | Authority | Balance-------------------------------------------------|------------|------------------------------------------------|-------------7NxQjW8H8hVcqBKgXbVDWqGQCovHbqDW9p1SJJwUyTpE | 249885434 | 5kh6HxYZiAebF8HWLsUWod2EaQQ6iWHpHYCz8UcmFbM1 | 0.129991923KSGCk4m5hqJkTjPHBXUCPcqMwJnK3VmkqEsFUKKGJPK | 249883212 | 5kh6HxYZiAebF8HWLsUWod2EaQQ6iWHpHYCz8UcmFbM1 | 0.28654328
Mengunduh Program yang Telah Di-deploy
Untuk mengunduh program yang telah di-deploy, gunakan perintah
solana program dump:
$solana program dump 7NxQjW8H8hVcqBKgXbVDWqGQCovHbqDW9p1SJJwUyTpE ./downloaded_program.so
Opsi Lanjutan
Flag Deployment
Ketika jaringan Solana sedang padat, gunakan flag ini untuk membantu deployment program.
Contoh Penggunaan:
$solana program deploy ./target/deploy/hello_world.so \--with-compute-unit-price 10000 \--max-sign-attempts 10 \--use-rpc
Penjelasan opsi:
--with-compute-unit-price: Tetapkan priority fee dalam micro-lamport (0,000001 SOL) per compute unit. Periksa Helius Priority Fee API untuk tarif saat ini. Priority fee adalah biaya tambahan yang dibayarkan kepada leader saat ini untuk memprioritaskan transaksi Anda.--max-sign-attempts: Jumlah percobaan ulang dengan blockhash baru jika transaksi kedaluwarsa. (Default: 5)--use-rpc: Kirim transaksi ke RPC yang dikonfigurasi. Flag ini memerlukan koneksi RPC stake-weighted dari penyedia seperti Triton atau Helius.
Is this page helpful?