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.sosolana 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 asthe [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: 3KS2k14CmtnuVv2fvYcvdrNgC94Y11WETBpMUGgXyWZLOwner: BPFLoaderUpgradeab1e11111111111111111111111ProgramData Address: EHsACWBhgmw8iq5dmUZzTA1esRqcTognhKNHUkPi4q4gAuthority: FwoGJNUaJN2zfVEex9BB11Dqb3NJKy3e9oY3KTh9XzCULast Deployed In Slot: 63890568Data Length: 5216 (0x1460) bytes
Program Id
, bir programı çağırırken bir talimatınprogram_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
veyafinalized
(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.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 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.jsonsolana 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.jsonsolana 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:
- (çevrimiçi) yeni bir program oluştur
- (çevrimiçi) yetkiyi çevrimdışı imzalayıcıya aktar
- (çevrimiçi) tampon oluştur ve çalıştırılabilir dosyayı yükle
- (isteğe bağlı) tamponun zincir üzerindeki içeriğini doğrula
- (çevrimdışı) tamponu kullanarak programı yeniden dağıtmak için bir işlem
imzala
--blockhash <VALUE> --sign-only
- (ç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?