> 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/guvenlik-modeli.md).

# Güvenlik Modeli

### Çekme Tabanlı Ödeme Mimarisi

NovaCont, fonları alıcılara zorla göndermez. Bunun yerine tüm fon dağılımları `pendingWithdrawals` eşlemesinde kredi olarak kaydedilir ve alıcılar kendi çekimlerini açıkça başlatır.

Bu kasıtlı bir güvenlik tercihidir. Gönderme tabanlı ödeme sistemleri, kontratın ETH'yi doğrudan alıcı adreslere gönderdiği sistemler alıcının durum güncellenmeden önce gönderme fonksiyonuna yeniden giren kötü niyetli bir kontrat olması durumunda yeniden giriş saldırılarına karşı savunmasızdır. Kredi adımını çekim adımından ayırarak NovaCont bu saldırı yüzeyini tamamen ortadan kaldırır.

Her çekim fonksiyonu, ikincil bir savunma katmanı olarak ek `nonReentrant` değiştiricisiyle korunmaktadır.

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

### Reentrancy Koruması

ETH veya ERC-20 bakiyeleriyle etkileşime giren tüm fonksiyonlar, OpenZeppelin'in ReentrancyGuard'ından `nonReentrant` değiştiriciyle işaretlenmiştir. Bu değiştirici, kontrattaki hiçbir fonksiyonun özyinelemeli olarak çağrılamamasını sağlamak için bir kilit değişkeni kullanır. Yeniden giriş denemesi yapılırsa işlem derhal geri döner.

ERC-20 transferleri, standart dışı token uygulamalarını düzgün biçimde işleyen ve sessizce yanlış dönüş değeriyle başarılı olmak yerine başarısız transferlerde geri dönen OpenZeppelin'in `SafeERC20` sarmalayıcısını kullanır.

### Erişim Kontrolü

**Sahip**: Dağıtım adresi. Kontratı duraklatabilir, ücretleri güncelleyebilir, token'ları kaydedebilir, fiyat akışlarını ayarlayabilir ve çözümleyici ile jüri sistemi yapılandırmasını yönetebilir. Sahiplik devirleri, kazara devri önlemek için iki adım gerektirir.

**Çözümleyici**: Yönetici modunda itirazları çözüme kavuşturmak için yetkilendirilmiş atanmış adres. Dağıtımda varsayılan olarak sahibine ayarlanır. Sahip tarafından istediği zaman değiştirilebilir. Jüri sistemi aktive edildiğinde çözümleyici otomatik olarak NovaJury kontrat adresine ayarlanır.

**onlyJuryContract**: Belirli çözüm fonksiyonlarını yalnızca kayıtlı NovaJury adresiyle kısıtlayan bir değiştirici. Sahip, çözümleyici veya herhangi bir dış aktör tarafından çağrılamaz.

**Taraf tabanlı erişim**: Çoğu iş akışı fonksiyonu, kontrat oluşturulurken müşteri veya sağlayıcı olarak kaydedilen belirli adreslerle kısıtlanmıştır. Başka hiçbir adres bir taraf adına kabul edemez, teslim edemez, onaylayamaz, itiraz açamaz veya iptal edemez.

### Acil Durum Duraklatma

Kontrat sahibi, keşfedilen bir güvenlik açığı veya süregelen bir saldırı durumunda acil önlem olarak istediği zaman `pause()` fonksiyonunu çağırarak tüm durum değiştiren işlemleri durdurabilir.

Duraklatıldığında:

* Yeni kontrat oluşturulamaz
* Durum geçişleri tetiklenemez
* `pendingWithdrawals`'dan çekimler tamamen işlevsel kalır. Kullanıcılar aktarılan fonları her zaman geri alabilir

Kontrat, sahip tarafından istediği zaman `unpause()` aracılığıyla yeniden başlatılabilir.

### Bilinen Sınırlamalar ve Varsayımlar

**Sahte rastgele jüri seçimi:** Jüri ataması, `blockhash`, `prevrandao`, `gasleft` ve artan bir nonce'a dayanan zincir üzerinde sahte rastgele bir mekanizma kullanır. Bu kriptografik olarak güvenli rastgelelik değildir. Blok üretimi üzerinde yeterli kontrole sahip bir doğrulayıcı teorik olarak jüri seçimi sonuçlarını etkileyebilir. Protokolün mevcut ölçeği için bu risk kabul edilebilir sayılmakla birlikte bir sınırlama olarak kabul edilmektedir. Chainlink VRF gibi doğrulanabilir bir rastgelelik çözümüyle entegrasyon potansiyel bir gelecek güncellemesidir.

**Oracle bağımlılığı:** NovaCont, depozito hesaplamaları için Chainlink fiyat akışlarına dayanır. Uzun süreli oracle kesintisi veya güvenliği ihlal edilmiş bir akış, USD'den token'a dönüşümlerin doğruluğunu etkileyebilir. 24 saatlik bayatlık kontrolü bu riski azaltır ancak tamamen ortadan kaldırmaz.

**İtiraz mekanizması yok:** İtiraz kararları (ister yönetici ister jüri tarafından verilmiş olsun) zincir üzerinde yürütüldükten sonra kesin ve geri alınamaz. İtiraz süreci yoktur. Kullanıcılar her itiraza başından itibaren eksiksiz ve iyi organize edilmiş kanıtlarla yaklaşmalıdır.

**Zincir dışı kanıt:** Kanıt URI'leri zincir dışı kaynaklara işaret eder. NovaCont bu kaynakların kalıcılığını veya bütünlüğünü garanti edemez. Sonradan erişilemez hale gelen bir bağlantı sunan sağlayıcı veya müşteri, herhangi bir itiraz değerlendirmesinde bu erişilemezliğin sonuçlarını üstlenir.

### Saldırı Yüzeyi Analizi

Bir smart contract'ın en savunmasız olduğu yerleri anlamak, ne yaptığını anlamak kadar önemlidir. Aşağıda NovaCont'un birincil saldırı yüzeylerinin ve her biri için mevcut azaltma önlemlerinin dürüst bir değerlendirmesi sunulmaktadır.

#### cancelContract - Sahip Erişim Yolu

`cancelContract` fonksiyonu, açık belgelemeyi hak eden bir erişim kontrol yolu içerir. Require ifadesi şu şekildedir:

```
require(canCancel || msg.sender == owner(), "Cannot cancel");
```

Bu, kontrat sahibinin durum veya taraf onayından bağımsız olarak istediği zaman herhangi bir anlaşmayı iptal edebileceği anlamına gelir. Bu kasıtlı bir yönetimsel yetenektir. Yaptırıma tabi adresler, yasal yükümlülükler veya manuel müdahale gerektiren kritik hatalar gibi uç durumları ele almak için mevcuttur. Ancak kullanıcıların farkında olması gereken bir merkezileşme varsayımını temsil eder. Sahip tarafından başlatılan iptaller her zaman müşteriye tam iadeyle ve herhangi bir ceza uygulanmaksızın sonuçlanır.

#### settleDispute - Bölüşüm Doğrulama

Yönetici çözüm fonksiyonu katı bir değişmez uygular:

```
require(_clientRefund + _grossProviderPayment == c.totalLocked)
```

Bu, toplam dağıtılan miktarın her zaman toplam kilitli miktara eşit olmasını sağlar. Çözüm sırasında hiçbir fon oluşturulamaz veya yok edilemez. Kilitli bakiyenin her wei'sini hesaba katmayan herhangi bir çözüm geri dönecektir. Bu, itiraz çözümü sırasında hem kazara hem de kötü niyetli fon yanlış dağılımını önleyen kritik bir doğruluk kontrolüdür.

#### claimTimeout - Zaman Bağımlılığı

Zaman aşımı mekanizması, 7 günlük pencere kontrolü için `block.timestamp`'e dayanır. Madenciler ve doğrulayıcılar, blok zaman damgaları üzerinde küçük bir etki derecesine sahiptir. Genellikle birkaç saniye ile birkaç dakika arasında. Bu, 7 günlük bir pencere için anlamlı bir saldırı vektörü değildir, ancak zaman damgasına bağımlı mantığın genel bir özelliği olarak belirtmeye değer. NovaCont, saniye düzeyinde hassasiyetin güvenlik açısından kritik olduğu herhangi bir şey için zaman damgası kullanmaz.

### Ön Koşu Değerlendirmeleri

Ön koşu, kötü niyetli bir aktörün bellek havuzundaki bekleyen bir işlemi gözlemleyip önce işlenmek için daha yüksek gaz ücreti içeren kendi işlemini göndermesiyle gerçekleşir.

**Oracle fiyatı ön koşusu:** Bir müşteri `createContract` fonksiyonunu çağırdığında ETH/USD fiyatı o tam blokta Chainlink'ten alınır. Gelişmiş bir aktör teorik olarak bekleyen bir `createContract` işlemini gözlemleyebilir, dahil edilme anındaki oracle fiyatını tahmin edebilir ve bunun etrafında bir saldırı tasarlayabilir. Ancak burada anlamlı bir sömürü mevcut değildir. Müşteri kendi fonlarını kilitleyen kişidir ve oracle fiyatı yalnızca ne kadar ETH göndermesi gerektiğini etkiler, fonların çalınıp çalınamayacağını değil.

**İtiraz ön koşusu:** Bir sağlayıcı, müşterinin `disputeWork` işlemini bellek havuzunda görmesi durumunda bunu kendine yarar sağlayacak şekilde ön koşu olarak kullanamaz.Kontrat durumu yalnızca bir itirazın açılmasına izin verir ve itiraz yalnızca "Teslim Edildi" durumundayken açılabilir. Sağlayıcının meşru bir itiraza önceden engel olmasına izin verecek hiçbir yarış koşulu yoktur.

### ERC-20 Uç Durumları

**Onay yarış koşulu:** Standart ERC-20 `approve` fonksiyonu, teknik olarak bir harcayanın değiştirilen bir onayı gözlemleyip hem eski hem de yeni limiti harcamak için ön koşu olarak kullanabileceği bir yarış koşuluna karşı savunmasızdır. NovaCont, `SafeERC20` aracılığıyla `safeTransferFrom` kullanarak bu riski azaltır ve kullanıcıların uygulama arayüzü yerine kontratlarla doğrudan etkileşime giriyorlarsa limitleri artırmadan önce sıfıra ayarlamaları önerilir.

**Standart dışı dönüş değerleri:** Bazı ERC-20 token'ları, EIP-20 spesifikasyonuna aykırı olarak `transfer` ve `transferFrom`'dan boolean değer döndürmez. OpenZeppelin'in `SafeERC20` sarmalayıcısı, dönüş verisi uzunluğunu kontrol ederek ve yalnızca çağrının kendisi geri dönmediğinde eksik dönüş değerlerini başarı olarak değerlendirerek bunu zarif biçimde ele alır. Bu, daha geniş bir token uygulaması yelpazesiyle uyumluluğu sağlar.

### Merkezileşme Riskleri

NovaCont mevcut haliyle tamamen aracısız değildir. Aşağıdaki sahip yetenekleri, kullanıcıların protokolü kullanmadan önce değerlendirmesi gereken merkezileşme varsayımlarını temsil eder:

| Yetenek                                 | Fonksiyon                                         | Etki                                                                                                                   |
| --------------------------------------- | ------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- |
| Tüm işlemleri duraklat                  | `pause()`                                         | Kontrat oluşturma ve durum geçişlerini durdurur. Çekimler etkilenmez.                                                  |
| Herhangi bir kontratı iptal et          | `cancelContract()`                                | Sahip herhangi bir anlaşmayı zorla iptal edebilir. Müşteri her zaman tam iade alır.                                    |
| Platform ücretini değiştir              | `setPlatformFee()`                                | Ücret maksimum %10'a kadar değiştirilebilir. Yalnızca gelecekteki uzlaşmaları etkiler.                                 |
| Çözümleyiciyi değiştir                  | `setResolver()`                                   | İtiraz çözüm yetkisini herhangi bir adrese yönlendirebilir.                                                            |
| Jüriyi aktive et veya deaktive et       | `activateJurySystem()` / `deactivateJurySystem()` | İstediği zaman yönetici ve merkezi olmayan itiraz modları arasında geçiş yapabilir.                                    |
| Desteklenen token'ları ekle veya kaldır | `addSupportedToken()` / `removeSupportedToken()`  | Ödeme seçeneklerini genişletebilir veya kısıtlayabilir. ETH veya USDT kaldırılamaz.                                    |
| Fiyat akışlarını güncelle               | `setPriceFeed()`                                  | Herhangi bir token için oracle kaynağını değiştirebilir. Kötü niyetli bir akış depozito hesaplamalarını etkileyebilir. |

Bu yetenekler, protokolün mevcut geliştirme aşamasında güvenli biçimde çalışması için gereklidir. Protokol olgunlaştıkça niyet, zaman kilitleri, çoklu imza gereksinimleri ve nihayetinde zincir üzerinde yönetişim aracılığıyla sahip yetkisini aşamalı olarak azaltmaktır. Sahip ayrıcalık modelindeki herhangi bir değişiklik önceden belgelenecek ve duyurulacaktır.

### Denetim Durumu

NovaCont henüz resmi bir üçüncü taraf güvenlik denetiminden geçmemiştir. Kontratlar, yerleşik güvenlik en iyi uygulamaları takip edilerek geliştirilmiş ve denetlenmiş OpenZeppelin kütüphanelerini kapsamlı biçimde kullanmaktadır; ancak resmi denetimin yokluğu, bilinmeyen güvenlik açıklarının mevcut olabileceği anlamına gelir.

Kullanıcılar, resmi bir denetim tamamlanıp bulguları yayımlanana kadar protokole deneysel olarak yaklaşmalıdır. Kaybetmeyi göze alamayacağınız fonları yatırmayın.

Bir denetim çalışması, protokolün mainnet dağıtımına giden yolun bir parçası olarak planlanmaktadır. Denetim raporları, mevcut olduğunda tam olarak yayımlanacak ve bu dokümantasyondan bağlantı verilecektir.
