> 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/audit-and-security/novacont-security-review.md).

# NovaCont Security Review

### Kapsam&#x20;

* NovaCont.sol
* NovaJury.sol

### Metodoloji

* Statik analiz, Slither v0.11.5, 101 detektör, iki ayrı derleme turu.&#x20;
* Her Medium+ bulgu, kaynak kod üzerinde manuel olarak doğrulanmış, statik analizin bağlamı kaçırdığı durumlar ayrı bir bölümde gerekçelendirilmiştir.&#x20;

| Seviye             | Sayı | Not                                                                                                                                                      |
| ------------------ | ---- | -------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Kritik/Yüksek      | 0    | -                                                                                                                                                        |
| Orta (Doğrulanmış) | 0    | 4 aday da incelendi, tümü aşağıda gerekçesiyle "Reviewed & Not Exploitable" olarak kapatıldı                                                             |
| Low                | 8    | Immutable optimizasyonu (2), eskik event emisyonu (2), missing-zero-check (OZ kütüphane kodu), solc versiton pinning, costly-loop, cyclomatic-complexity |
| Informational      | 110  | Naing convention (\~90), assembly/low-level-calls (OZ kütüphane kodu), timestamp kullanımı, unused-state                                                 |

### Tespit Edilenler - Review and Determined Not Exploitable

Slitherin işaretlediği ve manuel incelemeyle kapatılan dört bulgu;&#x20;

#### Oracle round validation (unused-return)

Slither, "feed.latestRoundData()" nın dönüş değerlerinin bir kısmının kullanılmadığını işaretledi. Kod incelemesi, "getLatestTokenUSDPrice" fonksiyonunun hem "updatedAt" staleness kontrolünü hem de "answeredInRound ≥ roundId" stale round kontrolünü zaten uyguladığını doğruladı. Buldu, Slitherin kısmi tuple discard pattern'inde ("None" ile bırakılan "startedAt" alanı) false positive üretmesinden kaynaklanıyor.&#x20;

#### Cross-function reentrancy (reentrancy-eth, reentrancy-no-eth)

"createContract", "disputeWork", "joinJury", "payCountFee" fonksiyonlarının tamamı "nonReentrant" modifier'ı taşıyor. OpenZeppelin'in "ReentrancyGuard"ı kontrat geneli tek bir kilit kullandığından, bir "NonReentrant" fonksiyon çalışırken aynı kontrattaki başka herhangi bir "nonReentrant" fonksiyona giriş de engellenir. "disputeWork"te "dd.linkedCaseId"nin "createCase" external call'ından sonra yazılması, Slither'in "checks-effects-interactions" ihlali olarak işaretlediği bir örüntü, ancak aktif kilit bu senaryoda geri girişi (re-entry) fiilen imkansız kılıyor.&#x20;

#### Uninitialized locals (\_assignJurors.selected, \_processJurorOutcomes.voters)

"*assignJurors", döngü sonunda "require(pickedCount == JURORS*\_PER\_CASE, "Not enough eligible jurors")" ile korunuyor. Havuzda yeterli uygunlukta juror yoksa fonksiyon tamamen revert ediyor, kısmen dolu bir dizinin döndürülmesi mümkün değil. "\_processJurorOutcomes", "voters" dizisinin dolu olmayan kısımlarına asla erişemiyor çünkü döngü sınırı "voterCount" ile kesin olarak tanımlanmış; "address(0)" slotları hiçbir zaman işleme girmiyor.&#x20;

#### Divide-before-multiply (cancelContract, computeDisputeFeePerParty)

iki lokasyonda da bölme, çarpmadan önce yapılıyor. Etkilenen miktar mertebesi, Ethereum tarafında \~1 wei (\~$0.000000000003), oracle hesaplamasında \~1 birim 8-decimal fiyat formatında (\~0.000000005). Pratikte ise hiçbir kullanıcının veya protokolün ölçülebilir bir kayıp yaşaması için işlemin milyonlarca kez tekrarlanması gerekir. Fon güvenliğini veya kilitlemesini etkilemez.&#x20;

### Düşük Seviyeler

<table><thead><tr><th>Bulgu</th><th>Öneri</th><th data-hidden></th></tr></thead><tbody><tr><td>usdtToken/usdt immutable olabilir</td><td>Constructor'da bir kez set ediliyorsa immutable yap, gas tasarrufu. </td><td></td></tr><tr><td>setJuryContract, setNovaContAddress event emit etmiyor</td><td>Şeffaflık için event eklenmeli</td><td></td></tr><tr><td>USDT_DECIMALS kullanılmıyor</td><td>Ölü kod, temizlenmeli.</td><td></td></tr><tr><td>replaceInactiveJuror yüksek cyclomantic complexity</td><td>Fonksiyonel bug değil, ancak bakım/audit edilebilirlik için alt fonksiyonlara bölünmesi önerilir. </td><td></td></tr><tr><td>solc ^0.8.20 bilinen compiler bug'ları içeriyor</td><td>Projede assembly/verbatim kullanımı yok. </td><td></td></tr></tbody></table>

### Sonuç

Statik analiz, kod tabanında **hiçbir Kritik veya Yüksek seviyeli açık bulgu** ortaya çıkarmadı. Medium adayı 4 bulgunun tamamı manuel incelemeyle "Not Exploitable" olarak kapatıldı ve gerekçeleri yukarıda belgelenmiştir. Kalan bulgular gas optimizasyonu, kod stili veya zaten bilinen/kabul edilmiş tasarım kararlarıdır. Bu sonuç, bağımsız bir üçüncü taraf denetimin yerini tutmaz, ancak kod tabanının mevcut olgunluk seviyesi hakkında olumlu bir sinyaldir.
