Solidity Playground
Code-Snippets schreiben, ausführen und teilen — keine Einrichtung nötig.
Klicken Sie auf Ausführen, um die Ausgabe hier zu sehen.
Solidity im Browser ausprobieren
Solidity ist die Sprache der Ethereum-Smart-Contracts. Sie läuft auf der EVM — derselben virtuellen Maschine, die im Mainnet hunderte Milliarden Dollar absichert und die meisten L2s antreibt. Dieses Playground gibt dir einen Monaco-Editor, der an eine sandboxed solc + geth EVM angebunden ist, sodass du einen Vertrag schreiben, auf Run drücken und exakt sehen kannst, was on-chain passieren würde: console.log-Ausgabe, emittierte Events und der finale Zustand deiner Storage-Variablen — ohne irgendetwas zu deployen, ohne Gas zu zahlen und ohne eine Wallet anzufassen.
Solidity hat ein paar Eigenheiten, auf die man am Anfang achten sollte. Storage ist standardmäßig permanent — alles, was du einer State-Variable zuweist, bleibt erhalten; alles innerhalb einer Funktion ist weg, sobald der Aufruf zurückkehrt. Events sind die Art, wie Contracts mit der Außenwelt sprechen (dein Frontend, dein Indexer, The Graph) — sie kosten Gas, werden in die Transaction-Logs geschrieben und sind nach indexed-Parametern filterbar. Und jede externe Funktion bekommt ihre Eingaben über ABI-Encoding, nicht über stdin — deshalb hat das Playground ein typisiertes Args-Panel, das direkt an deine main(...)-Parameter angeschlossen ist.
Was dieses Solidity-Playground gut macht
- Echte solc + EVM-Ausführung, keine Transpiler-Simulation. console.log läuft über forge-std, und die emit- / Storage-Pfade durchlaufen echte EVM-Semantik — Opcodes, Gas, alles.
- Der Events-Tab zeigt jedes
emitdeines Laufs mit deutlich markiertenindexed-Parametern, sodass du siehst, was ein Frontend oder ein Subgraph genau empfangen würde. - Der Storage-Tab zeigt den finalen Wert jeder State-Variable, die der Vertrag angefasst hat — inklusive Mapping-Einträgen (z. B.
balances[0xabc...]). Variablen, die du nicht beschrieben hast, tauchen nicht auf. - Typisiertes Args-Panel, das Werte an ein parametrisches
main(uint256 n, string memory name, ...)reicht. Der Runner ABI-encodet sie anhand der Funktionssignatur, sodass42zuuint256und"hello"zustringwird.
Was du im Solidity-Playground bauen kannst
- Counter- / Increment-Decrement-Contracts, um zu lernen, wie State-Variablen über Aufrufe hinweg bestehen — schreibe in
count, führe aus und beobachte, wie es im Storage-Tab erscheint. - Token-Flow-Muster — emittiere
Transfer(from indexed, to indexed, value)und sieh, wie indexed- und non-indexed-Felder im Events-Tab unterschiedlich gerendert werden, genauso wie sie in echten EVM-Log-Topics auftauchen. require/revert-Fehlerfälle — schreibe einen Guard, der bei schlechtem Input fehlschlägt, und sieh die Revert-Meldung im stdout erscheinen, statt im Mainnet Gas an einer fehlgeschlagenen Transaktion zu verbrennen.
Häufig gestellte Fragen zu Solidity
Was ist Solidity?
Brauche ich eine Wallet oder Testnet-ETH, um das zu nutzen?
main(...)-Funktion mit den angegebenen Args auf und zeigt dir stdout, Events und Storage aus diesem einen Aufruf. Nach dem Run wird alles weggeworfen.Wie übergebe ich Eingaben an meinen Vertrag?
main(...) mit den typisierten Parametern, die du willst — function main(uint256 n) external oder function main(string memory name, uint256 age, bool active) external view. Dann trag die Werte im Args-Panel unter dem Editor ein. Der Runner schaut sich die Signatur an und ABI-encodet deine Strings in die richtigen Typen, genauso wie cast call auf der Kommandozeile. Für ein address-Argument tippe 0x...; für bool true oder false; für uint den Dezimalwert.Was ist der Unterschied zwischen den Tabs Output, Events und Storage?
console.log(...) aus forge-std/console.sol in stdout geschrieben hast, plus eine etwaige Revert- / Require-Fehlermeldung. Events zeigt jedes Event, das dein Vertrag während des Laufs emittiert hat, in der Reihenfolge und mit dem Wert jedes Parameters (und einer kleinen "indexed"-Markierung bei indexed-Parametern — das sind die, die in die EVM-Log-Topics gehen und mit Tools wie The Graph filterbar sind). Storage zeigt den Nach-Lauf-Wert jeder State-Variable, die geschrieben wurde, inklusive einzelner Mapping-Einträge — Variablen, die du nicht angefasst hast, bleiben aus der Liste raus.Warum gibt es in einigen Solidity-Tutorials kein main()?
main() als Konvention, damit es etwas Offensichtliches zum Ausführen gibt und einen Ort für Argumente. Außerhalb des Playgrounds wird dein Vertrag typischerweise mehrere Funktionen exponieren (mint, transfer, withdraw, ...) und dein Frontend oder ein Tool wie cast / ethers / viem entscheidet, welche aufgerufen wird.