Kora, üç crate içeren bir Rust workspace'idir:
kora-libçekirdek mantığı ve RPC sunucusunu barındırır,kora-clioperatörlerin çalıştırdığıkoraikili dosyasını oluşturur vekora-deployayrı olarak sürümlendirilen, özel bir program dağıtım aracıdır. Aksi belirtilmedikçe aşağıdaki her şeycrates/lib/srcaltında yer alır.
İstek yaşam döngüsü
Aşağıdaki diyagram, bir işlemin Kora içinde izlediği genel akışı gösterir. Çağrı yolunu anlamak, bir Kora düğümünü yapılandırmak ve yeni özellikler eklemek için önemlidir.
Her aşama nerede bulunuyor
| Diyagramdaki aşama | Kaynak | Giriş noktası |
|---|---|---|
| Ağ geçidi | rpc_server/server.rs | run_rpc_server |
| Yönlendirme | rpc_server/rpc.rs | KoraRpc |
| Metot bazında mantık | rpc_server/method/ | her JSON-RPC metodu için bir dosya |
| Doğrulama | validator/transaction_validator.rs | TransactionValidator |
| Eklentiler | plugin/mod.rs | TransactionPluginRunner |
| İmzalama | signer/ | solana-keychain crate'i tarafından desteklenir |
Bilinmesi gereken iki dosya daha var: config.rs tüm kora.toml şemasını tanımlar ve
state.rs ayrıştırılmış yapılandırmayı süreç genelindeki global durumda tutar.
RPC sunucusunu okumak
rpc.rs, her JSON-RPC uç noktası için bir metot içeren ince bir yönlendirme katmanıdır ve
API'nin tamamını görmenin en hızlı yoludur. Her metodun mantığı
rpc_server/method/ altında kendi dosyasında yer alır. sign_transaction.rs dosyasını baştan sona okuyun; diğer imzalama
metotları bunun varyasyonlarıdır.
Doğrulayıcıyı okumak
transaction_validator.rs ve transaction/instruction_util.rs, işlemleri ve talimatları
doğrulama mantığını barındırır. Ayrıca, kısıtlanan her program için bir dosya olacak şekilde
validator/transaction_validator/fee_payer_policy_props/ altında bulunan fee-payer-policy
güvenlik özelliği testleri de vardır.
Bilinmesinde fayda olan kurallar
Varsayılan doğrulama. [validation.fee_payer_policy] altındaki her bayrak
varsayılan olarak false değerindedir ve politika yapıları #[serde(default)] taşır. Bu
ikili kasıtlıdır: yeni kısıtlanan bir talimat eklemek, mevcut bir operatörün yapılandırmasını
bozmamalı ve kazara bir izin olarak değil, bir ret olarak devreye girmelidir. Bir bayrak eklerken
her ikisini de koruyun.
Ham işlemi değil, çözümlenmiş işlemi doğrulayın. Ham
VersionedTransaction yalnızca statik hesap anahtarlarını açığa çıkarır; bu nedenle bir V0 işlemini bundan
doğrulamak veya ücretlendirmek, lookup table hesaplarını sessizce atlar ve eksik ücret alınmasına yol açar.
VersionedTransactionResolved::from_transaction bu adresleri en baştan çözümler;
bu yüzden sonraki her aşama çözümlenmiş türü alır.
İşlem eklentisi ekleme
Eklentiler, plugin/mod.rs içindeki TransactionPlugin trait'ini uygular. İki
metodu vardır: validate, imzalama akışları sırasında her işlem için çalışır ve
validate_config, başlangıçta bir kez çalışarak operatör için hata ve uyarıları döndürür.
PluginExecutionContext, eklentiye dört imzalama metodundan hangisinin onu çağırdığını bildirir.
TransactionPluginRunner::from_config, config.rs içinde tanımlı
TransactionPluginType üzerinde eşleştirme yapar. Yeni bir yerleşik eklenti, orada yeni bir varyant ve runner'da
yeni bir match kolu demektir. Bugün birlikte gelen iki eklenti gas_swap ve
deploy_authority eklentileridir.
Test etme
Kora yapılandırmayı süreç genelindeki global durumda tuttuğundan, tests/ her aşama için bir
[[test]] hedefi tanımlar ve her hedef, sıfırdan tohumlanmış kendi gömülü surfnet'ini ve
Kora düğümünü başlatır. İkili dosya başına tek yapılandırma: yeni bir aşama, mevcut bir hedefte yeni bir modül değil,
yeni bir hedef gerektirir.
cargo test -p tests --test <target>
Geri kalan her şey justfile üzerinden bağlanır. Komutları elle yeniden oluşturmaya çalışmak yerine
onu okuyun.
Is this page helpful?