Menu
Coddy logo textTech

Solidity online: kompilator i edytor

Pisz, uruchamiaj i udostępniaj fragmenty kodu bez żadnej konfiguracji.

Contract.sol
Kliknij Uruchom, aby zobaczyć tutaj wynik.
ArgumentyWartości przekazywane do funkcji main(...) Twojego kontraktu. Runner koduje je w ABI na podstawie typów parametrów.
Brak argumentów. Kliknij „Dodaj argument”, aby go przekazać.

Wypróbuj Solidity w przeglądarce

Solidity to język smart kontraktów Ethereum. Działa na EVM, tej samej maszynie wirtualnej, która zabezpiecza setki miliardów dolarów w mainnecie i napędza większość sieci L2. Ten edytor online daje ci edytor Monaco połączony z odizolowanym solc i EVM z geth, więc możesz napisać kontrakt, kliknąć Uruchom i zobaczyć dokładnie, co stałoby się on-chain: wynik console.log, wyemitowane zdarzenia i końcowy stan zmiennych storage, bez wdrażania czegokolwiek, płacenia za gaz czy używania portfela.

Solidity ma kilka nietypowych cech, na które warto zwrócić uwagę na starcie. Storage jest domyślnie trwały: wszystko, co przypiszesz do zmiennej stanu, zostaje; wszystko wewnątrz funkcji znika, gdy wywołanie się kończy. Zdarzenia to sposób, w jaki kontrakty komunikują się ze światem zewnętrznym (twoim frontendem, indekserem, The Graph): kosztują gaz, są zapisywane w logach transakcji i można je filtrować po parametrach indexed. A każda funkcja zewnętrzna przyjmuje dane wejściowe przez kodowanie ABI, a nie przez stdin, dlatego edytor udostępnia typowany panel Args, podłączony bezpośrednio do parametrów twojej funkcji main(...).

Co ten edytor online Solidity robi dobrze

  • Prawdziwe wykonanie przez solc i EVM, a nie symulacja przez transpilator. console.log używa forge-std, a emit i zapis do storage przechodzą przez prawdziwą semantykę EVM: opkody, gaz, wszystko.
  • Karta Events pokazuje każde emit z uruchomienia, z wyraźnie oznaczonymi parametrami indexed, więc widzisz dokładnie, co otrzymałby frontend albo subgraph.
  • Karta Storage pokazuje końcową wartość każdej zmiennej stanu, której dotknął kontrakt, łącznie z wpisami w mapowaniach (np. balances[0xabc...]). Zmienne, do których nic nie zapisano, się nie pojawiają.
  • Typowany panel Args przekazuje wartości do parametrycznej funkcji main(uint256 n, string memory name, ...). Środowisko koduje je w ABI na podstawie sygnatury funkcji, więc 42 staje się uint256, a "hello" staje się string.

Co możesz zbudować w edytorze online Solidity

  • Kontrakty licznika ze zwiększaniem i zmniejszaniem, żeby zrozumieć, jak zmienne stanu przetrwają między wywołaniami: zapisz do count, uruchom i zobacz, jak pojawia się w karcie Storage.
  • Wzorce przepływu tokenów: wyemituj Transfer(from indexed, to indexed, value) i zobacz, jak pola indexed i nieindexed są wyświetlane inaczej w karcie Events, tak samo jak w prawdziwych topikach logów EVM.
  • Przypadki błędów z require / revert: napisz warunek, który nie przepuszcza złych danych, i zobacz komunikat revert w stdout, zamiast przepalać gaz na nieudanej transakcji w mainnecie.

Najczęstsze pytania o Solidity

Czym jest Solidity?
Solidity to najpopularniejszy język smart kontraktów dla Ethereum i sieci zgodnych z EVM (Polygon, Arbitrum, Optimism, Base itd.). Kompiluje się do kodu bajtowego EVM, czyli zestawu instrukcji maszyny stosowej wykonywanego przez każdy węzeł sieci. Składnię zapożycza z JavaScriptu i C++, ale semantyka jest zupełnie inna: storage jest drogi i trwały, każde wywołanie jest rozliczane w gazie i nie ma asynchroniczności. Edytor daje ci odizolowane EVM, więc możesz ćwiczyć język bez dotykania prawdziwego łańcucha.
Czy potrzebuję portfela albo ETH z testnetu?
Nie. Edytor uruchamia twój kontrakt w EVM po stronie serwera (tym samym silniku, który jest w geth), w osobnym kontenerze dla każdego żądania. Nie ma transakcji on-chain, gazu płaconego prawdziwym ETH ani podpisu portfela. Gdy klikasz Uruchom, środowisko wdraża kontrakt na świeży łańcuch w pamięci, wywołuje funkcję main(...) z podanymi argumentami i pokazuje stdout, zdarzenia i storage z tego jednego wywołania. Po uruchomieniu wszystko jest usuwane.
Jak przekazać dane wejściowe do kontraktu?
Dodaj do kontraktu funkcję main(...) z dowolnymi typowanymi parametrami: function main(uint256 n) external albo function main(string memory name, uint256 age, bool active) external view. Potem wpisz wartości w panelu Args pod edytorem. Środowisko sprawdza sygnaturę funkcji i koduje twoje napisy w ABI do właściwych typów, tak samo jak cast call w wierszu poleceń. Dla adresu wpisz 0x..., dla wartości logicznej true albo false, a dla uint wartość dziesiętną.
Czym różnią się karty Output, Events i Storage?
Output pokazuje wszystko, co wypiszesz na stdout przez console.log(...) z forge-std/console.sol, oraz ewentualny komunikat błędu revert / require. Events pokazuje każde zdarzenie wyemitowane przez kontrakt podczas uruchomienia, po kolei, z wartością każdego parametru (i małą plakietką "indexed" przy parametrach indexed, które trafiają do topików logów EVM i można je filtrować narzędziami takimi jak The Graph). Storage pokazuje wartość po uruchomieniu każdej zmiennej stanu, do której coś zapisano, łącznie z pojedynczymi wpisami w mapowaniach. Zmienne, których nie ruszano, nie trafiają na listę.
Dlaczego w niektórych tutorialach Solidity nie ma main()?
W prawdziwym łańcuchu kontrakty Solidity nie mają jednego punktu wejścia: klienci wywołują dowolną publiczną funkcję, identyfikowaną przez 4-bajtowy selektor. Edytor używa main() jako konwencji, żeby było oczywiste, co uruchomić, i żeby było gdzie podać argumenty. Poza edytorem kontrakt zwykle udostępnia wiele funkcji (mint, transfer, withdraw, ...), a twój frontend albo narzędzie takie jak cast / ethers / viem wybiera, którą wywołać.

Przydatne narzędzia do Solidity

Darmowe narzędzia w przeglądarce, które świetnie działają razem z edytorem Solidity online. Wszystkie w Coddy.