Menu
Coddy logo textTech

Compilatore Solidity online

Scrivi, esegui e condividi snippet di codice, senza configurare nulla.

Contract.sol
Clicca Esegui per vedere l'output qui.
ArgomentiValori passati alla funzione main(...) del tuo contratto. Il runner li codifica in ABI in base ai tipi dei parametri.
Nessun argomento. Clicca "Aggiungi argomento" per passarne uno.

Prova Solidity nel browser

Solidity è il linguaggio degli smart contract di Ethereum. Gira sull'EVM, la stessa macchina virtuale che protegge centinaia di miliardi di dollari sulla mainnet e alimenta la maggior parte dei L2. Questo playground ti offre un editor Monaco collegato a solc + EVM di geth in una sandbox, così puoi scrivere un contratto, premere Esegui e vedere esattamente cosa succederebbe on-chain: l'output di console.log, gli eventi emessi e lo stato finale delle variabili di storage, senza fare deploy di nulla, pagare gas o toccare un wallet.

Solidity è insolito sotto alcuni aspetti che vale la pena notare fin dall'inizio. Lo storage è permanente per impostazione predefinita: tutto ciò che assegni a una variabile di stato resta, mentre tutto ciò che sta dentro una funzione sparisce quando la chiamata termina. Gli eventi sono il modo in cui i contratti comunicano con il mondo esterno (il tuo frontend, il tuo indexer, The Graph): costano gas, vengono scritti nei log delle transazioni e si possono filtrare in base ai parametri indicizzati. E ogni funzione esterna riceve i suoi input tramite codifica ABI, non dallo stdin: per questo il playground offre un pannello Args tipizzato collegato direttamente ai parametri della tua main(...).

Cosa fa bene questo playground Solidity

  • Vera esecuzione con solc + EVM, non una simulazione con transpiler. console.log usa forge-std e i percorsi di emit e storage passano per la vera semantica dell'EVM: opcode, gas, tutto quanto.
  • La scheda Events mostra ogni emit della tua esecuzione con i parametri indexed evidenziati in modo distinto, così vedi esattamente cosa riceverebbe un frontend o un subgraph.
  • La scheda Storage mostra il valore finale di ogni variabile di stato toccata dal contratto, comprese le voci delle mapping (ad esempio balances[0xabc...]). Le variabili che non hai scritto non compaiono.
  • Il pannello Args tipizzato passa i valori a una main(uint256 n, string memory name, ...) parametrica. L'esecutore li codifica in ABI in base alla firma della tua funzione, così 42 diventa un uint256 e "hello" diventa una string.

Cosa puoi creare nel playground Solidity

  • Contratti contatore con incremento e decremento per capire come le variabili di stato persistono tra le chiamate: scrivi in count, esegui e guardala comparire nella scheda Storage.
  • Schemi di trasferimento di token: emetti Transfer(from indexed, to indexed, value) e guarda i campi indicizzati e non indicizzati mostrati in modo diverso nella scheda Events, come appaiono nei veri topic dei log dell'EVM.
  • Casi di errore con require / revert: scrivi un controllo che fallisce con un input sbagliato e guarda il messaggio di revert comparire nello stdout, invece di bruciare gas su una transazione fallita sulla mainnet.

Domande frequenti su Solidity

Cos'è Solidity?
Solidity è il linguaggio per smart contract più usato su Ethereum e sulle chain compatibili con l'EVM (Polygon, Arbitrum, Optimism, Base, ecc.). Viene compilato in bytecode EVM, un set di istruzioni per una macchina a stack eseguito da ogni nodo della rete. Dal punto di vista della sintassi prende spunto da JavaScript e C++, ma la semantica è molto diversa: lo storage è costoso e permanente, ogni chiamata viene misurata in gas e non esiste l'async. Il playground ti dà un'EVM in una sandbox, così puoi esercitarti con il linguaggio senza toccare una chain reale.
Mi servono un wallet o ETH di testnet per usarlo?
No. Il playground esegue il tuo contratto dentro un'EVM lato server (lo stesso motore incluso in geth), in un container isolato per ogni richiesta. Non c'è nessuna transazione on-chain, nessun gas pagato in ETH reali, nessuna firma del wallet. Quando premi Esegui, l'esecutore fa il deploy del contratto su una chain nuova in memoria, chiama la tua funzione main(...) con gli argomenti che hai fornito e ti mostra stdout, eventi e storage di quella singola chiamata. Alla fine dell'esecuzione tutto viene scartato.
Come passo gli input al mio contratto?
Dai al tuo contratto una funzione chiamata main(...) con i parametri tipizzati che vuoi, per esempio function main(uint256 n) external o function main(string memory name, uint256 age, bool active) external view. Poi aggiungi i valori nel pannello Args sotto l'editor. L'esecutore esamina la firma della funzione e codifica in ABI le tue stringhe nei tipi giusti, come fa cast call dalla riga di comando. Per un argomento address scrivi 0x...; per un bool scrivi true o false; per un uint scrivi il valore decimale.
Che differenza c'è tra le schede Output, Events e Storage?
Output mostra quello che hai scritto sullo stdout con console.log(...) da forge-std/console.sol, più eventuali messaggi di errore di revert / require. Events mostra ogni evento emesso dal contratto durante l'esecuzione, in ordine, con il valore di ogni parametro (e una piccola etichetta "indexed" per i parametri indicizzati: sono quelli che finiscono nei topic dei log dell'EVM e che strumenti come The Graph possono filtrare). Storage mostra il valore dopo l'esecuzione di ogni variabile di stato che è stata scritta, comprese le singole voci delle mapping: le variabili che non hai toccato restano fuori dall'elenco.
Perché in alcuni tutorial di Solidity che ho letto non c'è una main()?
Su una chain reale i contratti Solidity non hanno un unico punto di ingresso: i client chiamano la funzione pubblica che vogliono, identificata dal suo selettore di 4 byte. Il playground usa main() come convenzione, così c'è una cosa ovvia da eseguire e un posto dove mettere gli argomenti. Fuori dal playground il tuo contratto esporrà di solito più funzioni (mint, transfer, withdraw, ...) e sarà il tuo frontend o uno strumento come cast / ethers / viem a scegliere quale chiamare.

Strumenti utili per Solidity

Strumenti gratuiti nel browser che si abbinano bene al playground Solidity, tutti parte di Coddy.