> For the complete documentation index, see [llms.txt](https://novacont.gitbook.io/nova-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://novacont.gitbook.io/nova-docs/novacont-docs/turkish/security-and-developers/kontrat-mimarisi.md).

# Kontrat Mimarisi

NovaCont'un protokolü iki ayrı smart contract'a bölünmüştür. Bu sorumluluk ayrımı kasıtlıdır. Fon yönetimini itiraz çözümünden izole eder; bir katmandaki bir arıza veya güncellemenin diğerini tehlikeye atmamasını sağlar.

<figure><img src="/files/xSnSpj4aaZpDJ9UCPI6L" alt=""><figcaption></figcaption></figure>

### NovaCont - Escrow Katmanı

NovaCont birincil kontrattır. Şunlardan sorumludur:

* Kontrat oluşturulurken müşteri fonlarını kabul etme ve kilitleme
* Katı durum geçişleri aracılığıyla anlaşma yaşam döngüsünü uygulama
* Tamamlanma, iptal veya itiraz çözümü durumunda fon dağılımını yönetme
* Bir itiraz merkezi olmayan jüri sistemine iletildiğinde NovaJury ile arayüz oluşturma

NovaCont, üç OpenZeppelin temel kontratından miras alır:

**ReentrancyGuard**: Fon hareket ettiren tüm fonksiyonlarda yeniden giriş saldırılarını önler. ETH veya ERC-20 bakiyelerine dokunan her dış çağrı `nonReentrant` değiştiricisiyle sarılır.

**Ownable2Step**: İki adımlı bir sahiplik devri mekanizması uygular. Yeni sahip, devir tamamlanmadan önce sahipliği açıkça kabul etmek zorundadır; bu da geçersiz adreslere kazara veya kötü niyetli sahiplik devirlerini önler.

**Pausable**: Kontrat sahibinin kritik bir güvenlik açığı veya acil durum halinde tüm durum değiştiren işlemleri duraklatmasına olanak tanır. Duraklatma, fon çekimlerini etkilemez — kontrat duraklatılmış olsa bile kullanıcılar fonlarını her zaman geri alabilir.

### NovaJury  - Tahkim Katmanı

NovaJury, itiraz çözüm kontratıdır. NovaCont'tan bağımsız olarak çalışır ve şunlardan sorumludur:

* Stake etme, uyarılar, kesintiler ve çıkarılma dahil jüri havuzunu yönetme
* NovaCont tarafından iletilen itiraz davalarını alma
* İtiraz ücretlerini taraflar ve jüri üyeleri arasında toplama ve dağıtma
* Jüri üyelerini davalara rastgele atama ve oylama yaşam döngüsünü yönetme
* Nihai kararları zincir üzerinde yürütme için NovaCont'a geri iletme

NovaJury, aynı güvenlik gerekçeleriyle aynı üç OpenZeppelin temel kontratından (ReentrancyGuard, Ownable2Step ve Pausable) miras alır.

### İki Kontrat Nasıl İletişim Kurar?

NovaCont ve NovaJury, sıkı biçimde kontrol edilen arayüzler aracılığıyla iletişim kurar. Hiçbir kontrat diğerinde keyfi fonksiyonlar çağıramaz. Yalnızca belirli, açıkça tanımlanmış giriş noktaları açığa çıkarılır.

**NovaCont → NovaJury:** Jüri modunda bir itiraz açıldığında NovaCont, NovaJury kontratında `INovaJury.createCase()` fonksiyonunu çağırır; kontrat kimliği, taraf adresleri, üzerinde anlaşılan fiyat, kanıt URI'si ve itiraz gerekçesi URI'si dahil tüm ilgili dava verilerini iletir. NovaCont ayrıca transferi başlatmadan önce doğru ücreti belirlemek için `INovaJury.computeDisputeFeePerParty()` fonksiyonunu çağırır.

**NovaJury → NovaCont:** Bir karar kesinleştiğinde NovaJury, NovaCont'ta `settleDisputeByJury()` fonksiyonunu çağırır; kontrat kimliği, dava kimliği ve sağlayıcının baz puan tahsisini iletir. NovaJury ayrıca karşı tarafın itiraz ücretinin kendi payını ödediğinde NovaCont'u bilgilendirmek için `onCounterFeePaid()` fonksiyonunu çağırır.

**Erişim kontrolü:** NovaJury'den NovaCont'a yapılan tüm çağrılar `onlyJuryContract` değiştiricisiyle korunur. Yalnızca kayıtlı NovaJury adresi bu fonksiyonları çağırabilir. Simetrik olarak, NovaCont'tan NovaJury'ye yapılan çağrılar, davaların oluşturulabileceği tek yoldur. Dış aktörler doğrudan NovaJury'ye dava enjekte edemez.
