Solana DokümantasyonuProgram geliştirme

Programları Dağıtma

Bu kılavuz 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 (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

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, bir keypair'in dosya yolunu beklese de program-id olarak adlandırılır:

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

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

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

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

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

Bir 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 hatayla sonuçlanacaktır. Bir programı kapattıktan sonra yeniden dağıtmanız gerekiyorsa, yeni bir program keypair dosyası oluşturmalısınız.

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

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

Mevcut yetkiyle ilişkili 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

Meta Verileri İnceleme

show alt komutu, bir programın meta verilerini 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ığı 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

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 kimliği 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 kuruluş 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 varsayılan keypair'i mevcut yetki olarak kullanarak:

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 mevcut yetki olarak varsayılan keypair kullanılarak:

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ş: Tampon kullanarak iki adımlı yeniden dağıtım

Doğrudan program hesabına yüklemek yerine, çalıştırılabilir dosya önce bir hazırlık tampon 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 asıl yeniden dağıtımdan önce yüklenen çalıştırılabilir dosyayı kabul etme veya reddetme seçeneği sunulur.

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.

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 tampon hesabının yetkisi)
  • çevrimdışı imzalayıcı (program hesabının yetkisi)

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ışı imzalayana aktar
  3. (çevrimiçi) tampon oluştur ve yürütülebilir 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ın. blockhash yaklaşık 60 saniye sonra sona erer. Eğer zamanında yapamadıysanız - sadece yeni bir hash alın ve başarılı olana kadar tekrarlayın veya dayanıklı işlem nonce'larını kullanmayı düşünün.

Is this page helpful?