> 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).

{% content-ref url="/pages/TJekFFnwqmin8Yo6NLMr" %}
[Połączenie z Chiliz Chain](/pl/tworzenie/podstawy/polaczenie-z-chiliz-chain.md)
{% endcontent-ref %}

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.

{% content-ref url="/pages/Uc1Cg4SAxnP3RNbijvMQ" %}
[Tokeny testnet](/pl/tworzenie/podstawy/tokeny-testnet.md)
{% endcontent-ref %}

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

{% content-ref url="/pages/gdmGAHybN84gjBa7aM3G" %}
[Wdrożenie z Remix](/pl/tworzenie/podstawy/wdrozenie-smart-kontraktu/wdrozenie-z-remix.md)
{% endcontent-ref %}

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.

CAP-20 jest technicznie równoważny standardowi ERC-20. Od czasu migracji do dziesiętnych Fan Tokenów 2026 tokeny CAP-20 używają 18 miejsc dziesiętnych precyzji, tak samo jak standardowe tokeny ERC-20, dzięki czemu salda, transfery i całkowita podaż Fan Tokens są denominowane w najmniejszej jednostce tokenu i obsługują ilości ułamkowe.

{% hint style="info" %}
Fan Tokeny używały 0 miejsc dziesiętnych (wyłącznie całe jednostki) aż do [Migracja do dziesiętnych Fan Tokenów 2026](/pl/nauka/o-fan-tokenach/migracja-do-dziesietnych-fan-tokenow-2026.md), która zaktualizowała je do precyzji 18 miejsc dziesiętnych. Kontrakty napisane przy założeniu dawnych całych jednostek mogą wymagać aktualizacji.
{% endhint %}

{% content-ref url="/pages/JfiFlzaq3fVNQQthUlXB" %}
[O Fan Tokenach](/pl/nauka/o-fan-tokenach.md)
{% endcontent-ref %}

## 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), uwzględniaj ich miejsca dziesiętne zamiast zakładać stałą wartość.

Od czasu migracji do dziesiętnych Fan Tokenów 2026 Fan Tokens używają 18 miejsc dziesiętnych, więc `1 Token = 10^18 units`, tak samo jak większość tokenów ERC-20. Starsze kontrakty Fan Token używały 0 miejsc dziesiętnych (`1 Token = 1 unit`) i niektóre nadal można napotkać on-chain.

* Nie koduj na sztywno miejsc dziesiętnych tokenu. Odczytuj `token.decimals()` dynamicznie, aby kontrakt działał niezależnie od tego, czy token używa 18 miejsc dziesiętnych, czy dawnej konfiguracji z 0 miejscami dziesiętnymi.
* Skaluj kwoty przy użyciu wartości zwracanej przez `decimals()` zamiast zakładać `1e18`.

### 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.
