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.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
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 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, 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: 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ığı 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.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.
İ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.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 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:
- (çevrimiçi) yeni bir program oluştur
- (çevrimiçi) yetkiyi çevrimdışı imzalayana aktar
- (çevrimiçi) tampon oluştur ve yürütülebilir 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ı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?