Menu
Coddy logo textTech

Solidity Playground

Écrivez, exécutez et partagez des extraits de code — sans installation.

Contract.sol
Cliquez sur Exécuter pour voir la sortie ici.
ArgsValues passed to your contract’s main(...) function. The runner ABI-encodes them based on the parameter types.
No arguments. Click "Add arg" to pass one.

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 emit de votre exécution avec les paramètres indexed distinctement 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, donc 42 devient un uint256 et "hello" devient une string.

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 ?
Solidity est le langage de smart contracts le plus utilisé pour Ethereum et les chaînes compatibles EVM (Polygon, Arbitrum, Optimism, Base, etc.). Il compile vers du bytecode EVM — un jeu d'instructions de machine à pile exécuté par chaque nœud du réseau. Syntaxiquement, il emprunte à JavaScript et à C++, mais la sémantique est très différente : le storage est cher et permanent, chaque appel est mesuré en gas, et il n'y a pas d'async. Le playground vous donne une EVM en sandbox pour pratiquer le langage sans toucher à une vraie chaîne.
Ai-je besoin d'une wallet ou d'ETH de testnet pour utiliser ça ?
Non. Le playground exécute votre contrat dans une EVM côté serveur (le même moteur que celui livré avec geth) dans un conteneur isolé par requête. Pas de transaction on-chain, pas de gas payé en vrai ETH, pas de signature de wallet. Quand vous appuyez sur Run, le runner déploie votre contrat sur une chaîne en mémoire toute neuve, appelle votre fonction 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 ?
Donnez à votre contrat une fonction nommée 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 ?
Output affiche ce que vous avez écrit dans stdout via 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() ?
Sur une vraie chaîne, les contrats Solidity n'ont pas de point d'entrée unique — les clients appellent n'importe quelle fonction publique qu'ils veulent, identifiée par son selector de 4 octets. Le playground utilise 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.