Solidity online: kompilator i edytor
Pisz, uruchamiaj i udostępniaj fragmenty kodu bez żadnej konfiguracji.
Kliknij Uruchom, aby zobaczyć tutaj wynik.
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
emitz uruchomienia, z wyraźnie oznaczonymi parametramiindexed, 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ęc42staje 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?
Czy potrzebuję portfela albo ETH z testnetu?
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?
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?
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()?
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.