> 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/pl/tworzenie/podstawy/pisanie-smart-kontraktu.md).

# Pisanie smart kontraktu

Od momentu, gdy decydujesz się stworzyć dApp na Chiliz Chain, musisz uwzględnić specyfikę naszego blockchaina.

Choć Chiliz Chain jest kompatybilna z EVM, traktowanie jej dokładnie jak Ethereum może prowadzić do problemów z użytecznością — szczególnie w zakresie miejsc dziesiętnych tokenów i mechaniki gas.

Przyjrzyjmy się temu bliżej!

## Wymagania wstępne

### Środowisko

Zanim zaczniesz pisać kontrakt, upewnij się, że środowisko jest gotowe.

Po pierwsze, musisz mieć portfel skonfigurowany dla Spicy Testnet (do rozwoju) lub Chiliz Chain Mainnet (do produkcji).

[Połączenie z Chiliz Chain](/pl/tworzenie/podstawy/polaczenie-z-chiliz-chain.md)

Po drugie, będziesz potrzebować $CHZ do opłacenia wdrożenia gas zarówno na Testnecie, jak i na Mainnecie. O ile możesz kupić $CHZ Mainnet na dowolnej giełdzie kryptowalut, dla tokenów Testnet możesz skorzystać z Faucet.

[Tokeny Testnet](/pl/tworzenie/podstawy/tokeny-testnet.md)

Jeśli chodzi o narzędzia, możesz korzystać z Hardhat lub Remix. Zobacz na przykład:

[Wdróż z Remix](/pl/tworzenie/podstawy/wdrozenie-smart-kontraktu/wdrozenie-z-remix.md)

Na koniec, kontrakty Chiliz Chain są pisane w języku Solidity:

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

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

Używaj zalecanych wersji Solidity i EVM:

{% hint style="info" %}
**Zalecane wersje Solidity i EVM dla Chiliz Chain:**

* **Wersja kompilatora Solidity:** `0.8.30` (lub niższa)
* **Docelowa wersja EVM:** `prague`
  {% endhint %}

### Fan Tokens / CAP-20

Najbardziej specyficznym aspektem Chiliz Chain jest standard CAP-20, używany dla Fan Tokens.

Choć technicznie identyczny z kodem ERC-20, tokeny CAP-20 mają specyficzną konfigurację miejsc dziesiętnych. Krótko: używają 0 miejsc dziesiętnych, podczas gdy zwykłe tokeny ERC-20 używają 18 miejsc dziesiętnych.

[Więcej o Fan Tokens](/pl/nauka/o-fan-tokenach.md)

Dlatego jeśli wdrożysz Fan Token z 18 miejscami dziesiętnymi, może nie wyświetlać się poprawnie w portfelach ekosystemu ani nie być kompatybilny z przyszłymi integracjami Socios.com.

## Najlepsze praktyki pisania smart kontraktu

### Używaj sprawdzonych bibliotek (OpenZeppelin)

Nie zaczynaj pisać kontraktu od zera.\
Najskuteczniejszą pojedynczą praktyką bezpieczeństwa jest oparcie kodu na standardach zaudytowanych przez społeczność, aby zmniejszyć ryzyko podatności.

Do tworzenia na Chiliz Chain zdecydowanie zalecamy korzystanie z [OpenZeppelin Contracts](https://docs.openzeppelin.com/contracts). Zapewniają bezpieczne i zweryfikowane przez społeczność implementacje kontraktów tokenów.

Używając standardowych kontraktów, zapewniasz kompatybilność swoich tokenów ze znananymi portfelami (takimi jak MetaMask) i ekosystemem Chiliz (Socios.com).

### Ogólne najlepsze praktyki EVM

Niezależnie od sieci, te trzy wzorce są niezbędne dla bezpiecznego programowania w Solidity.

#### Wzorzec "Sprawdzenia-Efekty-Interakcje"

To Twoja główna obrona przed [atakami reentrancy](https://solidity-by-example.org/hacks/re-entrancy/). Zawsze strukturyzuj funkcje w tej kolejności:

1. Sprawdzenia: Weryfikuj dane wejściowe i warunki (np. instrukcje `require`).
2. Efekty: Aktualizuj stan kontraktu (np. zmniejszaj salda).
3. Interakcje: Wchodź w interakcje z innymi kontraktami lub wysyłaj środki (np. `transfer`).

#### Solidna kontrola dostępu

Nigdy nie pozostawiaj wrażliwych funkcji bez ochrony. Jeśli funkcja mintuje tokeny, zmienia opłaty lub aktualizuje logikę, musi być ograniczona.

* Proste: Używaj `Ownable` dla kontraktów z jednym administratorem.
* Złożone: Używaj `AccessControl` dla kontraktów wymagających wielu ról (np. `MINTER_ROLE`, `ADMIN_ROLE`).

#### Walidacja danych wejściowych

Zakładaj, że wszystkie dane wejściowe są złośliwe. Używaj instrukcji `require()` na początku funkcji, aby weryfikować parametry.

Na przykład:

* Sprawdzaj zerowe adresy (`address(0)`).
* Sprawdzaj zerowe kwoty przy transferach.
* Weryfikuj zgodność długości tablic przy przekazywaniu wielu tablic.
* itd.

### Szczegóły implementacji specyficzne dla Chiliz

Choć Chiliz Chain jest kompatybilna z EVM, obowiązują pewne "lokalne reguły", szczególnie dotyczące miejsc dziesiętnych tokenów.

#### Zgodność z CAP-20 (Fan Tokens)

Jeśli piszesz kontrakt, który wchodzi w interakcje z Fan Tokens (np. Pula Stakingowa dla $PSG lub $BAR), musisz obsługiwać 0 miejsc dziesiętnych.

Oznacza to:

* Nie zakładaj, że `1 Token = 10^18 jednostek`. Dla Fan Tokens `1 Token = 1 jednostka`.
* Unikaj kodowania `1e18` w matematyce, jeśli kontrakt ma być ogólny. Używaj dynamicznie funkcji `token.decimals()`.

### Optymalizacja gas na Chiliz

Transakcje na Chiliz Chain są znacznie tańsze niż na Ethereum, ale niezoptymalizowany kod może nadal prowadzić do zatłoczenia lub nieudanych transakcji podczas ruchu o dużym natężeniu (np. podczas meczu na żywo).

Oto trzy sposoby na oszczędność gas:

* Używaj niestandardowych błędów: Zamiast długich komunikatów tekstowych w `require`, używaj definicji `error`, aby oszczędzać gas.
* Porządkuj zmienne stanu, aby mieściły się w 32-bajtowych slotach. Gdzie to możliwe, umieszczaj obok siebie `uint128`, `address` i `bool`.
* Preferuj `external` dla funkcji, które nigdy nie są wywoływane wewnętrznie przez sam kontrakt.


---

# 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/pl/tworzenie/podstawy/pisanie-smart-kontraktu.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.
