For the complete documentation index, see llms.txt. This page is also available as Markdown.

Pisanie smart kontraktu

Pisanie smart kontraktów Solidity kompatybilnych z Chiliz Chain: zalecane wersje Solidity i EVM, dziesiętne tokenów CAP-20, mechanika gas i różnice EVM względem Ethereum.

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

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

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

Wdróż z Remix

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

Używaj zalecanych wersji Solidity i EVM:

Zalecane wersje Solidity i EVM dla Chiliz Chain:

  • Wersja kompilatora Solidity: 0.8.30 (lub niższa)

  • Docelowa wersja EVM: prague

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

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

Ostatnia aktualizacja

Czy to było pomocne?