Bu kılavuz aşağıdaki konular hakkında bilgi sahibi olduğunuzu varsayar:
| Görev | Komut |
|---|---|
| Programı derle | cargo build-sbf |
| Yeni program dağıt | solana program deploy <path_to_program.so> |
| Mevcut programı güncelle | solana program deploy <path_to_program.so> (dağıtım ile aynı) |
| Program bilgisini göster | solana program show <program-id> |
| Program yetkisini transfer et | solana program set-upgrade-authority <program-id> --new-upgrade-authority <path_to_keypair> |
| Programı değiştirilemez yap | solana program set-upgrade-authority <program-id> --final |
| Programı kapat | solana program close <program-id> --bypass-warning |
| Cüzdan bakiyesini kontrol et | solana balance |
| Airdrop talep et (devnet/localhost) | solana airdrop 2 |
Şu anda loader-v3 (program alt komutu) kullanımından loader-v4'e (program -v4 alt komutu) geçiş süreci devam etmektedir çünkü loader-v3 kullanımdan kaldırılmaktadır.
Yeni dağıtımlar için lütfen solana program deploy yerine
solana program-v4 deploy kullanın.
Mevcut bir programı taşımak için (esasen yeniden dağıtmak):
solana program migrate ./target/deploy/your_program-keypair.json
Hazırlık
İlk olarak, programın oluşturulması (derlenmesi, bağlanması, sıyrılması) gerekir.
cargo +solana build --target sbpf-solana-solana --release
Bu adım her yeniden dağıtım/dağıtım öncesinde gerçekleştirilmelidir.
Çalıştırılabilir dosyanın boyutuyla orantılı olarak varsayılan ödeyici hesapta yeterli fonun mevcut olduğunu kontrol edin:
du -h ./target/deploy/your_program.sosolana balance
Ayrıca, her programın bir program hesabı ve program kimliği vardır, bu da program hesabının adresidir. Aşağıdaki komut, program hesabı için bir keypair oluşturur:
solana-keygen new -o ./target/deploy/your_program-keypair.json
$solana-keygen new
Bu, varsayılan olarak ~/.config/solana/id.json konumunda bir keypair
oluşturur.
cargo-build-sbf
İlk Dağıtım
Şimdi çalıştırılabilir dosya program hesabına yüklenebilir:
Hangi Solana cluster'ına dağıtım yapılacağını seçin. Mevcut yapılandırmanızı
kontrol etmek için solana config get komutunu kullanın:
$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
Yeniden Dağıtım
Aynı program hesabına farklı bir yürütülebilir dosya yüklemek, mevcut dosyayı üzerine yazacak/değiştirecektir. Ancak, yeniden dağıtımlar için, imzalayan yükseltme yetkisi keypair'i olduğundan, tüm keypair değil, yalnızca program kimliği (program keypair'inin pubkey'i) gereklidir.
Loader-v3
Devnet veya localhost için, cüzdanınızı solana airdrop komutu ile fonlayın:
$solana airdrop 2
Eğer eski yürütülebilir dosya yenisinden daha kısaysa, önce programdata hesabını büyütmek gerekebilir:
$solana balance
Loader-v4
İlk dağıtımda program-keypair kullanıldığına, yeniden dağıtımda ise bunun
yerine program-id kullanıldığına dikkat edin:
solana program-v4 deploy ./target/deploy/your_program.so --program-id ./target/deploy/your_program-keypair.json
Bir Yüklemeye Öncelik Verme
Bir program derlemek için cargo build-sbf komutunu kullanın:
$cargo build-sbf
Yüklemeye Devam Etme
Bir yüklemenin takılması veya yarıda kesilmesi mümkündür.
Loader-v3
Program dağıtımı başarısız olursa, sıfır olmayan bir bakiye içeren askıda kalan
bir ara tampon hesabı olacaktır. Bu bakiyeyi geri kazanmak için, aynı ara
tamponu deploy için yeni bir çağrıya sağlayarak başarısız bir dağıtıma devam
edebilirsiniz.
Keypair'i kurtarmak için:
Programınızı cargo build-sbf komutu ile derleyin:
$cargo build-sbf
Bu, target/deploy/ içinde iki önemli dosya oluşturur:
hello_world-keypair.json: Public key'i Program ID'niz olarak kullanılacak bir keypair dosyasıhello_world.so: Derlenmiş program çalıştırılabilir dosyası
solana program deploy ./target/deploy/your_program.so --program-id ./target/deploy/your_program-keypair.json --start-offset <BYTES_UPLOADED_SO_FAR>
Sonlandırma
Bu geri alınamaz bir işlemdir.
Bir program, yükseltme yetkisi kaldırılarak değiştirilemez hale getirilebilir.
$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
Programların üzerine yazmak yerine, kullanıcılara sonlandırılmış programların bağlantılı bir listesini oluşturarak kullanmak istedikleri program sürümünü seçme imkanı da sunmak mümkündür:
Programınızı dağıtmak için solana program deploy komutunu kullanın:
$solana program deploy ./target/deploy/hello_world.so
Loader-v3 altında dağıtılan programlar için yalnızca programdata hesabı, tampon hesapları ve bu hesaplarda kilitli olan fonlar geri alınabilir. Program hesabı, program kimliği ve özellikle program hesabında kilitli olan fonlar ile birlikte sıkışmış durumdadır.
Loader-v4 altında dağıtılan programlar, program hesapları, program kimlikleri ve kilitli fonları ile birlikte kapatılabilir ve tümü tekrar başka kullanımlar için uygun hale gelir.
Loader-v3
$solana program deploy ./target/deploy/hello_world.so --program-id ./custom-keypair.json
Yeni keypair'ler oluşturmak için solana-keygen komutunu kullanabilirsiniz:
$solana-keygen new -o ./custom-keypair.json
solana program close ./target/deploy/your_program-keypair.json
Mevcut yetkiyle ilişkili tüm buffer hesaplarını kapatmak için:
Programınızı aynı solana program deploy komutuyla güncelleyin:
- Program kodunuzda değişiklikler yapın
- Programınızı yeniden derleyin:
cargo build-sbf - Güncellemeyi dağıtın:
$solana program deploy ./target/deploy/hello_world.so
Meta Verileri İnceleme
show alt komutu, bir programın meta verilerini listeler.
Örnek bir çıktı şöyle görünür:
$solana program extend 7NxQjW8H8hVcqBKgXbVDWqGQCovHbqDW9p1SJJwUyTpE 1000
Program Id, bir programı çağırırken bir talimatınprogram_idalanında referans gösterilebilecek adrestir.Owner: Bu programın dağıtıldığı loader.ProgramData Address, programın yürütülebilir dosyasını tutan program hesabıyla ilişkili programdata hesabıdır (yalnızca loader-v3).Status:retracted,deployedveyafinalized(yalnızca loader-v4).Authorityprogramın yükseltme yetkisidir.Last Deployed In Slotprogramın son dağıtıldığı slot'tur.Data Lengthdağıtımlar için ayrılan alanın boyutudur. Şu anda dağıtılan program tarafından kullanılan gerçek alan daha az olabilir.
Loader-v3
Belirli bir programı görüntülemek için:
solana program show ./target/deploy/your_program-keypair.json
Program meta verilerinizi kontrol etmek için solana program show komutunu
kullanın:
$solana program show 7NxQjW8H8hVcqBKgXbVDWqGQCovHbqDW9p1SJJwUyTpE
Yetkiden bağımsız olarak tüm buffer hesaplarını göstermek için:
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
Belirli bir programı görüntülemek için:
solana program-v4 show --program-id ./target/deploy/your_program-keypair.json
Varsayılan yetki ile dağıtılan programların listesini görüntülemek için:
solana program-v4 show --all
Belirli bir yetki ile dağıtılan programların listesini görüntülemek için:
solana program-v4 show --authority ~/.config/solana/authority-keypair.json
Çalıştırılabilir Dosyayı İndirme
Bazen bir programı indirip karşılaştırmak, bilinen bir çalıştırılabilir dosya içerdiğinden emin olmak için faydalıdır. İndirilen dosya kısaltılabilir, hash değeri alınabilir ve orijinal program dosyasının hash değeriyle karşılaştırılabilir.
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
Gelişmiş: Yetki Transferi
Belirli bir programı değiştirme hakkı, o programın yetkisine aittir. Bu yetki, program keypair'i değiştirilmeden başka bir keypair'e aktarılabilir, böylece program kimliği aynı kalır. Ayrıca, tek bir yetki birden fazla program hesabını kontrol edebilir.
Program yetkisini farklı bir hesaba aktarmak için
solana program set-upgrade-authority komutunu kullanın:
$solana program set-upgrade-authority 7NxQjW8H8hVcqBKgXbVDWqGQCovHbqDW9p1SJJwUyTpE --new-upgrade-authority ./new-authority-keypair.json
Öncelikle, yetki için bir keypair oluşturulmalıdır:
solana-keygen new -o ~/.config/solana/authority-keypair.json
Programınızı değiştirilemez hale getirmek için
solana program set-upgrade-authority komutunu --final bayrağıyla birlikte
kullanarak program yetkisini kaldırın:
$solana program set-upgrade-authority 7NxQjW8H8hVcqBKgXbVDWqGQCovHbqDW9p1SJJwUyTpE --final
solana program deploy ./target/deploy/your_program.so --upgrade-authority ~/.config/solana/authority-keypair.json
Veya dağıtımdan sonra ve varsayılan keypair'i mevcut yetki olarak kullanarak:
Programınızı kapatmak ve program hesabına tahsis edilen SOL'u geri almak için
solana program close komutunu kullanın:
$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
Yetki, dağıtım sırasında belirtilebilir:
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
Dağıtılmış bir programı indirmek için solana program dump komutunu kullanın:
$solana program dump 7NxQjW8H8hVcqBKgXbVDWqGQCovHbqDW9p1SJJwUyTpE ./downloaded_program.so
Tampon hesaplarının kullanılmasının, yükleme işlemi sırasında gereken fonları yaklaşık iki katına çıkardığını unutmayın, çünkü iki hesap aynı anda birer çalıştırılabilir dosya tutmaktadır.
İlk olarak, tampon hesabı için bir keypair oluşturulmalıdır:
solana-keygen new -o ~/.config/solana/buffer-keypair.json
Tampon hesabı farklı yüklemeler için yeniden kullanılabilir ve herhangi bir belirli program hesabına bağlı değildir.
$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: İşlem birimi başına mikro-lamport (0.000001 SOL) cinsinden öncelik ücreti belirleyin. Güncel oranlar için Helius Priority Fee API kontrol edin. Öncelik ücreti, işleminize öncelik vermesi için mevcut lidere ödenen ek bir ücrettir.--max-sign-attempts: İşlemlerin süresi dolarsa yeni bir blockhash ile yeniden deneme sayısı. (Varsayılan: 5)--use-rpc: İşlemleri yapılandırılmış RPC'ye gönderin. Bu bayrak, Triton veya Helius gibi sağlayıcılardan stake-weighted RPC bağlantısı gerektirir.
Is this page helpful?