Solana DokümantasyonuProgram geliştirme

Programları Dağıtma

Bu kılavuz aşağıdaki konular hakkında bilgi sahibi olduğunuzu varsayar:

GörevKomut
Programı derlecargo build-sbf
Yeni program dağıtsolana program deploy <path_to_program.so>
Mevcut programı güncellesolana program deploy <path_to_program.so> (dağıtım ile aynı)
Program bilgisini göstersolana program show <program-id>
Program yetkisini transfer etsolana program set-upgrade-authority <program-id> --new-upgrade-authority <path_to_keypair>
Programı değiştirilemez yapsolana program set-upgrade-authority <program-id> --final
Programı kapatsolana program close <program-id> --bypass-warning
Cüzdan bakiyesini kontrol etsolana 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.so
solana 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
Terminal
$
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:

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

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:

Terminal
$
solana airdrop 2

Eğer eski yürütülebilir dosya yenisinden daha kısaysa, önce programdata hesabını büyütmek gerekebilir:

Terminal
$
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:

Terminal
$
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:

Terminal
$
cargo build-sbf

Bu, target/deploy/ içinde iki önemli dosya oluşturur:

  1. hello_world-keypair.json: Public key'i Program ID'niz olarak kullanılacak bir keypair dosyası
  2. 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.

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

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:

Terminal
$
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

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

Yeni keypair'ler oluşturmak için solana-keygen komutunu kullanabilirsiniz:

Terminal
$
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:

  1. Program kodunuzda değişiklikler yapın
  2. Programınızı yeniden derleyin: cargo build-sbf
  3. Güncellemeyi dağıtın:
Terminal
$
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:

Terminal
$
solana program extend 7NxQjW8H8hVcqBKgXbVDWqGQCovHbqDW9p1SJJwUyTpE 1000
  • Program Id, bir programı çağırırken bir talimatın program_id alanı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, deployed veya finalized (yalnızca loader-v4).
  • Authority programın yükseltme yetkisidir.
  • Last Deployed In Slot programın son dağıtıldığı slot'tur.
  • Data Length dağı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:

Terminal
$
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 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

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:

Terminal
$
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:

Terminal
$
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:

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

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
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

Dağıtılmış bir programı indirmek için solana program dump komutunu kullanın:

Terminal
$
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.

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: İş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?

Yönetici

© 2026 Solana Vakfı.
Tüm hakları saklıdır.
Bağlanın