# Akıllı Sözleşme Yazın

Chiliz Chain üzerinde bir dApp oluşturmaya karar verdiğiniz andan itibaren, blok zincirimizin özelliklerini dikkate almanız gerekir.

Chiliz Chain EVM uyumlu olsa da, onu Ethereum ile birebir aynı şekilde ele almak, özellikle token ondalıkları ve gas mekanikleri konusunda kullanılabilirlik sorunlarına yol açabilir.

Hadi keşfedelim!

## Ön Koşullar

### Ortam

Sözleşmenizi yazmaya başlamadan önce, ortamınızın hazır olduğundan emin olun.

İlk olarak, Spicy Testnet (geliştirme için) veya Chiliz Chain Mainnet (üretim için) için yapılandırılmış bir cüzdana sahip olmalısınız.

{% content-ref url="/pages/af86a4e8044c7c8875bd1610b86076dca20e15c8" %}
[Chiliz Chain'e bağlanın](/tr-ai/develop/basics/connect-to-chiliz-chain.md)
{% endcontent-ref %}

İkinci olarak, hem Testnet hem de Mainnet üzerinde gas dağıtım ücretlerini ödemek için $CHZ’ye ihtiyacınız olacak. Mainnet $CHZ’yi herhangi bir kripto borsasından satın alabilirsiniz; Testnet tokenları için ise faucet’lere güvenebilirsiniz.

{% content-ref url="/pages/f73cd3119ed7f44b6204f333f8e8b3a0ce5a1a9c" %}
[Ücretsiz Testnet Token'ları Edinin](/tr-ai/develop/basics/obtain-free-testnet-tokens.md)
{% endcontent-ref %}

Araçlar açısından Hardhat veya Remix’e güvenebilirsiniz. Örneğin şunlara bakın:

{% content-ref url="/pages/b1018c319b9a1bcd018f4460a12ca457dc8f7786" %}
[Remix ile dağıtın](/tr-ai/develop/basics/deploy-a-smart-contract/deploy-with-remix.md)
{% endcontent-ref %}

Son olarak, Chiliz Chain sözleşmeleri Solidity dilinde yazılır:

{% embed url="<https://www.soliditylang.org/>" %}

{% embed url="<https://solidity-by-example.org/>" %}

### Fan Tokenları / CAP-20

Chiliz Chain’in en özgün yönü, Fan Tokenları için kullanılan CAP-20 standardıdır.

Teknik olarak kod açısından ERC-20 standardıyla aynı olsa da, CAP-20 tokenlarının ondalık sayıları için özel bir yapılandırması vardır. Kısacası: 0 ondalık kullanır; normal ERC-20 tokenları ise 18 ondalık kullanır.

{% content-ref url="/pages/313c98d1714078c6c991e1488fff1d2fa9a10dc3" %}
[Fan Token'lar Hakkında](/tr-ai/learn/about-fan-tokens.md)
{% endcontent-ref %}

Bu nedenle, 18 ondalıklı bir Fan Token dağıtırsanız, ekosistem cüzdanlarında doğru görüntülenmeyebilir veya gelecekteki Socios.com entegrasyonlarıyla uyumlu olmayabilir.

## Bir akıllı sözleşme yazarken en iyi uygulamalar

### Savaşta Test Edilmiş Kütüphaneleri Kullanın (OpenZeppelin)

Sözleşmenizi sıfırdan oluşturmaya başlamayın.\
En etkili güvenlik uygulaması, güvenlik açıkları riskini azaltmak için kodunuzu topluluk tarafından denetlenmiş standartlara dayandırmaktır

Chiliz Chain geliştirmesi için, şunu kullanmanızı güçlü şekilde öneriyoruz [OpenZeppelin Contracts](https://docs.openzeppelin.com/contracts). Bunlar, token sözleşmeleri için güvenli ve topluluk tarafından doğrulanmış uygulamalar sağlar.

Standart sözleşmeler kullanarak, tokenlarınızın bilinen cüzdanlarla (MetaMask gibi) ve Chiliz ekosistemiyle (Socios.com) uyumlu olmasını sağlarsınız.

### Genel EVM En İyi Uygulamaları

Zincirden bağımsız olarak, güvenli Solidity geliştirmesi için bu üç kalıp pazarlık konusu değildir.

#### "Kontroller-Etkiler-Etkileşimler" Kalıbı

Bu, şuna karşı birincil savunmanızdır [Yeniden Giriş Saldırıları](https://solidity-by-example.org/hacks/re-entrancy/). Fonksiyonlarınızı her zaman tam olarak şu sırayla yapılandırın:

1. Kontroller: Girdileri ve koşulları doğrulayın (ör.  `require` ifadeleri).
2. Etkiler: Sözleşme durumunu güncelleyin (ör. bakiyeleri azaltın).
3. Etkileşimler: Diğer sözleşmelerle etkileşime girin veya fon gönderin (ör.  `transfer`).

#### Sağlam Erişim Kontrolü

Hassas fonksiyonları asla korumasız bırakmayın. Bir fonksiyon token basıyor, ücretleri değiştiriyor veya mantığı yükseltiyorsa, kısıtlanmış olmalıdır.

* Basit: Şunu kullanın `Ownable` tek yöneticiye sahip sözleşmeler için.
* Karmaşık: Şunu kullanın `AccessControl` birden çok rol gerektiren sözleşmeler için (ör.  `MINTER_ROLE`, `ADMIN_ROLE`).

#### Girdi Doğrulama

Tüm girdilerin kötü niyetli olduğunu varsayın. Parametreleri doğrulamak için fonksiyonlarınızın en başında  `require()` ifadelerini kullanın.

Örneğin:

* Sıfır adresleri kontrol edin (`address(0)`).
* Aktarım yaparken sıfır miktarları kontrol edin.
* Birden fazla dizi aktarılıyorsa dizi uzunluklarının eşleştiğini doğrulayın.
* vb.

### Chiliz’e Özgü Uygulama Ayrıntıları

Chiliz Chain EVM uyumlu olsa da, özellikle token ondalıkları ve EVM sürümleriyle ilgili belirli "yerel kurallar" geçerlidir.

#### CAP-20 Uyumluluğu (Fan Tokenları)

Fan Tokenlarıyla etkileşen bir sözleşme yazıyorsanız (ör. $PSG veya $BAR için bir Staking Havuzu), 0 ondalığı işlemeniz gerekir.

Bu şu anlama gelir:

* Şunu varsaymayın `1 Token = 10^18 birim`. Fan Tokenları için, `1 Token = 1 birim`.
* Genel amaçlı bir sözleşme yazıyorsanız, matematik işlemlerinizde `1e18` değerini sabit kodlamaktan kaçının. Bunun yerine `token.decimals()` fonksiyonunu dinamik olarak kullanın.

#### EVM Sürümü ve Derleyici

Chiliz Chain, "Shanghai" EVM sürümüyle uyumludur.\
Önerilen Solidity Sürümü `0.8.24`.

### Chiliz’de Gas Optimizasyonu

Chiliz Chain üzerindeki işlemler Ethereum’a kıyasla önemli ölçüde daha ucuzdur, ancak optimize edilmemiş kod yine de yüksek trafikli etkinlikler sırasında (ör. canlı bir maç sırasında) tıkanıklığa veya başarısız işlemlere yol açabilir.

Gas tasarrufu için üç yol şunlardır:

* Özel Hataları Kullanın: uzun metinli hata mesajları yerine `require`, şunu kullanın `error` tanımlarını kullanarak gas tasarrufu yapın.
* Durum değişkenlerinizi 32 baytlık yuvalara sığacak şekilde sıralayın.  `uint128`, `address`, ve `bool` mümkün olduğunca yan yana yerleştirin.
* Şunu tercih edin `harici` sözleşmenin kendi içinde asla dahili olarak çağrılmayan fonksiyonlar için.


---

# Agent Instructions: 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:

```
GET https://docs.chiliz.com/tr-ai/develop/basics/write-a-smart-contract.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
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.
