> For the complete documentation index, see [llms.txt](https://docs.chiliz.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.chiliz.com/tr/gelistir/gelismis/on-chain-fiyat-beslemeleri/en-iyi-uygulamalar.md).

# En İyi Uygulamalar

## Fiyatı Kullanmadan Önce Her Zaman Doğrulayın

`latestRoundData()`, round mevcut değilse `NoDataAvailable()` hatasıyla döner; ancak bayatlık veya duraklatma kontrollerini zorunlu kılmaz — saklanan değerleri olduğu gibi döndürür. Herhangi bir fiyat değerini kullanmadan önce şu üç kontrolü mutlaka yapın:

1. **Duraklatma kontrolü**: `paused()` işlevini çağırın; besleme duraklatılmışsa işlemi reddedin.
2. **Pozitif yanıt**: `answer > 0` koşulunu zorunlu kılın.
3. **Bayatlık kontrolü**: `getHealthStatus().isHealthy` değerine göre koşul uygulayın.

[Fiyat Okuma](/tr/gelistir/gelismis/on-chain-fiyat-beslemeleri/fiyat-okuma.md) sayfasındaki `getSafePrice()` örneği üç kontrolü birden uygular.

## Sağlık Durumu API'si

Her `PriceFeed`, tek bir çağrıda tazelik bilgisini bir araya getiren bir `getHealthStatus()` görünümü sunar:

```solidity
function getHealthStatus()
    external view
    returns (
        uint256 lastUpdateTimestamp,
        uint256 totalRounds,
        uint256 timeSinceLastUpdate,
        bool isHealthy
    );
```

| Alan                  | Açıklama                                                               |
| --------------------- | ---------------------------------------------------------------------- |
| `lastUpdateTimestamp` | En son round'un `updatedAt` değeri                                     |
| `totalRounds`         | Yazılan toplam round sayısı                                            |
| `timeSinceLastUpdate` | `block.timestamp - lastUpdateTimestamp` (veri yoksa `block.timestamp`) |
| `isHealthy`           | `timeSinceLastUpdate <= updateInterval × healthFactor` ise `true`      |

healthFactor varsayılan olarak `2` ile başlatılır; ancak oracle yöneticisi tarafından `setHealthFactor()` ile her besleme için ayrı ayrı yapılandırılabilir. `2` değerini sabit kodlamayın — doğrudan sözleşmeden okuyun:

```solidity
uint80 factor = priceFeed.healthFactor(); // per-feed; do NOT assume the default of 2 (live feeds use 720)
```

Sağlık penceresi `updateInterval × healthFactor` şeklinde hesaplanır; her ikisi de besleme başına yapılandırılır — `updateInterval`, küçük bir zincir üstü minimum aralıktır, heartbeat değil. Beslemeye göre değişir: CHZ/USDC için `5s × 720 = 1 saatlik` pencere, PEPPER/CHZ için `10s × 720 = 2 saatlik` pencere kullanılırken zincir dışı akış hattı yaklaşık 1 saatlik heartbeat ile çalışır. Bayatlık temel değeri olarak yalnızca `updateInterval`'ı kullanmayın — `isHealthy` değerine göre koşul uygulayın. Tam örüntü için [Fiyat Okuma](/tr/gelistir/gelismis/on-chain-fiyat-beslemeleri/fiyat-okuma.md) sayfasındaki `getSafePrice()` işlevine bakın.

Sistemdeki tüm beslemeleri aynı anda izlemek için `OracleFactoryReader` üzerindeki `getAllOracleHealthStatus()` işlevini kullanın — zincir dışı gösterge panelleri ve uyarı sistemleri için kullanışlıdır.

## `decimals()` Değerini Önbelleğe Alın

Her çiftin kendi ondalık hassasiyeti vardır — bir fiyat değerini yorumlamadan önce `decimals()` işlevini çağırarak bunu doğrulayın. Ondalık basamaklar dağıtım sırasında ayarlanır ve hiç değişmez; bu nedenle her fiyat okumada değil, sözleşme başlatması sırasında bir kez okuyun:

```solidity
uint8 public immutable feedDecimals;

constructor(address _feed) {
    priceFeed = IChilizPriceFeed(_feed);
    feedDecimals = priceFeed.decimals();
}
```

## Duraklatılmış Durumu Düzgün Yönetin

Acil durumlarda oracle yöneticisi bir beslemeyi duraklatabilir. Kötü bir değeri sessizce tüketmek yerine ortaya çıkan hatayı temiz biçimde ele alın:

```solidity
require(!priceFeed.paused(), "Feed paused");
```

## Geliştirme Sırasında Tracker'ı Kullanın

[Price Oracle Tracker](https://price-oracle-tracker.vercel.app/?network=mainnet), zincir üstü fiyatları gerçek zamanlı olarak CoinMarketCap ve CoinGecko ile karşılaştırmanıza olanak tanır; entegrasyon sırasında besleme doğruluğunu doğrulamayı kolaylaştırır. Ayrıca her çift için canlı sağlık durumunu, heartbeat parametrelerini ve bireysel sözleşme adreslerini gösterir.

## Entegrasyon Kontrol Listesi

* [ ] `PriceFeed` adresini tracker, `pairToOracle()` veya `getActiveOracles()` aracılığıyla edinin
* [ ] `description()` ve `decimals()` kullanarak çift açıklamasını ve ondalık basamakları doğrulayın
* [ ] `decimals()` değerini sözleşme başlatması sırasında önbelleğe alın
* [ ] Fiyatları `latestRoundData()` ile okuyun (round yoksa `NoDataAvailable()` hatasıyla döner)
* [ ] Fiyatı kullanmadan önce `paused()` kontrolü yapın
* [ ] `answer > 0` koşulunu doğrulayın
* [ ] Bayatlık için `getHealthStatus().isHealthy` değerine göre koşul uygulayın (yalnızca `updateInterval`'dan kendi eşiğinizi türetmeyin)
* [ ] Gerekirse fiyatı iç hassasiyetinize (örn. 18 ondalık basamak) normalleştirin
* [ ] Mainnet'e dağıtmadan önce Spicy Testnet üzerinde test edin


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.chiliz.com/tr/gelistir/gelismis/on-chain-fiyat-beslemeleri/en-iyi-uygulamalar.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
