Solidity Playground
Écrivez, exécutez et partagez des extraits de code — sans installation.
Cliquez sur Exécuter pour voir la sortie ici.
Essayez Solidity dans le navigateur
Solidity est le langage des smart contracts d'Ethereum. Il tourne sur l'EVM — la même machine virtuelle qui sécurise des centaines de milliards de dollars sur le mainnet et qui propulse la plupart des L2. Ce playground vous donne un éditeur Monaco branché sur un sandbox solc + geth EVM, donc vous pouvez écrire un contrat, appuyer sur Run et voir exactement ce qui se passerait on-chain : la sortie de console.log, les events émis et l'état final de vos variables de storage — sans rien déployer, sans payer de gas et sans toucher à une wallet.
Solidity a quelques particularités qu'il vaut la peine de remarquer quand on débute. Le storage est permanent par défaut — tout ce que vous assignez à une variable d'état persiste ; tout ce qui est à l'intérieur d'une fonction disparaît dès que l'appel retourne. Les events sont la façon dont les contrats parlent au monde extérieur (votre frontend, votre indexeur, The Graph) — ils coûtent du gas, sont écrits dans les logs de la transaction et sont filtrables par paramètres indexed. Et chaque fonction externe reçoit ses entrées via l'ABI encoding, pas via stdin — c'est pourquoi le playground expose un panneau Args typé qui se branche directement sur les paramètres de votre main(...).
Ce que ce playground Solidity fait bien
- Exécution réelle solc + EVM, pas une simulation par transpileur. console.log utilise forge-std et les chemins emit / storage passent par la vraie sémantique EVM — opcodes, gas, tout.
- L'onglet Events affiche chaque
emitde votre exécution avec les paramètresindexeddistinctement signalés, donc vous voyez exactement ce qu'un frontend ou un subgraph recevrait. - L'onglet Storage affiche la valeur finale de chaque variable d'état que le contrat a touchée — y compris les entrées de mapping (p. ex.
balances[0xabc...]). Les variables que vous n'avez pas écrites n'apparaissent pas. - Panneau Args typé qui alimente un
main(uint256 n, string memory name, ...)paramétrique. Le runner encode en ABI à partir de la signature de votre fonction, donc42devient unuint256et"hello"devient unestring.
Ce que vous pouvez construire dans le playground Solidity
- Contrats compteur / increment-decrement pour apprendre comment les variables d'état persistent entre les appels — écrivez dans
count, exécutez, puis regardez-la apparaître dans l'onglet Storage. - Patrons de flux de tokens — émettez
Transfer(from indexed, to indexed, value)et observez les champs indexed et non-indexed rendus différemment dans l'onglet Events, exactement comme ils apparaissent dans les topics de logs réels de l'EVM. - Cas d'échec
require/revert— écrivez un garde qui échoue sur une entrée invalide et voyez le message de revert surgir dans stdout, au lieu de brûler du gas sur une transaction ratée en mainnet.
Questions fréquentes sur Solidity
Qu'est-ce que Solidity ?
Ai-je besoin d'une wallet ou d'ETH de testnet pour utiliser ça ?
main(...) avec les args que vous avez fournis, et vous montre stdout, events et storage de cet appel. Tout est jeté après le Run.Comment passer des entrées à mon contrat ?
main(...) avec les paramètres typés que vous voulez — function main(uint256 n) external ou function main(string memory name, uint256 age, bool active) external view. Puis ajoutez les valeurs dans le panneau Args sous l'éditeur. Le runner inspecte la signature de la fonction et encode vos chaînes en ABI dans les bons types, exactement comme le fait cast call en ligne de commande. Pour un argument address, tapez 0x... ; pour un bool, true ou false ; pour un uint, la valeur décimale.Quelle est la différence entre les onglets Output, Events et Storage ?
console.log(...) de forge-std/console.sol, plus tout message d'erreur revert / require. Events affiche chaque event que votre contrat a émis pendant l'exécution, dans l'ordre, avec la valeur de chaque paramètre (et une petite pastille "indexed" pour les paramètres indexed — ce sont ceux qui partent dans les topics de logs EVM et qui sont filtrables par des outils comme The Graph). Storage affiche la valeur post-exécution de chaque variable d'état qui a été écrite, y compris les entrées individuelles de mapping — les variables que vous n'avez pas touchées restent hors de la liste.Pourquoi certains tutoriels Solidity n'ont pas de main() ?
main() comme convention pour avoir quelque chose d'évident à exécuter et un endroit où mettre les arguments. En dehors du playground, votre contrat exposera typiquement plusieurs fonctions (mint, transfer, withdraw, ...) et votre frontend ou un outil comme cast / ethers / viem choisit laquelle appeler.