Solana DokümantasyonuProgram Geliştirme

Programları Dağıtma

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

Loader-v3 ve Loader-v4

Ş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 (ki bu esasen yeniden dağıtmaktır):

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 bakiye 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 (ID) vardır, bu da program hesabının adresidir. Aşağıdaki komut, program hesabı için bir anahtar çifti (keypair) oluşturur:

solana-keygen new -o ./target/deploy/your_program-keypair.json

Bu işlem program başına yalnızca bir kez gerçekleştirilmelidir ve aynı programın daha sonraki yeniden dağıtımları için yeniden kullanılacaktır.

Araç zinciri bir kısayol içeriyordu, ancak bu kısayol aşamalı olarak kaldırılıyor / kullanımdan kaldırılıyor:

cargo-build-sbf

İlk Dağıtım

Şimdi çalıştırılabilir dosya program hesabına yüklenebilir:

Loader-v3

Parametre program-id olarak adlandırılır, ancak bir anahtar çiftinin dosya yolunu bekler:

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

Yeniden Dağıtım

Aynı program hesabına farklı bir yürütülebilir dosya yüklemek, mevcut dosyanın üzerine yazacak/değiştirecektir. Ancak, yeniden dağıtımlar için, yükseltme yetkisi keypair'i imzalayan olduğundan, tüm keypair değil, yalnızca program ID'si (program keypair'inin pubkey'i) gereklidir.

Loader-v3

Bu, ilk dağıtımla tamamen aynıdır:

solana program deploy ./target/deploy/your_program.so --program-id ./target/deploy/your_program-keypair.json

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

solana program extend ./target/deploy/your_program.so <ADDITIONAL_BYTES>

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

Yoğunluk zamanlarında, program dağıtımına yardımcı olmak için kullanabileceğiniz birkaç ek bayrak vardır:

  • --with-compute-unit-price: İşlem için hesaplama birimi fiyatını, hesaplama birimi başına 0.000001 lamport (mikro-lamport) artışlarla ayarlar. Ayarlanacak öncelik ücreti tahmini için Helius tarafından sağlanan Öncelik Ücreti API'sini kullanın.
  • --use-rpc: Yazma işlemlerini validator TPU'ları yerine yapılandırılmış RPC'ye gönderir. Bu bayrak, Helius veya Triton gibi stake-ağırlıklı bir RPC bağlantısı gerektirir. Bu bayrak ayrıca şu şekilde varsayılan olarak yapılandırılabilir: solana config set --url <RPC_URL>.
  • --max-sign-attempts: Blockhash süresi dolduktan sonra işlemleri imzalamak veya yeniden imzalamak için maksimum deneme sayısı. Program dağıtımı sırasında gönderilen herhangi bir işlem, başlangıçta seçilen son blockhash süresi dolduktan sonra hala onaylanmamışsa, bu işlemler yeni bir son blockhash ile yeniden imzalanacak ve yeniden gönderilecektir. İşlem imzalama yinelemelerinin maksimum sayısını ayarlamak için bu ayarı kullanın. Her blockhash yaklaşık 60 saniye geçerlidir, bu da varsayılan değer olan 5'i kullanmanın, tüm işlemler onaylanana kadar veya en az 5 dakika boyunca işlem göndermeye yol açacağı anlamına gelir (hangisi önce gelirse).

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

Dağıtım başarısızlıkları, oluşturulan ara tamponun keypair'ini kurtarmak için gereken seed ifadesini belirten bir hata mesajı yazdıracaktır:

==================================================================================
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 as
the [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`.
==================================================================================

Keypair'i kurtarmak için:

solana-keygen recover -o ./target/deploy/buffer-keypair.json

Sorulduğunda, 12 kelimelik seed ifadesini girin.

Ardından yeni bir deploy komutu verin ve tamponu belirtin:

solana program deploy ./target/deploy/your_program.so --program-id ./target/deploy/your_program-keypair.json --buffer ./target/deploy/buffer-keypair.json

Loader-v4

Belirtilen bir bayt ofsetinden yüklemeye devam etmek mümkündür:

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.

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

Programların üzerine yazmak yerine, sonlandırılmış programların bağlantılı bir listesini oluşturarak kullanıcılara hangi program sürümünü kullanmak istedikleri konusunda seçenek sunmak da mümkündür:

solana program finalize --program-id ./target/deploy/your_program-keypair.json --next-version ../your_newer_program/target/deploy/your_newer_program-keypair.json

Kapatma

Loader-v3 altında dağıtılan programlar için yalnızca programdata hesabı, tampon hesapları ve bu hesaplarda kilitli fonlar geri alınabilir. Program hesabı, program kimliği ve özellikle program hesabında kilitli fonlarla birlikte sıkışıp kalı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

Bu, loader-v3 kullanılarak dağıtılan programlar için geri alınamaz bir işlemdir.

Program kapatıldıktan sonra, program kimliğinin yeniden kullanılamayacağını unutmayın. Daha önce kapatılmış bir program kimliği ile program dağıtmaya çalışmak hata ile sonuçlanacaktır. Bir programı kapattıktan sonra yeniden dağıtmanız gerekiyorsa, yeni bir program keypair dosyası oluşturmanız gerekir.

Tek bir programdata hesabını kapatmak için:

solana program close ./target/deploy/your_program-keypair.json

Mevcut yetkiye bağlı tüm buffer hesaplarını kapatmak için:

solana program close --buffers

Loader-v4

solana program-v4 close --program-id ./target/deploy/your_program-keypair.json

Metadata İnceleme

show alt komutu, bir programın metadatasını listeler.

Örnek bir çıktı şöyle görünür:

Program Id: 3KS2k14CmtnuVv2fvYcvdrNgC94Y11WETBpMUGgXyWZL
Owner: BPFLoaderUpgradeab1e11111111111111111111111
ProgramData Address: EHsACWBhgmw8iq5dmUZzTA1esRqcTognhKNHUkPi4q4g
Authority: FwoGJNUaJN2zfVEex9BB11Dqb3NJKy3e9oY3KTh9XzCU
Last Deployed In Slot: 63890568
Data Length: 5216 (0x1460) bytes
  • 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ığı slottur.
  • 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

Varsayılan yetki ile dağıtılan programların listesini görüntülemek için:

solana program show --programs

Yetkiden bağımsız olarak tüm buffer hesaplarını göstermek için:

solana program show --buffers --all

Farklı bir yetki belirtmek için:

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 ID'si aynı kalır. Ayrıca, tek bir yetki birden fazla program hesabını kontrol edebilir.

İlk dağıtım sırasında açıkça belirtilmezse, varsayılan keypair yetki olarak kullanılır. Bu nedenle, yukarıdaki adımlarda bir programı yeniden dağıtırken yetkinin açıkça belirtilmesi gerekmedi.

Açık bir yetki, çevrimdışı imzalama ve çoklu varlık tarafından yönetilen programlar için faydalıdır.

Öncelikle, yetki için bir keypair oluşturulmalıdır:

solana-keygen new -o ~/.config/solana/authority-keypair.json

Loader-v3

Yetki, dağıtım sırasında belirtilebilir:

solana program deploy ./target/deploy/your_program.so --upgrade-authority ~/.config/solana/authority-keypair.json

Veya dağıtımdan sonra ve mevcut yetki olarak varsayılan keypair kullanılarak:

solana program set-upgrade-authority ./target/deploy/your_program-keypair.json --new-upgrade-authority ~/.config/solana/authority-keypair.json

Veya dağıtımdan sonra ve mevcut yetkiyi belirterek:

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

Veya dağıtımdan sonra ve varsayılan keypair'i mevcut yetki olarak kullanarak:

solana program-v4 transfer-authority --program-id ./target/deploy/your_program-keypair.json --new-authority ~/.config/solana/authority-keypair.json

Veya dağıtımdan sonra ve mevcut yetkiyi belirterek:

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

Gelişmiş: Buffer kullanarak iki adımlı yeniden dağıtım

Çalıştırılabilir dosyayı doğrudan program hesabına yüklemek yerine, önce bir hazırlık buffer hesabına yüklenebilir ve ardından ikinci bir adımda (asıl yeniden dağıtım) program hesabına aktarılabilir. Bu, çevrimdışı imzalama ve DAO oylaması gibi çoklu varlık yönetimli programlar için kullanışlıdır; bu sayede yeniden dağıtımdan önce yüklenen çalıştırılabilir dosyayı kabul etme veya reddetme seçeneği sunulur.

Buffer hesaplarının kullanılmasının, yükleme işlemi sırasında gereken fonları kabaca iki katına çıkardığını unutmayın, çünkü iki hesap aynı anda birer çalıştırılabilir dosya tutmaktadır.

İlk olarak, buffer hesabı için bir keypair oluşturulmalıdır:

solana-keygen new -o ~/.config/solana/buffer-keypair.json

Buffer hesabı farklı yüklemeler için yeniden kullanılabilir ve herhangi bir belirli program hesabına bağlı değildir.

Loader-v3

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

Loader-v4

solana program-v4 deploy ./target/deploy/your_program.so --buffer ~/.config/solana/buffer-keypair.json
solana program-v4 deploy --program-id ./target/deploy/your_program-keypair.json --buffer ~/.config/solana/buffer-keypair.json

Gelişmiş: Çevrimdışı imzalama

Bazı güvenlik modelleri, imzalama anahtarlarının herhangi bir ağdan tamamen bağlantısız olabilmesi için imzalama işlemini işlem yayınından ayırmayı gerektirir; bu da çevrimdışı imzalama olarak bilinir.

Yalnızca yeniden dağıtımların çevrimdışı modda gerçekleştirilebileceğini unutmayın. İlk program dağıtımı mutlaka çevrimiçi bir makineden gerçekleştirilmelidir ve yalnızca sonraki program yeniden dağıtımları çevrimdışı imzalamadan yararlanabilir.

Tipik bir kurulum, iki farklı imzalayıcıdan oluşur:

  • çevrimiçi imzalayıcı (ücret ödeyen ve buffer hesabının yetkilisi)
  • çevrimdışı imzalayıcı (program hesabının yetkilisi)

Genel süreç, bazı ekstralarla birlikte iki adımlı bir yeniden dağıtımdır:

  1. (çevrimiçi) yeni bir program oluştur
  2. (çevrimiçi) yetkiyi çevrimdışı imzalayıcıya aktar
  3. (çevrimiçi) tampon oluştur ve çalıştırılabilir dosyayı yükle
  4. (isteğe bağlı) tamponun zincir üzerindeki içeriğini doğrula
  5. (çevrimdışı) tamponu kullanarak programı yeniden dağıtmak için bir işlem imzala --blockhash <VALUE> --sign-only
  6. (çevrimiçi) yeniden dağıtım işlemini yayınlamak için bu imzayı kullan --blockhash <VALUE> --signer <OFFLINE_SIGNER_PUBKEY>:<OFFLINE_SIGNER_SIGNATURE>

Yakın zamanda bir blockhash bulup çevrimdışı işlem imzası oluşturmak için yapıştır. blockhash yaklaşık 60 saniye sonra sona erer. Eğer zamanında yapamadıysan - sadece yeni bir hash al ve başarılı olana kadar tekrarla veya dayanıklı işlem nonce'larını kullanmayı düşün.

Is this page helpful?