Menu
Coddy logo textTech

Solidity Playground

Kod parçacıklarını yazın, çalıştırın ve paylaşın — kurulum gerekmez.

Contract.sol
Çıktıyı burada görmek için Çalıştır'a tıklayın.
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.

Solidity'yi tarayıcıda dene

Solidity, Ethereum smart contract'larının dilidir. EVM üzerinde çalışır — mainnet'te yüz milyarlarca doları koruyan ve L2'lerin çoğunu süren aynı sanal makine. Bu playground sana sandbox'lanmış bir solc + geth EVM'ye bağlı bir Monaco editörü verir; böylece bir sözleşme yazıp Run'a basabilir ve on-chain'de tam olarak ne olacağını görebilirsin: console.log çıktısı, emit edilen event'ler ve storage değişkenlerinin son durumu — deploy etmeden, gas ödemeden, wallet'a dokunmadan.

Solidity'nin başlarken farkına varmaya değer bazı tuhaflıkları var. Storage varsayılan olarak kalıcıdır — bir state değişkenine atadığın her şey kalıcıdır; fonksiyon içindeki her şey çağrı geri döndüğünde kaybolur. Event'ler, sözleşmelerin dış dünyayla (frontend'in, indexer'ın, The Graph) konuşma biçimidir — gas tüketirler, transaction log'larına yazılırlar ve indexed parametrelere göre filtrelenebilirler. Her external fonksiyon, girdilerini stdin yerine ABI encoding ile alır — bu yüzden playground, main(...) parametrelerine doğrudan bağlanan tipli bir Args paneli sunar.

Bu Solidity playground'unun iyi yaptığı şeyler

  • Transpiler simülasyonu değil, gerçek solc + EVM yürütmesi. console.log forge-std kullanır; emit / storage yolları gerçek EVM semantiğinden geçer — opcode'lar, gas, hepsi.
  • Events sekmesi çalıştırmandaki her emit'i indexed parametreleri ayrı işaretlenmiş şekilde gösterir; böylece bir frontend ya da subgraph'ın tam olarak ne alacağını görürsün.
  • Storage sekmesi sözleşmenin dokunduğu her state değişkeninin son değerini gösterir — mapping girdileri dahil (örn. balances[0xabc...]). Yazmadığın değişkenler listede görünmez.
  • Tipli Args paneli, parametrik bir main(uint256 n, string memory name, ...) için değer besler. Runner, fonksiyon imzasına bakarak ABI encode eder; 42 uint256 olur, "hello" string olur.

Solidity playground'da neler yapabilirsin

  • Sayaç / increment-decrement sözleşmeleriyle state değişkenlerinin çağrılar arasında nasıl kalıcı kaldığını öğren — count'a yaz, çalıştır, Storage sekmesinde görünmesini izle.
  • Token akış kalıpları — Transfer(from indexed, to indexed, value) emit et ve indexed ile indexed olmayan alanların Events sekmesinde nasıl farklı render edildiğini gör; gerçek EVM log topic'lerinde göründükleri şekilde.
  • require / revert başarısızlık senaryoları — hatalı girdide başarısız olan bir guard yaz ve revert mesajının mainnet'te başarısız bir transaction'a gas yakmak yerine stdout'a düştüğünü gör.

Solidity hakkında sık sorulan sorular

Solidity nedir?
Solidity, Ethereum ve EVM uyumlu zincirler (Polygon, Arbitrum, Optimism, Base vb.) için en yaygın kullanılan smart contract dilidir. EVM bytecode'una derlenir — ağdaki her node'un çalıştırdığı bir stack-machine komut kümesi. Sözdizimsel olarak JavaScript ve C++'tan beslenir, ama semantik oldukça farklıdır: storage pahalı ve kalıcıdır, her çağrı gas ile ölçülür ve async yoktur. Playground, gerçek bir zincire dokunmadan dili pratik edebilmen için sandbox'lı bir EVM verir.
Bunu kullanmak için wallet veya testnet ETH gerekir mi?
Hayır. Playground, sözleşmeni sunucu tarafında bir EVM içinde (geth'in geldiği motor) ve istek başına yalıtılmış bir konteynerde çalıştırır. On-chain işlem yok, gerçek ETH ile gas ödemesi yok, wallet imzası yok. Run'a bastığında runner sözleşmeni yepyeni bir bellek-içi zincire deploy eder, verdiğin args ile main(...) fonksiyonunu çağırır ve sana o tek çağrıdan stdout, event'ler ve storage'ı gösterir. Run'dan sonra her şey atılır.
Sözleşmeme nasıl girdi geçiririm?
Sözleşmene main(...) adında, istediğin tipli parametrelerle bir fonksiyon ver — function main(uint256 n) external ya da function main(string memory name, uint256 age, bool active) external view. Sonra editörün altındaki Args paneline değerleri ekle. Runner fonksiyonun imzasına bakar ve string'lerini, komut satırında cast call'un yaptığı gibi doğru tiplere ABI encode eder. Address için 0x..., bool için true ya da false, uint için ondalık değer yaz.
Output, Events ve Storage sekmeleri arasındaki fark nedir?
Output, forge-std/console.sol'dan console.log(...) ile stdout'a yazdıklarını ve varsa revert / require hata mesajını gösterir. Events, çalıştırma sırasında sözleşmenin emit ettiği her event'i sırayla, her parametrenin değeriyle birlikte gösterir (ve indexed parametreler için küçük bir "indexed" rozeti — bunlar EVM log topic'lerine giden ve The Graph gibi araçlarla filtrelenebilen alanlardır). Storage, yazılan her state değişkeninin çalıştırma sonrası değerini, mapping girdileri dahil gösterir — dokunmadığın değişkenler listede yer almaz.
Bazı Solidity eğitimlerinde neden main() yok?
Gerçek bir zincirde Solidity sözleşmelerinin tek bir giriş noktası yoktur — istemciler 4 byte'lık selector ile tanımlanan istedikleri public fonksiyonu çağırır. Playground, çalıştırılacak bariz bir şey ve argümanları koyabileceğin bir yer olsun diye main()'i bir konvansiyon olarak kullanır. Playground dışında sözleşmen tipik olarak birden çok fonksiyon (mint, transfer, withdraw, ...) sunar ve frontend'in ya da cast / ethers / viem gibi bir araç hangisinin çağrılacağını seçer.