Compilatore Solidity online
Scrivi, esegui e condividi snippet di codice, senza configurare nulla.
Clicca Esegui per vedere l'output qui.
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
emitdella tua esecuzione con i parametriindexedevidenziati 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ì42diventa unuint256e"hello"diventa unastring.
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?
Mi servono un wallet o ETH di testnet per usarlo?
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?
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?
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()?
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.