Bu, txtx dili için dokümantasyondur. Yazdığınız Runbook dosyaları hangi blok zincirlerin ve ağların kullanılacağını, hangi verilerin alınacağını ve hangi işlemlerin yayınlanacağını tanımlar. txtx dili ayrıca kaynaklar arasında bağımlılıklar tanımlamanıza ve tek bir bloktan birden fazla benzer yapı oluşturmanıza olanak tanır.
Sözdizimi
Runbook'lar, şuna benzer bir dizi kod bloğu içerir:
variable "query_path" {description = "An input that can be edited in the web UI!"value = "details"editable = true}action "http_query" "std::send_http_request" {description = "This action will make a GET request to the specified URL!"url = "https://example.com/${variable.my_var.query_path}"}output "status_code" {description = "This output will be displayed in the Outputs section of the web UI!"value = action.http_query.status_code}
Her bloğun bir komut türü (bu örnekte variable, action ve output), bir
referans adı ("query_path", "http_query" ve "status_code") ve bloğun iç
verisi ({ ... } arasındaki her şey) bulunur. Bazı komut türleri ayrıca bir
komutun belirtilmesini gerektirir ("std::send_http_request"). Bloğun iç
verisi, belirtilen komut türü ve komut tarafından belirlenir.
Komut Referansları
Bir komut, bağımlı komutlardan oluşan bir zincir oluşturmak için başka bir komutun çıktılarına referans verebilir. Bir Runbook çalıştırdığınızda, surfpool tüm komutların her zaman doğru sırayla yürütülmesini sağlamak için bir grafik oluşturur. Bu, bir Runbook oluştururken bağımlılık döngülerinden kaçınılması gerektiği anlamına gelir.
Başka bir komutun çıktısına bir blokta command_type.ref_name.output_name
kullanılarak referans verilebilir. İşte bazı örnekler:
variable "my_var" {description = variable.another_var.value // references the `value` output of a `variable` named `another_var`value = action.my_action.data // references the `data` output of an `action` named `my_action`}
Fonksiyonlar
Standart kütüphane, adlandırılmış argümanlara sahip tam komut blokları yazmak yerine satır içi yazılabilen bazı fonksiyonlar sağlar. Bu fonksiyonlar eklentiler aracılığıyla genişletilebilir.
Bu fonksiyonlar açık fonksiyon çağrıları gibi görünebilir (ör. add_uint(1, 3))
ya da satır içi aritmetik işlemler gibi görünebilir (ör. 1 + 3). Fonksiyonlar
diğer komut çıktılarına referans verebilir ya da yeni komut çıktılarında
saklanabilir. İşte birkaç fonksiyon kullanan bir örnek:
variable "one" {value = 1}variable "two" {value = 2}variable "addem_up" {value = variable.one + variable.two}output "add_some_more" {value = add_uint(variable.addem_up + variable.one, variable.two)}
Manifest ve CLI Girdileri
Girdiler, Runbook'a CLI girdisi olarak aktarılarak veya txtx.yml manifest
dosyasında belirtilerek sağlanabilir. Aynı girdi hem CLI'da hem de bir manifest
dosyasında belirtilmişse, CLI girdisi öncelik kazanır. CLI'ın nasıl
kullanılacağına ilişkin bilgi için
CLI belgelerine bakabilirsiniz. Manifest
dosyasında bu girdiler bir ortam anahtarına göre gruplandırılabilir; böylece
aynı Runbook'u birden fazla ortamda kolaylıkla kullanmak mümkün olur.
Ortam değişkenlerine sahip örnek bir yapılandırma aşağıda verilmiştir:
---name: protocol-deploymentrunbooks:- name: Deploy Protocoldescription: This runbook deploys the protocol.location: ./deploymentenvironments:development:network_id: localnetrpc_api_url: http://localhost:8899devnet:network_id: devnetrpc_api_url: https://api.devnet.solana.commainnet:network_id: mainnetrpc_api_url: https://api.mainnet-beta.solana.com
Bu runbook tarafından yüklenen .tx dosyalarının herhangi birinde,
input.network_id ve input.rpc_api_url girdileri global kapsamda
kullanılabilir olacaktır. Web Arayüzü bu runbook'u yüklediğinde, ilk eylem öğesi
hangi ortamın yükleneceğini seçmenize olanak tanır. Yeni bir ortam seçildiğinde
mevcut runbook, yeni ortam değişkenleri yürütmeye eklenerek yeniden
yüklenecektir.
Durum Yönetimi
Surfpool, Runbook yürütmeleri arasında durumu yönetebilir. Kontrat dağıtımları çalıştırılırken durum yönetimi, kontrat kodunda ve Runbook girdilerinde herhangi bir değişiklik olup olmadığını tespit etmek ve Runbook'un yeniden yürütülmesi gerekip gerekmediğini belirlemek için kullanılabilir. Kontrat kodunda veya Runbook girdilerinde herhangi bir değişiklik yoksa Surfpool, Runbook'un yeniden yürütülmesini engeller.
Durum yönetimini etkinleştirmek için state değerini ve durum dosyasını
depolamak üzere bir location değerini txtx.yml içinde belirtin:
runbooks:- name: Deploy Protocollocation: ./deploymentstate:location: states
Değişkenler
Değişkenler, diğer yapılar tarafından kullanılabilecek ve Web Arayüzü'ndeki
kullanıcılar tarafından düzenlenebilecek değerleri depolamak için
kullanılabilir. Bir değişkenin editable alanı belirtilmemişse veya false
olarak ayarlanmışsa, değişken Web Arayüzü'nde Variables Review bölümünde salt
okunur bir değer olarak görünür ve doğrulanabilir. Ancak editable alanı true
olarak ayarlandığında, değişken Web Arayüzü'nde düzenlenebilir bir alan olarak
görünür. İsteğe bağlı description alanı, değişkene ek bağlam eklemek için
kullanılabilir. Örnek bir değişken aşağıda verilmiştir:
variable "my_var" {description = "Enter your birthday"value = "MM/DD/YYYY"editable = true}
Eklentiler ve Varsayılanlar
Eklenti blokları, Runbook tarafından hangi eklentilerin kullanılacağını
belirtmenize olanak tanır. Eklenti bloğu içinde tanımlanan herhangi bir alan, o
eklentinin parçası olan tüm eylemler tarafından referans alınabilir. Bu, söz
konusu eklentiden özel eylemler kullanırken alanları atlamanıza olanak sağlar.
Aşağıdaki örnek, svm eklentisini tanımlar ve network_id ile rpc_api_url
alanlarını varsayılan olarak ayarlar:
addon "svm" {network_id = input.network_idrpc_api_url = input.rpc_api_url}
Bu varsayılan bir .tx dosyasına eklendiğinde, SVM eklentisinden gelen tüm
eylemler hem network_id hem de rpc_api_url alanlarını atlayabilir.
Akışlar
Akışlar, bir Runbook'u farklı girdilerle birden fazla kez çalıştırmanıza olanak
tanır. Akış bloğunda belirtilen herhangi bir alan, flow.field_name
aracılığıyla o akışın parçası olan tüm eylemler tarafından referans alınabilir.
Bu, addon bloğuyla birlikte yararlı şekillerde kullanılabilir:
// declare some flowsflow "solana" {rpc_api_url "https://api.mainnet-beta.solana.com"}flow "eclipse" {rpc_api_url "https://mainnetbeta-rpc.eclipse.xyz"}// declare the evm addon withaddon "svm" {network_id = "mainnet"rpc_api_url = flow.rpc_api_url}// the rest of the runbook can now use the svm addon without specifying chain_id or rpc_api_url,// and will be executed once for each flow
İmzalayanlar
Eklentiler, surfpool kullanırken işlemleri imzalamanın çeşitli yollarını sağlayan imzalayanlar tanımlayabilir. Bu imzalayanlar; bir anımsatıcı veya gizli anahtar aracılığıyla işlemleri imzalamak, kullanıcıların web cüzdanlarını bağlayarak Surfpool Web Arayüzü'nde oturum açmalarını istemek, güvenli kuşatma aracılığıyla işlemleri eş zamansız olarak imzalamak, çoklu imza cüzdanları tanımlamak ve daha fazlası için kullanılabilir. Her eklenti imzalayan uygulamasının kendi kullanım senaryoları ve belgeleri olacaktır.
İşte kullanımda olan bir imzalayana örnek:
signer "alice" "svm::web_wallet" {expected_address = input.expected_address}action "my_tx" "svm::process_instructions" {... instruction datasigners = [signer.alice]}
Bu örnek, svm::web_wallet imzalayanını kullanan alice adında bir imzalayan
tanımlar. Bu imzalayan tanımı, Web Arayüzü'nde bir cüzdan bağlamak, mesaj imzası
aracılığıyla pubkey sağlamak ve bu cüzdanı imzalayan olarak kullanarak tüm
işlemleri imzalamak için bir istem oluşturacaktır.
Eylemler
Eylemler, eklentiler ve standart kütüphane tarafından tanımlanan çok amaçlı yapılardır. Her eylem, eyleme sağlanabilecek kendi girdi setini (bazıları isteğe bağlı, bazıları zorunlu), her eylem çağrısında neler olduğunu ve sonraki komutlar tarafından başvurulabilecek eylem çıktılarını tanımlar.
Eylem türlerine ilişkin bazı örnekler şunlardır: http istekleri yapıp sonucu çıktı olarak vermek, işlem verilerini belirli bir zincirin codec'iyle eşleşecek şekilde kodlamak, bir işlemi cüzdanla imzalayıp imzalanmış işlem baytlarını çıktı olarak vermek veya bir işlemi ağa yayınlamak.
İşte örnek bir eylem:
action "deploy_hello_world" "svm::deploy_program" {description = "Deploy the hello_world program"program = svm::get_program_from_anchor_project("hello_world")authority = signer.authoritypayer = signer.payer}output "signature" {value = action.deploy_hello_world.signature}
Modüller
Yakında.
Çıktılar
Çıktı komutu, çalışma kitabı yürütmesinin sonunda verileri görüntülemek için kullanılabilir. İşte çıktı komutuna ilişkin bir örnek:
output "my_output" {description = "An example output. I hope it equals 8."value = 4 + 4}
Is this page helpful?